Merge pull request #16 from lefnire/develop

Update my develop branch
This commit is contained in:
Shane Lister
2013-05-15 17:07:14 -07:00
22 changed files with 732 additions and 475 deletions
+1 -1
View File
@@ -83,7 +83,7 @@
"Delete": "Изтрий",
"Progress": "Прогрес",
"Score": "Точки",
"Daily": "Ежедневни задачи",
"Dailies": "Ежедневни задачи",
"NewDaily": "Нова задача",
"Repeat": "Повтаряй",
"Su": "Нед",
+338 -232
View File
@@ -1,63 +1,96 @@
{
"_commentfrontpage":"HABITRPG FRONT PAGE",
"Synopsis" : "A habit building program which treats your life like a Role Playing Game. Level up as you succeed, lose HP as you fail, earn money to buy weapons and armor.",
"PlayButton" : "Play",
"synopsis" : "A habit building program which treats your life like a Role Playing Game. Level up as you succeed, lose HP as you fail, earn money to buy weapons and armor.",
"playButton" : "Play",
"_commenttut": "TUTORIAL/TOUR",
"EndTourButton": "End Tour",
"NextButton" : "Next",
"PrevButton" : "Prev",
"Tour1Title" : "Welcome to HabitRPG",
"Tour1Text" : "Welcome to HabitRPG, a habit-tracker which treats your goals like a Role Playing Game.",
"Tour2Title" : "Habits",
"Tour2Text" : "Habits are good or bad goals that you constantly track.",
"Tour3Title" : "Dailies",
"Tour3Text" : "Dailies are goals that you want to complete once a day.",
"Tour4Title" : "Todos",
"Tour4Text" : "Todos are one-off goals which need to be completed eventually. ",
"Tour5Title" : "Rewards",
"Tour5Text" : "As you complete goals, you earn gold to buy rewards. Buy them liberally - rewards are integrals in forming good habits. ",
"Tour6Title" : "Hover over comments",
"Tour6Text" : "Different task-types have special properties. Hover over each task's comment for more information. When you're ready to get started, delete the existing tasks and add your own.",
"endTourButton": "End Tour",
"nextButton" : "Next",
"prevButton" : "Prev",
"tour1Title" : "Welcome to HabitRPG",
"tour1Text" : "Welcome to HabitRPG, a habit-tracker which treats your goals like a Role Playing Game.",
"tour2Title" : "Habits",
"tour2Text" : "Habits are good or bad goals that you constantly track.",
"tour3Title" : "Dailies",
"tour3Text" : "Dailies are goals that you want to complete once a day.",
"tour4Title" : "Todos",
"tour4Text" : "Todos are one-off goals which need to be completed eventually. ",
"tour5Title" : "Rewards",
"tour5Text" : "As you complete goals, you earn gold to buy rewards. Buy them liberally - rewards are integrals in forming good habits. ",
"tour6Title" : "Hover over comments",
"tour6Text" : "Different task-types have special properties. Hover over each task's comment for more information. When you're ready to get started, delete the existing tasks and add your own.",
"_commentdefaulttasks":"DEFAULT TASKS",
"habit1" : "1h Productive Work",
"habit1comment": "-- Habits: Constantly Track -- For some habits, it only makes sense to *gain* points (like this one)",
"habit2" : "Eat Junk Food",
"habit2comment" : "For others, it only makes sense to *lose* points",
"habit3" : "Take The Stairs",
"habit3comment" : "For the rest, both + and - make sense (stairs = gain, elevator = lose)",
"daily1" : "1h Personal Project",
"daily1comment" : "-- Dailies: Complete Once a Day -- At the end of each day, non-completed Dailies dock you points.",
"daily2" : "Exercise",
"daily2comment" : "If you are doing well, they turn green and are less valuable (experience, gold) and less damaging (HP). This means you can ease up on them for a bit.",
"daily3" : "45m Reading",
"daily3comment" : "But if you are doing poorly, they turn red. The worse you do, the more valuable (exp, gold) and more damaging (HP) these goals become. This encourages you to focus on your shortcomings, the reds.",
"todo1" : "Call Mom",
"todo1comment" : "-- Todos: Complete Eventually -- Non-completed Todos won't hurt you, but they will become more valuable over time. This will encourage you to wrap up stale Todos.",
"reward1" : "1 Episode of Game of Thrones",
"reward1comment": "-- Rewards: Treat Yourself! -- As you complete goals, you earn gold to buy rewards. Buy them liberally - rewards are integral in forming good habits.",
"reward2" : "Cake",
"reward2comment" : "But only buy if you have enough gold - you lose HP otherwise.",
"_commentdefaulttags" : "DEFAULT TAGS",
"morning" : "morning",
"afternoon" : "afternoon",
"evening" : "evening",
"_commenthead": "HEADER",
"Health": "Health",
"Experience": "Experience",
"History": "History",
"Anonymous": "Anonymous",
"Level": "Level",
"GP": "GP",
"Tasks": "Tasks",
"Options": "Options",
"Logout": "Logout",
"health": "Health",
"experience": "Experience",
"history": "History",
"anonymous": "Anonymous",
"level": "Level",
"tasks": "Tasks",
"loginAndReg" : "Login / Register",
"loginFacebookAlt" : "Login / Register with Facebook",
"login" : "Login",
"register" : "Register",
"options": "Options",
"logout": "Logout",
"_commentnotifcations" : "NOTIFICATIONS",
"partyNotification" : "New Party Messages",
"_commenttaskview": "TASK VIEW",
"habits": "Habits",
"Habits": "Habits",
"NewHabit": "New Habit",
"Edit": "Edit",
"Text": "Text",
"ExtraNotes": "Extra Notes",
"Directions/Actions": "Directions/Actions",
"AdvancedOptions": "Advanced Options",
"Difficulty": "Difficulty",
"DifficultyHelpTitle": "How difficult is this task?",
"DifficultyHelpContent": "This multiplies its point value. Use sparingly, rely instead on our organic value-adjustment algorithms. But some tasks are grossly more valuable (Write Thesis vs Floss Teeth). Click for more info.",
"Easy": "Easy",
"Medium": "Medium",
"Hard": "Hard",
"Delete": "Delete",
"Progress": "Progress",
"Score": "Score",
"Daily": "Dailys",
"NewDaily": "New Daily",
"Repeat": "Repeat",
"newHabit": "New Habit",
"edit": "Edit",
"text": "Text",
"extraNotes": "Extra Notes",
"directions/Actions": "Directions/Actions",
"advancedOptions": "Advanced Options",
"difficulty": "Difficulty",
"difficultyHelpTitle": "How difficult is this task?",
"difficultyHelpContent": "This multiplies its point value. Use sparingly, rely instead on our organic value-adjustment algorithms. But some tasks are grossly more valuable (Write Thesis vs Floss Teeth). Click for more info.",
"easy": "Easy",
"medium": "Medium",
"hard": "Hard",
"delete": "Delete",
"progress": "Progress",
"score": "Score",
"dailies": "Dailies",
"Dailies": "Dailies",
"newDaily": "New Daily",
"repeat": "Repeat",
"Su": "Su",
"M": "M",
"T": "T",
@@ -65,84 +98,140 @@
"Th": "Th",
"F": "F",
"S": "S",
"todos": "Todos",
"Todos": "Todos",
"NewTodo": "New Todo",
"DueDate": "Due Date",
"Remaining": "Remaining",
"Complete": "Complete",
"newTodo": "New Todo",
"dueDate": "Due Date",
"remaining": "Remaining",
"complete": "Complete",
"rewards": "Rewards",
"Rewards": "Rewards",
"Gold": "Gold",
"Silver": "Silver",
"NewReward": "New Reward",
"Price": "Price",
"gold": "Gold",
"silver": "Silver",
"newReward": "New Reward",
"price": "Price",
"tags" : "Tags",
"editTags" : "Edit Tags",
"newTag" : "New Tag",
"clearFilters" : "Clear Filters",
"_commentdrops" : "DROP SYSTEM",
"dropsEnabled" : "Drops Enabled!",
"dropsEnabledText1" : "You've unlocked the Drop System! Now when you complete tasks, you have a small chance of finding an item. And guess what, you just found a",
"dropsEnabledText2" : "egg",
"itemDropped" : "An items has dropped",
"_commentoptionsview": "OPTIONS VIEW",
"Profile": "Profile",
"Avatar": "Avatar",
"Head": "Head",
"ShowHelm": "Show Helm",
"Hair": "Hair",
"Skin": "Skin",
"PhotoUrl": "Photo Url",
"FullName": "Full Name",
"Blurb": "Blurb",
"Websites": "Websites",
"Add Websites": "Add Websites",
"profile": "Profile",
"avatar": "Avatar",
"Party": "Party",
"CreateAParty":"Create A Party",
"NoPartyText": "You are not in a party. You can either create one and invite friends, or if you want to join an existing party, have them enter:",
"PartyName": "Party Name",
"Create":"Create",
"UserId":"User Id",
"Invite":"Invite",
"Leave": "Leave",
"PartyChat": "Chat",
"head": "Head",
"showHelm": "Show Helm",
"hair": "Hair",
"skin": "Skin",
"clothing" : "Clothing",
"photoUrl": "Photo Url",
"fullName": "Full Name",
"blurb": "Blurb",
"websites": "Websites",
"addWebsites": "Add Websites",
"items" : "Items",
"weapon" : "Weapon",
"armor" : "armor",
"helm" : "Helm",
"shield" : "shield",
"Inventory": "Inventory",
"EggsTitle": "Eggs",
"EggsContent": "You don't have any eggs yet.",
"HatchingPotionsTitle": "Hatching Potions",
"HatchingPotionsContent": "You don't have any hatching potions yet.",
"Market": "Market",
"stats" : "Stats",
"strength" : "Strength",
"defense" : "Defense",
"totalStrength" : "Total Strength",
"totalDefense" : "Total Defense",
"Stable": "Stable",
"PetsFound":"Pets Found",
"RarePets": "Rare Pets",
"Tavern": "Tavern",
"RestButton":"Rest In The Inn",
"CheckoutButton": "Check Out Of Inn",
"TavernTalkTitle":"Tavern Talk & LFG",
"party": "Party",
"createAParty":"Create A Party",
"noPartyText": "You are not in a party. You can either create one and invite friends, or if you want to join an existing party, have them enter:",
"partyName": "Party Name",
"create":"Create",
"userId":"User Id",
"invite":"Invite",
"leave": "Leave",
"invitedTo" : "You're Invited To",
"chat": "Chat",
"Achievements":"Achievements",
"inventory": "Inventory",
"eggs": "Eggs",
"noEggs": "You don't have any eggs yet.",
"hatchingPotions": "Hatching Potions",
"noHatchingPotions": "You don't have any hatching potions yet.",
"hatchYourEgg" : "Hatch Your Egg",
"whichHatchingPotion1" : "Which hatching potion will you pour on your",
"whichHatchingPotion2" : "egg?",
"pour" : "pour",
"rarePets" : "Rare Pets",
"market": "Market",
"Settings":"Settings",
"CustomDayStart":"Custom Day Start",
"stable": "Stable",
"petsFound":"Pets Found",
"rarePets": "Rare Pets",
"tavern": "Tavern",
"restButton":"Rest In The Inn",
"checkoutButton": "Check Out Of Inn",
"tavernTalkTitle":"Tavern Talk & LFG",
"tavernRestingInfo" : "Whilst resting your dailies are saved and aren't effected by day turn-over. Whether you check out tomorrow or in a weeks time you'll continue in the same state as when you checked in.",
"resources" : "Resources",
"LFGPosts" : "LGF Posts",
"tutorials" : "Tutorials",
"achievements":"Achievements",
"achievementUnlocked" : "Achievement Unlocked!",
"npcText" : "Backed the Kickstarter project at the maximum level!",
"contribName" : "Contributor",
"contribText" : "Has contributed to HabitRPG (code, design, pixel art, legal advice, docs, etc). Want this badge? Fix a bug",
"kickstartName1" : "Kickstarter Backer - ",
"kickstartName2" : "Tier",
"kickstartText" : "Backed the Kickstarter Project",
"streakName" : " Streak Achievement(s)",
"streakText1" : "Has performed ",
"stureakText2" : " 21-day streaks on Dailies",
"origUserName" : "Original User",
"origUserText" : "Goes way back to the Habit's days of yore (bless them for soldiering through bugs!)",
"ultimGearName" : "Ultimate Gear",
"ultimGearText" : "Has attained the maximum weapon and armor set",
"ultimGearUnlocked" : "You have earned the 'Ultimate Gear' Achievement for upgrading to the maximum gear set!",
"beastMastName" : "Beast Master",
"beastMastText" : "Has found all 90 pets (insanely difficult, give this user props!)",
"beastMastUnlocked" : "You have earned the 'Beast Master' Achievement for collecting all the pets!",
"settings":"Settings",
"customDayStart":"Custom Day Start",
"24HrClock": "24Hr Clock",
"ClockInfo":"Habit defaults to check and reset your dailies at midnight each day. You can customize that here (Enter number between 0 and 24).",
"Misc":"Misc",
"HideHeader":"Hide Header",
"ShowHeader":"Show Header",
"ChangePass":"Change Password",
"OldPass":"Old Password",
"NewPass":"New Password",
"ConfirmPass":"Confirm New Password",
"DangerZone": "Danger Zone",
"Reset":"Reset",
"ResetAltText":"Resets your entire account (dangerous)",
"ResetText1":"This resets your entire account - your tasks will be deleted and your character will start over.",
"ResetText2":"This is highly discouraged because you'll lose historical data, which is useful for graphing your progress over time. However, some people find it useful in the beginning after playing with the app for a while.",
"Restore":"Restore",
"RestoreAltText":"Restores attributes to your character",
"RestoreText1":"HabitRPG is quite Beta-quality at present, and many find they need to restore character attributes as a result. Enter your numbers here and it will be applied automatically to your character. This will be removed once Habit is more stable.",
"Delete":"Delete",
"DeleteAltText":"Delete your account",
"DeleteText1":"Woa woa woa! Are you sure? This will seriously delete your account forever, and it can never be restored. If you're absolutely certain, type",
"DeleteText2":" DELETE ",
"DeleteText3":"into the text-box",
"clockInfo":"HabitRPG defaults to check and reset your dailies at midnight each day. You can customize that here (Enter number between 0 and 24).",
"misc":"Misc",
"hideHeader":"Hide Header",
"showHeader":"Show Header",
"changePass":"Change Password",
"oldPass":"Old Password",
"newPass":"New Password",
"confirmPass":"Confirm New Password",
"dangerZone": "Danger Zone",
"reset":"Reset",
"resetAltText":"Resets your entire account (dangerous)",
"resetText1":"This resets your entire account - your tasks will be deleted and your character will start over.",
"resetText2":"This is highly discouraged because you'll lose historical data, which is useful for graphing your progress over time. However, some people find it useful in the beginning after playing with the app for a while.",
"restore":"Restore",
"restoreAltText":"Restores attributes to your character",
"restoreText1":"HabitRPG is quite Beta-quality at present, and many find they need to restore character attributes as a result. Enter your numbers here and it will be applied automatically to your character. This will be removed once Habit is more stable.",
"delete":"Delete",
"deleteAltText":"Delete your account",
"deleteHeader" : "Delete Account",
"deleteText1":"Woa woa woa! Are you sure? This will seriously delete your account forever, and it can never be restored. If you're absolutely certain, type",
"deleteText2":" DELETE ",
"deleteText3":"into the text-box",
"API":"API",
"APIText":"Copy these for use in third party applications.",
"APIToken":"Api Token",
@@ -151,155 +240,172 @@
"_commentitems": "ITEMS",
"_commentitemsweps": "WEAPONS",
"Sword1Name" : "Sword",
"Sword1Text" : "Increases experience gain by 3%.",
"Sword2Name" : "Axe",
"Sword2Text" : "Increases experience gain by 6%.",
"Sword3Name" : "Morningstar",
"Sword3Text" : "Increases experience gain by 9%.",
"Sword4Name" : "Blue Sword",
"Sword4Text" : "Increases experience gain by 12%.",
"Sword5Name" : "Red Sword",
"Sword5Text" : "Increases experience gain by 15%.",
"Sword6Name" : "Golden Sword",
"Sword6Text" : "Increases experience gain by 18%.",
"sword0name" : "Training Sword",
"sword1Name" : "Sword",
"sword1Text" : "Increases experience gain by 3%.",
"sword2Name" : "Axe",
"sword2Text" : "Increases experience gain by 6%.",
"sword3Name" : "Morningstar",
"sword3Text" : "Increases experience gain by 9%.",
"sword4Name" : "Blue Sword",
"sword4Text" : "Increases experience gain by 12%.",
"sword5Name" : "Red Sword",
"sword5Text" : "Increases experience gain by 15%.",
"sword6Name" : "Golden Sword",
"sword6Text" : "Increases experience gain by 18%.",
"_commentitemsarmour": "ARMOUR",
"Armour1Name" : "Leather Armor" ,
"Armour1Text": "Decreases HP Loss by 4%",
"Armour2Name" : "Chain Mail",
"Armour2Text": "Decreases HP Loss by 6%",
"Armour3Name" : "Plate Mail",
"Armour3Text": "Decreases HP Loss by 7%",
"Armour4Name" : "Red Armor",
"Armour4Text": "Decreases HP Loss by 8%",
"Armour5Name" : "Golden Armor",
"Armour5Text": "Decreases HP Loss by 10%",
"armour0Name" : "Cloth Armour",
"armour1Name" : "Leather Armor" ,
"armour1Text": "Decreases HP Loss by 4%",
"armour2Name" : "Chain Mail",
"armour2Text": "Decreases HP Loss by 6%",
"armour3Name" : "Plate Mail",
"armour3Text": "Decreases HP Loss by 7%",
"armour4Name" : "Red Armor",
"armour4Text": "Decreases HP Loss by 8%",
"armour5Name" : "Golden Armor",
"armour5Text": "Decreases HP Loss by 10%",
"_commentitemshead" : "HEADGEAR",
"Head1Name" : "Leather Helm" ,
"Head1Text": "Decreases HP loss by 2%",
"Head2Name" : "Chain Coif",
"Head2Text": "Decreases HP loss by 3%",
"Head3Name" : "Plate Helm",
"Head3Text": "Decreases HP loss by 4%",
"Head4Name" : "Red Helm",
"Head4Text": "Decreases HP loss by 5%",
"Head5Name" : "Golden Helm",
"Head5Text": "Decreases HP loss by 6%",
"head0Name" : "No Helm",
"head1Name" : "Leather Helm" ,
"head1Text": "Decreases HP loss by 2%",
"head2Name" : "Chain Coif",
"head2Text": "Decreases HP loss by 3%",
"head3Name" : "Plate Helm",
"head3Text": "Decreases HP loss by 4%",
"head4Name" : "Red Helm",
"head4Text": "Decreases HP loss by 5%",
"head5Name" : "Golden Helm",
"head5Text": "Decreases HP loss by 6%",
"_commentitemsshield" : "SHIELDS",
"Shield1Name" : "Wooden Shield",
"Shield1Text": "Decreases HP loss by 3%",
"Shield2Name" : "Buckler",
"Shield2Text": "Decreases HP loss by 4%",
"Shield3Name" : "Enforced Shield",
"Shield3Text": "Decreases HP loss by 5%",
"Shield4Name" : "Red Shield",
"Shield4Text": "Decreases HP loss by 7%",
"Shield5Name" : "Golden Shield",
"Shield5Text": "Decreases HP loss by 8%",
"sheild0Name" : "No Shield",
"sheild1Name" : "Wooden Shield",
"sheild1Text": "Decreases HP loss by 3%",
"sheild2Name" : "Buckler",
"sheild2Text": "Decreases HP loss by 4%",
"sheild3Name" : "Enforced Shield",
"sheild3Text": "Decreases HP loss by 5%",
"sheild4Name" : "Red Shield",
"sheild4Text": "Decreases HP loss by 7%",
"sheild5Name" : "Golden Shield",
"sheild5Text": "Decreases HP loss by 8%",
"_commentitemsother" : "OTHER ITEMS",
"HealthPotionName" : "Health Potion",
"HealthPotionNotes" : "Recover 15 HP Instantly",
"RerollName" : "Re-Roll",
"RerollNotes" : "Resets your task values back to 0 (yellow). Useful when everything's red and it's hard to stay alive.",
"healthPotionName" : "Health Potion",
"healthPotionNotes" : "Recover 15 HP Instantly",
"rerollName" : "Re-Roll",
"rerollNotes" : "Resets your task values back to yellow. Useful when everything's red and it's hard to stay alive.",
"rerollModelHeader" : "Reset Your Tasks",
"rerollModelText1" : "Highly discouraged because red tasks provide good incentive to improve",
"rerollModelText2" : "read more",
"rerollModelText3" : "However, this becomes necessary after long bouts of bad habits.",
"_commentitemspeteggs": "PET EGGS",
"WolfEgg": "Wolf Cub",
"TigerEgg": "Tiger Cub",
"PandaEgg": "Wolf Cub",
"LionEgg": "Lion Cub",
"FoxEgg": "Fox",
"PigEgg": "Flying Pig",
"DragonEgg": "Dragon",
"CactusEgg": "Cactus",
"BearEgg": "Bear Cub",
"WolfEgg": "Wolf",
"wolfEgg": "Wolf Cub",
"tigerEgg": "Tiger Cub",
"pandaEgg": "Wolf Cub",
"lionEgg": "Lion Cub",
"foxEgg": "Fox",
"pigEgg": "Flying Pig",
"dragonEgg": "Dragon",
"cactusEgg": "Cactus",
"bearEgg": "Bear Cub",
"wolfEgg": "Wolf",
"_commentitemshatchingpotions": "HATCHING POTIONS",
"BasePotName": "Base",
"BasePotText" : "Hatches your pet into its base form.",
"WhitePotName": "White",
"WhitePotText" : "Hatches your pet into its white form.",
"DesertPotName": "Desert",
"DesertPotText" : "Hatches your pet into its desert form.",
"RedPotName": "Red",
"RedPotText" : "Hatches your pet into its red form.",
"ShadePotName": "Shadepot",
"ShadePotText" : "Hatches your pet into its shade form.",
"SkeletonPotName": "Skeleton",
"SkeletonPotText" : "Hatches your pet into its skeleton form.",
"ZombiePotName": "Zombie",
"ZombiePotText" : "Hatches your pet into its zombie form.",
"CottonPinkPotName": "Cotton Candy Pink",
"CottonPinkPotText" : "Hatches your pet into its cotton candy pink form.",
"CottonBluePotName": "Cotton Candy Blue",
"CottonBluePotText" : "Hatches your pet into its cotton candy blue form.",
"GoldenPotName": "Golden",
"GoldenPotText" : "Hatches your pet into its golden form.",
"basePotName": "Base",
"basePotText" : "Hatches your pet into its base form.",
"whitePotName": "White",
"whitePotText" : "Hatches your pet into its white form.",
"desertPotName": "Desert",
"desertPotText" : "Hatches your pet into its desert form.",
"redPotName": "Red",
"redPotText" : "Hatches your pet into its red form.",
"shadePotName": "Shadepot",
"shadePotText" : "Hatches your pet into its shade form.",
"skeletonPotName": "Skeleton",
"skeletonPotText" : "Hatches your pet into its skeleton form.",
"zombiePotName": "Zombie",
"zombiePotText" : "Hatches your pet into its zombie form.",
"cottonPinkPotName": "Cotton Candy Pink",
"cottonPinkPotText" : "Hatches your pet into its cotton candy pink form.",
"cottonBluePotName": "Cotton Candy Blue",
"cottonBluePotText" : "Hatches your pet into its cotton candy blue form.",
"goldenPotName": "Golden",
"goldenPotText" : "Hatches your pet into its golden form.",
"_commentnpcsandchars": "NPCS & CHARACTERS",
"_commentNPCS" : "NPCS",
"NPCBaileyName" : "Bailey",
"NPCBaileyText" : "Bailey the Crier here! Announcing new stuff!",
"NPCAugustinName" : "Alexander Augustin",
"NPCAugustinText" : "Welcome to the Market! I'm the merchant, Alexander. Dying to get that particular pet you're after, but don't want to wait for it to drop? Buy it here!",
"NPCJohanssonName" : "Daniel Johansson",
"NPCJohanssonText" : "Welcome to the Tavern! I'm Daniel, the bar keep. If you want to rest a while (going on vacation?), I'll set you up at the inn - dailies won't hurt you while you're resting. The minimum stay is 24h, but you can check out any time. Stay a while & meet the clientele.",
"NPCMelchiorName" : "Ian Melchior ",
"NPCMelchiorText" : "",
"NPCBowenName" : "Justin Bowen",
"NPCBowenText" : "",
"NPCBochName" : "Matt Boch",
"NPCBochText" : "",
"NPCBaileyText1" : "the Town Crier here! Announcing new stuff!",
"NPCAugustinText1" : "Welcome to the Market! I'm the merchant;",
"NPCAugustinText2" : "Dying to get that particular pet you're after, but don't want to wait for it to drop? Buy it here!",
"NPCJohanssonText1" : "Welcome to the Tavern! I'm",
"NPCJohanssonText2": "the bar keep. If you want to rest a while (going on vacation? sudden illness?), I'll set you up at the inn - dailies won't hurt you while you're resting. Stay a while & meet the locals.",
"NPCMelchiorText1" : "",
"NPCBowenText1" : "",
"NPCBochText1" : "",
"_commentdeathstuff" : "DEATH",
"deathTitle" : "You Died!",
"deathText" : "You've lost your GP, 1 level and 1 gear piece. Be sure to complete your dailies to prevent this from happening again!",
"_commentgems" : "GEMS",
"gems" : "Gems",
"outOfGems" : "Out Of Gems",
"buyMoreGems" : "Buy More Gems",
"notEnoughGems" : "Not enough Gems",
"petsOutOfGems" : "Oops, out of Gems, which are used to buy special items! Habit is an open source project, and can use all the help it can get - buy more Gems to receive this pet, and consider it a donation to the contributors",
"gemsWhatFor" : "Used for buying special items (reroll, eggs, hatching potions, etc). You'll need to unlock those features before being able to use Gems.",
"_commentfooter": "FOOTER",
"FooterCompany" : "Company",
"CompanyAbout" : "About",
"CompanyBlog" : "Blog",
"CompanyTeam" : "Team",
"CompanyExtensions" : "Extensions",
"CompanyFAQ" : "FAQ",
"FooterLegal" : "Legal",
"LegalPrivacy" : "Privacy",
"LegamTerms" : "Terms",
"FooterCommunity" : "Community",
"CommunityBugs" : "Submit Bugs",
"CommunityFeatures" : "Request Feautres",
"CommunityAPI" : "API",
"CommunityExtensions" : "Add-ons / Extensions",
"CommunityForum" : "Forum",
"CommunityKickstarter" : "Kickstarter",
"CommunityFB" : "Facebook",
"CommunityReddit" : "Reddit",
"footerCompany" : "Company",
"companyAbout" : "About",
"companyBlog" : "Blog",
"companyTeam" : "Team",
"companyExtensions" : "Extensions",
"companyFAQ" : "FAQ",
"footerLegal" : "Legal",
"legalPrivacy" : "Privacy",
"legalTerms" : "Terms",
"footerCommunity" : "Community",
"communityBugs" : "Submit Bugs",
"communityFeatures" : "Request Feautres",
"communityExtensions" : "Add-ons / Extensions",
"communityForum" : "Community Forum",
"footerSocial" : "Social",
"_commentmisc": "MISC & GLOBAL",
"Gems" : "Gems",
"RemoveAds": "Remove Ads",
"WhyAds": "Why Ads?",
"WhyAdsContent1": "Habit an open source project, and can use all the help it can get - consider this a donation to the contributors. You also get 20 Gems from the purchase, which you can use to buy special items.",
"WhyAdsContent2": "'Hey, I backed the Kickstarter!' - follow ",
"WhyAdsContent3": "these instructions.",
"removeAds": "Remove Ads",
"whyAds": "Why Ads?",
"whyAdsContent1": "Habit an open source project, and can use all the help it can get - consider this a donation to the contributors. You also get 20 Gems from the purchase, which you can use to buy special items.",
"whyAdsContent2": "'Hey, I backed the Kickstarter!' - follow",
"whyAdsContent3": "these instructions",
"_commentbuttons": "BUTTONS",
"Submit":"Submit",
"Close":"Close",
"Save&Close": "Save & Close",
"Cancel":"Cancel",
"submit":"Submit",
"close":"Close",
"saveAndClose": "Save & Close",
"cancel":"Cancel",
"ok" : "Ok",
"add" : "Add",
"undo" : "Undo",
"continue" : "Continue",
"accept" : "Accept",
"reject" : "Reject",
"or" : "Or",
"_commenttimestamps":"TIME STAMPS",
"JustNow":"Just now",
"AMinuteAgo":"A minute ago",
"MinutesAgo":"minutes ago",
"AnHourAgo": "An hour ago",
"HoursAgo": "hours ago",
"Yesterday":"Yesterday",
"DaysAgo":"days ago"
"justNow":"Just now",
"aMinuteAgo":"A minute ago",
"minutesAgo":"minutes ago",
"anHourAgo": "An hour ago",
"hoursAgo": "hours ago",
"yesterday":"Yesterday",
"daysAgo":"days ago"
}
+115
View File
@@ -0,0 +1,115 @@
{
"_commenttut": "HANDLEIDING",
"_commenthead": "AANHEF",
"Health": "Gezondheid",
"Experience": "Ervaring",
"History": "Geschiedenis",
"Settings": "Instellingen",
"Party": "Groep",
"Logout": "Uitloggen",
"_commentuser": "GEBRUIKER",
"Anonymous": "Anoniem",
"Avatar": "Avatar",
"Level": "Level",
"GP": "Goudstukken",
"Head": "Hoofd",
"ShowHelm": "Toon Helm",
"Hair": "Haar",
"Skin": "Huid",
"Profile": "Profiel",
"Edit": "Pas Aan",
"Save": "Sla Op",
"PhotoUrl": "Foto URL",
"FullName": "Volledige Naam",
"Blurb": "Blurp",
"Websites": "Voeg Website Toe",
"Achievements": "Prestaties",
"OriginalUser": "Originele Gebruiker!",
"Inventory": "Inventaris",
"EggsTitle": "Eieren",
"EggsContent": "Je hebt nog geen eieren",
"HatchingPotionsTitle": "Broed Toverdrankjes",
"HatchingPotionsContent": "Je hebt nog geen broed toverdrankjes!",
"Market": "Markt",
"MarketTitle": "Welkom op de markt!",
"MarketContent": "Wil je graag dat ene dier, maar kan je niet wachten tot hij valt? Koop hem hier!",
"Stable": "Stal",
"Tokens": "Tokens",
"_commentitems": "BUIT & BELONINGEN",
"_comment": "HUISDIER EIEREN",
"WolfEgg": "Wolvenwelp",
"TigerEgg": "Tijgerwelp",
"PandaEgg": "Pandawelp",
"LionEgg": "Leeuwenwelp",
"FoxEgg": "Vos",
"PigEgg": "Vliegende Big",
"DragonEgg": "Draak",
"CactusEgg": "Cactus",
"BearEgg": "Beren Welp",
"WolfEgg": "Wolf",
"_comment": "BROED TOVERDRANKEN",
"BasePot": "Basis",
"WhitePot": "Wit",
"DesertPot": "Woestijn",
"RedPot": "Rood",
"ShadePot": "Schaduw",
"SkeletonPot": "Skelet",
"ZombiePot": "Zombie",
"CottonPinkPot": "Suikerspinroze",
"CottonBluePot": "Suikerspinblauw",
"GoldenPot": "Goud",
"_comment": "GOUDEN BELONINGEN",
"_commentmain": "HOOFD SCHERM",
"Habits": "Gewoonten",
"NewHabit": "Nieuwe Gewoonte",
"Edit": "Pas Aan",
"Text": "Text",
"ExtraNotes": "Extra Aantekeningen",
"Directions/Actions": "Richtingen/Acties",
"AdvancedOptions": "Uitgebreide Opties",
"Difficulty": "Moeilijkheid",
"DifficultyHelpTitle": "Hoe moeilijk is deze taak?",
"DifficultyHelpContent": "Dit vermenigvuldigt de punt waarde. Gebruik spaars, de waarde wordt automatisch door ons algoritmes aangepast. Sommige taken zijn daarentegen daadwerkelijk veel meer waard dan anderen (b.v.b. 'Flossen' versus 'Thesis Schrijven')",
"Easy": "Makkelijk",
"Medium": "Gemiddeld",
"Hard": "Moeilijk",
"Save&Close": "Sla Op & Sluit",
"Delete": "Verwijder",
"Progress": "Voortgang",
"Score": "Score",
"Daily": "Dagelijks",
"NewDaily": "Nieuw",
"Repeat": "Herhaal",
"Su": "Zo",
"M": "Ma",
"T": "Di",
"We": "Wo",
"Th": "Do",
"F": "Vr",
"S": "Za",
"Todos": "Te Doen",
"NewTodo": "Nieuw",
"DueDate": "Einddatum",
"Remaining": "Te Doen",
"Complete": "Voltooid",
"Rewards": "Beloningen",
"Gold": "Goud",
"Silver": "Zilver",
"NewReward": "Nieuwe Beloning",
"Price": "Prijs",
"_commentfooter": "ONDERSCHRIFT",
"_commentmisc": "OVERIGE",
"RemoveAds": "Verwijder Reclame",
"WhyAds": "Waarom Reclame?",
"WhyAdsContent1": "Habit is een open source project en kan alle hulp gebruiken die het kan krijgen - beschouw dit als een donatie aan de ontwikkelaars. Je krijgt ook 20 tokens van de aankoop, welke je kunt gebruiken voor speciale voorwerpen",
"WhyAdsContent2": "'Hey, ik heb de Kickstarter gebacked' - volg ",
"WhyAdsContent3": "deze instructies"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

+13 -11
View File
@@ -119,6 +119,17 @@ setupTour = (model) ->
initStickyHeader = (model) ->
$('.header-wrap').sticky({topSpacing:0})
growlNotification = module.exports.growlNotification = (html, type) ->
$.bootstrapGrowl html,
ele: '#notification-area',
type: type # (null, 'info', 'error', 'success', 'gp', 'xp', 'hp', 'lvl','death')
top_offset: 20
align: 'right' # ('left', 'right', or 'center')
width: 250 # (integer, or 'auto')
delay: 3000
allow_dismiss: true
stackup_spacing: 10 # spacing between consecutive stacecked growls.
###
Sets up "+1 Exp", "Level Up", etc notifications
###
@@ -127,17 +138,8 @@ setupGrowlNotifications = (model) ->
user = model.at '_user'
statsNotification = (html, type) ->
#don't show notifications if user dead
return if user.get('stats.lvl') == 0
$.bootstrapGrowl html,
ele: '#notification-area',
type: type # (null, 'info', 'error', 'success', 'gp', 'xp', 'hp', 'lvl','death')
top_offset: 20
align: 'right' # ('left', 'right', or 'center')
width: 250 # (integer, or 'auto')
delay: 3000
allow_dismiss: true
stackup_spacing: 10 # spacing between consecutive stacecked growls.
return if user.get('stats.lvl') == 0 #don't show notifications if user dead
growlNotification(html, type)
# Setup listeners which trigger notifications
user.on 'set', 'stats.hp', (captures, args) ->
+28 -18
View File
@@ -4,13 +4,26 @@ relative = require 'relative-date'
algos = require './algos'
items = require('./items').items
# Absolute diff between two dates
daysBetween = (yesterday, now, dayStart) ->
sod = (timestamp, dayStart=0) ->
#sanity-check reset-time (is it 24h time?)
dayStart = 0 unless (dayStart? and (dayStart = parseInt(dayStart)) and dayStart >= 0 and dayStart <= 24)
Math.abs moment(yesterday).startOf('day').add('h', dayStart).diff(moment(now), 'days')
dayStart = 0 unless (dayStart = parseInt(dayStart)) and (0 <= dayStart <= 24)
moment(timestamp).startOf('day').add('h', dayStart)
dayMapping = dayMapping = {0:'su',1:'m',2:'t',3:'w',4:'th',5:'f',6:'s',7:'su'}
# Absolute diff between two dates
daysBetween = (yesterday, now, dayStart) -> Math.abs sod(yesterday, dayStart).diff(now, 'days')
dayMapping = {0:'su',1:'m',2:'t',3:'w',4:'th',5:'f',6:'s'}
shouldDo = (day, repeat, dayStart=0) ->
return false unless repeat
now = +new Date
selected = repeat[dayMapping[sod(day, dayStart).day()]]
return selected unless moment(day).isSame(now,'d')
if dayStart <= moment(now).hour() # we're past the dayStart mark, is it due today?
return selected
else # we're not past dayStart mark, check if it was due "yesterday"
yesterday = moment(now).subtract(1,'d').day()
return repeat[dayMapping[yesterday]]
# http://stackoverflow.com/questions/2532218/pick-random-property-from-a-javascript-object
# obj: object
@@ -125,31 +138,28 @@ viewHelpers = (view) ->
###
Tasks
###
view.fn 'taskClasses', (task, filters, dayStart, lastCron) ->
view.fn 'taskClasses', (task, filters, dayStart, lastCron, showCompleted=false) ->
return unless task
{type, completed, value, repeat} = task
# completed / remaining toggle
return 'hidden' if (type is 'todo') and (completed != showCompleted)
for filter, enabled of filters
if enabled and not task.tags?[filter]
# All the other classes don't matter
return 'hide'
return 'hidden'
classes = type
now = moment().day()
# calculate the current contextual day (e.g. if it's 12 AM Fri and the user's custom day start is 4 AM, then we should still act like it's Thursday)
dayStart = 0 unless (dayStart? and (dayStart = parseInt(dayStart)) and dayStart >= 0 and dayStart <= 24)
hourDiff = Math.abs moment(lastCron).startOf('day').add('h', dayStart).diff(moment(now), 'hours')
dayStamp = moment(now).add('h', hourDiff)
day = dayStamp.day()
# show as completed if completed (naturally) or not required for today
if type in ['todo', 'daily']
if completed or (repeat and (repeat[dayMapping[day]] == false))
if completed or (type is 'daily' and !shouldDo(+new Date, task.repeat, dayStart))
classes += " completed"
else
classes += " uncompleted"
else if type is 'habit'
classes += ' habit-wide' if task.down and task.up
if value < -20
classes += ' color-worst'
@@ -167,7 +177,7 @@ viewHelpers = (view) ->
classes += ' color-best'
return classes
view.fn 'ownsPet', (pet, userPets) -> !!userPets && userPets.indexOf(pet) != -1
view.fn 'ownsPet', (pet, userPets) -> _.isArray(userPets) and userPets.indexOf(pet) != -1
view.fn 'friendlyTimestamp', (timestamp) -> moment(timestamp).format('MM/DD h:mm:ss a')
@@ -211,4 +221,4 @@ viewHelpers = (view) ->
module.exports = { viewHelpers, removeWhitespace, randomVal, daysBetween, dayMapping, username }
module.exports = { viewHelpers, removeWhitespace, randomVal, daysBetween, shouldDo, username }
+1
View File
@@ -2,5 +2,6 @@ i18n = require 'derby-i18n'
i18n.plurals.add 'he', (n) -> n
i18n.plurals.add 'bg', (n) -> n
i18n.plurals.add 'nl', (n) -> n
module.exports = i18n
+3 -7
View File
@@ -12,7 +12,7 @@ app = derby.createApp module
# Translations
i18n = require './i18n'
i18n.localize app,
availableLocales: ['en', 'he', 'bg']
availableLocales: ['en', 'he', 'bg', 'nl']
defaultLocale: 'en'
urlScheme: false
checkHeader: true
@@ -94,8 +94,8 @@ setupSubscriptions = (page, model, params, next, cb) ->
return next(err) if err
model.ref '_partyMembers', members
# Note - selfQ *must* come after membersQ in subscribe, otherwise _user will only get the fields restricted by party-members in store.coffee. Strang bug, but easy to get around
return finished([partyQ, selfQ, 'tavern'], ['_party', '_user', '_tavern'])
# Note - selfQ *must* come after membersQ in subscribe, otherwise _user will only get the fields restricted by party-members in store.coffee. Strang bug, but easy to get around
return finished([partyQ, selfQ, 'tavern'], ['_party', '_user', '_tavern'])
# ========== ROUTES ==========
@@ -118,10 +118,6 @@ ready (model) ->
user = model.at('_user')
model.setNull '_user.apiToken', derby.uuid()
#set cron immediately
lastCron = user.get('lastCron')
user.set('lastCron', +new Date) if (!lastCron? or lastCron == 'new')
require('./scoring').cron(model)
require('./character').app(exports, model)
+20 -17
View File
@@ -19,14 +19,13 @@ randomDrop = (model, delta, priority, streak=0) ->
user.setNull 'items.lastDrop',
date: +moment().subtract('d',1) # trick - set it to yesterday on first run, that way they can get drops today
count: 0
reachedDropLimit = (helpers.daysBetween(user.get('items.lastDrop.date'), +new Date) is 0) and user.get('items.lastDrop.count') >= 2
reachedDropLimit = (helpers.daysBetween(user.get('items.lastDrop.date'), +new Date, user.get('preferences.dayStart')) is 0) and user.get('items.lastDrop.count') >= 2
return if reachedDropLimit
# % chance of getting a pet or meat
chanceMultiplier = Math.abs(delta)
chanceMultiplier *= algos.priorityValue(priority) # multiply chance by reddness
chanceMultiplier += streak # streak bonus
console.log chanceMultiplier
if user.get('flags.dropsEnabled') and Math.random() < (.05 * chanceMultiplier)
# current breakdown - 3% (adjustable) chance on drop
@@ -273,8 +272,15 @@ updateStats = (model, newStats, batch) ->
cron = (model) ->
user = model.at '_user'
today = +new Date
daysPassed = helpers.daysBetween(user.get('lastCron'), today, user.get('preferences.dayStart'))
if daysPassed > 0
lastCron = user.get('lastCron')
# New user (!lastCron, lastCron==new) or it got busted somehow, maybe they went to a different timezone
if !lastCron? or lastCron is 'new' or moment(lastCron).isAfter(today)
user.set('lastCron', +new Date)
return
daysMissed = helpers.daysBetween(user.get('lastCron'), today, user.get('preferences.dayStart'))
if daysMissed > 0
# User is resting at the inn. Used to be we un-checked each daily without performing calculation (see commits before fb29e35)
# but to prevent abusing the inn (http://goo.gl/GDb9x) we now do *not* calculate dailies, and simply set lastCron to today
@@ -292,20 +298,17 @@ cron = (model) ->
_.each obj.tasks, (taskObj) ->
{id, type, completed, repeat} = taskObj
if type in ['todo', 'daily']
# Deduct experience for missed Daily tasks,
# but not for Todos (just increase todo's value)
# Deduct experience for missed Daily tasks, but not for Todos (just increase todo's value)
unless completed
# for todos & typical dailies, these are equivalent
daysFailed = daysPassed
# however, for dailys which have repeat dates, need
# to calculate how many they've missed according to their own schedule
if type=='daily' && repeat
daysFailed = 0
_.times daysPassed, (n) ->
thatDay = moment().subtract('days', n+1)
if repeat[helpers.dayMapping[thatDay.day()]]==true
daysFailed++
score model, id, 'down', daysFailed, batch, true
scheduleMisses = daysMissed
# for dailys which have repeat dates, need to calculate how many they've missed according to their own schedule
if (type is 'daily') and repeat
scheduleMisses = 0
_.times daysMissed, (n) ->
thatDay = moment(today).subtract('days', n+1)
scheduleMisses++ if helpers.shouldDo(thatDay, repeat, obj.preferences?.dayStart) is true
score(model, id, 'down', scheduleMisses, batch, true) if scheduleMisses > 0
if type == 'daily'
if completed #set OHV for completed dailies
newValue = taskObj.value + algos.taskDeltaFormula(taskObj.value,'up')
+2 -22
View File
@@ -99,28 +99,8 @@ module.exports.app = (appExports, model) ->
chart = new google.visualization.LineChart(document.getElementById( chartSelector ))
chart.draw(data, options)
appExports.changeContext = (e, el) ->
# Get the data from the element
targetSelector = $(el).attr('data-target')
newContext = $(el).attr('data-context')
newActiveNav = $(el).parent('li')
# If the clicked nav is already active, do nothing
if newActiveNav.hasClass('active')
return
# Find the old active nav and context
oldActiveNav = $(el).closest('ul').find('> .active')
oldContext = oldActiveNav.find('a').attr('data-context')
# Set the new active nav
oldActiveNav.removeClass('active')
newActiveNav.addClass('active')
# Set the new context on the target
target = $(targetSelector)
target.removeClass(oldContext)
target.addClass(newContext)
appExports.todosShowRemaining = -> model.set '_showCompleted', false
appExports.todosShowCompleted = -> model.set '_showCompleted', true
setUndo = (stats, task) ->
previousUndo = model.get('_undo')
+1 -1
View File
@@ -28,7 +28,7 @@ translate = (req, res, next) ->
model = req.getModel()
# Set locale to bg on dev
model.set '_i18n.locale', 'bg' if process.env.NODE_ENV is "development"
#model.set '_i18n.locale', 'bg' if process.env.NODE_ENV is "development"
next()
+20 -1
View File
@@ -84,7 +84,7 @@ hr
/* Gems
-------------------------------------------------- */
/* Adaptation of GH's social-count for Tokens */
/* Adaptation of GH's social-count for Gems */
.gem-cost
border: 1px solid #D4D4D4;
@@ -150,3 +150,22 @@ hr
.modal-body
margin: 10px
.static-popover
z-index 0
display block
// TODO this is supposed to go in avatar.styl, but stylus is breaking if I even touch that file
.profile-modal-header
width:560px
margin: 0px auto
.avatar-level
position absolute
bottom 0px
right 0px
background-color #dfe9ea
padding 1px 3px 1px 3px
-15
View File
@@ -383,21 +383,6 @@ form
// todos ui
// --------
// context switching
.context-enabled
.display-context-dependant,
.task-list > li
display: none
&.context-completed
.show-for-completed, .completed
display: block
&.context-uncompleted
.show-for-uncompleted, .uncompleted
display: block
// nav tabs
.nav-tabs
margin-top: 1.5em
+5
View File
@@ -14,6 +14,11 @@
<p>
<h4>5/12/2013</h4>
<ul>
<li>Renamed "Tokens" to "Gems". Tokens caused confusion.</li>
</ul>
<h4>5/10/2013</h4>
<ul>
<li>Less harsh death: Used to be you lose everything, now you lose GP & one random gear piece, 1 level. We're working on a <a _target='blank' href="https://trello.com/card/death-mechanic/50e5d3684fe3a7266b0036d6/204">really cool death mechanic here.</a>, but this is a stop-gap so people don't lose heart presently.</li>
+22 -17
View File
@@ -10,7 +10,7 @@
<avatar:>
<figure class="herobox"
data-name="{username(@profile.auth, @profile.profile.name)} - lvl {@profile.stats.lvl}"
data-name="{username(@profile.auth, @profile.profile.name)}"
data-level="{@profile.stats.lvl}"
data-checkpet="{#if @profile.items.pet}hasPet{/}"
data-checkuser="{{#if @main}}isUser{{/}}"
@@ -46,26 +46,27 @@
<span class="Pet-{@profile.items.currentPet.name}-{@profile.items.currentPet.modifier} current-pet" ></span>
{/}
</div>
<div class='avatar-level'>Lvl {@profile.stats.lvl}</div>
</figure>
<profile-stats:>
<h3>Items</h3>
<p><strong>{itemText('weapon',_user.items.weapon)}</strong>: {itemStat('weapon',_user.items.weapon)}% Exp gain</p>
<p><strong>{itemText('armor',_user.items.armor)}</strong>: {itemStat('armor',_user.items.armor)}% Defense</p>
<p><strong>{itemText('head',_user.items.head)}</strong>: {itemStat('head',_user.items.head)}% Defense</p>
<p><strong>{itemText('shield',_user.items.shield)}</strong>: {itemStat('shield',_user.items.shield)}% Defense</p>
<h4>Items</h4>
<p><strong>{itemText('weapon',@profile.items.weapon)}</strong>: {itemStat('weapon',@profile.items.weapon)}% Exp gain</p>
<p><strong>{itemText('armor',@profile.items.armor)}</strong>: {itemStat('armor',@profile.items.armor)}% Defense</p>
<p><strong>{itemText('head',@profile.items.head)}</strong>: {itemStat('head',@profile.items.head)}% Defense</p>
<p><strong>{itemText('shield',@profile.items.shield)}</strong>: {itemStat('shield',@profile.items.shield)}% Defense</p>
<h3>Stats</h3>
<p><strong>HP</strong>: {floor(_user.stats.hp)} / 50</p>
<p><strong>GP</strong>: {floor(_user.stats.gp)}</p>
<p><strong>Lvl</strong>: {_user.stats.lvl}</p>
<p><strong>Exp</strong>: {floor(_user.stats.exp)} / {tnl(_user.stats.lvl)}</p>
<p><strong>Strength</strong>: {userStr(_user.stats.lvl)}</p>
<p><strong>Defense</strong>: {userDef(_user.stats.lvl)}</p>
<p><strong>Pets Found</strong>: {count(_user.items.pets)}</p>
<h4>Stats</h4>
<p><strong>HP</strong>: {floor(@profile.stats.hp)} / 50</p>
<p><strong>GP</strong>: {floor(@profile.stats.gp)}</p>
<p><strong>Lvl</strong>: {@profile.stats.lvl}</p>
<p><strong>Exp</strong>: {floor(@profile.stats.exp)} / {tnl(@profile.stats.lvl)}</p>
<p><strong>Strength</strong>: {userStr(@profile.stats.lvl)}</p>
<p><strong>Defense</strong>: {userDef(@profile.stats.lvl)}</p>
<p><strong>Pets Found</strong>: {count(@profile.items.pets)}</p>
<hr/>
<p><strong>Total Strength</strong>: {totalStr(_user.stats.lvl, _user.items.weapon)} %</p>
<p><strong>Total Defense</strong>: {totalDef(_user.stats.lvl, _user.items.armor, _user.items.head, _user.items.shield)} %</p>
<p><strong>Total Strength</strong>: {totalStr(@profile.stats.lvl, @profile.items.weapon)} %</p>
<p><strong>Total Defense</strong>: {totalDef(@profile.stats.lvl, @profile.items.armor, @profile.items.head, @profile.items.shield)} %</p>
<customize:>
@@ -161,9 +162,10 @@
</div>
<profile:>
<h2 class='profile-modal-header'>{{username(@profile.auth, @profile.profile.name)}}</h2>
<hr/>
<div class='row-fluid'>
<div class='span6'>
<h3>{{username(@profile.auth, @profile.profile.name)}}</h3>
{{#if @profile.profile.imageUrl}}
<img src="{{@profile.profile.imageUrl}}" />
{{/}}
@@ -177,10 +179,13 @@
{{/}}
</ul>
{{/}}
<h3>Stats</h3>
<app:avatar:profile-stats profile={{@profile}} />
</div>
<div class='span6'>
<h3>Achievements</h3>
<app:avatar:achievements profile={{@profile}} />
</div>
</div>
+5 -5
View File
@@ -53,9 +53,9 @@
<filter-fieldgroup:>
<fieldset class='option-group'>
<legend class="option-title">Tags</legend>
<select multiple="multiple">
{{#each _user.tags as :tag}}
<option selected="{:task.tags[:tag.id]}">{:tag.name}</option>
{{/}}
</select>
{{#each _user.tags as :tag}}
<label class="checkbox">
<input type="checkbox" checked="{:task.tags[:tag.id]}"> {:tag.name}
</label>
{{/}}
</fieldset>
+12 -12
View File
@@ -2,7 +2,7 @@
<div class="module full-width">
<span class='option-box pull-right wallet'>
<app:rewards:userGems />
<app:rewards:user-gems />
</span>
<ul class="nav nav-tabs game-tabs">
@@ -12,7 +12,7 @@
<li><a data-toggle='tab' data-target="#profileInventory"><i class='icon-gift'></i> Inventory</a></li>
<li><a data-toggle='tab' data-target="#profileStable"><i class='icon-leaf'></i> Stable</a></li>
{/if}
<li><a data-toggle='tab' data-target="#profileTavern"><i class='icon-glass'></i> Tavern</a></li>
<li><a data-toggle='tab' data-target="#profileTavern"><i class='icon-eye-close'></i> Tavern</a></li>
<li><a data-toggle='tab' data-target="#profileAchievements"><i class='icon-certificate'></i> Achievements</a></li>
{{#if _loggedIn}}
<li><a data-toggle='tab' data-target="#profileSettings"><i class='icon-wrench'></i> Settings</a></li>
@@ -27,7 +27,7 @@
<app:avatar:customize />
</div>
<div class='span4 border-right'>
<app:avatar:profile-stats />
<app:avatar:profile-stats profile={_user} />
</div>
<div class='span4'>
<app:avatar:profile-edit />
@@ -78,7 +78,7 @@
<div class='span4 border-right'>
<div class='tavern-pane'>
<img src='/img/npcs/daniel.png' />
<div class="popover fade right in" style="top: 0px; left: 135px; display: block;">
<div class="popover static-popover fade right in" style="top: 0px; left: 135px;">
<div class="arrow"></div>
<h3 class="popover-title">Daniel Johansson</h3>
<div class="popover-content">
@@ -88,17 +88,17 @@
</div>
</div>
<div class='alert alert-info {#unless _user.flags.rest}hidden{/}'>While you're resting, your dailies aren't calculated. <span class='label label-warning'>Warning:</span> this means that if you check in today, do some dailies, and check out tomorrow - they won't get un-checked until the day <strong>after</strong> tomorrow. You start where you left off before vacation / illness, and it prevents abusing the inn. See <a _target='blank' href='https://trello.com/card/rest-in-tavern/50e5d3684fe3a7266b0036d6/14'><strong>Trello</strong></a> for more information.</div>
<div class='alert alert-info {#unless _user.flags.rest}hidden{/}'>Whilst resting your dailies are saved and aren't effected by day turn-over. Whether you check out tomorrow or in a weeks time you'll continue in the same state as when you checked in.</div>
<div class=well>
<h3>Resources</h3>
<ul class=unstyled>
<li><h4><a _target=blank href="http://community.habitrpg.com/forums/lfg">LFG Posts</a></h4></li>
<li><h4><a _target=blank href="http://www.youtube.com/watch?feature=player_embedded&v=cT5ghzZFfao">Tutorial</a></h4></li>
<li><h4><a _target=blank href="http://community.habitrpg.com/faq-page">FAQ</a></h4></li>
<li><h4><a _target=blank href="https://github.com/lefnire/habitrpg/issues?state=open">Submit a Bug</a></h4></li>
<li><h4><a _target=blank href="https://trello.com/board/habitrpg/50e5d3684fe3a7266b0036d6">Request a Feature</a></h4></li>
<li><h4><a _target=blank href="http://community.habitrpg.com/forum">Community Forum</a></h4></li>
<li><h4><a target="_blank" href="http://community.habitrpg.com/forums/lfg">LFG Posts</a></h4></li>
<li><h4><a target="_blank" href="http://www.youtube.com/watch?feature=player_embedded&v=cT5ghzZFfao">Tutorial</a></h4></li>
<li><h4><a target="_blank" href="http://community.habitrpg.com/faq-page">FAQ</a></h4></li>
<li><h4><a target="_blank" href="https://github.com/lefnire/habitrpg/issues?state=open">Submit a Bug</a></h4></li>
<li><h4><a target="_blank" href="https://trello.com/board/habitrpg/50e5d3684fe3a7266b0036d6">Request a Feature</a></h4></li>
<li><h4><a target="_blank" href="http://community.habitrpg.com/forum">Community Forum</a></h4></li>
</ul>
</div>
@@ -122,7 +122,7 @@
<!-- pets pane -->
<div class="tab-pane pet-grid" id="market-tab">
<img src='/img/npcs/alex.png' />
<div class="popover fade right in" style="top: 0px; left: 170px; display: block;">
<div class="popover static-popover fade right in" style="top: 0px; left: 170px;">
<div class="arrow"></div>
<h3 class="popover-title">Alexander Augustin</h3>
<div class="popover-content">Welcome to the Market! I'm the merchant, <a target="_blank" href="http://www.kickstarter.com/profile/523661924">Alexander</a>. Dying to get that particular pet you're after, but don't want to wait for it to drop? Buy it here!</div>
+12 -2
View File
@@ -42,8 +42,18 @@
<div id="exp-chart" style="display:none;"></div>
<div id=main class="grid">
<div class='{#if _gamePane}hidden{/}'><app:tasks:taskLists /></div>
<div class='{#unless _gamePane}hidden{/}'><app:game-pane:main /></div>
<div class='{#if _gamePane}hidden{/}'>
<app:tasks:task-lists
habits={_habitList}
dailys={_dailyList}
todos={_todoList}
rewards={_rewardList}
main=true
editable=true />
</div>
<div class='{#unless _gamePane}hidden{/}'>
<app:game-pane:main />
</div>
</div>
</div>
<app:footer:footer />
+4 -4
View File
@@ -34,7 +34,7 @@
<!-- Re-Roll modal -->
<app:modals:modal modalId='reroll-modal' header="Reset Your Tasks">
<app:rewards:userGems />
<app:rewards:user-gems />
<p>Highly discouraged because red tasks provide good incentive to improve (<a target="_blank" href="https://github.com/lefnire/habitrpg#all-my-tasks-are-red-im-dying-too-fast">read more</a>). However, this becomes necessary after long bouts of bad habits.</p>
<@footer>
{#if lt(_user.balance,1)}
@@ -47,7 +47,7 @@
<!-- Buy more Gems modal -->
<app:modals:modal modalId='more-gems-modal' header="Out Of Gems">
<app:rewards:userGems />
<app:rewards:user-gems />
<p>Oops, out of Gems, which are used to buy special items! Habit is an open source project, and can use all the help it can get - buy more Gems to receive this pet, and consider it a donation to the contributors</p>
<@footer>
<a data-dismiss="modal" x-bind="click:showStripe" class="btn btn-success btn-large">Buy More Gems</a><span class='gem-cost'>Not enough Gems</span>
@@ -56,7 +56,7 @@
<app:modals:modal modalId="why-ads-modal" header="Why Ads?">
<p>
Habit an open source project, and can use all the help it can get - consider this a donation to the contributors. You also get 20 Gems from the purchase, which you can use to buy special items.
Habit is an open source project, and can use all the help it can get - consider this a donation to the contributors. You also get 20 Gems from the purchase, which you can use to buy special items.
</p>
<p>
"Hey, I backed the Kickstarter!" - follow <a target="_blank" href="http://community.habitrpg.com/node/22">these instructions</a>.
@@ -84,4 +84,4 @@
{{#if @footer}}
<div class="modal-footer">{{@footer}}</div>
{{/}}
</div>
</div>
+18 -9
View File
@@ -95,7 +95,24 @@
</div>
<stable:>
<div>{count(_user.items.pets)} / 90 Pets Found</div>
<!-- tables, I know - I spent a good 1h here with divs & row-fluid and can't get it working, so screw it -->
<table><tr>
<td><img src='/img/npcs/matt.png' /></td>
<td><div class="popover static-popover fade right in" style="position:relative;max-width:550px;margin-left:10px">
<div class="arrow"></div>
<h3 class="popover-title">Matt Boch</h3>
<div class="popover-content">
Welcome to the Stable! I'm <a target="_blank" href="http://www.kickstarter.com/profile/mattboch">Matt</a>, the beast master. Choose a pet here to adventure at your side - they aren't much help yet, but I forsee a time when they're able to <a href="_target" href="https://trello.com/card/mounts/50e5d3684fe3a7266b0036d6/221">grow into powerful steeds</a>! Until that day, <a target="_blank" href="https://f.cloud.github.com/assets/2374703/164631/3ed5fa6c-78cd-11e2-8743-f65ac477b55e.png">have a look-see</a> at all the pets you can collect.
<h4>{count(_user.items.pets)} / 90 Pets Found</h4>
</div>
</div></td>
</tr></table>
<!--<menu type="list">
<li class="customize-menu">
<menu>
</menu>
</li>
</menu>-->
<table>
{{#each _items.pets as :pet}}
<tr>
@@ -115,14 +132,6 @@
</tr>
</table>
<!--<menu type="list">
<li class="customize-menu">
<menu>
</menu>
</li>
</menu>-->
<stable-pet:>
<div rel="tooltip" title="{{@tooltip}}">
{#if ownsPet(@pet, _user.items.pets)}
+2 -46
View File
@@ -8,51 +8,7 @@
</@footer>
</app:modals:modal>
<rewardsColumn:>
<div class="module rewards-module">
<div class="task-column rewards">
<!-- cash or gems -->
<span class='option-box pull-right wallet'>
<div class="money">
{gold(floor(_user.stats.gp))}
<span class='shop_gold' rel='tooltip' title='Gold'></span>
</div>
<div class="money">
{silver(_user.stats.gp)}
<span class='shop_silver' rel='tooltip' title='Silver'></span>
</div>
</span>
<h2 class="task-column_title">Rewards</h2>
<!-- add new reward -->
<app:tasks:newTask type="reward" inputValue="{_newReward}" placeHolder="New Reward" />
<!-- Custom Rewards -->
<ul class='rewards' style="{#unless _rewardList}display:none{/}">
{#each _rewardList as :task}<app:tasks:task />{/}
</ul>
<!-- Static Rewards -->
<ul class='items' style="{#unless _user.flags.itemsEnabled}display:none{/}">
<app:rewards:item item={_items.next.weapon} />
<app:rewards:item item={_items.next.armor} />
<app:rewards:item item={_items.next.head} />
<app:rewards:item item={_items.next.shield} />
<app:rewards:item item={_items.potion} />
<app:rewards:item item={_items.reroll} />
</ul>
<app:tasks:ads>
<a href="http://www.amazon.com/gp/product/1594484805/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1594484805&linkCode=as2&tag=ha0d2-20">Drive: The Surprising Truth About What Motivates Us</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=1594484805" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
</app:tasks:ads>
</div>
</div>
<userGems:>
<user-gems:>
<a class="pull-right gem-wallet" rel='popover' data-trigger='hover' data-title='Gems' data-content="Used for buying special items (reroll, eggs, hatching potions, etc). You'll need to unlock those features before being able to use Gems." data-placement='bottom'>
<span class="task-action-btn tile flush bright add-gems-btn" x-bind="click:showStripe"></span>
<span class="task-action-btn tile flush neutral"><div class="Gems"></div> {gems(_user.balance)} Gems
@@ -69,7 +25,7 @@
<!-- left-hand size commands -->
<div class="task-controls">
{#if equal(@item.type),'reroll')}
{#if equal(@item.type,'reroll')}
<a class="task-action-btn btn-reroll" data-toggle="modal" data-target="#reroll-modal"><i class='icon-repeat'></i></a>
{else}
<a class="money btn-buy item-btn" x-bind=click:buyItem data-type={@item.type} data-value={@item.value} data-index={@item.index}>
+110 -55
View File
@@ -8,53 +8,48 @@
</@footer>
</app:modals:modal>
<ads: nonvoid>
{{#if and( _loggedIn, notEqual(_user.flags.ads,'hide') )}}
<span class='pull-right'>
<a x-bind="click:showStripe" rel='tooltip' title='Remove Ads'><i class='icon-remove'></i></a><br/>
<a href="#" data-target="#why-ads-modal" data-toggle="modal" rel='tooltip' title='Why Ads?'><i class='icon-question-sign'></i></a>
</span>
{{@content}}
{{/}}
<taskLists:>
<task-lists:>
<!--helpTitle & helpContent moved to tour -->
<!-- Habits Column -->
<div class="module">
<div class="task-column habits">
<h2 class="task-column_title">{{t("Habits")}}</h2>
<app:tasks:newTask type="habit" inputValue="{_newHabit}" placeHolder="New Habit" />
<ul class="habits">
{#each _habitList as :task}<app:tasks:task />{/}
</ul>
<br/>
<app:tasks:ads>
<a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=ha0d2-20">The Power of Habit: Why We Do What We Do in Life and Business</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=1400069289" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
</app:tasks:ads>
<app:tasks:task-list
header="habits"
type="habit"
inputValue={_newHabit}
placeHolder="New Habit"
list={@habits}
main={{@main}}
editable={{@editable}}
>
<@ads><a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=ha0d2-20">The Power of Habit: Why We Do What We Do in Life and Business</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=1400069289" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></@ads>
</app:tasks:task-list>
</div>
</div>
<!-- Dailys Column -->
<div class="module">
<div class="task-column dailys">
<h2 class="task-column_title">Dailies</h2>
<app:tasks:newTask type="daily" inputValue="{_newDaily}" placeHolder="New Daily" />
<ul class='dailys'>
{#each _dailyList as :task}<app:tasks:task />{/}
</ul>
<br/>
<app:tasks:ads>
<a href="http://www.amazon.com/gp/product/0142000280/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0142000280&linkCode=as2&tag=ha0d2-20">Getting Things Done: The Art of Stress-Free Productivity</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=0142000280" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
</app:tasks:ads>
<app:tasks:task-list
header="dailies"
type="daily"
inputValue={_newDaily}
placeHolder="New Daily"
list={@dailys}
main={{@main}}
editable={{@editable}}
>
<@ads><a href="http://www.amazon.com/gp/product/0142000280/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0142000280&linkCode=as2&tag=ha0d2-20">Getting Things Done: The Art of Stress-Free Productivity</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=0142000280" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></@ads>
</app:tasks:task-list>
</div>
</div>
<!-- Todos Column -->
<div class="module">
<div class="task-column todos context-enabled context-uncompleted tabbable tabs-below" id="todo-well">
<div class="task-column todos tabbable tabs-below">
{{#if @main}}
<!-- todo export/graph options -->
<span class='option-box pull-right'>
{#if _user.history.todos}
@@ -63,47 +58,107 @@
<a class="option-action" href="/v1/users/{{_user.id}}/calendar.ics?apiToken={{_user.apiToken}}" rel=tooltip title="iCal"><i class=icon-calendar></i></a>
<!-- <a href="https://www.google.com/calendar/render?cid={{encodeiCalLink(_user.id, _user.apiToken)}}" rel=tooltip title="Google Calendar"><i class=icon-calendar></i></a> -->
</span>
<h2 class="task-column_title">Todos</h2>
<div id="todos-chart" style="display:none;"></div>
{{/}}
<!-- create new todo -->
<div class="display-context-dependant show-for-uncompleted">
<app:tasks:newTask type="todo" inputValue="{_newTodo}" placeHolder="New Todo" />
</div>
<!-- list of all the todos -->
<ul class='todos task-list'>
{#each _todoList as :task}<app:tasks:task />{/}
</ul>
<br/>
<app:tasks:ads>
<a href="http://www.amazon.com/gp/product/0312430000/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0312430000&linkCode=as2&tag=ha0d2-20">The Checklist Manifesto: How to Get Things Right</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=0312430000" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
</app:tasks:ads>
<app:tasks:task-list
header="todos"
type="todo"
inputValue="{_newTodo}"
placeHolder="New Todo"
list={@todos}
main={{@main}}
editable={{@editable}}
>
<@ads><a href="http://www.amazon.com/gp/product/0312430000/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0312430000&linkCode=as2&tag=ha0d2-20">The Checklist Manifesto: How to Get Things Right</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=0312430000" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></@ads>
</app:tasks:task-list>
<button class='task-action-btn tile spacious bright display-context-dependant show-for-completed' x-bind=click:clearCompleted>Clear Completed</button>
<button class='task-action-btn tile spacious bright {#unless _showCompleted}hidden{/}' x-bind=click:clearCompleted>Clear Completed</button>
<!-- remaining/completed tabs -->
<ul class="todo-status-toggler nav nav-tabs">
<li class="active"><a x-bind=click:changeContext data-target="#todo-well" data-context="context-uncompleted">Remaining</a></li>
<li><a x-bind=click:changeContext data-target="#todo-well" data-context="context-completed">Complete</a></li>
<ul class="nav nav-tabs">
<li class="{#unless _showCompleted}active{/}"><a x-bind="click:todosShowRemaining">Remaining</a></li>
<li class="{#if _showCompleted}active{/}"><a x-bind="click:todosShowCompleted">Complete</a></li>
</ul>
</div>
</div>
<!-- Rewards Column -->
<app:rewards:rewardsColumn />
<div class="module rewards-module">
<div class="task-column rewards">
{{#if @main}}
<!-- cash or gems -->
<span class='option-box pull-right wallet'>
<div class="money">
{gold(floor(_user.stats.gp))}
<span class='shop_gold' rel='tooltip' title='Gold'></span>
</div>
<div class="money">
{silver(_user.stats.gp)}
<span class='shop_silver' rel='tooltip' title='Silver'></span>
</div>
</span>
{{/}}
<app:tasks:task-list
header="rewards"
type="reward"
inputValue="{_newReward}"
placeHolder="New Reward"
list={@rewards}
main={{@main}}
editable={{@editable}}
>
<@extra>
{{#if @main}}
<!-- Static Rewards -->
<ul class='items {#unless _user.flags.itemsEnabled}hidden{/}'>
<app:rewards:item item={_items.next.weapon} />
<app:rewards:item item={_items.next.armor} />
<app:rewards:item item={_items.next.head} />
<app:rewards:item item={_items.next.shield} />
<app:rewards:item item={{_items.potion}} />
<app:rewards:item item={{_items.reroll}} />
</ul>
{{/}}
</@extra>
<@ads><a href="http://www.amazon.com/gp/product/1594484805/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1594484805&linkCode=as2&tag=ha0d2-20">Drive: The Surprising Truth About What Motivates Us</a><img src="//www.assoc-amazon.com/e/ir?t=ha0d2-20&l=as2&o=1&a=1594484805" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></@ads>
</app:tasks:task-list>
</div>
</div>
<!-- Templates -->
<newTask:>
<form class="addtask-form form-inline new-task-form" id="new-{@type}" data-task-type="{@type}" x-bind="submit:addTask">
<span class="addtask-field"><input value="{@inputValue}" type="text" name="new-task" placeholder="{@placeHolder}"/></span>
<task-list: nonvoid>
<h2 class="task-column_title">{{t(@header)}}</h2>
{{#if equal(@type,'todo')}}<div id="todos-chart" class="hidden"></div>{{/}}
{{#if @editable}}
<form class="addtask-form form-inline new-task-form {#if and(_showCompleted,equal(@type,'todo'))}hidden{/}" id="new-{{@type}}" data-task-type="{{@type}}" x-bind="submit:addTask">
<span class="addtask-field"><input value="{@inputValue}" type="text" placeholder="{{@placeHolder}}"/></span>
<input class="addtask-btn" type="submit" value="">
</form>
<hr>
{{/}}
<ul class="{{@type}}s {#unless @list}hidden{/}">
{#each @list as :task}<app:tasks:task />{/}
</ul>
{{@extra}}
<br/>
<!-- ads -->
{{#if and( _loggedIn, notEqual(_user.flags.ads,'hide'), @main )}}
<span class='pull-right'>
<a x-bind="click:showStripe" rel='tooltip' title='Remove Ads'><i class='icon-remove'></i></a><br/>
<a href="#" data-target="#why-ads-modal" data-toggle="modal" rel='tooltip' title='Why Ads?'><i class='icon-question-sign'></i></a>
</span>
{{@ads}}
{{/}}
<!-- all the parts of a single task -->
<task:>
<li data-id={{:task.id}} class="task {taskClasses(:task, _user.filters, _user.preferences.dayStart, _user.lastCron)} {#if :task.down}{#if :task.up}habit-wide{/}{/}">
<li data-id={{:task.id}} class="task {taskClasses(:task, _user.filters, _user.preferences.dayStart, _user.lastCron, _showCompleted)}">
<!-- right-hand side control buttons -->
<div class="task-meta-controls">
@@ -238,4 +293,4 @@
</form>
</div>
<div style="display:none;" id={{:task.id}}-chart></div>
<div style="display:none;" id={{:task.id}}-chart></div>