From 0b8bd7b76ca1d5b2d764cb5dbb721698a2a7ca8c Mon Sep 17 00:00:00 2001 From: dannybm Date: Sat, 16 Nov 2013 02:29:14 +0200 Subject: [PATCH 001/116] Full quality Hebrew language locale translation This updates includes quality top down Hebrew translation. The previous version seemed to be poor quality google translation. * should be tested and tweaked for minor adjustments right after deployment --- locales/he/app.json | 280 ++++++++++++++++++++++---------------------- 1 file changed, 140 insertions(+), 140 deletions(-) diff --git a/locales/he/app.json b/locales/he/app.json index db0f32e1d2..b2f0ec81de 100644 --- a/locales/he/app.json +++ b/locales/he/app.json @@ -1,98 +1,98 @@ { - "languageName": "Hebrew", + "languageName": "עברית", -"_commentfrontpage":"HABITRPG FRONT PAGE", - "synopsis" : "תוכנית שמהפך את ההיים שלך למשחק תפקידים. ההצלחה מעלה את המדרגה, הכשלון מונע את נקודות החיים, תרוויחו כסף לאסף נשקת שריון ופריטים.", +"_commentfrontpage":"HABITRPG עמוד ראשי", + "synopsis" : "תוכנה לפיתוח הרגלים שמתייחסת לחיים כמו משחק תפקידים. עלה שלב בהצלחות, הפסד בריאות בכשלונות, הרווח כסף לרכישת נשק ושריון.", "playButton" : "שחק", -"_commenttut": "TUTORIAL/TOUR", - "endTourButton": "גמר הסיור", +"_commenttut": "הדרכה/סיור", + "endTourButton": "סיים סיור", "nextButton" : "הבא", - "prevButton" : "אחרון", + "prevButton" : "הקודם", "tour1Title" : "ברוכים הבאים ל-HabitRPG", - "tour1Text" : "ברוכים הבאים ל-HabitRPG, גשש הרגלים שמטפל בך כאילו היית דמות במשחק תפקידים.", + "tour1Text" : "ברוכים הבאים ל-HabitRPG, מתעד-ההרגלים שמטפל בך כאילו היית דמות במשחק תפקידים.", "tour2Title" : "הרגלים", - "tour2Text" : "הרגלים הם מידות או מטרות לטוב או לרע שאתם גוששים.", - "tour3Title" : "יומיומיות", - "tour3Text" : "יומיומיות הן מטלות שרוצים למלאות בקצב יומיומי.", + "tour2Text" : "הרגלים יכולים להיות מטרות טובות או רעות אחריהם אתם עוקבים ברציפות.", + "tour3Title" : "יומיות", + "tour3Text" : "יומיות הן מטרות שרוצים להשיג פעם ביום.", "tour4Title" : "מטלות", - "tour4Text" : "מטלות הם משימות חד-פעמיות שצריכים למלאות באיזה זמן. ", + "tour4Text" : "מטלות הן משימות חד-פעמיות שיש להשלים מתישהו.", "tour5Title" : "פרסים", - "tour5Text" : "כשתמלאו המטרות, תרוויחו זהב לקנות פרסים. קנו אותם חופשי - חייבים פרסים כדי לבנות הרגלים טובים ומידות טובות. ", - "tour6Title" : "העבר את העכבר על הערות", - "tour6Text" : "יש לסוגי המטרות השונות מאפיינים שונים. העבר את העכבר על הערה של כל מטרה לצפייה במידע מושלמת. כשאתם מוכניםת מחקו את המטרות המחדלים וקדימה!.", + "tour5Text" : "עם השגת המטרות, תרוויחו זהב שישמש אתכם לרכישת פרסים. רכשו פרסים בחופשיות - תמריצים חיוביים הם חיוניים לביסוס הרגלים טובים.", + "tour6Title" : "עבור על ההערות", + "tour6Text" : "למטרות מסוגים שונים יש מאפיינים מיוחדים. הצביעו עם העכבר על סמל ההערה של כל מטרה למידע נוסף. כשאתם מוכנים, מחקו את המטרות הקיימות והוסיפו את שלכם.", -"_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.", +"_commentdefaulttasks":"משימות ברירת מחדל", + "habit1" : "שעת עבודה פרודוקטיבית", + "habit1comment": "-- הרגלים: במעקב רציף -- עבור הרגלים מסויימים, הגיוני רק *לצבור* נקודות (כמו זה) --", + "habit2" : "לאכול ג'אנק פוד", + "habit2comment" : "עבור אחרים, זה רק הגיוני *להפסיד* נקודות", + "habit3" : "עלה במדרגות", + "habit3comment" : "עבור השאר, גם + וגם - הגיוניים (מדרגות = צבירה, מעלית = הפסד)", + "daily1" : "שעה פרוייקט אישי", + "daily1comment" : "יומיות: השלימו אחת ליום -- בסוף כל יום, יומיות שלא הושלמו מעכבות את קצב צבירת הנקודות שלך.", + "daily2" : "אימון כושר", + "daily2comment" : "אם אתם עומדים ביעדים, הם הופכים לירוקים ושווים פחות (נסיון, זהב) ופחות מזיקים (בריאות). זה אומר שאתם יכולים להתייחס אליהם יותר בקלות.", + "daily3" : "45 דקות קריאה", + "daily3comment" : "אבל אם אתם לא עומדים בקצב, הם נהיים אדומים. ככל שתכשלו יותר, ערכם (נסיון, זהב) יעלה והם יעלו לכם ביותר בריאות. זה יעודד אתכם להתמקד במכשולים שלכם, הצבועים באדום.", + "todo1" : "להתקשר לאמא", + "todo1comment" : "מטלות: להשלים מתישהו -- מטלות שלא הושלמו לא יפגעו בך, אבל ערכן יגדל עם הזמן. זה יעודד אתכם להשלים מטלות מעוכבות.", + "reward1" : "פרק אחד של משחקי הכס", + "reward1comment": "פרסים: פנקו את עצמכם! -- ככל שתשיגו יעדים, תרוויחו זהב לרכוש פרסים. ריכשו אותם בנדיבות - תמריצים חיוביים חיוניים לאימוץ הרגלים טובים.", + "reward2" : "עוגה", + "reward2comment" : "אבל ריכשו אותם רק אם יש לכם מספיק זהב - אחרת תאבדו נקודות בריאות.", -"_commentdefaulttags" : "DEFAULT TAGS", +"_commentdefaulttags" : "תגיות ברירת מחדל", "morning" : "בוקר", - "afternoon" : "אחה״צ", + "afternoon" : "צהריים", "evening" : "ערב", -"_commenthead": "HEADER", +"_commenthead": "כותרת", "health": "בריאות", "experience": "נסיון", "history": "היסטוריה", "anonymous": "אלמוני", - "level": "דרגה", + "level": "שלב", "tasks": "משימות", "loginAndReg" : "כניסה / הרשמה", "loginFacebookAlt" : "כניסה / הרשמה דרך פייסבוק", - "login" : "כביסה", + "login" : "כניסה", "register" : "הרשמה", "options": "אפשרויות", "logout": "יציאה", -"_commentnotifcations" : "NOTIFICATIONS", - "partyNotification" : "הודעות חברה חדשות", +"_commentnotifcations" : "עדכונים", + "partyNotification" : "הצעת חברות חדשה", -"_commenttaskview": "TASK VIEW", +"_commenttaskview": "תצוגת משימה", "habits": "הרגלים", "Habits": "הרגלים", "newHabit": "הרגל חדש", - "edit": "ערך", + "edit": "ערוך", "text": "טקסט", "extraNotes": "הארות", "directions/Actions": "כיוון/פעולות", "advancedOptions": "אפשרויות מתקדמות", "difficulty": "קושי", "difficultyHelpTitle": "כמה קשה המשימה הזאת?", - "difficultyHelpContent": "זאת מכפילה את ערך המשימה. תשתמשו בזאת מעטת אלא סמכו על אלגוריתם הההתאמה האורגני. אבל כמה משימות ערכן משונה באופן משמעותי כמו ציחצוח שניים מול כתיבת התזה. תלחצו למידע מושלמת.", + "difficultyHelpContent": "זה מכפיל את ערך הנקודות. השתמשו בחסכנות, עדיף כמובן שתסמכו על אלגוריתם שקלול הערך האורגני שלנו, אבל לפעמים מטלות מסויימות שוות יותר (לכתוב תזה מול להשתמש בחוט דנטלי). לחצו למידע נוסף", "easy": "קל", "medium": "בינוני", "hard": "קשה", - "delete": "מחוק", - "progress": "פרוגרס", - "score": "ציון", - "dailies": "יומיומיות", - "Dailies": "יומיומיות", - "newDaily": "יומיומית חדשה", + "delete": "מחיקה", + "progress": "התקדמות", + "score": "ניקוד", + "dailies": "יומיות", + "Dailies": "יומיות", + "newDaily": "יומית חדשה", "repeat": "חזרה", "Su": "א'", "M": "ב'", @@ -105,159 +105,159 @@ "Todos": "מטלות", "newTodo": "מטלה חדשה", "dueDate": "תעריך יעד", - "remaining": "נשארות", - "complete": "נשלמות", + "remaining": "נשאר", + "complete": "הושלם", "rewards": "פרסים", "Rewards": "פרסים", "gold": "זהב", "silver": "כסף", "newReward": "פרס חדש", - "price": "מכיר", - "tags" : "תגים", - "editTags" : "ערוך תגים", - "newTag" : "תג חדש", - "clearFilters" : "מחוק מסננות", + "price": "מחיר", + "tags" : "תגיות", + "editTags" : "ערוך תגיות", + "newTag" : "תגית חדשה", + "clearFilters" : "נקה סינון", -"_commentdrops" : "DROP SYSTEM", - "dropsEnabled" : "ירידות מופעלות!", - "dropsEnabledText1" : "פתחת מערכת הירידות! עכשיו, כשתגמרו משימות, יש לכם צ׳נס קטן למצוא משהו יפה. מאמינים? בדיוק מצאתם", +"_commentdrops" : "מערכת הליקוט", + "dropsEnabled" : "ליקוט מופעל!", + "dropsEnabledText1" : "שחררתם את מערכת הליקוט! מעתה כשתשלימו משימות, יש סיכוי קטן שתמצאו משהו מעניין. ונחשו מה, בדיוק מצאתם", "dropsEnabledText2" : "ביצה", - "itemDropped" : "ירד פריט!!", + "itemDropped" : "הפריט לוקט!!", -"_commentoptionsview": "OPTIONS VIEW", +"_commentoptionsview": "תצוגת אפשרויות", "profile": "פרופיל", - "avatar": "אוואתר", + "avatar": "דמות", "head": "ראש", "showHelm": "הראה קסדה", - "hair": "שער", + "hair": "שיער", "skin": "עור", "clothing" : "לבוש", - "photoUrl": "URL תמונה", + "photoUrl": "כתובת תמונה", "fullName": "שם מלא", "blurb": "קצת על עצמך", "websites": "אתרי אינטרנט", - "addWebsites": "הוסיף אתרים", + "addWebsites": "הוסף אתרים", "items" : "פריטים", "weapon" : "נשק", "armor" : "שריון", "helm" : "קסדה", "shield" : "מגן", - "stats" : "סטטיסטיקות", + "stats" : "נתונים", "strength" : "עוצמה", "defense" : "הגנה", "totalStrength" : "סך עוצמה", "totalDefense" : "סך הגנה", - "party": "Party", - "createAParty":"יצר מפלגה", - "noPartyText": "אתה לא במפלגה. או שאתה יכול ליצור אותו ולהזמין את החברים, או אם אתה רוצה להצטרף למפלגה קיימת, יש להם להכניס:", - "partyName": "שם מפלגה", - "create":"יצר", + "party": "חמולה", + "createAParty":"צור חמולה", + "noPartyText": "אינכם בחמולה. באפשרותכם ליצור חמולה ולהזמין חברים, או על מנת להצטרף לחמולה קיימת, עליהם להכניס:", + "partyName": "שם החמולה", + "create":"צור", "userId":"מספר משתמש", - "invite":"הזמין", - "leave": "יצא", + "invite":"הזמן", + "leave": "עזוב", "invitedTo" : "אתם מוזמנים ל-", "chat": "שיחה", "inventory": "מלאי", "eggs": "ביצים", - "noEggs": "אין לך ביצים במלאי שלך", - "hatchingPotions": "שיקויי בקיעה", - "noHatchingPotions": "עדיין אין לך שיקויי בקיעה", - "hatchYourEgg" : "בוקע את הביצה שלך", - "whichHatchingPotion1" : "איזה שיקוי בקיעה לשפוך על ביצת ה", + "noEggs": "אין לך ביצים במלאי", + "hatchingPotions": "שיקויים", + "noHatchingPotions": "עדיין אין לך שיקוי", + "hatchYourEgg" : "הפוך ביצה לחיית מחמד", + "whichHatchingPotion1" : "איזה שיקוי לשפוך על ביצת ה", "whichHatchingPotion2" : "שלך?", "pour" : "שפוך", "rarePets" : "חיות נדירות", - "market": "השוק", + "market": "שוק", - "stable": "אורוה", + "stable": "אורווה", "petsFound":"חיות שנמצאות", "rarePets": "חיות נדירות", - "tavern": "בית מרזח", - "restButton":"תנוח בבית מלון", - "checkoutButton": "יציאה מהמלון", - "tavernTalkTitle":"שיחה ו-LFG בבית המרזח", - "tavernRestingInfo" : "תוך כדי לינה היומימיות שלך נשמרות ואין הליכת הזמן מפריע לנקודות שלך. מתי שאתם רוצים, תצאו מהמלון והדמות שלכם יהיה בדיוק כמו ששמתם פה.", + "tavern": "טברנה", + "restButton":"נוח בצימר", + "checkoutButton": "צא מהצימר", + "tavernTalkTitle":"שיח בטברנה", + "tavernRestingInfo" : "כל עוד הדמות שלכם לנה בצימר היומיות שלכם נשמרות והזמן שחולף לא מוריד נקודות. כשתרצו, צאו מהצימר והדמות שלכם תשוב בדיוק פי שהייתה כשבאה.", "resources" : "משאבים", - "LFGPosts" : "הודעות LGF", + "LFGPosts" : "הודעות", "tutorials" : "הדרכות", - "achievements":"Achievements", - "achievementUnlocked" : "השג פתוח!", + "achievements":"הישגים", + "achievementUnlocked" : "הישג שוחרר!", "npcText" : "תמך בפרוייקט ה-Kickstarter ברמה הגבוהה ביותר", "contribName" : "מתנדב", - "contribText" : "התנדב ל-HabitRPG (קוד, עיצוב, אומנות, עצה חוקי, משמכים, וכו׳). רוצה? תקן משהו!", + "contribText" : "תרמו ל-HabitRPG (קוד, עיצוב, אומנות, יעוץ משפטי, כתיבה, וכו׳). רוצים? תקנו משהו!", "kickstartName1" : "תומך Kickstarter - ", "kickstartName2" : "מדרגה", "kickstartText" : "תמך בפרוייקט ה-Kickstarter", - "streakName" : "השגות התמדה", - "streakText1" : "התמד", - "stureakText2" : "פעמים של 21 ימים ביומיומיות", + "streakName" : "הישג רצף התמדה", + "streakText1" : "התמיד", + "stureakText2" : "פעמים 21 ימים ברצף ביומיות", "origUserName" : "משתמש מקורי", "origUserText" : "היו היה פעם שכל אחד לחם בבאגים. איך שעשו חיל!", - "ultimGearName" : "סוף הציוד", - "ultimGearText" : "השג סט השיון וכלי זיין המקסימלי", - "ultimGearUnlocked" : "השגת השג 'סוף הציוד' שקנית הציוד המקסימלי", - "beastMastName" : "בעל החייות", - "beastMastText" : "מצא כל 90 חיות. קשה נורה! תנו כבוד!", - "beastMastUnlocked" : "השגת השג 'בעל החיות' שמצאת כל החיות!", + "ultimGearName" : "מעצמה צבאית", + "ultimGearText" : "השיג את כל כלי השריון והנשק", + "ultimGearUnlocked" : "השגת סטטוס 'מעצמה צבאית' - יש לך את כל כלי השריון והנשק", + "beastMastName" : "מלך החיות", + "beastMastText" : "מצא את כל 90 החיות. קשה נורא! תנו כבוד!", + "beastMastUnlocked" : "השגת את סטטוס 'מלך החיות' על שמצאת כל החיות!", - "settings":"Settings", - "customDayStart":"Custom Day Start", - "24HrClock": "24Hr Clock", - "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", + "settings":"הגדרות", + "customDayStart":"שעת תחילת יום", + "24HrClock": "שעון 24 שעות", + "clockInfo":"HabitRPG מעדכן את הנתונים שלך בחצות כל יום כברירת מחדל. תוכלו להתאים אישית כאן את השעה (הזינו מספר בין 0 ל24)", + "misc":"שונות", + "hideHeader":"הסתר כותרת", + "showHeader":"הצג כותרת", + "changePass":"שינוי סיסמה", + "oldPass":"סיסמה ישנה", + "newPass":"סיסמה חדשה", + "confirmPass":"אשר סיסמה חדשה", + "dangerZone": "איזור סכנה", + "reset":"איפוס", + "resetAltText":"איפוס כל החשבון (מסוכן)", + "resetText1":"זה מאפס את כל החשבון - המטלות שלך ימחקו והדמות תתחיל מחדש. ", + "resetText2":"זה מאוד לא מומלץ כי תאבדו מידע היסטורי ששימושי מאוד להציג את התקדמותכם לאורך זמן. עם זאת, אנשים מסויימים מעוניינים באפשרות זו בהתחלה לאחר ששיחקו קצת בתוכנה. ", + "restore":"שחזר", + "restoreAltText":"שחזר מאפיינים של הדמות", "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", + "delete":"מחיקה", + "deleteAltText":"מחק את החשבון", + "deleteHeader" : "מחק חשבון", + "deleteText1":"ווא ווא ווי ווא! בטוחים? רוצים לחשוב על זה לשניה? זה לגמרי ברצינות ימחק את החשבון שלכם לתמיד, אף פעם לא תוכלו לשחזר אותו. אם אתם בטוחים לגמרי, הקלידו", "deleteText2":" DELETE ", - "deleteText3":"into the text-box", + "deleteText3":"לתוך תיבת הטקסט", "API":"API", - "APIText":"Copy these for use in third party applications.", + "APIText":"העתיקו את אלה לשימוש באפליקציות צד-ג.", "APIToken":"Api Token", -"_commentitems": "ITEMS", - "_commentitemsweps": "WEAPONS", - "sword0name" : "חרב תרגיל", +"_commentitems": "פריטים", + "_commentitemsweps": "כלי נשק", + "sword0name" : "חרב אימון", "sword1Name" : "חרב", "sword1Text" : "מגדיל את רווח ניסיון של 3%.", "sword2Name" : "גרזן", "sword2Text" : "מגדיל את רווח ניסיון של 6%.", "sword3Name" : "כוכב השחר", "sword3Text" : "מגדיל את רווח ניסיון של 9%.", - "sword4Name" : "חרב כחול", + "sword4Name" : "חרב כחולה", "sword4Text" : "מגדיל את רווח ניסיון של 12%.", - "sword5Name" : "חרב אדום", + "sword5Name" : "חרב אדומה", "sword5Text" : "מגדיל את רווח ניסיון של 15%.", "sword6Name" : "חרב זהב", "sword6Text" : "מגדיל את רווח ניסיון של 18%.", - "_commentitemsarmor": "ARMOR", + "_commentitemsarmor": "שריון", "armor0Name" : "שריון בד", "armor1Name" : "שריון עור" , "armor1Text": "מקטין הפסד של HP ב -4%", @@ -270,7 +270,7 @@ "armor5Name" : "שריון זהב", "armor5Text": "מקטין הפסד של HP ב -10%", - "_commentitemshead" : "HEADGEAR", + "_commentitemshead" : "קסדה", "head0Name" : "בלי קסדה", "head1Name" : "קסדת עור" , "head1Text": "מקטין הפסד של HP ב-2%", @@ -283,7 +283,7 @@ "head5Name" : "קסדת זהב", "head5Text": "מקטין הפסד של HP ב-6%", - "_commentitemsshield" : "SHIELDS", + "_commentitemsshield" : "מגנים", "sheild0Name" : "בלי מגן", "sheild1Name" : "מגן עץ", "sheild1Text": "מקטין הפסד של HP ב-3%", @@ -296,8 +296,8 @@ "sheild5Name" : "מגן זהב", "sheild5Text": "מקטין הפסד של HP ב-8%", - "_commentitemsother" : "OTHER ITEMS", - "healthPotionName" : "שקוי בריאות", + "_commentitemsother" : "פריטים אחרים", + "healthPotionName" : "שיקוי בריאות", "healthPotionNotes" : "לשחזר 15 HP באופן מיידי", "rerollName" : "אתחול", "rerollNotes" : "מאפס את ערכי המשימות שלך לצהוב. טוב כשאתה באדום וקשה להשתייר בחיים.", @@ -306,7 +306,7 @@ "rerollModelText2" : "קרא יותר", "rerollModelText3" : "אמנם, הכרחי אחרי תקופות ממושכות של הרגלים רעים.", - "_commentitemspeteggs": "PET EGGS", + "_commentitemspeteggs": "ביצי חיות מחמד", "wolfEgg": "גור זאב", "tigerEgg": "גור נמרים", "pandaEgg": "גור פנדה", @@ -318,7 +318,7 @@ "bearEgg": "גור דובים", "wolfEgg": "גור זאב", - "_commentitemshatchingpotions": "HATCHING POTIONS", + "_commentitemshatchingpotions": "שיקויים", "basePotName": "בסיסי", "basePotText" : ".בוקעים חיית המחמד שלך לצורתה הבסיסי", "whitePotName": "לבן", @@ -353,7 +353,7 @@ "NPCBowenText1" : "", "NPCBochText1" : "", -"_commentdeathstuff" : "DEATH", +"_commentdeathstuff" : "מוות", "deathTitle" : "אתה מת!", "deathText" : "הפסדת כל הכסף, מדרגה אחד וכלי אחת. הקפד להשלים את היומונים שלך כדי למנוע את זה מלקרות שוב!", @@ -385,22 +385,22 @@ "_commentmisc": "MISC & GLOBAL", - "removeAds": "הסרת פרסומים", - "whyAds": "למה פירסומים?", + "removeAds": "הסרת פרסומות", + "whyAds": "למה פרסומות?", "whyAdsContent1": "Habit היא פרויקט Open Source, וזקוק לכל עזרה - רואים את זה כתרומה למפתחים. גם מקבלים 20 אבני חן כדי לקנות פריטים מיוחדים.", "whyAdsContent2": "'היי, אני תמכתי ה-Kickstarter!' - עקוב אחרי", "whyAdsContent3": "ההוראות הבאות", - "_commentbuttons": "BUTTONS", + "_commentbuttons": "כפתורים", "submit":"שלח", "close":"סגור", "saveAndClose": "שמור וסגור", "cancel":"בטל", "ok" : "בסדר", - "add" : "הוסיף", + "add" : "הוסף", "undo" : "החזר", "continue" : "המשך", "accept" : "קבל", - "reject" : "דוחה", + "reject" : "דחה", "or" : "או", "_commenttimestamps":"TIME STAMPS", "justNow":"בדיוק עכשיו", From 20f9e6b9117541737d18a31ef74145fb473a4a7e Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sat, 16 Nov 2013 15:18:58 +0100 Subject: [PATCH 002/116] upgrade angular, fix #1786 --- bower.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bower.json b/bower.json index ff1b5bde1d..314e9d0456 100644 --- a/bower.json +++ b/bower.json @@ -17,9 +17,9 @@ "jquery": "~2.0.3", "jquery.cookie": "~1.4.0", "jquery-ui": "~1.10.3", - "angular": "1.2.0-rc.3", - "angular-sanitize": "1.2.0-rc.3", - "angular-resource": "1.2.0-rc.3", + "angular": "~1.2.1", + "angular-sanitize": "~1.2.1", + "angular-resource": "~1.2.1", "angular-ui": "~0.4.0", "angular-ui-utils": "~0.0.4", "angular-bootstrap": "~0.5.0", @@ -39,9 +39,9 @@ "resolutions": { "jquery": "~2.0.3", "bootstrap": "v2.3.2", - "angular": "1.2.0-rc.3" + "angular": "~1.2.1" }, "devDependencies": { - "angular-mocks": "1.2.0-rc.3" + "angular-mocks": "~1.2.1" } } From 0f1420e9094f6d1cc776bd794288ea2253b8ed5d Mon Sep 17 00:00:00 2001 From: Nicole Foster Date: Sat, 16 Nov 2013 11:16:04 -0500 Subject: [PATCH 003/116] A few JP translations --- locales/ja/app.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locales/ja/app.json b/locales/ja/app.json index 81f190efd2..3f6b197354 100644 --- a/locales/ja/app.json +++ b/locales/ja/app.json @@ -171,13 +171,13 @@ "whichHatchingPotion2" : "卵?", "pour" : "pour", "rarePets" : "Rare Pets", - "market": "Market", + "market": "マーケット", "stable": "Stable", "petsFound":"Pets Found", "rarePets": "Rare Pets", - "tavern": "Tavern", + "tavern": "居酒屋", "restButton":"Rest In The Inn", "checkoutButton": "Check Out Of Inn", "tavernTalkTitle":"Tavern Talk & LFG", @@ -186,7 +186,7 @@ "LFGPosts" : "LGF Posts", "tutorials" : "チュートリアル", - "achievements":"Achievements", + "achievements":"功績", "achievementUnlocked" : "Achievement Unlocked!", "npcText" : "Backed the Kickstarter project at the maximum level!", "contribName" : "Contributor", From 55998085e3d6409908eec59ede031e4d5a44f2dd Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 16 Nov 2013 09:24:01 -0800 Subject: [PATCH 004/116] fixed the issue with case insensitive highlighting highlighting short usernames how this works: * rather than throw an expensive regular expression at each chat message, we start by checking to see if the users name exists. * then, by simple string manipulation we verify that the preceeding character before the alleged username is whitespace, the start of a line, or an '@' character. * FINALLY, we verify the following character is a non-word character using a regular expression. * then we cache the highlight status on the local `message` object, because for some reason, this function is called **every time a character is typed in the chatbox.** this seems like a hugh performance problem to me, need to see if there is a way to disable that or something --- public/js/controllers/groupsCtrl.js | 18 ++++++++++++++++++ views/options/social/chat-message.jade | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index ab7c90e1c0..61266721df 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -128,6 +128,24 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A .controller('ChatCtrl', ['$scope', 'Groups', 'User', function($scope, Groups, User){ $scope.message = {content:''}; $scope._sending = false; + + $scope.isUserMentioned = function(user, message) { + if(message.hasOwnProperty("highlight")) + return message.highlight; + message.highlight = false; + var messagetext = message.text.toLowerCase(); + var username = user.profile.name; + var mentioned = messagetext.indexOf(username.toLowerCase()); + var pattern = "(\s|@|^){1}"+username+"([^\w]|$){1}"; + if(mentioned > -1) { + var preceedingchar = messagetext.substring(mentioned-1,mentioned); + if(mentioned == 0 || preceedingchar.trim() == '' || preceedingchar == '@'){ + var regex = new RegExp(pattern,'i'); + message.highlight = regex.test(messagetext); + } + } + return message.highlight; + } $scope.postChat = function(group, message){ if (_.isEmpty(message) || $scope._sending) return; diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 95f94a8678..cb9bde9188 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,4 +1,4 @@ -li(ng-repeat='message in group.chat', ng-class='{highlight: indexOf(message.text.toLowerCase(), user.profile.name.toLowerCase()), "own-message": user._id == message.uuid}') +li(ng-repeat='message in group.chat', ng-class='{highlight: isUserMentioned(user,message), "own-message": user._id == message.uuid}') a.label.chat-message(class='label-contributor-{{message.contributor.level}}', ng-class='{"label-npc": message.backer.npc}', ng-click='clickMember(message.uuid, true)') span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}  |   From 34d5eda7361fb13698c8aa169f4919a227d2ec38 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 17 Nov 2013 13:21:21 +0100 Subject: [PATCH 005/116] [#1832] remove relative-date, use moment instead --- package.json | 1 - public/js/controllers/rootCtrl.js | 1 + views/options/social/chat-message.jade | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f1f5636c67..a91d8b5289 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "superagent": "~0.12.4", "resolve": "~0.2.3", "expect.js": "~0.2.0", - "relative-date": "~1.1.1", "lodash": "~2.2.1", "async": "~0.2.9", "optimist": "~0.5.2", diff --git a/public/js/controllers/rootCtrl.js b/public/js/controllers/rootCtrl.js index 607bd333e7..a241e83656 100644 --- a/public/js/controllers/rootCtrl.js +++ b/public/js/controllers/rootCtrl.js @@ -41,6 +41,7 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ */ _.defaults($rootScope, window.habitrpgShared.algos); _.defaults($rootScope, window.habitrpgShared.helpers); + $rootScope.moment = window.moment; $rootScope.set = User.set; $rootScope.authenticated = User.authenticated; diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index cb9bde9188..f94d2820ea 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -5,6 +5,6 @@ li(ng-repeat='message in group.chat', ng-class='{highlight: isUserMentioned(user span(ng-bind-html="message.text | linky:'_blank'") |  -  span.muted.time - | {{relativeDate(message.timestamp, _currentTime) + ' '}} + | {{moment(message.timestamp).fromNow() + ' '}} a(ng-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') i.icon-remove(tooltip='Delete') From b83eb0ee28308ecf08e8a00d7150621d2dae1ac9 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 17 Nov 2013 13:28:57 +0100 Subject: [PATCH 006/116] moment is exported as an helper by habitrpg-shared --- public/js/controllers/rootCtrl.js | 1 - 1 file changed, 1 deletion(-) diff --git a/public/js/controllers/rootCtrl.js b/public/js/controllers/rootCtrl.js index a241e83656..607bd333e7 100644 --- a/public/js/controllers/rootCtrl.js +++ b/public/js/controllers/rootCtrl.js @@ -41,7 +41,6 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ */ _.defaults($rootScope, window.habitrpgShared.algos); _.defaults($rootScope, window.habitrpgShared.helpers); - $rootScope.moment = window.moment; $rootScope.set = User.set; $rootScope.authenticated = User.authenticated; From f448f4b71b29cc385cc9dd06d2eff9ade7157242 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 17 Nov 2013 13:32:44 +0100 Subject: [PATCH 007/116] bower.json auto update --- bower.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 314e9d0456..51760dbeda 100644 --- a/bower.json +++ b/bower.json @@ -38,8 +38,7 @@ }, "resolutions": { "jquery": "~2.0.3", - "bootstrap": "v2.3.2", - "angular": "~1.2.1" + "bootstrap": "v2.3.2" }, "devDependencies": { "angular-mocks": "~1.2.1" From 44a82c71e21bee8c3668b41edb6231f8791a525e Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 17 Nov 2013 07:40:19 -0600 Subject: [PATCH 008/116] Remove bland/harsh border styling on eggs and avatar options. Falls back to a button look that's much nicer. --- public/css/customizer.styl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/css/customizer.styl b/public/css/customizer.styl index fd9391fa9d..1bb04b43ba 100644 --- a/public/css/customizer.styl +++ b/public/css/customizer.styl @@ -22,7 +22,7 @@ menu line-height: 2 .customize-option - border: 1px solid grey; +// border: 1px solid grey; background-color: hsl(0, 0%, 93%); margin-bottom: 10px From cb64ab5a7d5a605dbd6c91d53ea4c7b0ae4d6dfe Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 17 Nov 2013 08:09:23 -0600 Subject: [PATCH 009/116] Make it easier for people to find "how to contribute" wiki page --- views/options/social/tavern.jade | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/views/options/social/tavern.jade b/views/options/social/tavern.jade index 0fad9b0fe0..eded297e3a 100644 --- a/views/options/social/tavern.jade +++ b/views/options/social/tavern.jade @@ -47,10 +47,12 @@ // Player Tiers .modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;') .modal-header - h3 Player Tier Legend + h3 Player Tiers .modal-body small. - Click labels to expand. See contribution details. + Click tier labels below for more information.
+ Learn more about contributor rewards
+ Learn how to contribute to HabitRPG table.table.table-striped tr td From 75ce46d4af2c0b5bf5ca8dd9006adbbb96626378 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 17 Nov 2013 16:12:25 +0100 Subject: [PATCH 010/116] moment version consistent with habitrpg-shared --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a91d8b5289..e1c1945076 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "express": "*", "gzippo": "*", "guid": "*", - "moment": "*", + "moment": "~2.4.0", "stripe": "*", "coffee-script": "*", "nconf": "*", From 6cc41c47c7b4096362e39ac9bc47facaf3ca5f6c Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 17 Nov 2013 09:36:38 -0600 Subject: [PATCH 011/116] Work on standardizing terminology --- locales/en/app.json | 2 +- public/js/controllers/tasksCtrl.js | 4 ++-- views/options/inventory/inventory.jade | 6 +++--- views/shared/modals/death.jade | 2 +- views/shared/profiles/stats.jade | 30 +++++++++++++------------- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index cd12c0bf54..4325d5775f 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -353,7 +353,7 @@ "_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!", + "deathText" : "You've lost your Gold, 1 level and 1 gear piece. Be sure to complete your dailies to prevent this from happening again!", "_commentgems" : "GEMS", "gems" : "Gems", diff --git a/public/js/controllers/tasksCtrl.js b/public/js/controllers/tasksCtrl.js index 5b599e9473..975907d499 100644 --- a/public/js/controllers/tasksCtrl.js +++ b/public/js/controllers/tasksCtrl.js @@ -6,7 +6,7 @@ habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User', ' $scope.score = function(task, direction) { if (task.type === "reward" && User.user.stats.gp < task.value){ - return Notification.text('Not enough GP.'); + return Notification.text('Not enough Gold!'); } Algos.score(User.user, task, direction); User.log({op: "score",data: task, dir: direction}); @@ -123,7 +123,7 @@ habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User', ' Notification.text("Item purchased."); updateStore(); } else { - Notification.text("Not enough GP."); + Notification.text("Not enough Gold!"); } }; diff --git a/views/options/inventory/inventory.jade b/views/options/inventory/inventory.jade index f74df36c94..af97b0596e 100644 --- a/views/options/inventory/inventory.jade +++ b/views/options/inventory/inventory.jade @@ -47,11 +47,11 @@ script(type='text/ng-template', id='partials/options.inventory.inventory.html') | Welcome to the Market. Dying to get that particular pet you're after, but don't want to wait for it to drop? Buy it here! If you have unwanted drops, sell them to me. p button.btn.btn-primary(ng-show='selectedEgg', ng-click='sellInventory()') - | Sell {{selectedEgg.name}} for {{selectedEgg.value}} GP + | Sell {{selectedEgg.name}} for {{selectedEgg.value}} Gold button.btn.btn-primary(ng-show='selectedPotion', ng-click='sellInventory()') - | Sell {{selectedPotion.name}} for {{selectedPotion.value}} GP + | Sell {{selectedPotion.name}} for {{selectedPotion.value}} Gold button.btn.btn-primary(ng-show='selectedFood', ng-click='sellInventory()') - | Sell {{selectedFood.name}} for {{selectedFood.value}} GP + | Sell {{selectedFood.name}} for {{selectedFood.value}} Gold menu.inventory-list(type='list') li.customize-menu diff --git a/views/shared/modals/death.jade b/views/shared/modals/death.jade index 6947b49947..b6b0017d25 100644 --- a/views/shared/modals/death.jade +++ b/views/shared/modals/death.jade @@ -12,4 +12,4 @@ div(modal='user.stats.hp <= 0', options='{backdrop:true, keyboard:false, backdro a.btn.btn-danger.btn-large.notification-action(ng-click='User.revive()') Continue .span8 p - | You've lost a level, all your gold, and a random piece of equipment. Arise, Habiteer, and try again! Curb those negative Habits, be vigilant in completion of Dailies, and hold death at arm's length with a Potion if you falter! + | You've lost a Level, all your Gold, and a random piece of Gear. Arise, Habiteer, and try again! Curb those negative Habits, be vigilant in completion of Dailies, and hold death at arm's length with a Health Potion if you falter! diff --git a/views/shared/profiles/stats.jade b/views/shared/profiles/stats.jade index 0c87b8136b..a4dee982bd 100644 --- a/views/shared/profiles/stats.jade +++ b/views/shared/profiles/stats.jade @@ -1,42 +1,42 @@ -h4 Items +h4 Gear p strong {{itemText('weapon',profile.items.weapon)}} - | : {{itemStat('weapon',profile.items.weapon)}}% Exp gain + | : {{itemStat('weapon',profile.items.weapon)}} Attack p strong {{itemText('armor',profile.items.armor)}} - | : {{itemStat('armor',profile.items.armor)}}% Defense + | : {{itemStat('armor',profile.items.armor)}} Protection p strong {{itemText('head',profile.items.head)}} - | : {{itemStat('head',profile.items.head)}}% Defense + | : {{itemStat('head',profile.items.head)}} Protection p strong {{itemText('shield',profile.items.shield)}} - | : {{itemStat('shield',profile.items.shield)}}% Defense + | : {{itemStat('shield',profile.items.shield)}} Protection h4 Stats p - strong HP + strong Health | : {{profile.stats.hp | number:0}} / 50 p - strong GP + strong Gold | : {{profile.stats.gp | number:0}} p - strong Lvl + strong Level | : {{profile.stats.lvl}} p - strong Exp + strong Experience | : {{profile.stats.exp | number:0}} / {{tnl(profile.stats.lvl)}} p strong Strength - | : {{userStr(profile.stats.lvl)}} + | (Level-1)/2: {{userStr(profile.stats.lvl)}} p strong Defense - | : {{userDef(profile.stats.lvl)}} + | (Level-1)/2: {{userDef(profile.stats.lvl)}} p strong Pets Found | : {{countExists(profile.items.pets)}} hr p - strong Total Strength - | : {{totalStr(profile.stats.lvl, profile.items.weapon)}} % + strong Total Experience Boost + | (Attack + Strength): {{totalStr(profile.stats.lvl, profile.items.weapon)}} % p - strong Total Defense - | : {{totalDef(profile.stats.lvl, profile.items.armor, profile.items.head, profile.items.shield)}} % \ No newline at end of file + strong Total Damage Reduction + | (Defense + Protection): {{totalDef(profile.stats.lvl, profile.items.armor, profile.items.head, profile.items.shield)}} % \ No newline at end of file From 450e154948037d1a2868d75e314370db6b88570c Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 17 Nov 2013 10:01:27 -0600 Subject: [PATCH 012/116] On further thought, "Equipment" is better than "Gear." Also fixed a typo. --- locales/en/app.json | 4 ++-- views/shared/modals/death.jade | 2 +- views/shared/profiles/stats.jade | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 4325d5775f..f068b817c5 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -353,7 +353,7 @@ "_commentdeathstuff" : "DEATH", "deathTitle" : "You Died!", - "deathText" : "You've lost your Gold, 1 level and 1 gear piece. Be sure to complete your dailies to prevent this from happening again!", + "deathText" : "You've lost your Gold, 1 Level, and 1 piece of Equipment. Be sure to complete your Dailies to prevent this from happening again!", "_commentgems" : "GEMS", "gems" : "Gems", @@ -375,7 +375,7 @@ "legalTerms" : "Terms", "footerCommunity" : "Community", "communityBugs" : "Submit Bugs", - "communityFeatures" : "Request Feautres", + "communityFeatures" : "Request Features", "communityExtensions" : "Add-ons / Extensions", "communityForum" : "Community Forum", "footerSocial" : "Social", diff --git a/views/shared/modals/death.jade b/views/shared/modals/death.jade index b6b0017d25..3384ccbfe9 100644 --- a/views/shared/modals/death.jade +++ b/views/shared/modals/death.jade @@ -12,4 +12,4 @@ div(modal='user.stats.hp <= 0', options='{backdrop:true, keyboard:false, backdro a.btn.btn-danger.btn-large.notification-action(ng-click='User.revive()') Continue .span8 p - | You've lost a Level, all your Gold, and a random piece of Gear. Arise, Habiteer, and try again! Curb those negative Habits, be vigilant in completion of Dailies, and hold death at arm's length with a Health Potion if you falter! + | You've lost a Level, all your Gold, and a random piece of Equipment. Arise, Habiteer, and try again! Curb those negative Habits, be vigilant in completion of Dailies, and hold death at arm's length with a Health Potion if you falter! diff --git a/views/shared/profiles/stats.jade b/views/shared/profiles/stats.jade index a4dee982bd..364adbc2e5 100644 --- a/views/shared/profiles/stats.jade +++ b/views/shared/profiles/stats.jade @@ -1,4 +1,4 @@ -h4 Gear +h4 Equipment p strong {{itemText('weapon',profile.items.weapon)}} | : {{itemStat('weapon',profile.items.weapon)}} Attack From b701e2b24af00ff1cd78fc7cf516b635a040ae7d Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 17 Nov 2013 10:21:43 -0600 Subject: [PATCH 013/116] Go with the borderless option --- public/css/customizer.styl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/css/customizer.styl b/public/css/customizer.styl index 1bb04b43ba..021048869c 100644 --- a/public/css/customizer.styl +++ b/public/css/customizer.styl @@ -22,7 +22,7 @@ menu line-height: 2 .customize-option -// border: 1px solid grey; + border: 0px solid grey; background-color: hsl(0, 0%, 93%); margin-bottom: 10px From 5fffc32ad330f692c1b1c92b671d2328aa5929cb Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sun, 17 Nov 2013 11:09:31 -0800 Subject: [PATCH 014/116] [#1844] some tasks have their "type" incorrectly set. I need to find out what's causing this, for now fix in database --- migrations/20131117_fix_task_types.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 migrations/20131117_fix_task_types.js diff --git a/migrations/20131117_fix_task_types.js b/migrations/20131117_fix_task_types.js new file mode 100644 index 0000000000..14d86cb55f --- /dev/null +++ b/migrations/20131117_fix_task_types.js @@ -0,0 +1,18 @@ +// TODO figure out why this is happening in the first place + +db.users.find({},{habits:1, dailys:1, todos:1, rewards:1}).forEach(function(user){ + _.each(user.habits, function(task){ + task.type = 'habit'; + }) + _.each(user.dailys, function(task){ + task.type = 'daily'; + }) + _.each(user.todos, function(task){ + task.type = 'todo'; + }) + _.each(user.rewards, function(task){ + task.type = 'reward'; + }) + + db.users.update({_id:user._id}, {$set:{habits: user.habits, dailys: user.dailys, todos: user.todos, rewards: user.rewards}}); +}); From a81e77f0ff4427258ee7859c06520cbe622d37bf Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 17 Nov 2013 20:52:39 +0100 Subject: [PATCH 015/116] update chat messages timestamp --- public/js/directives/directives.js | 13 +++++++++++++ views/options/social/chat-message.jade | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/public/js/directives/directives.js b/public/js/directives/directives.js index 95e136a997..fa8d58b622 100644 --- a/public/js/directives/directives.js +++ b/public/js/directives/directives.js @@ -153,3 +153,16 @@ habitrpg } }]); +habitrpg.directive('fromNow', ['$interval', function($interval){ + return function(scope, element, attr){ + var updateText = function(){ element.text(moment(scope.message.timestamp).fromNow()) }; + updateText(); + // Update the counter every 60secs if was sent less than one hour ago otherwise every hour + // OPTIMIZATION, every time the interval is run, update the interval time + var intervalTime = moment().diff(scope.message.timestamp, 'minute') < 60 ? 60000 : 3600000; + var interval = $interval(function(){ updateText() }, intervalTime, false); + scope.$on('$destroy', function() { + $interval.cancel(interval); + }); + } +}]); diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index f94d2820ea..8c0dfa08db 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -4,7 +4,7 @@ li(ng-repeat='message in group.chat', ng-class='{highlight: isUserMentioned(user |   span(ng-bind-html="message.text | linky:'_blank'") |  -  - span.muted.time - | {{moment(message.timestamp).fromNow() + ' '}} + span.muted.time(from-now='message.timestamp') a(ng-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') + | i.icon-remove(tooltip='Delete') From 7d5da13f6db812d58b5108a5b0277c952f77cb08 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 17 Nov 2013 21:20:43 +0100 Subject: [PATCH 016/116] small performance fix --- views/shared/tasks/lists.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/tasks/lists.jade b/views/shared/tasks/lists.jade index df20e2d6ee..b4e5da4c66 100644 --- a/views/shared/tasks/lists.jade +++ b/views/shared/tasks/lists.jade @@ -45,7 +45,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") include ./task // Static Rewards - ul.items(ng-show='main && list.type=="reward" && user.flags.itemsEnabled') + ul.items(ng-if='main && list.type=="reward" && user.flags.itemsEnabled') li.task.reward-item(ng-hide='item.hide', ng-repeat='item in itemStore') // right-hand side control buttons .task-meta-controls From 7cae5b6d482827607c953c6614f2bf4a39bfefc1 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 17 Nov 2013 22:59:42 +0100 Subject: [PATCH 017/116] hotfix for minification issues --- Gruntfile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Gruntfile.js b/Gruntfile.js index c1bf9a461a..3ea64fbf1f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -99,6 +99,7 @@ module.exports = function(grunt) { }); }); grunt.config.set('uglify.build.files', uglify); + grunt.config.set('uglify.build.options', {compress: false}) grunt.config.set('cssmin.build.files', cssmin); }); From f64ca7d4d0e1367e8fb7ba57dbda4892fe81eb4a Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sun, 17 Nov 2013 19:40:43 -0800 Subject: [PATCH 018/116] translations: adding slovene (thanks @mrgoodwrong !) --- locales/sl/app.json | 413 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 413 insertions(+) create mode 100644 locales/sl/app.json diff --git a/locales/sl/app.json b/locales/sl/app.json new file mode 100644 index 0000000000..d8881d6293 --- /dev/null +++ b/locales/sl/app.json @@ -0,0 +1,413 @@ +{ + + "languageName": "Slovene", + "stringNotFound": "String not found.", + + + "_commentfrontpage":"HABITRPG FRONT PAGE", + "synopsis" : "Program za pridobivanje navad, s katerim tvoje ûivljenje postane igra igranja vlog. Z uspehi tvoj lik raste, z neuspehi izgubi del zdravja, s prisluûenim denarjem pa lahko kupiö oroûje in oklep.", + "playButton" : "Igraj", + + + + "_commenttut": "TUTORIAL/TOUR", + "endTourButton": "KonËaj predstavitev", + "nextButton" : "Naprej", + "prevButton" : "Nazaj", + "tour1Title" : "Dobrodoöel pri HabitRPG", + "tour1Text" : "Dobrodoöel pri HabitRPG, programu, ki spremlja tvoje navade v stilu igre igranja vlog.", + "tour2Title" : "Navade", + "tour2Text" : "S programom ves Ëas spremljaö dobre in slabe navade.", + "tour3Title" : "Dnevne naloge", + "tour3Text" : "Dnevne naloge moraö opraviti vsak dan enkrat.", + "tour4Title" : "Opravki", + "tour4Text" : "Opravki so naloge, ki jih moraö opraviti samo enkrat. ", + "tour5Title" : "Nagrade", + "tour5Text" : "Z opravljenimi nalogami si prisluûiö zlato, s katerim lahko kupiö nagrade. Kupuj jih pogosto, saj so pomembne pri pridobivanju novih navad. ", + "tour6Title" : "Poglej komentarje", + "tour6Text" : "DoloËene vrste nalog imajo posebne lastnosti. Ogledaö si jih tako, da kazalec miöke postaviö nad njihov komentar. Ko ûeliö zaËeti, izbriöi obstojeËe naloge in dodaj svoje.", + + + + "_commentdefaulttasks":"DEFAULT TASKS", + "habit1" : "1h produktivno delo", + "habit1comment": "-- Navade program spremlja ves Ëas -- Pri doloËenih nalogah je smiselno samo *pridobivanje* toËk (kot pri tej)", + "habit2" : "Jedel nezdravo hrano", + "habit2comment" : "Pri drugih je smiselno samo *izgubljanje* toËk", + "habit3" : "äel po stopnicah", + "habit3comment" : "Pri ostalih lahko uporabiö tako + kot tudi - (stopnice = pridobiö, dvigalo = izgubiö)", + "daily1" : "1h osebni projekt", + "daily1comment" : "-- Dnevne naloge je treba opraviti enkrat na dan -- Ko se dan konËa, izgubiö toËke za vse neopravljene dnevne naloge.", + "daily2" : "Telovadba", + "daily2comment" : "»e jih opravljaö vestno, postanejo zelene, prinesejo manj denarja in izkuöenj ter odvzamejo manj zdravja, ko jih ne opraviö.", + "daily3" : "45min branje", + "daily3comment" : "»e pa jih opravljaö neredno, postanejo rdeËe. »im manjkrat jih opraviö, tem veË zlata in izkuöenj prinesejo, vendar pa so tudi bolj nevarne za zdravje lika. To te spodbudi, da jih opravljaö bolj redno.", + "todo1" : "PokliËi mamo", + "todo1comment" : "-- Opravke je treba opraviti enkrat -- Neopravljeni opravki ne ökodujejo zdravju lika, sËasoma pa postanejo vredni vedno veË, kar te spodbudi, da opraviö te zapoznele naloge.", + "reward1" : "1 epizoda Igre prestolov", + "reward1comment": "-- PrivoöËi si nagrado! -- Z opravljenimi nalogami si prisluûiö zlato, s katerim lahko kupiö nagrade. Kupuj jih pogosto, saj so pomembne pri pridobivanju novih navad.", + "reward2" : "Torta", + "reward2comment" : "Ampak samo, Ëe imaö dovolj zlata, saj boö drugaËe izgubil toËke pri zdravju.", + + "_commentdefaulttags" : "DEFAULT TAGS", + "morning" : "jutro", + "afternoon" : "popoldne", + "evening" : "veËer", + + "_commenthead": "HEADER", + "health": "Zdravje", + "experience": "Izkuönje", + "history": "Zgodovina", + "anonymous": "Neimenovan", + "level": "Level", + "tasks": "Naloge", + "loginAndReg" : "Prijava / Registracija", + "loginFacebookAlt" : "Prijava / Registracija preko Facebooka", + "login" : "Prijava", + "register" : "Registracija", + "options": "Moûnosti", + "logout": "Odjava", + + "_commentnotifcations" : "NOTIFICATIONS", + "partyNotification" : "Novo sporoËilo skupine", + + + + "_commenttaskview": "TASK VIEW", + "habits": "Navade", + "Habits": "Navade", + "newHabit": "Nova navada", + "edit": "Uredi", + "text": "Besedilo", + "extraNotes": "Opomba", + "directions/Actions": "Navodilo/Dejanje", + "advancedOptions": "Dodatne moûnosti", + "difficulty": "Teûavnost", + "difficultyHelpTitle": "Kako teûavna je naloga?", + "difficultyHelpContent": "Teûavnost pomnoûi osnovno vrednost. PriporoËamo, da veËinoma uporabljaö vgrajeni algoritem, ki prilagodi vrednost. A nekatere naloge so veliko pomembnejöe od drugih (pisanje diplome proti nitkanju zob). Klikni za veË informacij.", + "easy": "Enostavno", + "medium": "Srednje", + "hard": "Teûko", + "delete": "Zbriöi", + "progress": "Napredek", + "score": "ToËke", + "dailies": "Dnevne naloge", + "Dailies": "Dnevne naloge", + "newDaily": "Nova dnevna naloga", + "repeat": "Ponovi", + "Su": "Ne", + "M": "Po", + "T": "To", + "We": "Sr", + "Th": "»e", + "F": "Pe", + "S": "So", + "todos": "Opravki", + "Todos": "Opravki", + "newTodo": "Nov opravek", + "dueDate": "Opraviti do", + "remaining": "Preostalo", + "complete": "Opravljeno", + "rewards": "Nagrade", + "Rewards": "Nagrade", + "gold": "Zlato", + "silver": "Srebro", + "newReward": "Nova nagrada", + "price": "Cena", + "tags" : "Oznake", + "editTags" : "Uredi oznake", + "newTag" : "Nova oznaka", + "clearFilters" : "PoËisti filtre", + + + "_commentdrops" : "DROP SYSTEM", + "dropsEnabled" : "Najdbe vkljuËene!", + "dropsEnabledText1" : "Odklenil si sistem najdb! Ko zdaj opraviö nalogo, imaö majhno moûnost, da naletiö na najdbo. Ne boö verjel, ravnokar si naöel", + "dropsEnabledText2" : "jajce", + "itemDropped" : "Nova najdba", + + + + "_commentoptionsview": "OPTIONS VIEW", + "profile": "Profil", + "avatar": "Avatar", + + "head": "Glava", + "showHelm": "Pokaûi Ëelado", + "hair": "Lasje", + "skin": "Polt", + "clothing" : "OblaËila", + "photoUrl": "Spletni naslov slike", + "fullName": "Polno ime", + "blurb": "O tebi", + "items" : "Oprema", + "weapon" : "Oroûje", + "armor" : "Oklep", + "helm" : "»elada", + "shield" : "äËit", + + "stats" : "Podatki", + "strength" : "MoË", + "defense" : "Obramba", + "totalStrength" : "Skupna moË", + "totalDefense" : "Skupna obramba", + + + "party": "Skupina", + "createAParty":"Ustvari skupino", + "noPartyText": "Nisi del skupine. Lahko ustvariö svojo in povabiö prijatelje ali pa se pridruûiö ûe obstojeËi skupini. Naj uporabijo to ötevilko:", + "partyName": "Ime skupine", + "create":"Ustvari", + "userId":"ätevilka uporabnika", + "invite":"Povabi", + "leave": "Zapusti", + "invitedTo" : "Povabljen si k skupini", + "chat": "Klepet", + + "inventory": "Inventar", + "eggs": "Jajca", + "noEggs": "Naöel nisi öe nobenega jajca.", + "hatchingPotions": "Valilni napoji", + "noHatchingPotions": "Naöel nisi öe nobenega valilnega napoja.", + "hatchYourEgg" : "Naj se zverinica izvali", + "whichHatchingPotion1" : "Kateri valilni napoj ûeliö politi po", + "whichHatchingPotion2" : "jajcu?", + "pour" : "polij", + "rarePets" : "Redke zverinice", + "market": "Trgovina", + + "stable": "Hlev", + "petsFound":"najdenih zverinic", + "rarePets": "Redke zverinice", + + "tavern": "Gostilna", + "restButton":"PoËivaj v gostilni", + "checkoutButton": "Odjavi se iz gostilne", + "tavernTalkTitle":"Gostilniöki klepet in iskanje skupin", + "tavernRestingInfo" : "Medtem ko poËivaö, se dnevne naloge shranijo in ne ökodujejo zdravju lika. Lahko se odjaviö jutri ali Ëez en teden in lik bo v istem stanju kot na zaËetku poËitka.", + "resources" : "Viri", + "LFGPosts" : "Objave glede iskanja skupin", + "tutorials" : "VodiËi", + + "achievements":"Doseûki", + "achievementUnlocked" : "Nov doseûek!", + "npcText" : "Med najveËjimi podporniki pri Kickstarter projektu!", + "contribName" : "Sodelavec", + "contribText" : "Prispeval k razvoju HabitRPG-ja (programiranje, dizajn, pikslaste grafike, pravni nasveti, dokumenti itd.). éeliö to znaËko? Popravi kakönega hroöËa", + "kickstartName1" : "Podpornik pri Kickstarterju - ", + "kickstartName2" : "donacije", + "kickstartText" : "Podprl Kickstarter projekt", + "streakName" : " Niz(i) uspehov", + "streakText1" : "Dosegel ", + "stureakText2" : " 21-dnevnih nizov uspehov pri dnevnih nalogah", + "origUserName" : "Prvotni uporabnik", + "origUserText" : "Bil z nami od samega zaËetka HabitRPG-ja (kapo dol za uspeöno prebijanje skozi te hroöËaste Ëase!)", + "ultimGearName" : "Vrhunska oprema", + "ultimGearText" : "Priöel do najboljöega oroûja in oklepa", + "ultimGearUnlocked" : "Dobil si znaËko 'Vrhunska oprema', saj imaö najboljöo opremo, kar jo lahko kupi zlato!", + "beastMastName" : "äef zverinjaka", + "beastMastText" : "Naöel si vseh 90 zverinic (kar je izjemno teûko, vsa Ëast!)", + "beastMastUnlocked" : "Dobil si znaËko 'äef zverinjaka', saj si naöel vse zverinice!", + + "settings":"Nastavitve", + "customDayStart":"DoloËi zaËetek dneva", + "24HrClock": "24-urni naËin", + "clockInfo":"HabitRPG preveri in ponastavi tvoje dnevne naloge vsak dan opolnoËi. To uro lahko spremeniö tukaj (vpiöi ötevilko med 0 in 24).", + "misc":"Ostalo", + "hideHeader":"Skrij glavo", + "showHeader":"Pokaûi glavo", + "changePass":"Sprememba gesla", + "oldPass":"Staro geslo", + "newPass":"Novo geslo", + "confirmPass":"Potrditev novega gesla", + "dangerZone": "Nevarno obmoËje", + "reset":"Ponastavitev", + "resetAltText":"Ponastavitev tvojega raËuna (nevarno)", + "resetText1":"S tem gumbom ponastaviö celoten raËun - naloge bodo izbrisane, tvoj lik pa bo moral zaËeti znova.", + "resetText2":"Tega ne priporoËamo, saj boö izgubil pretekle informacije, ki ti lahko pomagajo pri spremljanju napredka. Izbris raËuna je uporaben predvsem za ljudi, ki ûelijo program najprej preizkusiti, potem pa zaËeti na novo.", + "restore":"Povrnitev", + "restoreAltText":"Povrne liku podatke", + "restoreText1":"HabitRPG je öe v fazi razvoja, zato bodo nekateri uporabniki morda primorani liku povrniti podatke. Tukaj vpiöi podatke in avtomatiËno bodo dodani tvojemu liku. Ko bo program bolj stabilen, bo ta funkcija odstranjena.", + "delete":"Brisanje", + "deleteAltText":"Brisanje raËuna", + "deleteHeader" : "Izbriöi raËun", + "deleteText1":"PoËasi! Si prepriËan? S tem boö za vedno izbrisal raËun in ne bo se ga dalo povrniti. »e si popolnoma prepriËan, vpiöi", + "deleteText2":" IZBRIäI ", + "deleteText3":"v okence", + "API":"API", + "APIText":"Kopiraj te podatke za uporabo pri aplikacijah drugih proizvajalcev.", + "APIToken":"Api ûeton", + + + + "_commentitems": "ITEMS", + "_commentitemsweps": "WEAPONS", + "sword0name" : "Vadbeni meË", + "sword1Name" : "MeË", + "sword1Text" : "PoveËa pridobivanje izkuöenj za 3%.", + "sword2Name" : "Sekira", + "sword2Text" : "PoveËa pridobivanje izkuöenj za 6%.", + "sword3Name" : "Buzdovan", + "sword3Text" : "PoveËa pridobivanje izkuöenj za 9%.", + "sword4Name" : "Modri meË", + "sword4Text" : "PoveËa pridobivanje izkuöenj za 12%.", + "sword5Name" : "RdeËi meË", + "sword5Text" : "PoveËa pridobivanje izkuöenj za 15%.", + "sword6Name" : "Zlati meË", + "sword6Text" : "PoveËa pridobivanje izkuöenj za 18%.", + + "_commentitemsarmor": "ARMOR", + "armor0Name" : "Oklep iz blaga", + "armor1Name" : "Usnjeni oklep" , + "armor1Text": "Zmanjöa izgubo zdravja za 4%", + "armor2Name" : "Veriûna srajca", + "armor2Text": "Zmanjöa izgubo zdravja za 6%", + "armor3Name" : "PloöËni oklep", + "armor3Text": "Zmanjöa izgubo zdravja za 7%", + "armor4Name" : "RdeËi oklep", + "armor4Text": "Zmanjöa izgubo zdravja za 8%", + "armor5Name" : "Zlati oklep", + "armor5Text": "manjöa izgubo zdravja za 10%", + + "_commentitemshead" : "HEADGEAR", + "head0Name" : "Brez Ëelade", + "head1Name" : "Usnjena Ëelada" , + "head1Text": "Zmanjöa izgubo zdravja za 2%", + "head2Name" : "Veriûna kapuca", + "head2Text": "Zmanjöa izgubo zdravja za 3%", + "head3Name" : "PloöËna Ëelada", + "head3Text": "Zmanjöa izgubo zdravja za 4%", + "head4Name" : "RdeËa Ëelada", + "head4Text": "Zmanjöa izgubo zdravja za 5%", + "head5Name" : "Zlata Ëelada", + "head5Text": "Zmanjöa izgubo zdravja za 6%", + + "_commentitemsshield" : "SHIELDS", + "sheild0Name" : "Brez öËita", + "sheild1Name" : "Leseni öËit", + "sheild1Text": "Zmanjöa izgubo zdravja za 3%", + "sheild2Name" : "Mali öËit", + "sheild2Text": "Zmanjöa izgubo zdravja za 4%", + "sheild3Name" : "Okrepljeni öËit", + "sheild3Text": "Zmanjöa izgubo zdravja za 5%", + "sheild4Name" : "RdeËi öËit", + "sheild4Text": "Zmanjöa izgubo zdravja za 7%", + "sheild5Name" : "Zlati öËit", + "sheild5Text": "Zmanjöa izgubo zdravja za 8%", + + "_commentitemsother" : "OTHER ITEMS", + "healthPotionName" : "Zdravilni napoj", + "healthPotionNotes" : "Takoj povrne 15 toËk pri zdravju", + "rerollName" : "Ponastavitev nalog", + "rerollNotes" : "Naloge spet postanejo rumene. To je uporabno, ko so vse naloge rdeËe in je teûko ostati ûiv.", + "rerollModelHeader" : "Ponastavi naloge", + "rerollModelText1" : "To moËno odsvetujemo, saj rdeËe naloge spodbujajo k izboljöavanju", + "rerollModelText2" : "beri naprej", + "rerollModelText3" : "Vendar pa to postane nujno po daljöem obdobju slabih navad.", + + "_commentitemspeteggs": "PET EGGS", + "wolfEgg": "Mladi volk", + "tigerEgg": "Mladi tiger", + "pandaEgg": "Mladi panda", + "lionEgg": "Mladi lev", + "foxEgg": "Lisjak", + "pigEgg": "LeteËi pujs", + "dragonEgg": "Zmaj", + "cactusEgg": "Kaktus", + "bearEgg": "Mladi medved", + + "_commentitemshatchingpotions": "HATCHING POTIONS", + "basePotName": "Osnovni", + "basePotText" : "Iz jajca se izvali osnovna zverinica.", + "whitePotName": "Beli", + "whitePotText" : "Iz jajca se izvali bela zverinica.", + "desertPotName": "PuöËavski", + "desertPotText" : "Iz jajca se izvali puöËavska zverinica.", + "redPotName": "RdeËi", + "redPotText" : "Iz jajca se izvali rdeËa zverinica.", + "shadePotName": "SenËni", + "shadePotText" : "Iz jajca se izvali senËna zverinica.", + "skeletonPotName": "Skeletni", + "skeletonPotText" : "Iz jajca se izvali skeletna zverinica.", + "zombiePotName": "Zombijski", + "zombiePotText" : "Iz jajca se izvali zombijska zverinica.", + "cottonPinkPotName": "Svetlo roza", + "cottonPinkPotText" : "Iz jajca se izvali svetlo roza zverinica.", + "cottonBluePotName": "Svetlo modri", + "cottonBluePotText" : "Iz jajca se izvali svetlo modra zverinica.", + "goldenPotName": "Zlati", + "goldenPotText" : "Iz jajca se izvali zlata zverinica.", + + + + "_commentnpcsandchars": "NPCS & CHARACTERS", + "_commentNPCS" : "NPCS", + "NPCBaileyText1" : "mestna klicarka tukaj! Oznanjam nekaj novosti!", + "NPCAugustinText1" : "Dobrodoöel v trgovini! Jaz sem trgovec;", + "NPCAugustinText2" : "»e si neznansko ûeliö neke zverinice, a noËeö Ëakati, da jo najdeö, jo lahko kupiö tukaj.", + "NPCJohanssonText1" : "Dobrodoöel v gostilni! Jaz sem", + "NPCJohanssonText2": "toËaj. »e hoËeö malo poËiti (Greö na poËitnice? Si zbolel?), ti bom pripravil posteljo - v tem Ëasu ti neopravljene dnevne naloge ne bodo ökodovale. Usedi se in spoznaj domaËine.", + "NPCMelchiorText1" : "", + "NPCBowenText1" : "", + "NPCBochText1" : "", + + "_commentdeathstuff" : "DEATH", + "deathTitle" : "Umrl si!", + "deathText" : "Izgubil si vso zlato, en level in en kos opreme. Pridno opravljaj dnevne naloge, da se to ne bo ponovilo!", + + "_commentgems" : "GEMS", + "gems" : "Dragulji", + "outOfGems" : "Zmanjkalo dragljev", + "buyMoreGems" : "Kupi veË draguljev", + "notEnoughGems" : "Nimaö dovolj draguljev", + "petsOutOfGems" : "Zmanjkalo ti je draguljev, s katerimi lahko kupiö posebne predmete! HabitRPG je odprtokodni projekt in tvoja pomoË je zelo dobrodoöla - kupi veË draguljev, da lahko dobiö to zverinico, s tem pa tudi pomagaö ustvarjalcem", + "gemsWhatFor" : "Z njimi lahko kupiö posebne predmete (ponastavitev nalog, jajca, valilni napoji itd.). Vendar pa moraö te funkcije najprej odkleniti.", + + "_commentfooter": "FOOTER", + "footerCompany" : "Podjetje", + "companyAbout" : "O nas", + "companyBlog" : "Blog", + "companyTeam" : "Ekipa", + "companyExtensions" : "Podaljöki", + "companyFAQ" : "Pogosta vpraöanja", + "footerLegal" : "Pravno obvestilo", + "legalPrivacy" : "Varovanje podatkov", + "legalTerms" : "Pravni pogoji", + "footerCommunity" : "Skupnost", + "communityBugs" : "Oddaj poroËilo o hroöËu", + "communityFeatures" : "Zahtevaj novo funkcijo", + "communityExtensions" : "Dodatki / Podaljöki", + "communityForum" : "Forum", + "footerSocial" : "Druûbena omreûja", + + + + "_commentmisc": "MISC & GLOBAL", + "removeAds": "Odstrani reklame", + "whyAds": "Zakaj reklame?", + "whyAdsContent1": "HabitRPG je odprtokodni projekt in tvoja pomoË je zelo dobrodoöla - z donacijo pomagaö ustvarjalcem, prejmeö pa tudi 20 draguljev, s katerimi lahko kupiö posebne predmete.", + + "whyAdsContent2": "'Podprl sem vas pri Kickstarterju!' - sledi", + "whyAdsContent3": "tem navodilom", + "_commentbuttons": "BUTTONS", + "submit":"Poölji", + "close":"Zapri", + "saveAndClose": "Shrani in zapri", + "cancel":"PrekliËi", + "ok" : "V redu", + "add" : "Dodaj", + "undo" : "Razveljavi", + "continue" : "Nadaljuj", + "accept" : "Sprejmi", + "reject" : "PrekliËi", + "or" : "Ali", + "_commenttimestamps":"TIME STAMPS", + "justNow":"Pravkar", + "aMinuteAgo":"Pred eno minuto", + "minutesAgo":"minut nazaj", + "anHourAgo": "Pred eno uro", + "hoursAgo": "ur nazaj", + "yesterday":"VËeraj", + "daysAgo":"dni nazaj" + +} \ No newline at end of file From 30d6f6c4d82e31d29d18ac4b59bd434032c3b22e Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sun, 17 Nov 2013 21:17:58 -0700 Subject: [PATCH 019/116] [#1789] remove all undefined pets once and for all --- migrations/20131117_remove_undefined_pets.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 migrations/20131117_remove_undefined_pets.js diff --git a/migrations/20131117_remove_undefined_pets.js b/migrations/20131117_remove_undefined_pets.js new file mode 100644 index 0000000000..f908621a75 --- /dev/null +++ b/migrations/20131117_remove_undefined_pets.js @@ -0,0 +1,12 @@ +// once and for all! + +db.users.find({'items.pets':{$exists:1}},{'items.pets':1}).forEach(function(user){ + _.reduce(user.items.pets, function(m,v,k){ + if (!k.indexOf('undefined')) m.push(k); + return m; + }, []).forEach(function(key){ + delete user.items.pets[key]; + }) + + db.users.update({_id:user._id}, { $set:{'items.pets':user.items.pets} }); +}); From fc352ec2c4fc3c94d9ea10fbd62f3f5619d2d778 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sun, 17 Nov 2013 22:22:58 -0700 Subject: [PATCH 020/116] [#1732] temporarily allow restore-streak on challenge tasks --- views/shared/tasks/task.jade | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index c20f601c58..351246c182 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -156,7 +156,8 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!" || !task.priority}', ng-click='task.challenge.id || (task.priority="!")') Easy button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!"}', ng-click='task.challenge.id || (task.priority="!!")') Medium button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!!"}', ng-click='task.challenge.id || (task.priority="!!!")') Hard - span(ng-if='task.type=="daily" && !task.challenge.id') + //-span(ng-if='task.type=="daily" && !task.challenge.id') + span(ng-if='task.type=="daily"') legend.option-title Restore Streak input.option-content(type='number', ng-model='task.streak') button.task-action-btn.tile.spacious(type='submit') Save & Close From 47a630d660e6893865c736e00993878d0ccf396a Mon Sep 17 00:00:00 2001 From: Felix Date: Mon, 18 Nov 2013 10:04:15 +0100 Subject: [PATCH 021/116] Update app.json Minor changes and correctness checks. --- locales/it/app.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/locales/it/app.json b/locales/it/app.json index d7b97197a0..8b84bfd77b 100644 --- a/locales/it/app.json +++ b/locales/it/app.json @@ -4,7 +4,7 @@ "_commentfrontpage":"HABITRPG FRONT PAGE", - "synopsis" : "Un programma per trattare le proprie abitudini come in un Gioco di Ruolo. Sali di livello se ci riesci, perdi HP se fallisci, guadagna soldi per comprare armi ed armature.", + "synopsis" : "Un programma per gestire le proprie abitudini come in un Gioco di Ruolo. Sali di livello se ci riesci, perdi HP se fallisci, guadagna soldi per comprare armi ed armature.", "playButton" : "Gioca", @@ -20,11 +20,11 @@ "tour3Title" : "Dailies", "tour3Text" : "Le Dailies sono le attività che vuoi completare una volta al giorno.", "tour4Title" : "Todos", - "tour4Text" : "I Todos sono obiettivi unici che devono essere completati alla fine.", + "tour4Text" : "I Todos sono gli obiettivi personali che vuoi completare.", "tour5Title" : "Ricompense", "tour5Text" : "Quando completi i tuoi obiettivi, guadagni oro per comprare ricompense. Comprale liberamente - le ricompense sono fondamentali per formare buone abitudini.", "tour6Title" : "Passa il mouse sopra i commenti", - "tour6Text" : "Diversi tipi di attività hanno proprietà sperciali. Passa il mouse sopra i commenti per maggiori informazioni. Quando sei pronto per cominciare, cancella le attività esistenti ed aggiungine di nuove.", + "tour6Text" : "Diversi tipi di attività hanno proprietà speciali. Passa il mouse sopra i commenti per maggiori informazioni. Quando sei pronto per cominciare, cancella le attività esistenti ed aggiungine di nuove.", @@ -183,7 +183,7 @@ "tavernTalkTitle":"Chiacchiera nella Taverna & LFG", "tavernRestingInfo" : "Mentre riposi le tue dailies sono salvate e non verranno modificate dal cambio di giorno. Puoi tornare domani o in una settimana, troverai tutto come l'hai lasciato.", "resources" : "Risorse", - "LFGPosts" : "Messaggi LGF", + "LFGPosts" : "Messaggi LFG", "tutorials" : "Tutorials", "achievements":"Obiettivi", @@ -280,7 +280,7 @@ "head5Text": "Riduce gli HP persi del 6%", "_commentitemsshield" : "SHIELDS", - "sheild0Name" : "Nessuno Scuso", + "sheild0Name" : "Nessuno Scudo", "sheild1Name" : "Scudo di Legno", "sheild1Text": "Riduce gli HP persi del 3%", "sheild2Name" : "Brocchiero", @@ -344,7 +344,7 @@ "NPCAugustinText1" : "Benvenuti al mercato! Io sono il mercante;", "NPCAugustinText2" : "Morite dalla voglia di avere quel particolare animale, ma non volete aspettare di trovarlo ? Compratelo qui!", "NPCJohanssonText1" : "Benvenuti alla Locanda! Io sono", - "NPCJohanssonText2": "l'oste. Se vuoi riposare per un po' (vai in vacanca? malattia improvvisa?), ti sistemo in locanda - le dailies non ti faranno male mentre riposi. Rimani un po' & incontra la gente del posto.", + "NPCJohanssonText2": "l'oste. Se vuoi riposare per un po' (vai in vacanca? malattia improvvisa?), ti sistemo in locanda - le dailies non ti faranno male mentre riposi. Rimani un po' e incontra la gente del posto.", "NPCMelchiorText1" : "", "NPCBowenText1" : "", "NPCBochText1" : "", @@ -384,7 +384,7 @@ "removeAds": "Rimuovi gli Ads", "whyAds": "Perché gli Ads?", "whyAdsContent1": "Habit è un progetto open source, e può usare tutto l'aiuto che può ottenere - considerala una donazione ai collaboratori. Riceverai anche 20 Gemme dall'acquisto, con le quali puoi comprare oggetti speciali.", - "whyAdsContent2": "'Hey, Ho sostenuto il progetto su Kickstarter!' - segui", + "whyAdsContent2": "'Hey, ho sostenuto il progetto su Kickstarter!' - segui", "whyAdsContent3": "queste istruzioni", "_commentbuttons": "BUTTONS", "submit":"Invia", From 557d65a6263b4368c63f580d1c716cf0d304d06a Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 18 Nov 2013 16:18:57 +0100 Subject: [PATCH 022/116] do not count rare pets into pet counts & fix beast master achievement --- public/js/controllers/inventoryCtrl.js | 6 ++++-- public/js/controllers/notificationCtrl.js | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/public/js/controllers/inventoryCtrl.js b/public/js/controllers/inventoryCtrl.js index 2d60a5d9dd..dfb67d12fb 100644 --- a/public/js/controllers/inventoryCtrl.js +++ b/public/js/controllers/inventoryCtrl.js @@ -7,13 +7,15 @@ habitrpg.controller("InventoryCtrl", ['$rootScope', '$scope', 'User', 'API_URL', $scope.selectedEgg = null; // {index: 1, name: "Tiger", value: 5} $scope.selectedPotion = null; // {index: 5, name: "Red", value: 3} - $scope.petCount = _.size(User.user.items.pets); + $scope.petCount = window.habitrpgShared.helpers.countPets(null, User.user.items.pets); $scope.totalPets = _.size($scope.Items.eggs) * _.size($scope.Items.hatchingPotions); // count egg, food, hatchingPotion stack totals var countStacks = function(items) { return _.reduce(items,function(m,v){return m+v;},0);} - $scope.$watch('user.items.pets', function(pets){ $scope.petCount = $rootScope.countExists(pets); }, true); + $scope.$watch('user.items.pets', function(pets){ + window.habitrpgShared.helpers.countPets($rootScope.countExists(pets), User.user.items.pets); + }, true); $scope.$watch('user.items.mounts', function(mounts){ $scope.mountCount = $rootScope.countExists(mounts); }, true); $scope.$watch('user.items.eggs', function(eggs){ $scope.eggCount = countStacks(eggs); }, true); $scope.$watch('user.items.hatchingPotions', function(pots){ $scope.potCount = countStacks(pots); }, true); diff --git a/public/js/controllers/notificationCtrl.js b/public/js/controllers/notificationCtrl.js index 4eb64caa9b..ba9a4cc5aa 100644 --- a/public/js/controllers/notificationCtrl.js +++ b/public/js/controllers/notificationCtrl.js @@ -44,10 +44,11 @@ habitrpg.controller('NotificationCtrl', }); $rootScope.$watch('user.items.pets', function(after, before){ - if(_.size(after) === _.size(before) || _.size(after) < 90) return; + if(_.size(after) === _.size(before) || + window.habitrpgShared.helpers.countPets(null, after) < 90) return; User.user.achievements.beastMaster = true; $rootScope.modals.achievements.beastMaster = true; - }) + }, true); /*_.each(['weapon', 'head', 'chest', 'shield'], function(watched){ $rootScope.$watch('user.items.' + watched, function(before, after){ From 98f39022249876e6db1ea47a647d79aaa4b22afe Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 18 Nov 2013 17:03:09 +0100 Subject: [PATCH 023/116] deleteTag wasModified not necessary anymore --- src/controllers/user.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/controllers/user.js b/src/controllers/user.js index 560b5a7776..f581ec1d9a 100644 --- a/src/controllers/user.js +++ b/src/controllers/user.js @@ -473,9 +473,7 @@ api.deleteTag = function(req, res){ }) user.save(function(err,saved){ if (err) return res.json(500, {err: err}); - // Need to use this until we found a way to update the ui for tasks when a tag is deleted - res.locals.wasModified = true; - res.send(200); + res.send(204); }); } else { res.json(400, {err:'Tag not found'}); From f258298edac2597d07e4a35b15e232032b622929 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 18 Nov 2013 17:06:47 +0100 Subject: [PATCH 024/116] update slovene translation (@mrgoodwrong) --- locales/sl/app.json | 824 ++++++++++++++++++++++---------------------- 1 file changed, 412 insertions(+), 412 deletions(-) diff --git a/locales/sl/app.json b/locales/sl/app.json index d8881d6293..34e1db8429 100644 --- a/locales/sl/app.json +++ b/locales/sl/app.json @@ -1,413 +1,413 @@ -{ - - "languageName": "Slovene", - "stringNotFound": "String not found.", - - - "_commentfrontpage":"HABITRPG FRONT PAGE", - "synopsis" : "Program za pridobivanje navad, s katerim tvoje ûivljenje postane igra igranja vlog. Z uspehi tvoj lik raste, z neuspehi izgubi del zdravja, s prisluûenim denarjem pa lahko kupiö oroûje in oklep.", - "playButton" : "Igraj", - - - - "_commenttut": "TUTORIAL/TOUR", - "endTourButton": "KonËaj predstavitev", - "nextButton" : "Naprej", - "prevButton" : "Nazaj", - "tour1Title" : "Dobrodoöel pri HabitRPG", - "tour1Text" : "Dobrodoöel pri HabitRPG, programu, ki spremlja tvoje navade v stilu igre igranja vlog.", - "tour2Title" : "Navade", - "tour2Text" : "S programom ves Ëas spremljaö dobre in slabe navade.", - "tour3Title" : "Dnevne naloge", - "tour3Text" : "Dnevne naloge moraö opraviti vsak dan enkrat.", - "tour4Title" : "Opravki", - "tour4Text" : "Opravki so naloge, ki jih moraö opraviti samo enkrat. ", - "tour5Title" : "Nagrade", - "tour5Text" : "Z opravljenimi nalogami si prisluûiö zlato, s katerim lahko kupiö nagrade. Kupuj jih pogosto, saj so pomembne pri pridobivanju novih navad. ", - "tour6Title" : "Poglej komentarje", - "tour6Text" : "DoloËene vrste nalog imajo posebne lastnosti. Ogledaö si jih tako, da kazalec miöke postaviö nad njihov komentar. Ko ûeliö zaËeti, izbriöi obstojeËe naloge in dodaj svoje.", - - - - "_commentdefaulttasks":"DEFAULT TASKS", - "habit1" : "1h produktivno delo", - "habit1comment": "-- Navade program spremlja ves Ëas -- Pri doloËenih nalogah je smiselno samo *pridobivanje* toËk (kot pri tej)", - "habit2" : "Jedel nezdravo hrano", - "habit2comment" : "Pri drugih je smiselno samo *izgubljanje* toËk", - "habit3" : "äel po stopnicah", - "habit3comment" : "Pri ostalih lahko uporabiö tako + kot tudi - (stopnice = pridobiö, dvigalo = izgubiö)", - "daily1" : "1h osebni projekt", - "daily1comment" : "-- Dnevne naloge je treba opraviti enkrat na dan -- Ko se dan konËa, izgubiö toËke za vse neopravljene dnevne naloge.", - "daily2" : "Telovadba", - "daily2comment" : "»e jih opravljaö vestno, postanejo zelene, prinesejo manj denarja in izkuöenj ter odvzamejo manj zdravja, ko jih ne opraviö.", - "daily3" : "45min branje", - "daily3comment" : "»e pa jih opravljaö neredno, postanejo rdeËe. »im manjkrat jih opraviö, tem veË zlata in izkuöenj prinesejo, vendar pa so tudi bolj nevarne za zdravje lika. To te spodbudi, da jih opravljaö bolj redno.", - "todo1" : "PokliËi mamo", - "todo1comment" : "-- Opravke je treba opraviti enkrat -- Neopravljeni opravki ne ökodujejo zdravju lika, sËasoma pa postanejo vredni vedno veË, kar te spodbudi, da opraviö te zapoznele naloge.", - "reward1" : "1 epizoda Igre prestolov", - "reward1comment": "-- PrivoöËi si nagrado! -- Z opravljenimi nalogami si prisluûiö zlato, s katerim lahko kupiö nagrade. Kupuj jih pogosto, saj so pomembne pri pridobivanju novih navad.", - "reward2" : "Torta", - "reward2comment" : "Ampak samo, Ëe imaö dovolj zlata, saj boö drugaËe izgubil toËke pri zdravju.", - - "_commentdefaulttags" : "DEFAULT TAGS", - "morning" : "jutro", - "afternoon" : "popoldne", - "evening" : "veËer", - - "_commenthead": "HEADER", - "health": "Zdravje", - "experience": "Izkuönje", - "history": "Zgodovina", - "anonymous": "Neimenovan", - "level": "Level", - "tasks": "Naloge", - "loginAndReg" : "Prijava / Registracija", - "loginFacebookAlt" : "Prijava / Registracija preko Facebooka", - "login" : "Prijava", - "register" : "Registracija", - "options": "Moûnosti", - "logout": "Odjava", - - "_commentnotifcations" : "NOTIFICATIONS", - "partyNotification" : "Novo sporoËilo skupine", - - - - "_commenttaskview": "TASK VIEW", - "habits": "Navade", - "Habits": "Navade", - "newHabit": "Nova navada", - "edit": "Uredi", - "text": "Besedilo", - "extraNotes": "Opomba", - "directions/Actions": "Navodilo/Dejanje", - "advancedOptions": "Dodatne moûnosti", - "difficulty": "Teûavnost", - "difficultyHelpTitle": "Kako teûavna je naloga?", - "difficultyHelpContent": "Teûavnost pomnoûi osnovno vrednost. PriporoËamo, da veËinoma uporabljaö vgrajeni algoritem, ki prilagodi vrednost. A nekatere naloge so veliko pomembnejöe od drugih (pisanje diplome proti nitkanju zob). Klikni za veË informacij.", - "easy": "Enostavno", - "medium": "Srednje", - "hard": "Teûko", - "delete": "Zbriöi", - "progress": "Napredek", - "score": "ToËke", - "dailies": "Dnevne naloge", - "Dailies": "Dnevne naloge", - "newDaily": "Nova dnevna naloga", - "repeat": "Ponovi", - "Su": "Ne", - "M": "Po", - "T": "To", - "We": "Sr", - "Th": "»e", - "F": "Pe", - "S": "So", - "todos": "Opravki", - "Todos": "Opravki", - "newTodo": "Nov opravek", - "dueDate": "Opraviti do", - "remaining": "Preostalo", - "complete": "Opravljeno", - "rewards": "Nagrade", - "Rewards": "Nagrade", - "gold": "Zlato", - "silver": "Srebro", - "newReward": "Nova nagrada", - "price": "Cena", - "tags" : "Oznake", - "editTags" : "Uredi oznake", - "newTag" : "Nova oznaka", - "clearFilters" : "PoËisti filtre", - - - "_commentdrops" : "DROP SYSTEM", - "dropsEnabled" : "Najdbe vkljuËene!", - "dropsEnabledText1" : "Odklenil si sistem najdb! Ko zdaj opraviö nalogo, imaö majhno moûnost, da naletiö na najdbo. Ne boö verjel, ravnokar si naöel", - "dropsEnabledText2" : "jajce", - "itemDropped" : "Nova najdba", - - - - "_commentoptionsview": "OPTIONS VIEW", - "profile": "Profil", - "avatar": "Avatar", - - "head": "Glava", - "showHelm": "Pokaûi Ëelado", - "hair": "Lasje", - "skin": "Polt", - "clothing" : "OblaËila", - "photoUrl": "Spletni naslov slike", - "fullName": "Polno ime", - "blurb": "O tebi", - "items" : "Oprema", - "weapon" : "Oroûje", - "armor" : "Oklep", - "helm" : "»elada", - "shield" : "äËit", - - "stats" : "Podatki", - "strength" : "MoË", - "defense" : "Obramba", - "totalStrength" : "Skupna moË", - "totalDefense" : "Skupna obramba", - - - "party": "Skupina", - "createAParty":"Ustvari skupino", - "noPartyText": "Nisi del skupine. Lahko ustvariö svojo in povabiö prijatelje ali pa se pridruûiö ûe obstojeËi skupini. Naj uporabijo to ötevilko:", - "partyName": "Ime skupine", - "create":"Ustvari", - "userId":"ätevilka uporabnika", - "invite":"Povabi", - "leave": "Zapusti", - "invitedTo" : "Povabljen si k skupini", - "chat": "Klepet", - - "inventory": "Inventar", - "eggs": "Jajca", - "noEggs": "Naöel nisi öe nobenega jajca.", - "hatchingPotions": "Valilni napoji", - "noHatchingPotions": "Naöel nisi öe nobenega valilnega napoja.", - "hatchYourEgg" : "Naj se zverinica izvali", - "whichHatchingPotion1" : "Kateri valilni napoj ûeliö politi po", - "whichHatchingPotion2" : "jajcu?", - "pour" : "polij", - "rarePets" : "Redke zverinice", - "market": "Trgovina", - - "stable": "Hlev", - "petsFound":"najdenih zverinic", - "rarePets": "Redke zverinice", - - "tavern": "Gostilna", - "restButton":"PoËivaj v gostilni", - "checkoutButton": "Odjavi se iz gostilne", - "tavernTalkTitle":"Gostilniöki klepet in iskanje skupin", - "tavernRestingInfo" : "Medtem ko poËivaö, se dnevne naloge shranijo in ne ökodujejo zdravju lika. Lahko se odjaviö jutri ali Ëez en teden in lik bo v istem stanju kot na zaËetku poËitka.", - "resources" : "Viri", - "LFGPosts" : "Objave glede iskanja skupin", - "tutorials" : "VodiËi", - - "achievements":"Doseûki", - "achievementUnlocked" : "Nov doseûek!", - "npcText" : "Med najveËjimi podporniki pri Kickstarter projektu!", - "contribName" : "Sodelavec", - "contribText" : "Prispeval k razvoju HabitRPG-ja (programiranje, dizajn, pikslaste grafike, pravni nasveti, dokumenti itd.). éeliö to znaËko? Popravi kakönega hroöËa", - "kickstartName1" : "Podpornik pri Kickstarterju - ", - "kickstartName2" : "donacije", - "kickstartText" : "Podprl Kickstarter projekt", - "streakName" : " Niz(i) uspehov", - "streakText1" : "Dosegel ", - "stureakText2" : " 21-dnevnih nizov uspehov pri dnevnih nalogah", - "origUserName" : "Prvotni uporabnik", - "origUserText" : "Bil z nami od samega zaËetka HabitRPG-ja (kapo dol za uspeöno prebijanje skozi te hroöËaste Ëase!)", - "ultimGearName" : "Vrhunska oprema", - "ultimGearText" : "Priöel do najboljöega oroûja in oklepa", - "ultimGearUnlocked" : "Dobil si znaËko 'Vrhunska oprema', saj imaö najboljöo opremo, kar jo lahko kupi zlato!", - "beastMastName" : "äef zverinjaka", - "beastMastText" : "Naöel si vseh 90 zverinic (kar je izjemno teûko, vsa Ëast!)", - "beastMastUnlocked" : "Dobil si znaËko 'äef zverinjaka', saj si naöel vse zverinice!", - - "settings":"Nastavitve", - "customDayStart":"DoloËi zaËetek dneva", - "24HrClock": "24-urni naËin", - "clockInfo":"HabitRPG preveri in ponastavi tvoje dnevne naloge vsak dan opolnoËi. To uro lahko spremeniö tukaj (vpiöi ötevilko med 0 in 24).", - "misc":"Ostalo", - "hideHeader":"Skrij glavo", - "showHeader":"Pokaûi glavo", - "changePass":"Sprememba gesla", - "oldPass":"Staro geslo", - "newPass":"Novo geslo", - "confirmPass":"Potrditev novega gesla", - "dangerZone": "Nevarno obmoËje", - "reset":"Ponastavitev", - "resetAltText":"Ponastavitev tvojega raËuna (nevarno)", - "resetText1":"S tem gumbom ponastaviö celoten raËun - naloge bodo izbrisane, tvoj lik pa bo moral zaËeti znova.", - "resetText2":"Tega ne priporoËamo, saj boö izgubil pretekle informacije, ki ti lahko pomagajo pri spremljanju napredka. Izbris raËuna je uporaben predvsem za ljudi, ki ûelijo program najprej preizkusiti, potem pa zaËeti na novo.", - "restore":"Povrnitev", - "restoreAltText":"Povrne liku podatke", - "restoreText1":"HabitRPG je öe v fazi razvoja, zato bodo nekateri uporabniki morda primorani liku povrniti podatke. Tukaj vpiöi podatke in avtomatiËno bodo dodani tvojemu liku. Ko bo program bolj stabilen, bo ta funkcija odstranjena.", - "delete":"Brisanje", - "deleteAltText":"Brisanje raËuna", - "deleteHeader" : "Izbriöi raËun", - "deleteText1":"PoËasi! Si prepriËan? S tem boö za vedno izbrisal raËun in ne bo se ga dalo povrniti. »e si popolnoma prepriËan, vpiöi", - "deleteText2":" IZBRIäI ", - "deleteText3":"v okence", - "API":"API", - "APIText":"Kopiraj te podatke za uporabo pri aplikacijah drugih proizvajalcev.", - "APIToken":"Api ûeton", - - - - "_commentitems": "ITEMS", - "_commentitemsweps": "WEAPONS", - "sword0name" : "Vadbeni meË", - "sword1Name" : "MeË", - "sword1Text" : "PoveËa pridobivanje izkuöenj za 3%.", - "sword2Name" : "Sekira", - "sword2Text" : "PoveËa pridobivanje izkuöenj za 6%.", - "sword3Name" : "Buzdovan", - "sword3Text" : "PoveËa pridobivanje izkuöenj za 9%.", - "sword4Name" : "Modri meË", - "sword4Text" : "PoveËa pridobivanje izkuöenj za 12%.", - "sword5Name" : "RdeËi meË", - "sword5Text" : "PoveËa pridobivanje izkuöenj za 15%.", - "sword6Name" : "Zlati meË", - "sword6Text" : "PoveËa pridobivanje izkuöenj za 18%.", - - "_commentitemsarmor": "ARMOR", - "armor0Name" : "Oklep iz blaga", - "armor1Name" : "Usnjeni oklep" , - "armor1Text": "Zmanjöa izgubo zdravja za 4%", - "armor2Name" : "Veriûna srajca", - "armor2Text": "Zmanjöa izgubo zdravja za 6%", - "armor3Name" : "PloöËni oklep", - "armor3Text": "Zmanjöa izgubo zdravja za 7%", - "armor4Name" : "RdeËi oklep", - "armor4Text": "Zmanjöa izgubo zdravja za 8%", - "armor5Name" : "Zlati oklep", - "armor5Text": "manjöa izgubo zdravja za 10%", - - "_commentitemshead" : "HEADGEAR", - "head0Name" : "Brez Ëelade", - "head1Name" : "Usnjena Ëelada" , - "head1Text": "Zmanjöa izgubo zdravja za 2%", - "head2Name" : "Veriûna kapuca", - "head2Text": "Zmanjöa izgubo zdravja za 3%", - "head3Name" : "PloöËna Ëelada", - "head3Text": "Zmanjöa izgubo zdravja za 4%", - "head4Name" : "RdeËa Ëelada", - "head4Text": "Zmanjöa izgubo zdravja za 5%", - "head5Name" : "Zlata Ëelada", - "head5Text": "Zmanjöa izgubo zdravja za 6%", - - "_commentitemsshield" : "SHIELDS", - "sheild0Name" : "Brez öËita", - "sheild1Name" : "Leseni öËit", - "sheild1Text": "Zmanjöa izgubo zdravja za 3%", - "sheild2Name" : "Mali öËit", - "sheild2Text": "Zmanjöa izgubo zdravja za 4%", - "sheild3Name" : "Okrepljeni öËit", - "sheild3Text": "Zmanjöa izgubo zdravja za 5%", - "sheild4Name" : "RdeËi öËit", - "sheild4Text": "Zmanjöa izgubo zdravja za 7%", - "sheild5Name" : "Zlati öËit", - "sheild5Text": "Zmanjöa izgubo zdravja za 8%", - - "_commentitemsother" : "OTHER ITEMS", - "healthPotionName" : "Zdravilni napoj", - "healthPotionNotes" : "Takoj povrne 15 toËk pri zdravju", - "rerollName" : "Ponastavitev nalog", - "rerollNotes" : "Naloge spet postanejo rumene. To je uporabno, ko so vse naloge rdeËe in je teûko ostati ûiv.", - "rerollModelHeader" : "Ponastavi naloge", - "rerollModelText1" : "To moËno odsvetujemo, saj rdeËe naloge spodbujajo k izboljöavanju", - "rerollModelText2" : "beri naprej", - "rerollModelText3" : "Vendar pa to postane nujno po daljöem obdobju slabih navad.", - - "_commentitemspeteggs": "PET EGGS", - "wolfEgg": "Mladi volk", - "tigerEgg": "Mladi tiger", - "pandaEgg": "Mladi panda", - "lionEgg": "Mladi lev", - "foxEgg": "Lisjak", - "pigEgg": "LeteËi pujs", - "dragonEgg": "Zmaj", - "cactusEgg": "Kaktus", - "bearEgg": "Mladi medved", - - "_commentitemshatchingpotions": "HATCHING POTIONS", - "basePotName": "Osnovni", - "basePotText" : "Iz jajca se izvali osnovna zverinica.", - "whitePotName": "Beli", - "whitePotText" : "Iz jajca se izvali bela zverinica.", - "desertPotName": "PuöËavski", - "desertPotText" : "Iz jajca se izvali puöËavska zverinica.", - "redPotName": "RdeËi", - "redPotText" : "Iz jajca se izvali rdeËa zverinica.", - "shadePotName": "SenËni", - "shadePotText" : "Iz jajca se izvali senËna zverinica.", - "skeletonPotName": "Skeletni", - "skeletonPotText" : "Iz jajca se izvali skeletna zverinica.", - "zombiePotName": "Zombijski", - "zombiePotText" : "Iz jajca se izvali zombijska zverinica.", - "cottonPinkPotName": "Svetlo roza", - "cottonPinkPotText" : "Iz jajca se izvali svetlo roza zverinica.", - "cottonBluePotName": "Svetlo modri", - "cottonBluePotText" : "Iz jajca se izvali svetlo modra zverinica.", - "goldenPotName": "Zlati", - "goldenPotText" : "Iz jajca se izvali zlata zverinica.", - - - - "_commentnpcsandchars": "NPCS & CHARACTERS", - "_commentNPCS" : "NPCS", - "NPCBaileyText1" : "mestna klicarka tukaj! Oznanjam nekaj novosti!", - "NPCAugustinText1" : "Dobrodoöel v trgovini! Jaz sem trgovec;", - "NPCAugustinText2" : "»e si neznansko ûeliö neke zverinice, a noËeö Ëakati, da jo najdeö, jo lahko kupiö tukaj.", - "NPCJohanssonText1" : "Dobrodoöel v gostilni! Jaz sem", - "NPCJohanssonText2": "toËaj. »e hoËeö malo poËiti (Greö na poËitnice? Si zbolel?), ti bom pripravil posteljo - v tem Ëasu ti neopravljene dnevne naloge ne bodo ökodovale. Usedi se in spoznaj domaËine.", - "NPCMelchiorText1" : "", - "NPCBowenText1" : "", - "NPCBochText1" : "", - - "_commentdeathstuff" : "DEATH", - "deathTitle" : "Umrl si!", - "deathText" : "Izgubil si vso zlato, en level in en kos opreme. Pridno opravljaj dnevne naloge, da se to ne bo ponovilo!", - - "_commentgems" : "GEMS", - "gems" : "Dragulji", - "outOfGems" : "Zmanjkalo dragljev", - "buyMoreGems" : "Kupi veË draguljev", - "notEnoughGems" : "Nimaö dovolj draguljev", - "petsOutOfGems" : "Zmanjkalo ti je draguljev, s katerimi lahko kupiö posebne predmete! HabitRPG je odprtokodni projekt in tvoja pomoË je zelo dobrodoöla - kupi veË draguljev, da lahko dobiö to zverinico, s tem pa tudi pomagaö ustvarjalcem", - "gemsWhatFor" : "Z njimi lahko kupiö posebne predmete (ponastavitev nalog, jajca, valilni napoji itd.). Vendar pa moraö te funkcije najprej odkleniti.", - - "_commentfooter": "FOOTER", - "footerCompany" : "Podjetje", - "companyAbout" : "O nas", - "companyBlog" : "Blog", - "companyTeam" : "Ekipa", - "companyExtensions" : "Podaljöki", - "companyFAQ" : "Pogosta vpraöanja", - "footerLegal" : "Pravno obvestilo", - "legalPrivacy" : "Varovanje podatkov", - "legalTerms" : "Pravni pogoji", - "footerCommunity" : "Skupnost", - "communityBugs" : "Oddaj poroËilo o hroöËu", - "communityFeatures" : "Zahtevaj novo funkcijo", - "communityExtensions" : "Dodatki / Podaljöki", - "communityForum" : "Forum", - "footerSocial" : "Druûbena omreûja", - - - - "_commentmisc": "MISC & GLOBAL", - "removeAds": "Odstrani reklame", - "whyAds": "Zakaj reklame?", - "whyAdsContent1": "HabitRPG je odprtokodni projekt in tvoja pomoË je zelo dobrodoöla - z donacijo pomagaö ustvarjalcem, prejmeö pa tudi 20 draguljev, s katerimi lahko kupiö posebne predmete.", - - "whyAdsContent2": "'Podprl sem vas pri Kickstarterju!' - sledi", - "whyAdsContent3": "tem navodilom", - "_commentbuttons": "BUTTONS", - "submit":"Poölji", - "close":"Zapri", - "saveAndClose": "Shrani in zapri", - "cancel":"PrekliËi", - "ok" : "V redu", - "add" : "Dodaj", - "undo" : "Razveljavi", - "continue" : "Nadaljuj", - "accept" : "Sprejmi", - "reject" : "PrekliËi", - "or" : "Ali", - "_commenttimestamps":"TIME STAMPS", - "justNow":"Pravkar", - "aMinuteAgo":"Pred eno minuto", - "minutesAgo":"minut nazaj", - "anHourAgo": "Pred eno uro", - "hoursAgo": "ur nazaj", - "yesterday":"VËeraj", - "daysAgo":"dni nazaj" - +{ + + "languageName": "Slovene", + "stringNotFound": "String not found.", + + +"_commentfrontpage":"HABITRPG FRONT PAGE", + "synopsis" : "Program za pridobivanje navad, s katerim tvoje življenje postane igra igranja vlog. Z uspehi tvoj lik raste, z neuspehi izgubi del zdravja, s prisluženim denarjem pa lahko kupiš orožje in oklep.", + "playButton" : "Igraj", + + + +"_commenttut": "TUTORIAL/TOUR", + "endTourButton": "Končaj predstavitev", + "nextButton" : "Naprej", + "prevButton" : "Nazaj", + "tour1Title" : "Dobrodošel pri HabitRPG", + "tour1Text" : "Dobrodošel pri HabitRPG, programu, ki spremlja tvoje navade v stilu igre igranja vlog.", + "tour2Title" : "Navade", + "tour2Text" : "S programom ves čas spremljaš dobre in slabe navade.", + "tour3Title" : "Dnevne naloge", + "tour3Text" : "Dnevne naloge moraš opraviti vsak dan enkrat.", + "tour4Title" : "Opravki", + "tour4Text" : "Opravki so naloge, ki jih moraš opraviti samo enkrat. ", + "tour5Title" : "Nagrade", + "tour5Text" : "Z opravljenimi nalogami si prislužiš zlato, s katerim lahko kupiš nagrade. Kupuj jih pogosto, saj so pomembne pri pridobivanju novih navad. ", + "tour6Title" : "Poglej komentarje", + "tour6Text" : "Določene vrste nalog imajo posebne lastnosti. Ogledaš si jih tako, da kazalec miške postaviš nad njihov komentar. Ko želiš začeti, izbriši obstoječe naloge in dodaj svoje.", + + + +"_commentdefaulttasks":"DEFAULT TASKS", + "habit1" : "1h produktivno delo", + "habit1comment": "-- Navade program spremlja ves čas -- Pri določenih nalogah je smiselno samo *pridobivanje* točk (kot pri tej)", + "habit2" : "Jedel nezdravo hrano", + "habit2comment" : "Pri drugih je smiselno samo *izgubljanje* točk", + "habit3" : "Šel po stopnicah", + "habit3comment" : "Pri ostalih lahko uporabiš tako + kot tudi - (stopnice = pridobiš, dvigalo = izgubiš)", + "daily1" : "1h osebni projekt", + "daily1comment" : "-- Dnevne naloge je treba opraviti enkrat na dan -- Ko se dan konča, izgubiš točke za vse neopravljene dnevne naloge.", + "daily2" : "Telovadba", + "daily2comment" : "Če jih opravljaš vestno, postanejo zelene, prinesejo manj denarja in izkušenj ter odvzamejo manj zdravja, ko jih ne opraviš.", + "daily3" : "45min branje", + "daily3comment" : "Če pa jih opravljaš neredno, postanejo rdeče. Čim manjkrat jih opraviš, tem več zlata in izkušenj prinesejo, vendar pa so tudi bolj nevarne za zdravje lika. To te spodbudi, da jih opravljaš bolj redno.", + "todo1" : "Pokliči mamo", + "todo1comment" : "-- Opravke je treba opraviti enkrat -- Neopravljeni opravki ne škodujejo zdravju lika, sčasoma pa postanejo vredni vedno več, kar te spodbudi, da opraviš te zapoznele naloge.", + "reward1" : "1 epizoda Igre prestolov", + "reward1comment": "-- Privošči si nagrado! -- Z opravljenimi nalogami si prislužiš zlato, s katerim lahko kupiš nagrade. Kupuj jih pogosto, saj so pomembne pri pridobivanju novih navad.", + "reward2" : "Torta", + "reward2comment" : "Ampak samo, če imaš dovolj zlata, saj boš drugače izgubil točke pri zdravju.", + +"_commentdefaulttags" : "DEFAULT TAGS", + "morning" : "jutro", + "afternoon" : "popoldne", + "evening" : "večer", + +"_commenthead": "HEADER", + "health": "Zdravje", + "experience": "Izkušnje", + "history": "Zgodovina", + "anonymous": "Neimenovan", + "level": "Level", + "tasks": "Naloge", + "loginAndReg" : "Prijava / Registracija", + "loginFacebookAlt" : "Prijava / Registracija preko Facebooka", + "login" : "Prijava", + "register" : "Registracija", + "options": "Možnosti", + "logout": "Odjava", + +"_commentnotifcations" : "NOTIFICATIONS", + "partyNotification" : "Novo sporočilo skupine", + + + +"_commenttaskview": "TASK VIEW", + "habits": "Navade", + "Habits": "Navade", + "newHabit": "Nova navada", + "edit": "Uredi", + "text": "Besedilo", + "extraNotes": "Opomba", + "directions/Actions": "Navodilo/Dejanje", + "advancedOptions": "Dodatne možnosti", + "difficulty": "Težavnost", + "difficultyHelpTitle": "Kako težavna je naloga?", + "difficultyHelpContent": "Težavnost pomnoži osnovno vrednost. Priporočamo, da večinoma uporabljaš vgrajeni algoritem, ki prilagodi vrednost. A nekatere naloge so veliko pomembnejše od drugih (pisanje diplome proti nitkanju zob). Klikni za več informacij.", + "easy": "Enostavno", + "medium": "Srednje", + "hard": "Težko", + "delete": "Zbriši", + "progress": "Napredek", + "score": "Točke", + "dailies": "Dnevne naloge", + "Dailies": "Dnevne naloge", + "newDaily": "Nova dnevna naloga", + "repeat": "Ponovi", + "Su": "Ne", + "M": "Po", + "T": "To", + "We": "Sr", + "Th": "Če", + "F": "Pe", + "S": "So", + "todos": "Opravki", + "Todos": "Opravki", + "newTodo": "Nov opravek", + "dueDate": "Opraviti do", + "remaining": "Preostalo", + "complete": "Opravljeno", + "rewards": "Nagrade", + "Rewards": "Nagrade", + "gold": "Zlato", + "silver": "Srebro", + "newReward": "Nova nagrada", + "price": "Cena", + "tags" : "Oznake", + "editTags" : "Uredi oznake", + "newTag" : "Nova oznaka", + "clearFilters" : "Počisti filtre", + + +"_commentdrops" : "DROP SYSTEM", + "dropsEnabled" : "Najdbe vključene!", + "dropsEnabledText1" : "Odklenil si sistem najdb! Ko zdaj opraviš nalogo, imaš majhno možnost, da naletiš na najdbo. Ne boš verjel, ravnokar si našel", + "dropsEnabledText2" : "jajce", + "itemDropped" : "Nova najdba", + + + +"_commentoptionsview": "OPTIONS VIEW", + "profile": "Profil", + "avatar": "Avatar", + + "head": "Glava", + "showHelm": "Pokaži čelado", + "hair": "Lasje", + "skin": "Polt", + "clothing" : "Oblačila", + "photoUrl": "Spletni naslov slike", + "fullName": "Polno ime", + "blurb": "O tebi", + "items" : "Oprema", + "weapon" : "Orožje", + "armor" : "Oklep", + "helm" : "Čelada", + "shield" : "Ščit", + + "stats" : "Podatki", + "strength" : "Moč", + "defense" : "Obramba", + "totalStrength" : "Skupna moč", + "totalDefense" : "Skupna obramba", + + + "party": "Skupina", + "createAParty":"Ustvari skupino", + "noPartyText": "Nisi del skupine. Lahko ustvariš svojo in povabiš prijatelje ali pa se pridružiš že obstoječi skupini. Naj uporabijo to številko:", + "partyName": "Ime skupine", + "create":"Ustvari", + "userId":"Številka uporabnika", + "invite":"Povabi", + "leave": "Zapusti", + "invitedTo" : "Povabljen si k skupini", + "chat": "Klepet", + + "inventory": "Inventar", + "eggs": "Jajca", + "noEggs": "Našel nisi še nobenega jajca.", + "hatchingPotions": "Valilni napoji", + "noHatchingPotions": "Našel nisi še nobenega valilnega napoja.", + "hatchYourEgg" : "Naj se zverinica izvali", + "whichHatchingPotion1" : "Kateri valilni napoj želiš politi po", + "whichHatchingPotion2" : "jajcu?", + "pour" : "polij", + "rarePets" : "Redke zverinice", + "market": "Trgovina", + + "stable": "Hlev", + "petsFound":"najdenih zverinic", + "rarePets": "Redke zverinice", + + "tavern": "Gostilna", + "restButton":"Počivaj v gostilni", + "checkoutButton": "Odjavi se iz gostilne", + "tavernTalkTitle":"Gostilniški klepet in iskanje skupin", + "tavernRestingInfo" : "Medtem ko počivaš, se dnevne naloge shranijo in ne škodujejo zdravju lika. Lahko se odjaviš jutri ali čez en teden in lik bo v istem stanju kot na začetku počitka.", + "resources" : "Viri", + "LFGPosts" : "Objave glede iskanja skupin", + "tutorials" : "Vodiči", + + "achievements":"Dosežki", + "achievementUnlocked" : "Nov dosežek!", + "npcText" : "Med največjimi podporniki pri Kickstarter projektu!", + "contribName" : "Sodelavec", + "contribText" : "Prispeval k razvoju HabitRPG-ja (programiranje, dizajn, pikslaste grafike, pravni nasveti, dokumenti itd.). Želiš to značko? Popravi kakšnega hrošča", + "kickstartName1" : "Podpornik pri Kickstarterju - ", + "kickstartName2" : "donacije", + "kickstartText" : "Podprl Kickstarter projekt", + "streakName" : " Niz(i) uspehov", + "streakText1" : "Dosegel ", + "stureakText2" : " 21-dnevnih nizov uspehov pri dnevnih nalogah", + "origUserName" : "Prvotni uporabnik", + "origUserText" : "Bil z nami od samega začetka HabitRPG-ja (kapo dol za uspešno prebijanje skozi te hroščaste čase!)", + "ultimGearName" : "Vrhunska oprema", + "ultimGearText" : "Prišel do najboljšega orožja in oklepa", + "ultimGearUnlocked" : "Dobil si značko 'Vrhunska oprema', saj imaš najboljšo opremo, kar jo lahko kupi zlato!", + "beastMastName" : "Šef zverinjaka", + "beastMastText" : "Našel si vseh 90 zverinic (kar je izjemno težko, vsa čast!)", + "beastMastUnlocked" : "Dobil si značko 'Šef zverinjaka', saj si našel vse zverinice!", + + "settings":"Nastavitve", + "customDayStart":"Določi začetek dneva", + "24HrClock": "24-urni način", + "clockInfo":"HabitRPG preveri in ponastavi tvoje dnevne naloge vsak dan opolnoči. To uro lahko spremeniš tukaj (vpiši številko med 0 in 24).", + "misc":"Ostalo", + "hideHeader":"Skrij glavo", + "showHeader":"Pokaži glavo", + "changePass":"Sprememba gesla", + "oldPass":"Staro geslo", + "newPass":"Novo geslo", + "confirmPass":"Potrditev novega gesla", + "dangerZone": "Nevarno območje", + "reset":"Ponastavitev", + "resetAltText":"Ponastavitev tvojega računa (nevarno)", + "resetText1":"S tem gumbom ponastaviš celoten račun - naloge bodo izbrisane, tvoj lik pa bo moral začeti znova.", + "resetText2":"Tega ne priporočamo, saj boš izgubil pretekle informacije, ki ti lahko pomagajo pri spremljanju napredka. Izbris računa je uporaben predvsem za ljudi, ki želijo program najprej preizkusiti, potem pa začeti na novo.", + "restore":"Povrnitev", + "restoreAltText":"Povrne liku podatke", + "restoreText1":"HabitRPG je še v fazi razvoja, zato bodo nekateri uporabniki morda primorani liku povrniti podatke. Tukaj vpiši podatke in avtomatično bodo dodani tvojemu liku. Ko bo program bolj stabilen, bo ta funkcija odstranjena.", + "delete":"Brisanje", + "deleteAltText":"Brisanje računa", + "deleteHeader" : "Izbriši račun", + "deleteText1":"Počasi! Si prepričan? S tem boš za vedno izbrisal račun in ne bo se ga dalo povrniti. Če si popolnoma prepričan, vpiši", + "deleteText2":" IZBRIŠI ", + "deleteText3":"v okence", + "API":"API", + "APIText":"Kopiraj te podatke za uporabo pri aplikacijah drugih proizvajalcev.", + "APIToken":"Api žeton", + + + +"_commentitems": "ITEMS", + "_commentitemsweps": "WEAPONS", + "sword0name" : "Vadbeni meč", + "sword1Name" : "Meč", + "sword1Text" : "Poveča pridobivanje izkušenj za 3%.", + "sword2Name" : "Sekira", + "sword2Text" : "Poveča pridobivanje izkušenj za 6%.", + "sword3Name" : "Buzdovan", + "sword3Text" : "Poveča pridobivanje izkušenj za 9%.", + "sword4Name" : "Modri meč", + "sword4Text" : "Poveča pridobivanje izkušenj za 12%.", + "sword5Name" : "Rdeči meč", + "sword5Text" : "Poveča pridobivanje izkušenj za 15%.", + "sword6Name" : "Zlati meč", + "sword6Text" : "Poveča pridobivanje izkušenj za 18%.", + + "_commentitemsarmor": "ARMOR", + "armor0Name" : "Oklep iz blaga", + "armor1Name" : "Usnjeni oklep" , + "armor1Text": "Zmanjša izgubo zdravja za 4%", + "armor2Name" : "Verižna srajca", + "armor2Text": "Zmanjša izgubo zdravja za 6%", + "armor3Name" : "Ploščni oklep", + "armor3Text": "Zmanjša izgubo zdravja za 7%", + "armor4Name" : "Rdeči oklep", + "armor4Text": "Zmanjša izgubo zdravja za 8%", + "armor5Name" : "Zlati oklep", + "armor5Text": "manjša izgubo zdravja za 10%", + + "_commentitemshead" : "HEADGEAR", + "head0Name" : "Brez čelade", + "head1Name" : "Usnjena čelada" , + "head1Text": "Zmanjša izgubo zdravja za 2%", + "head2Name" : "Verižna kapuca", + "head2Text": "Zmanjša izgubo zdravja za 3%", + "head3Name" : "Ploščna čelada", + "head3Text": "Zmanjša izgubo zdravja za 4%", + "head4Name" : "Rdeča čelada", + "head4Text": "Zmanjša izgubo zdravja za 5%", + "head5Name" : "Zlata čelada", + "head5Text": "Zmanjša izgubo zdravja za 6%", + + "_commentitemsshield" : "SHIELDS", + "sheild0Name" : "Brez ščita", + "sheild1Name" : "Leseni ščit", + "sheild1Text": "Zmanjša izgubo zdravja za 3%", + "sheild2Name" : "Mali ščit", + "sheild2Text": "Zmanjša izgubo zdravja za 4%", + "sheild3Name" : "Okrepljeni ščit", + "sheild3Text": "Zmanjša izgubo zdravja za 5%", + "sheild4Name" : "Rdeči ščit", + "sheild4Text": "Zmanjša izgubo zdravja za 7%", + "sheild5Name" : "Zlati ščit", + "sheild5Text": "Zmanjša izgubo zdravja za 8%", + + "_commentitemsother" : "OTHER ITEMS", + "healthPotionName" : "Zdravilni napoj", + "healthPotionNotes" : "Takoj povrne 15 točk pri zdravju", + "rerollName" : "Ponastavitev nalog", + "rerollNotes" : "Naloge spet postanejo rumene. To je uporabno, ko so vse naloge rdeče in je težko ostati živ.", + "rerollModelHeader" : "Ponastavi naloge", + "rerollModelText1" : "To močno odsvetujemo, saj rdeče naloge spodbujajo k izboljšavanju", + "rerollModelText2" : "beri naprej", + "rerollModelText3" : "Vendar pa to postane nujno po daljšem obdobju slabih navad.", + + "_commentitemspeteggs": "PET EGGS", + "wolfEgg": "Mladi volk", + "tigerEgg": "Mladi tiger", + "pandaEgg": "Mladi panda", + "lionEgg": "Mladi lev", + "foxEgg": "Lisjak", + "pigEgg": "Leteči pujs", + "dragonEgg": "Zmaj", + "cactusEgg": "Kaktus", + "bearEgg": "Mladi medved", + + "_commentitemshatchingpotions": "HATCHING POTIONS", + "basePotName": "Osnovni", + "basePotText" : "Iz jajca se izvali osnovna zverinica.", + "whitePotName": "Beli", + "whitePotText" : "Iz jajca se izvali bela zverinica.", + "desertPotName": "Puščavski", + "desertPotText" : "Iz jajca se izvali puščavska zverinica.", + "redPotName": "Rdeči", + "redPotText" : "Iz jajca se izvali rdeča zverinica.", + "shadePotName": "Senčni", + "shadePotText" : "Iz jajca se izvali senčna zverinica.", + "skeletonPotName": "Skeletni", + "skeletonPotText" : "Iz jajca se izvali skeletna zverinica.", + "zombiePotName": "Zombijski", + "zombiePotText" : "Iz jajca se izvali zombijska zverinica.", + "cottonPinkPotName": "Svetlo roza", + "cottonPinkPotText" : "Iz jajca se izvali svetlo roza zverinica.", + "cottonBluePotName": "Svetlo modri", + "cottonBluePotText" : "Iz jajca se izvali svetlo modra zverinica.", + "goldenPotName": "Zlati", + "goldenPotText" : "Iz jajca se izvali zlata zverinica.", + + + +"_commentnpcsandchars": "NPCS & CHARACTERS", + "_commentNPCS" : "NPCS", + "NPCBaileyText1" : "mestna klicarka tukaj! Oznanjam nekaj novosti!", + "NPCAugustinText1" : "Dobrodošel v trgovini! Jaz sem trgovec;", + "NPCAugustinText2" : "Če si neznansko želiš neke zverinice, a nočeš čakati, da jo najdeš, jo lahko kupiš tukaj.", + "NPCJohanssonText1" : "Dobrodošel v gostilni! Jaz sem", + "NPCJohanssonText2": "točaj. Če hočeš malo počiti (Greš na počitnice? Si zbolel?), ti bom pripravil posteljo - v tem času ti neopravljene dnevne naloge ne bodo škodovale. Usedi se in spoznaj domačine.", + "NPCMelchiorText1" : "", + "NPCBowenText1" : "", + "NPCBochText1" : "", + +"_commentdeathstuff" : "DEATH", + "deathTitle" : "Umrl si!", + "deathText" : "Izgubil si vso zlato, en level in en kos opreme. Pridno opravljaj dnevne naloge, da se to ne bo ponovilo!", + +"_commentgems" : "GEMS", + "gems" : "Dragulji", + "outOfGems" : "Zmanjkalo dragljev", + "buyMoreGems" : "Kupi več draguljev", + "notEnoughGems" : "Nimaš dovolj draguljev", + "petsOutOfGems" : "Zmanjkalo ti je draguljev, s katerimi lahko kupiš posebne predmete! HabitRPG je odprtokodni projekt in tvoja pomoč je zelo dobrodošla - kupi več draguljev, da lahko dobiš to zverinico, s tem pa tudi pomagaš ustvarjalcem", + "gemsWhatFor" : "Z njimi lahko kupiš posebne predmete (ponastavitev nalog, jajca, valilni napoji itd.). Vendar pa moraš te funkcije najprej odkleniti.", + +"_commentfooter": "FOOTER", + "footerCompany" : "Podjetje", + "companyAbout" : "O nas", + "companyBlog" : "Blog", + "companyTeam" : "Ekipa", + "companyExtensions" : "Podaljški", + "companyFAQ" : "Pogosta vprašanja", + "footerLegal" : "Pravno obvestilo", + "legalPrivacy" : "Varovanje podatkov", + "legalTerms" : "Pravni pogoji", + "footerCommunity" : "Skupnost", + "communityBugs" : "Oddaj poročilo o hrošču", + "communityFeatures" : "Zahtevaj novo funkcijo", + "communityExtensions" : "Dodatki / Podaljški", + "communityForum" : "Forum", + "footerSocial" : "Družbena omrežja", + + + +"_commentmisc": "MISC & GLOBAL", + "removeAds": "Odstrani reklame", + "whyAds": "Zakaj reklame?", + "whyAdsContent1": "HabitRPG je odprtokodni projekt in tvoja pomoč je zelo dobrodošla - z donacijo pomagaš ustvarjalcem, prejmeš pa tudi 20 draguljev, s katerimi lahko kupiš posebne predmete.", + + "whyAdsContent2": "'Podprl sem vas pri Kickstarterju!' - sledi", + "whyAdsContent3": "tem navodilom", + "_commentbuttons": "BUTTONS", + "submit":"Pošlji", + "close":"Zapri", + "saveAndClose": "Shrani in zapri", + "cancel":"Prekliči", + "ok" : "V redu", + "add" : "Dodaj", + "undo" : "Razveljavi", + "continue" : "Nadaljuj", + "accept" : "Sprejmi", + "reject" : "Prekliči", + "or" : "Ali", + "_commenttimestamps":"TIME STAMPS", + "justNow":"Pravkar", + "aMinuteAgo":"Pred eno minuto", + "minutesAgo":"minut nazaj", + "anHourAgo": "Pred eno uro", + "hoursAgo": "ur nazaj", + "yesterday":"Včeraj", + "daysAgo":"dni nazaj" + } \ No newline at end of file From 0ce0823de44b933090bd7e4f85fc107af5fb9827 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Fri, 15 Nov 2013 00:19:36 +1100 Subject: [PATCH 025/116] update ui to test hidable gears --- views/options/profile.jade | 9 +++++++++ views/shared/header/avatar.jade | 7 ++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/views/options/profile.jade b/views/options/profile.jade index 27c5baa885..18575f46b7 100644 --- a/views/options/profile.jade +++ b/views/options/profile.jade @@ -11,6 +11,15 @@ script(id='partials/options.profile.avatar.html', type='text/ng-template') label.checkbox input(type='checkbox', ng-model='user.preferences.showHelm', ng-change='toggleHelm(user.preferences.showHelm)') | Show Helm + label.checkbox + input(type='checkbox', ng-model='user.preferences.showWeapon', ng-change='toggleHelm(user.preferences.showWeapon)') + | Show Weapon + label.checkbox + input(type='checkbox', ng-model='user.preferences.showShield', ng-change='toggleHelm(user.preferences.showShield)') + | Show Shield + label.checkbox + input(type='checkbox', ng-model='user.preferences.showArmor', ng-change='toggleHelm(user.preferences.showArmor)') + | Show Armor menu(ng-show='user.preferences.gender=="f"', type='list') li.customize-menu diff --git a/views/shared/header/avatar.jade b/views/shared/header/avatar.jade index 3154f5f92d..4ea0f2b05c 100644 --- a/views/shared/header/avatar.jade +++ b/views/shared/header/avatar.jade @@ -11,11 +11,12 @@ figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile // Avatar span(class='{{profile.preferences.gender}}_skin_{{profile.preferences.skin}}') span(class='{{profile.preferences.gender}}_hair_{{profile.preferences.hair}}') - span(class='{{equipped("armor", profile.items.armor, profile.preferences, profile.backer, profile.contributor)}}') + span(class='{{equipped("armor", 0, profile.preferences, profile.backer, profile.contributor)}}') + span(class='{{equipped("armor", profile.items.armor, profile.preferences, profile.backer, profile.contributor)}}', ng-show='profile.preferences.showArmor') span(class='{{profile.preferences.gender}}_head_0', ng-hide='profile.preferences.showHelm') span(class='{{equipped("head", profile.items.head, profile.preferences, profile.backer, profile.contributor)}}', ng-show='profile.preferences.showHelm') - span(class='{{equipped("shield",profile.items.shield,profile.preferences, profile.backer, profile.contributor)}}') - span(class='{{equipped("weapon",profile.items.weapon,profile.preferences, profile.backer, profile.contributor)}}') + span(class='{{equipped("shield",profile.items.shield,profile.preferences, profile.backer, profile.contributor)}}', ng-show='profile.preferences.showShield') + span(class='{{equipped("weapon",profile.items.weapon,profile.preferences, profile.backer, profile.contributor)}}', ng-show='profile.preferences.showWeapon') // Mount Head span(ng-if='profile.items.currentMount', class='Mount_Head_{{profile.items.currentMount}}') From 80be38062e66fccb9526bd37efcf74746a03dba9 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Fri, 15 Nov 2013 00:26:25 +1100 Subject: [PATCH 026/116] add migration file for default preferences --- migrations/20131115_update_gear_preferences.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 migrations/20131115_update_gear_preferences.js diff --git a/migrations/20131115_update_gear_preferences.js b/migrations/20131115_update_gear_preferences.js new file mode 100644 index 0000000000..9ec1264b2f --- /dev/null +++ b/migrations/20131115_update_gear_preferences.js @@ -0,0 +1,10 @@ +//Add defaults to show gears in all users +db.users.update( + {}, + {$set:{ + 'preferences.showWeapon': true, + 'preferences.showShield': true, + 'preferences.showArmor': true, + }}, + {multi:true} +) From 7c15f09e03595d2e38c19deecc628983fd4264e8 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Fri, 15 Nov 2013 00:51:54 +1100 Subject: [PATCH 027/116] code logic to update preferences --- public/js/controllers/userCtrl.js | 3 --- src/models/user.js | 3 +++ views/options/profile.jade | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/js/controllers/userCtrl.js b/public/js/controllers/userCtrl.js index 793f54c9f7..70a950c9cd 100644 --- a/public/js/controllers/userCtrl.js +++ b/public/js/controllers/userCtrl.js @@ -6,9 +6,6 @@ habitrpg.controller("UserCtrl", ['$rootScope', '$scope', '$location', 'User', '$ $scope.hideUserAvatar = function() { $(".userAvatar").hide(); }; - $scope.toggleHelm = function(val){ - User.log({op:'set', data:{'preferences.showHelm':val}}); - } $scope.$watch('_editing.profile', function(value){ if(value === true) $scope.editingProfile = angular.copy(User.user.profile); diff --git a/src/models/user.js b/src/models/user.js index f1ac9ea5e5..402dddf34f 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -191,6 +191,9 @@ var UserSchema = new Schema({ hair: {type:String, 'default':'blond'}, hideHeader: {type:Boolean, 'default':false}, showHelm: {type:Boolean, 'default':true}, + showWeapon: {type:Boolean, 'default':true}, + showShield: {type:Boolean, 'default':true}, + showArmor: {type:Boolean, 'default':true}, skin: {type:String, 'default':'white'}, timezoneOffset: Number, language: String diff --git a/views/options/profile.jade b/views/options/profile.jade index 18575f46b7..2ec556a09b 100644 --- a/views/options/profile.jade +++ b/views/options/profile.jade @@ -9,16 +9,16 @@ script(id='partials/options.profile.avatar.html', type='text/ng-template') button.m_head_0.customize-option(type='button', ng-click='set("preferences.gender","m")') button.f_head_0.customize-option(type='button', ng-click='set("preferences.gender","f")') label.checkbox - input(type='checkbox', ng-model='user.preferences.showHelm', ng-change='toggleHelm(user.preferences.showHelm)') + input(type='checkbox', ng-model='user.preferences.showHelm', ng-change='set("preferences.showHelm", user.preferences.showHelm?true: false)') | Show Helm label.checkbox - input(type='checkbox', ng-model='user.preferences.showWeapon', ng-change='toggleHelm(user.preferences.showWeapon)') + input(type='checkbox', ng-model='user.preferences.showWeapon', ng-change='set("preferences.showWeapon", user.preferences.showWeapon?true: false)') | Show Weapon label.checkbox - input(type='checkbox', ng-model='user.preferences.showShield', ng-change='toggleHelm(user.preferences.showShield)') + input(type='checkbox', ng-model='user.preferences.showShield', ng-change='set("preferences.showShield", user.preferences.showShield?true: false)') | Show Shield label.checkbox - input(type='checkbox', ng-model='user.preferences.showArmor', ng-change='toggleHelm(user.preferences.showArmor)') + input(type='checkbox', ng-model='user.preferences.showArmor', ng-change='set("preferences.showArmor", user.preferences.showArmor?true: false)') | Show Armor menu(ng-show='user.preferences.gender=="f"', type='list') From 05814237ed9c56c9ee8e131982be94b4a6c80d4d Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Fri, 15 Nov 2013 00:56:57 +1100 Subject: [PATCH 028/116] update translations with new Show gear strings --- locales/bg/app.json | 3 +++ locales/cs/app.json | 3 +++ locales/cu/app.json | 3 +++ locales/de/app.json | 3 +++ locales/en/app.json | 3 +++ locales/es/app.json | 3 +++ locales/fr/app.json | 5 ++++- locales/he/app.json | 3 +++ locales/id/app.json | 3 +++ locales/it/app.json | 3 +++ locales/ja/app.json | 3 +++ locales/nl/app.json | 3 +++ locales/no/app.json | 3 +++ locales/pl/app.json | 3 +++ locales/pt/app.json | 3 +++ locales/ru/app.json | 3 +++ locales/uk/app.json | 3 +++ locales/ur/app.json | 3 +++ 18 files changed, 55 insertions(+), 1 deletion(-) diff --git a/locales/bg/app.json b/locales/bg/app.json index d4a0b0aafb..beab2057da 100644 --- a/locales/bg/app.json +++ b/locales/bg/app.json @@ -127,6 +127,9 @@ "head": "Head", "showHelm": "Show Helm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", diff --git a/locales/cs/app.json b/locales/cs/app.json index b29382a176..ddc3a90984 100644 --- a/locales/cs/app.json +++ b/locales/cs/app.json @@ -128,6 +128,9 @@ "head": "Head", "showHelm": "Show Helm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", diff --git a/locales/cu/app.json b/locales/cu/app.json index 37b003b75c..63755bf87d 100644 --- a/locales/cu/app.json +++ b/locales/cu/app.json @@ -129,6 +129,9 @@ "head": "Head", "showHelm": "Show Helm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", diff --git a/locales/de/app.json b/locales/de/app.json index 90d862c503..612f870a41 100644 --- a/locales/de/app.json +++ b/locales/de/app.json @@ -128,6 +128,9 @@ "head": "Kopf", "showHelm": "Helm sichtbar", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Haare", "skin": "Haut", "clothing" : "Kleidung", diff --git a/locales/en/app.json b/locales/en/app.json index f068b817c5..999620548f 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -134,6 +134,9 @@ "head": "Head", "showHelm": "Show Helm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", diff --git a/locales/es/app.json b/locales/es/app.json index fdddf5d73b..499966802a 100644 --- a/locales/es/app.json +++ b/locales/es/app.json @@ -128,6 +128,9 @@ "head": "Cabeza", "showHelm": "Mostrar Yelmo", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Cabello", "skin": "Piel", "clothing" : "Ropa", diff --git a/locales/fr/app.json b/locales/fr/app.json index ce61a15538..e93e9e5bfc 100644 --- a/locales/fr/app.json +++ b/locales/fr/app.json @@ -128,7 +128,10 @@ "avatar": "Avatar", "head": "Tête", - "showHelm": "Afficher le casque", + "showHelm": "Montrer le casque", + "showWeapon": "Montrer l'arme", + "showShield": "Montrer le bouclier", + "showArmor": "Montrer l'armure", "hair": "Cheveux", "skin": "Peau", "clothing" : "Vêtements", diff --git a/locales/he/app.json b/locales/he/app.json index b2f0ec81de..4aae3d0ad3 100644 --- a/locales/he/app.json +++ b/locales/he/app.json @@ -133,6 +133,9 @@ "head": "ראש", "showHelm": "הראה קסדה", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "שיער", "skin": "עור", "clothing" : "לבוש", diff --git a/locales/id/app.json b/locales/id/app.json index 6e96308bb3..6c09b8f08a 100644 --- a/locales/id/app.json +++ b/locales/id/app.json @@ -129,6 +129,9 @@ "head": "Head", "showHelm": "Show Helm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", diff --git a/locales/it/app.json b/locales/it/app.json index d7b97197a0..ad2872059a 100644 --- a/locales/it/app.json +++ b/locales/it/app.json @@ -129,6 +129,9 @@ "head": "Testa", "showHelm": "Mostra Elmo", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Capelli", "skin": "Pelle", "clothing" : "Abbigliamento", diff --git a/locales/ja/app.json b/locales/ja/app.json index 3f6b197354..bf664a16be 100644 --- a/locales/ja/app.json +++ b/locales/ja/app.json @@ -129,6 +129,9 @@ "head": "頭", "showHelm": "Show 兜", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Hair", "skin": "皮膚", "clothing" : "衣料", diff --git a/locales/nl/app.json b/locales/nl/app.json index 812296ef2a..bf5ee77898 100644 --- a/locales/nl/app.json +++ b/locales/nl/app.json @@ -129,6 +129,9 @@ "head": "Hoofd", "showHelm": "Toon Helm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Haar", "skin": "Huid", "clothing" : "Kleding", diff --git a/locales/no/app.json b/locales/no/app.json index 8e837fec62..d0e055a57c 100644 --- a/locales/no/app.json +++ b/locales/no/app.json @@ -134,6 +134,9 @@ "head": "Hode", "hair": "Hår", "showHelm": "Vis hjelm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "skin": "Hudfarge", "clothing" : "Klær", "photoUrl": "Bilde-URL", diff --git a/locales/pl/app.json b/locales/pl/app.json index a24f2b8c5e..87f5762625 100644 --- a/locales/pl/app.json +++ b/locales/pl/app.json @@ -129,6 +129,9 @@ "head": "Głowa", "showHelm": "Pokazuj hełm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Włosy", "skin": "Karnacja", "clothing" : "Ubranie", diff --git a/locales/pt/app.json b/locales/pt/app.json index 1e81ab6a67..162daca9b5 100644 --- a/locales/pt/app.json +++ b/locales/pt/app.json @@ -129,6 +129,9 @@ "head": "Cabeça", "showHelm": "Mostrar Elmo", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Cabelo", "skin": "Pele", "clothing" : "Vestimentas", diff --git a/locales/ru/app.json b/locales/ru/app.json index 7d46037ed6..33993c8fcd 100644 --- a/locales/ru/app.json +++ b/locales/ru/app.json @@ -129,6 +129,9 @@ "head": "Голова", "showHelm": "Показывать шлем", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Волосы", "skin": "Кожа", "clothing" : "Одежда", diff --git a/locales/uk/app.json b/locales/uk/app.json index ac63261901..019303f8b7 100644 --- a/locales/uk/app.json +++ b/locales/uk/app.json @@ -129,6 +129,9 @@ "head": "Голова", "showHelm": "Показывать шолом", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "Волосся", "skin": "Кожа", "clothing" : "Одяг", diff --git a/locales/ur/app.json b/locales/ur/app.json index d108b425bc..8056827c2a 100644 --- a/locales/ur/app.json +++ b/locales/ur/app.json @@ -128,6 +128,9 @@ "head": "سر", "showHelm": "Show Helm", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", + "showArmor": "Show Armor", "hair": "بال", "skin": "Skin", "clothing" : "Clothing", From e240a4404f81d0f4525666617611c9bcd4ad2312 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Tue, 19 Nov 2013 10:34:54 +1100 Subject: [PATCH 029/116] reorganize menus --- views/options/profile.jade | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/views/options/profile.jade b/views/options/profile.jade index 2ec556a09b..b3ae3da80e 100644 --- a/views/options/profile.jade +++ b/views/options/profile.jade @@ -11,21 +11,24 @@ script(id='partials/options.profile.avatar.html', type='text/ng-template') label.checkbox input(type='checkbox', ng-model='user.preferences.showHelm', ng-change='set("preferences.showHelm", user.preferences.showHelm?true: false)') | Show Helm + menu(type='list') + li.customize-menu + menu(label='Clothing') + button.f_armor_0_v1.customize-option(ng-show='user.preferences.gender=="f"', type='button', ng-click='set("preferences.armorSet","v1")') + button.f_armor_0_v2.customize-option(ng-show='user.preferences.gender=="f"', type='button', ng-click='set("preferences.armorSet","v2")') + label.checkbox + input(type='checkbox', ng-model='user.preferences.showArmor', ng-change='set("preferences.showArmor", user.preferences.showArmor?true: false)') + | Show Armor + menu(type='list') + li.customize-menu + menu(label='Other') label.checkbox input(type='checkbox', ng-model='user.preferences.showWeapon', ng-change='set("preferences.showWeapon", user.preferences.showWeapon?true: false)') | Show Weapon label.checkbox input(type='checkbox', ng-model='user.preferences.showShield', ng-change='set("preferences.showShield", user.preferences.showShield?true: false)') | Show Shield - label.checkbox - input(type='checkbox', ng-model='user.preferences.showArmor', ng-change='set("preferences.showArmor", user.preferences.showArmor?true: false)') - | Show Armor - menu(ng-show='user.preferences.gender=="f"', type='list') - li.customize-menu - menu(label='Clothing') - button.f_armor_0_v1.customize-option(type='button', ng-click='set("preferences.armorSet","v1")') - button.f_armor_0_v2.customize-option(type='button', ng-click='set("preferences.armorSet","v2")') .span4 // hair From 0a0504d8002116395d71f4f5b79cf0c4da1dcc63 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Tue, 19 Nov 2013 10:35:02 +1100 Subject: [PATCH 030/116] update translations files --- locales/bg/app.json | 7 ++++--- locales/cs/app.json | 7 ++++--- locales/cu/app.json | 7 ++++--- locales/de/app.json | 7 ++++--- locales/el/app.json | 4 ++++ locales/en/app.json | 7 ++++--- locales/es/app.json | 7 ++++--- locales/fr/app.json | 7 ++++--- locales/he/app.json | 7 ++++--- locales/id/app.json | 7 ++++--- locales/it/app.json | 7 ++++--- locales/ja/app.json | 7 ++++--- locales/nl/app.json | 7 ++++--- locales/no/app.json | 7 ++++--- locales/pl/app.json | 7 ++++--- locales/pt/app.json | 7 ++++--- locales/ru/app.json | 7 ++++--- locales/sl/app.json | 8 ++++++-- locales/uk/app.json | 7 ++++--- locales/ur/app.json | 7 ++++--- 20 files changed, 82 insertions(+), 56 deletions(-) diff --git a/locales/bg/app.json b/locales/bg/app.json index beab2057da..f8805bbf7a 100644 --- a/locales/bg/app.json +++ b/locales/bg/app.json @@ -127,12 +127,13 @@ "head": "Head", "showHelm": "Show Helm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Photo Url", "fullName": "Full Name", "blurb": "Blurb", diff --git a/locales/cs/app.json b/locales/cs/app.json index ddc3a90984..d3c776157a 100644 --- a/locales/cs/app.json +++ b/locales/cs/app.json @@ -128,12 +128,13 @@ "head": "Head", "showHelm": "Show Helm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Photo Url", "fullName": "Full Name", "blurb": "Blurb", diff --git a/locales/cu/app.json b/locales/cu/app.json index 63755bf87d..d69a2a23d0 100644 --- a/locales/cu/app.json +++ b/locales/cu/app.json @@ -129,12 +129,13 @@ "head": "Head", "showHelm": "Show Helm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Photo Url", "fullName": "Full Name", "blurb": "Blurb", diff --git a/locales/de/app.json b/locales/de/app.json index 612f870a41..26a139867e 100644 --- a/locales/de/app.json +++ b/locales/de/app.json @@ -128,12 +128,13 @@ "head": "Kopf", "showHelm": "Helm sichtbar", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Haare", "skin": "Haut", "clothing" : "Kleidung", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Bild-Url", "fullName": "Name", "blurb": "über dich", diff --git a/locales/el/app.json b/locales/el/app.json index f89ce2a0bc..349009af8c 100644 --- a/locales/el/app.json +++ b/locales/el/app.json @@ -135,6 +135,10 @@ "hair": "Μαλλιά", "skin": "Δέρμα", "clothing" : "Ρούχα", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Url Φωτογραφίας", "fullName": "Πλήρες Όνομα", "blurb": "Κείμενο", diff --git a/locales/en/app.json b/locales/en/app.json index 999620548f..607e721ff9 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -134,12 +134,13 @@ "head": "Head", "showHelm": "Show Helm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", + "showWeapon": "Show Weapon", + "other" : "Other", + "showShield": "Show Shield", + "showArmor": "Show Armor", "photoUrl": "Photo Url", "fullName": "Full Name", "blurb": "Blurb", diff --git a/locales/es/app.json b/locales/es/app.json index 499966802a..a4abe78bf4 100644 --- a/locales/es/app.json +++ b/locales/es/app.json @@ -128,12 +128,13 @@ "head": "Cabeza", "showHelm": "Mostrar Yelmo", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Cabello", "skin": "Piel", "clothing" : "Ropa", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Url de la Imagen", "fullName": "Nombre Completo", "blurb": "Descripción", diff --git a/locales/fr/app.json b/locales/fr/app.json index e93e9e5bfc..80e646e8e6 100644 --- a/locales/fr/app.json +++ b/locales/fr/app.json @@ -129,12 +129,13 @@ "head": "Tête", "showHelm": "Montrer le casque", - "showWeapon": "Montrer l'arme", - "showShield": "Montrer le bouclier", - "showArmor": "Montrer l'armure", "hair": "Cheveux", "skin": "Peau", "clothing" : "Vêtements", + "showArmor": "Montrer l'armure", + "other": "Autres", + "showWeapon": "Montrer l'arme", + "showShield": "Montrer le bouclier", "photoUrl": "Lien vers la photo", "fullName": "Nom complet", "blurb": "Bio", diff --git a/locales/he/app.json b/locales/he/app.json index 4aae3d0ad3..6a5aa7e8b4 100644 --- a/locales/he/app.json +++ b/locales/he/app.json @@ -133,12 +133,13 @@ "head": "ראש", "showHelm": "הראה קסדה", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "שיער", "skin": "עור", "clothing" : "לבוש", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "כתובת תמונה", "fullName": "שם מלא", "blurb": "קצת על עצמך", diff --git a/locales/id/app.json b/locales/id/app.json index 6c09b8f08a..8e58a655a6 100644 --- a/locales/id/app.json +++ b/locales/id/app.json @@ -129,12 +129,13 @@ "head": "Head", "showHelm": "Show Helm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Hair", "skin": "Skin", "clothing" : "Clothing", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Photo Url", "fullName": "Full Name", "blurb": "Blurb", diff --git a/locales/it/app.json b/locales/it/app.json index ad2872059a..45dfec882f 100644 --- a/locales/it/app.json +++ b/locales/it/app.json @@ -129,12 +129,13 @@ "head": "Testa", "showHelm": "Mostra Elmo", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Capelli", "skin": "Pelle", "clothing" : "Abbigliamento", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Url Foto", "fullName": "Nome Completo", "blurb": "Firma", diff --git a/locales/ja/app.json b/locales/ja/app.json index bf664a16be..879daa5c31 100644 --- a/locales/ja/app.json +++ b/locales/ja/app.json @@ -129,12 +129,13 @@ "head": "頭", "showHelm": "Show 兜", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Hair", "skin": "皮膚", "clothing" : "衣料", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "写真 URL", "fullName": "名前", "blurb": "自己紹介", diff --git a/locales/nl/app.json b/locales/nl/app.json index bf5ee77898..90093b7574 100644 --- a/locales/nl/app.json +++ b/locales/nl/app.json @@ -129,12 +129,13 @@ "head": "Hoofd", "showHelm": "Toon Helm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Haar", "skin": "Huid", "clothing" : "Kleding", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Foto URL", "fullName": "Volledige Naam", "blurb": "Blurp", diff --git a/locales/no/app.json b/locales/no/app.json index d0e055a57c..b668b942bb 100644 --- a/locales/no/app.json +++ b/locales/no/app.json @@ -134,12 +134,13 @@ "head": "Hode", "hair": "Hår", "showHelm": "Vis hjelm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "skin": "Hudfarge", "clothing" : "Klær", "photoUrl": "Bilde-URL", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "fullName": "Fullt navn", "blurb": "Kort om deg", "websites": "Nettsider", diff --git a/locales/pl/app.json b/locales/pl/app.json index 87f5762625..ee97d430b3 100644 --- a/locales/pl/app.json +++ b/locales/pl/app.json @@ -129,12 +129,13 @@ "head": "Głowa", "showHelm": "Pokazuj hełm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Włosy", "skin": "Karnacja", "clothing" : "Ubranie", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "URL obrazka", "fullName": "Imię i nazwisko", "blurb": "Krótki opis", diff --git a/locales/pt/app.json b/locales/pt/app.json index 162daca9b5..669488790c 100644 --- a/locales/pt/app.json +++ b/locales/pt/app.json @@ -129,12 +129,13 @@ "head": "Cabeça", "showHelm": "Mostrar Elmo", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Cabelo", "skin": "Pele", "clothing" : "Vestimentas", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Url da Foto", "fullName": "Nome Completo", "blurb": "Sinopse", diff --git a/locales/ru/app.json b/locales/ru/app.json index 33993c8fcd..1e13f69762 100644 --- a/locales/ru/app.json +++ b/locales/ru/app.json @@ -129,12 +129,13 @@ "head": "Голова", "showHelm": "Показывать шлем", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Волосы", "skin": "Кожа", "clothing" : "Одежда", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Ссылка на фото", "fullName": "Полное имя", "blurb": "О себе", diff --git a/locales/sl/app.json b/locales/sl/app.json index 34e1db8429..ef5783c5e9 100644 --- a/locales/sl/app.json +++ b/locales/sl/app.json @@ -136,7 +136,11 @@ "showHelm": "Pokaži čelado", "hair": "Lasje", "skin": "Polt", - "clothing" : "Oblačila", + "clothing" : "OblaËila", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Spletni naslov slike", "fullName": "Polno ime", "blurb": "O tebi", @@ -410,4 +414,4 @@ "yesterday":"Včeraj", "daysAgo":"dni nazaj" -} \ No newline at end of file +} diff --git a/locales/uk/app.json b/locales/uk/app.json index 019303f8b7..2dbe2ecedc 100644 --- a/locales/uk/app.json +++ b/locales/uk/app.json @@ -129,12 +129,13 @@ "head": "Голова", "showHelm": "Показывать шолом", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "Волосся", "skin": "Кожа", "clothing" : "Одяг", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Посилання на фото", "fullName": "Повне ім'я", "blurb": "Про себе", diff --git a/locales/ur/app.json b/locales/ur/app.json index 8056827c2a..25129f1f72 100644 --- a/locales/ur/app.json +++ b/locales/ur/app.json @@ -128,12 +128,13 @@ "head": "سر", "showHelm": "Show Helm", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "showArmor": "Show Armor", "hair": "بال", "skin": "Skin", "clothing" : "Clothing", + "showArmor": "Show Armor", + "other": "Other", + "showWeapon": "Show Weapon", + "showShield": "Show Shield", "photoUrl": "Photo Url", "fullName": "Full Name", "blurb": "Blurb", From 0223761d6cdedf0caf1926de454520da5c58b66d Mon Sep 17 00:00:00 2001 From: Felix Date: Tue, 19 Nov 2013 10:13:40 +0100 Subject: [PATCH 031/116] Updated hideable gears Updated: -showArmor -other -showWeapon -showShield --- locales/it/app.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/it/app.json b/locales/it/app.json index a8d3d5882c..df1577ede0 100644 --- a/locales/it/app.json +++ b/locales/it/app.json @@ -132,10 +132,10 @@ "hair": "Capelli", "skin": "Pelle", "clothing" : "Abbigliamento", - "showArmor": "Show Armor", - "other": "Other", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", + "showArmor": "Mostra Armatura", + "other": "Altro", + "showWeapon": "Mostra Arma", + "showShield": "Mostra Scudo", "photoUrl": "Url Foto", "fullName": "Nome Completo", "blurb": "Firma", From 46410bc2447cf67317853fc7d30b9c9b69f41414 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Tue, 19 Nov 2013 06:39:14 -0800 Subject: [PATCH 032/116] accomodate longer titles per #1855 --- public/css/index.styl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/css/index.styl b/public/css/index.styl index 62c4b06f1a..776b93120f 100644 --- a/public/css/index.styl +++ b/public/css/index.styl @@ -66,6 +66,11 @@ hr margin-right: 10px; } +/* Bootstrap overrides */ +div.tooltip-inner { + max-width: 300px; +} + /* Customizations to make footer sticky */ /*html, body {height: 100%;}*/ #wrap From afc9b6f62bd61d4661d3bf7f3da192d4910d6456 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Wed, 20 Nov 2013 06:46:07 -0800 Subject: [PATCH 033/116] chat highlights work properly when preceeded by spaces again --- public/js/controllers/groupsCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 61266721df..68ed8e288e 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -136,7 +136,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A var messagetext = message.text.toLowerCase(); var username = user.profile.name; var mentioned = messagetext.indexOf(username.toLowerCase()); - var pattern = "(\s|@|^){1}"+username+"([^\w]|$){1}"; + var pattern = username+"([^\w]|$){1}"; if(mentioned > -1) { var preceedingchar = messagetext.substring(mentioned-1,mentioned); if(mentioned == 0 || preceedingchar.trim() == '' || preceedingchar == '@'){ From 4bedefbc57a1a38509b1d801de8b6aa78ae40d84 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 20 Nov 2013 18:48:48 +0100 Subject: [PATCH 034/116] use helpers.countPets on server, fix client side pet count --- public/js/controllers/inventoryCtrl.js | 2 +- src/models/user.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/inventoryCtrl.js b/public/js/controllers/inventoryCtrl.js index dfb67d12fb..01edc645a9 100644 --- a/public/js/controllers/inventoryCtrl.js +++ b/public/js/controllers/inventoryCtrl.js @@ -14,7 +14,7 @@ habitrpg.controller("InventoryCtrl", ['$rootScope', '$scope', 'User', 'API_URL', var countStacks = function(items) { return _.reduce(items,function(m,v){return m+v;},0);} $scope.$watch('user.items.pets', function(pets){ - window.habitrpgShared.helpers.countPets($rootScope.countExists(pets), User.user.items.pets); + $scope.petCount = window.habitrpgShared.helpers.countPets($rootScope.countExists(pets), User.user.items.pets); }, true); $scope.$watch('user.items.mounts', function(mounts){ $scope.mountCount = $rootScope.countExists(mounts); }, true); $scope.$watch('user.items.eggs', function(eggs){ $scope.eggCount = countStacks(eggs); }, true); diff --git a/src/models/user.js b/src/models/user.js index 402dddf34f..be5af289c7 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -267,7 +267,7 @@ UserSchema.pre('save', function(next) { 'Anonymous'; } - var petCount = _.reduce(this.items.pets,function(m,v){return m+(v ? 1 : 0);},0); + var petCount = helpers.countPets(_.reduce(this.items.pets,function(m,v){return m+(v?1:0)},0), this.items.pets); this.achievements.beastMaster = petCount >= 90; //our own version incrementer From 56437d499e70c2f20e9ed3c75fea673a84dec2a7 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 20 Nov 2013 18:55:03 +0100 Subject: [PATCH 035/116] hotfix for pet count on server --- src/models/user.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/models/user.js b/src/models/user.js index be5af289c7..1cddb217be 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -267,7 +267,10 @@ UserSchema.pre('save', function(next) { 'Anonymous'; } - var petCount = helpers.countPets(_.reduce(this.items.pets,function(m,v){return m+(v?1:0)},0), this.items.pets); + var petCount = helpers.countPets(_.reduce(this.items.pets,function(m,v){ + //HOTFIX - Remove when solution is found, the first argument passed to reduce is a function + if(typeof(v) == 'function') return m; + return m+(v?1:0)},0), this.items.pets); this.achievements.beastMaster = petCount >= 90; //our own version incrementer From bca346e6162a8974c833dbf5cb37bf53a6c49c99 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 20 Nov 2013 18:56:40 +0100 Subject: [PATCH 036/116] use _.isFunction --- src/models/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/user.js b/src/models/user.js index 1cddb217be..ccfc2d6538 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -269,7 +269,7 @@ UserSchema.pre('save', function(next) { var petCount = helpers.countPets(_.reduce(this.items.pets,function(m,v){ //HOTFIX - Remove when solution is found, the first argument passed to reduce is a function - if(typeof(v) == 'function') return m; + if(_.isFunction(v)) return m; return m+(v?1:0)},0), this.items.pets); this.achievements.beastMaster = petCount >= 90; From 1a388fa994580abc699fa9c9e1c51cec96900ab5 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 20 Nov 2013 21:36:18 +0100 Subject: [PATCH 037/116] fix #1803, when getting a drop do not return whole user, @lefnire it is ok to change api return data or we need to annouce it before so that third parties can update their code? --- public/js/controllers/notificationCtrl.js | 1 + public/js/services/userServices.js | 5 +++-- src/controllers/user.js | 7 +++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/public/js/controllers/notificationCtrl.js b/public/js/controllers/notificationCtrl.js index ba9a4cc5aa..89a440f7c9 100644 --- a/public/js/controllers/notificationCtrl.js +++ b/public/js/controllers/notificationCtrl.js @@ -39,6 +39,7 @@ habitrpg.controller('NotificationCtrl', }); $rootScope.$watch('user.achievements.ultimateGear', function(after, before){ + console.log(after, before) if (after === before || after !== true) return; $rootScope.modals.achievements.ultimateGear = true; }); diff --git a/public/js/services/userServices.js b/public/js/services/userServices.js index 187f65761a..bf9b605a87 100644 --- a/public/js/services/userServices.js +++ b/public/js/services/userServices.js @@ -65,13 +65,14 @@ angular.module('userServices', []). // the user has been modified from another application, sync up if(data.wasModified) { delete data.wasModified; - _.extend(user, data); $rootScope.$emit('userUpdated', user); } + // Update user + _.extend(user, data); + // Emit event when user is synced $rootScope.$emit('userSynced'); - user._v = data._v; } sent.length = 0; settings.fetching = false; diff --git a/src/controllers/user.js b/src/controllers/user.js index f581ec1d9a..2a9d0c9956 100644 --- a/src/controllers/user.js +++ b/src/controllers/user.js @@ -566,10 +566,9 @@ api.batchUpdate = function(req, res, next) { if (err) return res.json(500, {err: err}); var response = user.toJSON(); response.wasModified = res.locals.wasModified; - if (response._tmp && response._tmp.drop) response.wasModified = true; - - // Send the response to the server - if(response.wasModified){ + if (response._tmp && response._tmp.drop){ + res.json(200, {_tmp: {drop: response._tmp.drop}, _v: response._v}); + }else if(response.wasModified){ res.json(200, response); }else{ res.json(200, {_v: response._v}); From 8955fb5a3964bb9c0ae8b65e43834c08c79c9286 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 20 Nov 2013 21:44:20 +0100 Subject: [PATCH 038/116] typo --- public/js/controllers/notificationCtrl.js | 1 - 1 file changed, 1 deletion(-) diff --git a/public/js/controllers/notificationCtrl.js b/public/js/controllers/notificationCtrl.js index 89a440f7c9..ba9a4cc5aa 100644 --- a/public/js/controllers/notificationCtrl.js +++ b/public/js/controllers/notificationCtrl.js @@ -39,7 +39,6 @@ habitrpg.controller('NotificationCtrl', }); $rootScope.$watch('user.achievements.ultimateGear', function(after, before){ - console.log(after, before) if (after === before || after !== true) return; $rootScope.modals.achievements.ultimateGear = true; }); From 6b2a60330f9b9321ee53554c6dd7595596bc42f3 Mon Sep 17 00:00:00 2001 From: Bob Steffes Date: Wed, 20 Nov 2013 13:08:05 -0800 Subject: [PATCH 039/116] Add link to wikia Tags article when creating a new challenge The ? icon now links to the wiki Tags article --- views/options/social/challenges.jade | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/options/social/challenges.jade b/views/options/social/challenges.jade index 075b82cac2..2c8a64059a 100644 --- a/views/options/social/challenges.jade +++ b/views/options/social/challenges.jade @@ -92,7 +92,8 @@ script(type='text/ng-template', id='partials/options.social.challenges.html') .option-medium input.option-content(type='text', minlength="3", maxlength="16", ng-model='newChallenge.shortName', placeholder='Tag Name', required) - i.icon-question-sign(popover="Challenges appear on tag-lists & task-tooltips. So while you'll want a descriptive title above, you'll also need a 'short name'. Eg, 'Lose 10 pounds in 3 months' might become '-10lb'", popover-trigger='mouseenter', popover-placement='right') + a(target='_blank', href='http://habitrpg.wikia.com/wiki/Tags') + i.icon-question-sign(popover="Challenges appear on tag-lists & task-tooltips. So while you'll want a descriptive title above, you'll also need a 'short name'. Eg, 'Lose 10 pounds in 3 months' might become '-10lb' (Click the '?' for more info).", popover-trigger='mouseenter', popover-placement='right') textarea.option-content(cols='3', placeholder='Description', ng-model='newChallenge.description') From e458b571dc8ec01ae791f9ee7e2bad5d70da0fdb Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Thu, 21 Nov 2013 20:37:55 -0600 Subject: [PATCH 040/116] Move stat formulae to mouseover popup instead of inline --- views/shared/profiles/stats.jade | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/views/shared/profiles/stats.jade b/views/shared/profiles/stats.jade index 364adbc2e5..fc24520ea8 100644 --- a/views/shared/profiles/stats.jade +++ b/views/shared/profiles/stats.jade @@ -26,17 +26,22 @@ p | : {{profile.stats.exp | number:0}} / {{tnl(profile.stats.lvl)}} p strong Strength - | (Level-1)/2: {{userStr(profile.stats.lvl)}} + | : + span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userStr(profile.stats.lvl)}} p strong Defense - | (Level-1)/2: {{userDef(profile.stats.lvl)}} + | : + span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userDef(profile.stats.lvl)}} p strong Pets Found | : {{countExists(profile.items.pets)}} hr p strong Total Experience Boost - | (Attack + Strength): {{totalStr(profile.stats.lvl, profile.items.weapon)}} % + | : + span(popover-trigger='mouseenter', popover='Attack + Strength') {{totalStr(profile.stats.lvl, profile.items.weapon)}} % + p strong Total Damage Reduction - | (Defense + Protection): {{totalDef(profile.stats.lvl, profile.items.armor, profile.items.head, profile.items.shield)}} % \ No newline at end of file + | : + span(popover-trigger='mouseenter', popover='Defense + Protection') {{totalDef(profile.stats.lvl, profile.items.armor, profile.items.head, profile.items.shield)}} % \ No newline at end of file From a8578602d72818034d6614b43e9707585d5cded2 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 22 Nov 2013 19:21:34 +0100 Subject: [PATCH 041/116] fix drops not showing until refresh --- public/js/controllers/notificationCtrl.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/notificationCtrl.js b/public/js/controllers/notificationCtrl.js index ba9a4cc5aa..2873e1aac3 100644 --- a/public/js/controllers/notificationCtrl.js +++ b/public/js/controllers/notificationCtrl.js @@ -29,7 +29,12 @@ habitrpg.controller('NotificationCtrl', }); $rootScope.$watch('user._tmp.drop', function(after, before){ - if (after == before || !after) return; + if (!after) return; + var type = after.type === 'HatchingPotion' ? 'hatchingPotions' : (after.type.toLowerCase() + 's') + if(!User.user.items[type][after.name]){ + User.user.items[type][after.name] = 0; + } + User.user.items[type][after.name]++; $rootScope.modals.drop = true; }); From efe2ff5d70857d4b25bb5b5c3b455ab879200d4c Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 10:38:40 -0800 Subject: [PATCH 042/116] super awesome mega-fix with unintended awesome collateral-fixes * markdown supported in chat * by proxy, paragraphs are *also* supported in chat now * AND EVEN PROXIER, the issue with emoji not showing properly is fixed --- public/css/game-pane.styl | 5 +++++ views/options/social/chat-message.jade | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/public/css/game-pane.styl b/public/css/game-pane.styl index 34ad09f5f9..74236ced21 100644 --- a/public/css/game-pane.styl +++ b/public/css/game-pane.styl @@ -29,6 +29,11 @@ .own-message border-left: 4px solid #333 padding-left: 2px + + markdown + + p:first-child + display:inline // Name tags .label-contributor-1, .label-contributor-2 diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 8c0dfa08db..65f747df51 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -2,7 +2,7 @@ li(ng-repeat='message in group.chat', ng-class='{highlight: isUserMentioned(user a.label.chat-message(class='label-contributor-{{message.contributor.level}}', ng-class='{"label-npc": message.backer.npc}', ng-click='clickMember(message.uuid, true)') span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}  |   - span(ng-bind-html="message.text | linky:'_blank'") + markdown(ng-model='message.text') |  -  span.muted.time(from-now='message.timestamp') a(ng-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') From e722a064c809a5d2827760ee0d9859855347772c Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 22 Nov 2013 20:11:35 +0100 Subject: [PATCH 043/116] revert drop notification change --- public/js/controllers/notificationCtrl.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/notificationCtrl.js b/public/js/controllers/notificationCtrl.js index 2873e1aac3..759fd267b5 100644 --- a/public/js/controllers/notificationCtrl.js +++ b/public/js/controllers/notificationCtrl.js @@ -29,7 +29,8 @@ habitrpg.controller('NotificationCtrl', }); $rootScope.$watch('user._tmp.drop', function(after, before){ - if (!after) return; + // won't work when getting the same item twice? + if (after == before || !after) return; var type = after.type === 'HatchingPotion' ? 'hatchingPotions' : (after.type.toLowerCase() + 's') if(!User.user.items[type][after.name]){ User.user.items[type][after.name] = 0; From 8e5edbbef84fb6368599de506c819d8b4086d4bc Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 22 Nov 2013 20:23:41 +0100 Subject: [PATCH 044/116] fix #1611, @lefnire added a migration for deleted tags, this time it should not delete all of them ;) --- migrations/20131122_deleted_tags.js | 13 +++++++++++++ src/controllers/user.js | 4 ++++ 2 files changed, 17 insertions(+) create mode 100644 migrations/20131122_deleted_tags.js diff --git a/migrations/20131122_deleted_tags.js b/migrations/20131122_deleted_tags.js new file mode 100644 index 0000000000..e915390041 --- /dev/null +++ b/migrations/20131122_deleted_tags.js @@ -0,0 +1,13 @@ +// Cleanup broken tags +// ------------------------- +db.users.find().forEach(function(user){ + var tasks = user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards); + + _.each(tasks, function(task){ + _.each(task.tags, function(value, key){ //value is true, key is tag.id + if (!_.find(user.tags,{id:key})) delete task.tags[key]; + }); + }); + + db.users.update({_id:user._id}, user); +}); \ No newline at end of file diff --git a/src/controllers/user.js b/src/controllers/user.js index 2a9d0c9956..9738273967 100644 --- a/src/controllers/user.js +++ b/src/controllers/user.js @@ -471,6 +471,10 @@ api.deleteTag = function(req, res){ delete task.tags[tag.id]; }) }) + user.markModified('habits'); + user.markModified('dailys'); + user.markModified('todos'); + user.markModified('rewards'); user.save(function(err,saved){ if (err) return res.json(500, {err: err}); res.send(204); From 2350e3d359fa0ab530edf6bbe8f0c17f45be4630 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 14:23:47 -0800 Subject: [PATCH 045/116] initial load of bindonce, implementation for chat. performance has improved noticibly, but I think we need to do this in a few other places --- bower.json | 4 +++- public/js/app.js | 2 +- public/manifest.json | 1 + views/options/social/chat-message.jade | 6 +++--- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/bower.json b/bower.json index 51760dbeda..5a3ad43ed9 100644 --- a/bower.json +++ b/bower.json @@ -25,6 +25,7 @@ "angular-bootstrap": "~0.5.0", "angular-ui-router": "ca3b4777a603df8f86cfd653c8f6c38b2ae05d89", "angular-loading-bar": "~0.0.5", + "angular-bindonce": "~0.2.1", "bootstrap": "v2.3.2", "bootstrap-datepicker": "~1.2.0", "bootstrap-tour": "0.5.0", @@ -38,7 +39,8 @@ }, "resolutions": { "jquery": "~2.0.3", - "bootstrap": "v2.3.2" + "bootstrap": "v2.3.2", + "angular": "~1.2.1" }, "devDependencies": { "angular-mocks": "~1.2.1" diff --git a/public/js/app.js b/public/js/app.js index 1b4d1d5d18..59ae20a32c 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -9,7 +9,7 @@ window.env.t = function(string){ window.habitrpg = angular.module('habitrpg', ['ngResource', 'ngSanitize', 'userServices', 'groupServices', 'memberServices', 'challengeServices', 'sharedServices', 'authServices', 'notificationServices', 'guideServices', - 'ui.bootstrap', 'ui.keypress', 'ui.router', 'chieffancypants.loadingBar', 'At']) + 'ui.bootstrap', 'ui.keypress', 'ui.router', 'chieffancypants.loadingBar', 'At', 'pasvaz.bindonce']) // @see https://github.com/angular-ui/ui-router/issues/110 and https://github.com/HabitRPG/habitrpg/issues/1705 // temporary hack until they have a better solution diff --git a/public/manifest.json b/public/manifest.json index 4cd6bdf6cd..de6a0bef8b 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -15,6 +15,7 @@ "bower_components/angular-loading-bar/build/loading-bar.js", "bower_components/Angular-At-Directive/src/at.js", "bower_components/Angular-At-Directive/src/caret.js", + "bower_components/angular-bindonce/bindonce.js", "bower_components/bootstrap/docs/assets/js/bootstrap.js", "bower_components/angular-bootstrap/ui-bootstrap.js", diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 65f747df51..24d16810b7 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,10 +1,10 @@ -li(ng-repeat='message in group.chat', ng-class='{highlight: isUserMentioned(user,message), "own-message": user._id == message.uuid}') - a.label.chat-message(class='label-contributor-{{message.contributor.level}}', ng-class='{"label-npc": message.backer.npc}', ng-click='clickMember(message.uuid, true)') +li(bindonce='group.chat', ng-repeat='message in group.chat', bo-class='{highlight: isUserMentioned(user,message), "own-message": user._id == message.uuid}') + a.label.chat-message(class='label-contributor-{{message.contributor.level}}', bo-class='{"label-npc": message.backer.npc}', ng-click='clickMember(message.uuid, true)') span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}  |   markdown(ng-model='message.text') |  -  span.muted.time(from-now='message.timestamp') - a(ng-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') + a(bo-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') | i.icon-remove(tooltip='Delete') From 0d19c0de21b713cd4cfec22b7b8f4f44901fb43d Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 14:40:44 -0800 Subject: [PATCH 046/116] Looked for opportunities to replace ngclass with boclass to improve performance, as well as replacing some instances of ng-if with bo-if --- views/options/social/chat-box.jade | 4 +-- views/options/social/group.jade | 2 +- views/shared/profiles/achievements.jade | 42 ++++++++++++------------- views/shared/tasks/lists.jade | 6 ++-- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/views/options/social/chat-box.jade b/views/options/social/chat-box.jade index 871c165464..1ab956f3d6 100644 --- a/views/options/social/chat-box.jade +++ b/views/options/social/chat-box.jade @@ -5,8 +5,8 @@ form(ng-submit='postChat(group,message.content)') textarea.chat-textarea.option-content(style='height:6em;', ui-keypress='{13:"postChat(group,message.content)"}', ng-model='message.content', updateinterval='250', flag='@', at-user, auto-complete) span.user-list(ng-show='!isAtListHidden') ul.list-at-user - li(ng-repeat='user in users | filter:query.text | limitTo: 5', ng-click='autoComplete(user)') - span.username.label(class='label-contributor-{{user.contributor.level}}', ng-class='{"label-npc": user.backer.npc}') {{user.user}} + li(bindonce='users', ng-repeat='user in users | filter:query.text | limitTo: 5', ng-click='autoComplete(user)') + span.username.label(class='label-contributor-{{user.contributor.level}}', bo-class='{"label-npc": user.backer.npc}') {{user.user}} table.pull-right tr td diff --git a/views/options/social/group.jade b/views/options/social/group.jade index 1c8e0cd884..d007fa82d2 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -48,7 +48,7 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' a(ng-click='removeMember(group, member, true)') i.icon-ban-circle(tooltip='Boot Member') a - span(ng-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') + span(bindonce='group', bo-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') | {{member.profile.name}} tr(ng-if='group.memberCount > group.members.length') td. diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index 94ace40920..7c4e29729a 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -1,4 +1,4 @@ -.achievements-container +.achievements-container(bindonce) //
//
//
@@ -13,73 +13,73 @@ //
//
- div(ng-if='profile.backer.npc') + div(bo-if='profile.backer.npc') .achievement.achievement-helm h5 span.label.label-npc {{profile.backer.npc}} NPC small Backed the Kickstarter project at the maximum level! hr - div(ng-if='profile.contributor.level || user._id == profile._id') + div(bo-if='profile.contributor.level || user._id == profile._id') .achievement.achievement-firefox(ng-if='profile.contributor.level') div(ng-class='{muted: !profile.contributor.level}') h5 - span.label(ng-if='profile.contributor.level', class='label-contributor-{{profile.contributor.level}}') {{contribText(profile.contributor, profile.backer)}} - span.label(ng-if='!profile.contributor.level') Contributor + span.label(bo-if='profile.contributor.level', class='label-contributor-{{profile.contributor.level}}') {{contribText(profile.contributor, profile.backer)}} + span.label(bo-if='!profile.contributor.level') Contributor small. Has contributed to HabitRPG (code, design, pixel art, legal advice, docs, etc). Want this badge? Fix a bug :) hr - div(ng-if='profile.backer.tier') + div(bo-if='profile.backer.tier') .achievement.achievement-heart h5 Kickstarter Backer - ${{profile.backer.tier}} Tier small Backed the Kickstarter Project hr - div(ng-if='profile.achievements.streak || user._id == profile._id') - .achievement.achievement-thermometer(ng-show='profile.achievements.streak') - div(ng-class='{muted: !profile.achievements.streak}') + div(bo-if='profile.achievements.streak || user._id == profile._id') + .achievement.achievement-thermometer(bo-show='profile.achievements.streak') + div(bo-class='{muted: !profile.achievements.streak}') h5 {{profile.achievements.streak || 0 }} Streak Achievement(s) small Has performed {{profile.achievements.streak || 0 }} 21-day streaks on Dailies hr - div(ng-if='profile.achievements.ultimateGear || user._id == profile._id') - .achievement.achievement-armor(ng-show='profile.achievements.ultimateGear') - div(ng-class='{muted: !profile.achievements.ultimateGear}') + div(bo-if='profile.achievements.ultimateGear || user._id == profile._id') + .achievement.achievement-armor(bo-show='profile.achievements.ultimateGear') + div(bo-class='{muted: !profile.achievements.ultimateGear}') h5 Ultimate Gear small Has upgraded to the maximum weapon and armor set hr - div(ng-if='profile.achievements.beastMaster || user._id == profile._id') - .achievement.achievement-rat(ng-show='profile.achievements.beastMaster') - div(ng-class='{muted: !profile.achievements.beastMaster}') + div(bo-if='profile.achievements.beastMaster || user._id == profile._id') + .achievement.achievement-rat(bo-show='profile.achievements.beastMaster') + div(bo-class='{muted: !profile.achievements.beastMaster}') h5 Beast Master small Has found all 90 pets (insanely difficult, give this user props!) hr - div(ng-if='profile.achievements.helpedHabit') + div(bo-if='profile.achievements.helpedHabit') .achievement.achievement-tree h5 Helped Habit Grow small. Helped HabitRPG grow by filling out this survey. hr - div(ng-if='profile.achievements.originalUser || profile.achievements.veteran') + div(bo-if='profile.achievements.originalUser || profile.achievements.veteran') .achievement.achievement-cake - div(ng-if='profile.achievements.veteran') + div(bo-if='profile.achievements.veteran') h5 Veteran small | Has weathered Habit The Grey (our pre Angular website), and has gained many battle-scars from its bugs. - div(ng-if='profile.achievements.originalUser') + div(bo-if='profile.achievements.originalUser') h5 Original User! small | One of the very original early adopters, Talk about alpha tester! hr - div(ng-if='profile.achievements.challenges || user._id == profile._id') + div(bo-if='profile.achievements.challenges || user._id == profile._id') // This is a very strange icon to use. revisit .achievement.achievement-karaoke(ng-show='profile.achievements.challenges') - div(ng-class='{muted: !profile.achievements.challenges}') + div(bo-class='{muted: !profile.achievements.challenges}') h5 Was the winner in the following challenges ul li(ng-repeat='chal in profile.achievements.challenges') {{chal}} diff --git a/views/shared/tasks/lists.jade b/views/shared/tasks/lists.jade index b4e5da4c66..b149ea573c 100644 --- a/views/shared/tasks/lists.jade +++ b/views/shared/tasks/lists.jade @@ -3,7 +3,7 @@ // started to get unwieldy script(id='templates/habitrpg-tasks.html', type="text/ng-template") .grid - .module(ng-repeat='list in lists', ng-class='{"rewards-module": list.type==="reward"}') + .module(bindonce='lists', ng-repeat='list in lists', bo-class='{"rewards-module": list.type==="reward"}') .task-column(class='{{list.type}}s') // Todos export/graph options @@ -59,7 +59,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") span.reward-cost {{item.value}} span.shop_gold // main content - span(ng-class='{"shop_{{item.classes}} shop-sprite item-img": true}') + span(bo-class='{"shop_{{item.classes}} shop-sprite item-img": true}') p.task-text {{item.text}} br @@ -73,7 +73,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") ins.adsbygoogle(ng-init='initAds()', style='display: inline-block; width: 234px; height: 60px;', data-ad-client='ca-pub-3242350243827794', data-ad-slot='9529624576') // Todo Tabs - div(ng-if='main && list.type=="todo"', ng-class='{"tabbable tabs-below": list.type=="todo"}') + div(bo-if='main && list.type=="todo"', bo-class='{"tabbable tabs-below": list.type=="todo"}') button.task-action-btn.tile.spacious.bright(ng-show='list.showCompleted', ng-click='clearCompleted()') Clear Completed // remaining/completed tabs ul.nav.nav-tabs From b431336463f98d7c06b75953de95f5db847ec10a Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 15:16:24 -0800 Subject: [PATCH 047/116] more optimizations with bindonce, replacing ngIf with boIf. some of this was done with an axe rather than a fine brush, so there may be issues we need to be on the watch for. --- views/main/filters.jade | 4 +-- views/options/social/challenge-box.jade | 6 ++-- views/options/social/challenges.jade | 10 +++--- views/options/social/group.jade | 10 +++--- views/shared/modals/members.jade | 16 +++++----- views/shared/profiles/achievements.jade | 2 +- views/shared/tasks/lists.jade | 14 ++++----- views/shared/tasks/task.jade | 42 ++++++++++++------------- 8 files changed, 52 insertions(+), 52 deletions(-) diff --git a/views/main/filters.jade b/views/main/filters.jade index 746606e2ae..6462976628 100644 --- a/views/main/filters.jade +++ b/views/main/filters.jade @@ -5,14 +5,14 @@ li a(rel='tooltip', title='Edit Tags', ng-click='saveOrEdit()') i(ng-class='{"icon-ok": _editing, "icon-pencil": !_editing}') - li(ng-class='{active: user.filters[tag.id]}', ng-repeat='tag in user.tags', style='position: relative;') + li(bindonce='user.tags', ng-class='{active: user.filters[tag.id]}', ng-repeat='tag in user.tags', style='position: relative;') .input-append.option-group.tag-editing(ng-show='_editing') input.input.input-small.option-content.tag-editing-pill(type='text', ng-model='tag.name') span.add-on.tag-editing-pill a.pull-right(ng-click='delete(tag,$index)') i.icon-trash a(ng-hide='_editing', ng-click='toggleFilter(tag)') - i.icon-bullhorn(ng-if="tag.challenge") + i.icon-bullhorn(bo-if="tag.challenge") | {{tag.name}} li form.form-inline(ng-show='_editing', ng-submit='createTag(_newTag)') diff --git a/views/options/social/challenge-box.jade b/views/options/social/challenge-box.jade index 213e61b724..ea8258cb29 100644 --- a/views/options/social/challenge-box.jade +++ b/views/options/social/challenge-box.jade @@ -5,12 +5,12 @@ | Challenges a.pull-right(target='_blank', href='https://trello.com/card/challenges-individual-party-guild-public/50e5d3684fe3a7266b0036d6/58') i.icon-question-sign - .modal-body - div(ng-if='group.challenges.length > 0') + .modal-body(bindonce='group.challenges') + div(bo-if='group.challenges.length > 0') table.table.table-striped tr(ng-repeat='challenge in group.challenges') td a(ui-sref='options.social.challenges.detail({cid:challenge._id})') {{challenge.name}} - div(ng-if='group.challenges.length == 0') + div(bo-if='group.challenges.length == 0') p. No challenges yet, visit Challenges to create one. \ No newline at end of file diff --git a/views/options/social/challenges.jade b/views/options/social/challenges.jade index fa0960558c..b7249de08e 100644 --- a/views/options/social/challenges.jade +++ b/views/options/social/challenges.jade @@ -18,7 +18,7 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.me script(type='text/ng-template', id='partials/options.social.challenges.detail.html') // Edit button - div(ng-if='challenge.leader==user._id') + div(bindonce='challenge', bo-if='challenge.leader==user._id') ul.unstyled li(ng-hide='challenge._locked==false') button.btn.btn-small.btn-default(ng-click='challenge._locked = false') Edit @@ -35,12 +35,12 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.ht textarea.option-content(cols='3', placeholder='Description', ng-model='challenge.description') hr - .well(ng-if='challenge.description') {{challenge.description}} + .well(bindonce='challenge', bo-if='challenge.description') {{challenge.description}} i.icon-question-sign(popover="These are the challenge's tasks. As users participate, they will change color and gain graphs to show you the overall progress of the group.", popover-trigger='mouseenter', popover-placement='right') habitrpg-tasks(obj='challenge', main=false) // Member List - div(ng-if='challenge.members.length > 0') + div(bindonce='challenge', bo-if='challenge.members.length > 0') h3 How's Everyone Doing? menu button.customize-option(ng-repeat='member in challenge.members', ng-click='toggleMember(challenge._id, member._id)') {{member.profile.name}} @@ -49,11 +49,11 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.ht // Accordion version if we choose that instead //- div(ng-if='challenge.members') h4 How's Everyone Doing? - .accordion-group(ng-repeat='member in challenge.members') + .accordion-group(bindonce='challenge.members', ng-repeat='member in challenge.members') .accordion-heading a.accordion-toggle(ng-click='toggleMember(challenge._id, member._id)') {{member.profile.name}} .accordion-body(ng-class='{collapse: $stateParams.uid != member._id}') - .accordion-inner(ng-if='$stateParams.uid == member._id') + .accordion-inner(bo-if='$stateParams.uid == member._id') div(ui-view) script(type='text/ng-template', id='partials/options.social.challenges.html') diff --git a/views/options/social/group.jade b/views/options/social/group.jade index d007fa82d2..d310660a47 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -8,8 +8,8 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' // ------ Information ------- .modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;') - .modal-header - span(ng-if='group.leader == user.id') + .modal-header(bindonce='group') + span(bo-if='group.leader == user.id') button.btn.btn-primary.pull-right(ng-click='save(group)', ng-show='group._editing') Save button.btn.btn-default.pull-right(ng-click='group._editing = true', ng-hide='group._editing') Edit Group h3 {{group.name}} @@ -40,7 +40,7 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' .modal-header h3 Members .modal-body - table.table.table-striped + table.table.table-striped(bindonce='group') tr(ng-repeat='member in group.members') td // allow leaders to ban members @@ -48,9 +48,9 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' a(ng-click='removeMember(group, member, true)') i.icon-ban-circle(tooltip='Boot Member') a - span(bindonce='group', bo-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') + span(bo-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') | {{member.profile.name}} - tr(ng-if='group.memberCount > group.members.length') + tr(bo-if='group.memberCount > group.members.length') td. {{group.memberCount - group.members.length}} more members diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 10de5b3f05..0f1074950e 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -1,18 +1,18 @@ div(ng-controller='MemberModalCtrl') #memberModal(modal='modals.member') - .modal-header + .modal-header(bindonce='profile') h3 span {{profile.profile.name}} - span(ng-if='profile.contributor.level') - {{contribText(profile.contributor, profile.backer)}} - .modal-body + span(bo-if='profile.contributor.level') - {{contribText(profile.contributor, profile.backer)}} + .modal-body(bindonce='profile') .row-fluid .span6 - img(ng-show='profile.profile.imageUrl', ng-src='{{profile.profile.imageUrl}}') - markdown(ng-show='profile.profile.blurb', ng-model='profile.profile.blurb') - ul.muted.unstyled(ng-if='profile.auth.timestamps', style='margin-top:10px;') + img(bo-show='profile.profile.imageUrl', bo-src='{{profile.profile.imageUrl}}') + markdown(bo-show='profile.profile.blurb', ng-model='profile.profile.blurb') + ul.muted.unstyled(bo-if='profile.auth.timestamps', style='margin-top:10px;') li {{profile._id}} - li(ng-show='profile.auth.timestamps.created') - Member since {{timestamp(profile.auth.timestamps.created)}} - - li(ng-show='profile.auth.timestamps.loggedin') - Last logged in {{timestamp(profile.auth.timestamps.loggedin)}} - + li(bo-show='profile.auth.timestamps.created') - Member since {{timestamp(profile.auth.timestamps.created)}} - + li(bo-show='profile.auth.timestamps.loggedin') - Last logged in {{timestamp(profile.auth.timestamps.loggedin)}} - h3 Stats include ../profiles/stats .span6 diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index 7c4e29729a..819a647f61 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -21,7 +21,7 @@ hr div(bo-if='profile.contributor.level || user._id == profile._id') - .achievement.achievement-firefox(ng-if='profile.contributor.level') + .achievement.achievement-firefox(bo-if='profile.contributor.level') div(ng-class='{muted: !profile.contributor.level}') h5 span.label(bo-if='profile.contributor.level', class='label-contributor-{{profile.contributor.level}}') {{contribText(profile.contributor, profile.backer)}} diff --git a/views/shared/tasks/lists.jade b/views/shared/tasks/lists.jade index b149ea573c..5f703ec89e 100644 --- a/views/shared/tasks/lists.jade +++ b/views/shared/tasks/lists.jade @@ -7,7 +7,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") .task-column(class='{{list.type}}s') // Todos export/graph options - span.option-box.pull-right(ng-if='main && list.type=="todo"') + span.option-box.pull-right(bo-if='main && list.type=="todo"') a.option-action(ng-show='obj.history.todos', ng-click='toggleChart("todos")', tooltip='Progress') i.icon-signal //-a.option-action(ng-href='/v1/users/{{user.id}}/calendar.ics?apiToken={{user.apiToken}}', tooltip='iCal') @@ -16,7 +16,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") // // Gold & Gems - span.option-box.pull-right.wallet(ng-if='main && list.type=="reward"') + span.option-box.pull-right.wallet(bo-if='main && list.type=="reward"') .money | {{gold(user.stats.gp)}} span.shop_gold(tooltip='Gold') @@ -28,7 +28,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") h2.task-column_title {{list.header}} // Todo Chart - .todos-chart(ng-if='list.type == "todo"', ng-show='charts.todos') + .todos-chart(bo-if='list.type == "todo"', ng-show='charts.todos') // Add New form.addtask-form.form-inline.new-task-form(name='new{{list.type}}form', ng-hide='obj._locked || (list.showCompleted && list.type=="todo")', ng-submit='addTask(obj[list.type+"s"],list)') @@ -45,7 +45,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") include ./task // Static Rewards - ul.items(ng-if='main && list.type=="reward" && user.flags.itemsEnabled') + ul.items(bo-if='main && list.type=="reward" && user.flags.itemsEnabled') li.task.reward-item(ng-hide='item.hide', ng-repeat='item in itemStore') // right-hand side control buttons .task-meta-controls @@ -53,9 +53,9 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") i.icon-comment //left-hand size commands .task-controls - a.task-action-btn.btn-reroll(ng-if='item.type=="reroll"', ng-click='modals.reroll = true') + a.task-action-btn.btn-reroll(bo-if='item.type=="reroll"', ng-click='modals.reroll = true') i.icon-repeat - a.money.btn-buy.item-btn(ng-if='item.type!="reroll"', ng-click='buy(item.type)') + a.money.btn-buy.item-btn(bo-if='item.type!="reroll"', ng-click='buy(item.type)') span.reward-cost {{item.value}} span.shop_gold // main content @@ -65,7 +65,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") br // Ads - div(ng-if='main && !user.purchased.ads && list.type!="reward"') + div(bo-if='main && !user.purchased.ads && list.type!="reward"') span.pull-right a(ng-click='modals.buyGems=true', tooltip=env.t('removeAds')) i.icon-remove diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 351246c182..cdb23ab44a 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -1,9 +1,9 @@ -li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}', data-id='{{task.id}}') +li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}', data-id='{{task.id}}') // right-hand side control buttons .task-meta-controls // Due Date - span.task-date(ng-if='task.type=="todo" && task.date') + span.task-date(bo-if='task.type=="todo" && task.date') | {{task.date}} // Streak span(ng-show='task.streak') {{task.streak}} @@ -11,7 +11,7 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. i.icon-forward // Icons only available if you own the tasks (aka, hidden from challenge stats) - span(ng-if='!obj._locked') + span(bo-if='!obj._locked') i.icon-tags(tooltip='{{appliedTags(user.tags, task.tags)}}', ng-hide='noTags(task.tags)') // edit a(ng-hide='task._editing', ng-click='editTask(task)', tooltip='Edit') @@ -23,13 +23,13 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. a(ng-hide='!task._editing', ng-click='editTask(task);saveTask(task)', tooltip='Save') i.icon-ok(ng-hide='!task._editing') //challenges - span(ng-if='task.challenge.id') - span(ng-if='task.challenge.broken') + span(bo-if='task.challenge.id') + span(bo-if='task.challenge.broken') i.icon-bullhorn(style='background-color:red;', ng-click='task._editing = true', tooltip="Broken Challenge Link", tooltip-placement='right') - span(ng-if='!task.challenge.broken') + span(bo-if='!task.challenge.broken') i.icon-bullhorn(tooltip="Challenge") // delete - a(ng-if='!task.challenge.id', ng-click='removeTask(obj[list.type+"s"], $index)', tooltip='Delete') + a(bo-if='!task.challenge.id', ng-click='removeTask(obj[list.type+"s"], $index)', tooltip='Delete') i.icon-trash // chart @@ -43,7 +43,7 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. .task-controls.task-primary // Habits - span(ng-if='task.type=="habit"') + span(bo-if='task.type=="habit"') // score() is overridden in challengesCtrl to do nothing a.task-action-btn(ng-if='task.up', ng-click='score(task,"up")') + a.task-action-btn(ng-if='task.down', ng-click='score(task,"down")') - @@ -55,7 +55,7 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. span.shop_gold // Daily & Todos - span.task-checker.action-yesno(ng-if='task.type=="daily" || task.type=="todo"') + span.task-checker.action-yesno(bo-if='task.type=="daily" || task.type=="todo"') input.visuallyhidden.focusable(ng-if='$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox', ng-model='task.completed', ng-change='changeCheck(task)') input.visuallyhidden.focusable(ng-if='!$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox') label(for='box-{{obj._id}}_{{task.id}}') @@ -67,27 +67,27 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. .task-options(ng-show='task._editing') // Broken Challenge - .well(ng-if='task.challenge.broken') - div(ng-if='task.challenge.broken=="TASK_DELETED"') + .well(bo-if='task.challenge.broken') + div(bo-if='task.challenge.broken=="TASK_DELETED"') p Broken Challenge Link: this task was part of a challenge, but has been removed from it. What would you like to do? p a(ng-click='unlink(task, "keep")') Keep It |  |  a(ng-click="removeTask(obj[list.type+'s'], $index)") Remove It - div(ng-if='task.challenge.broken=="CHALLENGE_DELETED"') + div(bo-if='task.challenge.broken=="CHALLENGE_DELETED"') p Broken Challenge Link: this task was part of a challenge, but the challenge (or group) has been deleted. What to do with the orphan tasks? p a(ng-click='unlink(task, "keep-all")') Keep Them |  |  a(ng-click='unlink(task, "remove-all")') Remove Them - div(ng-if='task.challenge.broken=="CHALLENGE_CLOSED"') + div(bo-if='task.challenge.broken=="CHALLENGE_CLOSED"') p. This challenge has been completed, and the winner was {{task.challenge.winner}}! What to do with the orphan tasks? p a(ng-click='unlink(task, "keep-all")') Keep Them |  |  a(ng-click='unlink(task, "remove-all")') Remove Them - //-div(ng-if='task.challenge.broken=="UNSUBSCRIBED"') + //-div(bo-if='task.challenge.broken=="UNSUBSCRIBED"') p Broken Challenge Link: this task was part of a challenge, but you have unsubscribed from the challenge. What to do with the orphan tasks? p a(ng-click="unlink(task, 'keep-all')") Keep Them @@ -104,7 +104,7 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. textarea.option-content(rows='3', ng-model='task.notes', ng-disabled='task.challenge.id') // if Habit, plus/minus command options - fieldset.option-group(ng-if='task.type=="habit" && !task.challenge.id') + fieldset.option-group(bo-if='task.type=="habit" && !task.challenge.id') legend.option-title Direction/Actions span.task-checker.action-plusminus.select-toggle input.visuallyhidden.focusable(id='{{obj._id}}_{{task.id}}-option-plus', type='checkbox', ng-model='task.up') @@ -114,7 +114,7 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. label(for='{{obj._id}}_{{task.id}}-option-minus') // if Daily, calendar - fieldset(ng-if='task.type=="daily"', class="option-group") + fieldset(bo-if='task.type=="daily"', class="option-group") legend.option-title Repeat .task-controls.tile-group.repeat-days // note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding @@ -127,14 +127,14 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', data-day='s', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') S // if Reward, pricing - fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id') + fieldset.option-group.option-short(bo-if='task.type=="reward" && !task.challenge.id') legend.option-title Price input.option-content(type='number', size='16', min='0', step="any", ng-model='task.value') .money.input-suffix span.shop_gold // if Todos, the due date - fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id') + fieldset.option-group(bo-if='task.type=="todo" && !task.challenge.id') legend.option-title Due Date input.option-content.datepicker(type='text', data-date-format='mm/dd/yyyy', ng-model='task.date') @@ -145,7 +145,7 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. | {{tag.name}} // Advanced Options - span(ng-if='task.type!="reward"') + span(bo-if='task.type!="reward"') p.option-title.mega(ng-click='task._advanced = !task._advanced') Advanced Options fieldset.option-group.advanced-option(ng-class="{visuallyhidden: !task._advanced}") legend.option-title @@ -156,8 +156,8 @@ li(ng-repeat='task in obj[list.type+"s"]', class='task {{taskClasses(task, user. button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!" || !task.priority}', ng-click='task.challenge.id || (task.priority="!")') Easy button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!"}', ng-click='task.challenge.id || (task.priority="!!")') Medium button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!!"}', ng-click='task.challenge.id || (task.priority="!!!")') Hard - //-span(ng-if='task.type=="daily" && !task.challenge.id') - span(ng-if='task.type=="daily"') + //-span(bo-if='task.type=="daily" && !task.challenge.id') + span(bo-if='task.type=="daily"') legend.option-title Restore Streak input.option-content(type='number', ng-model='task.streak') button.task-action-btn.tile.spacious(type='submit') Save & Close From fac99c7f7f93b3d6203a354d0b0cf44b1ca677d4 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 22 Nov 2013 16:21:53 -0700 Subject: [PATCH 048/116] [#1862] re-migrat users with items.pets, items.hatchingPotions, or items.eggs which are arrays, not objects. This shouldn't be happening still, need to investigate --- migrations/20131109_refactor_pets.js | 41 ++++++++++++++++------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/migrations/20131109_refactor_pets.js b/migrations/20131109_refactor_pets.js index 1e85ff8fb2..f5d9f7d567 100644 --- a/migrations/20131109_refactor_pets.js +++ b/migrations/20131109_refactor_pets.js @@ -1,31 +1,36 @@ -db.users.find({},{backer: 1, items:1}).forEach(function(user){ - user.items = { - armor: +user.items.armor || 0, - weapon: +user.items.weapon || 0, - head: +user.items.head || 0, - shield: +user.items.shield || 0, +db.users.find( + {$where: "Array.isArray(this.items.pets) || Array.isArray(this.items.eggs) || Array.isArray(this.items.hatchingPotions)"}, + {backer: 1, items:1} +).forEach(function(user){ - pets: _.reduce(user.items.pets, function(m,v){ m[v] = 5; return m;}, {}), - currentPet: user.items.currentPet ? user.items.currentPet.str : '', - eggs: _.reduce(user.items.eggs, function(m,v){ + if (_.isArray(user.items.pets)) { + user.items.pets = _.reduce(user.items.pets, function(m,v){ m[v] = 5; return m;}, {}); + } + + if (!_.isString(user.items.currentPet)) { + user.items.currentPet = user.items.currentPet ? user.items.currentPet.str : ''; + } + + if (_.isArray(user.items.eggs)) { + user.items.eggs = _.reduce(user.items.eggs, function(m,v){ if (!m[v.name]) m[v.name] = 0; m[v.name]++; return m; - }, {}), + }, {}); + } - hatchingPotions: _.reduce(user.items.hatchingPotions, function(m,v){ + if (_.isArray(user.items.hatchingPotions)) { + user.items.hatchingPotions = _.reduce(user.items.hatchingPotions, function(m,v){ if (!m[v]) m[v] = 0; m[v]++; return m; - }, {}), + }, {}); + } - food: {}, + user.items.food = {}; + user.items.mounts = {}; + user.items.currentMount = ''; - mounts: {}, - currentMount: '', - - lastDrop: user.items.lastDrop || {date: new Date(), count: 0} - }; if (user.backer && user.backer.tier && user.backer.tier >= 90) { user.items.mounts['LionCub-Ethereal'] = true; } From dfb09b1f9b35bd9ed2fa675ef397eed7769914de Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 15:59:53 -0800 Subject: [PATCH 049/116] Yeah, this didn't work with the achievements popup, because the same template is used for anyone's modal --- views/shared/profiles/achievements.jade | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index 819a647f61..6736171eb3 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -1,4 +1,4 @@ -.achievements-container(bindonce) +.achievements-container //
//
//
@@ -13,70 +13,70 @@ //
//
- div(bo-if='profile.backer.npc') + div(ng-if='profile.backer.npc') .achievement.achievement-helm h5 span.label.label-npc {{profile.backer.npc}} NPC small Backed the Kickstarter project at the maximum level! hr - div(bo-if='profile.contributor.level || user._id == profile._id') - .achievement.achievement-firefox(bo-if='profile.contributor.level') + div(ng-if='profile.contributor.level || user._id == profile._id') + .achievement.achievement-firefox(ng-if='profile.contributor.level') div(ng-class='{muted: !profile.contributor.level}') h5 - span.label(bo-if='profile.contributor.level', class='label-contributor-{{profile.contributor.level}}') {{contribText(profile.contributor, profile.backer)}} - span.label(bo-if='!profile.contributor.level') Contributor + span.label(ng-if='profile.contributor.level', class='label-contributor-{{profile.contributor.level}}') {{contribText(profile.contributor, profile.backer)}} + span.label(ng-if='!profile.contributor.level') Contributor small. Has contributed to HabitRPG (code, design, pixel art, legal advice, docs, etc). Want this badge? Fix a bug :) hr - div(bo-if='profile.backer.tier') + div(ng-if='profile.backer.tier') .achievement.achievement-heart h5 Kickstarter Backer - ${{profile.backer.tier}} Tier small Backed the Kickstarter Project hr - div(bo-if='profile.achievements.streak || user._id == profile._id') + div(ng-if='profile.achievements.streak || user._id == profile._id') .achievement.achievement-thermometer(bo-show='profile.achievements.streak') div(bo-class='{muted: !profile.achievements.streak}') h5 {{profile.achievements.streak || 0 }} Streak Achievement(s) small Has performed {{profile.achievements.streak || 0 }} 21-day streaks on Dailies hr - div(bo-if='profile.achievements.ultimateGear || user._id == profile._id') + div(ng-if='profile.achievements.ultimateGear || user._id == profile._id') .achievement.achievement-armor(bo-show='profile.achievements.ultimateGear') div(bo-class='{muted: !profile.achievements.ultimateGear}') h5 Ultimate Gear small Has upgraded to the maximum weapon and armor set hr - div(bo-if='profile.achievements.beastMaster || user._id == profile._id') + div(ng-if='profile.achievements.beastMaster || user._id == profile._id') .achievement.achievement-rat(bo-show='profile.achievements.beastMaster') div(bo-class='{muted: !profile.achievements.beastMaster}') h5 Beast Master small Has found all 90 pets (insanely difficult, give this user props!) hr - div(bo-if='profile.achievements.helpedHabit') + div(ng-if='profile.achievements.helpedHabit') .achievement.achievement-tree h5 Helped Habit Grow small. Helped HabitRPG grow by filling out this survey. hr - div(bo-if='profile.achievements.originalUser || profile.achievements.veteran') + div(ng-if='profile.achievements.originalUser || profile.achievements.veteran') .achievement.achievement-cake - div(bo-if='profile.achievements.veteran') + div(ng-if='profile.achievements.veteran') h5 Veteran small | Has weathered Habit The Grey (our pre Angular website), and has gained many battle-scars from its bugs. - div(bo-if='profile.achievements.originalUser') + div(ng-if='profile.achievements.originalUser') h5 Original User! small | One of the very original early adopters, Talk about alpha tester! hr - div(bo-if='profile.achievements.challenges || user._id == profile._id') + div(ng-if='profile.achievements.challenges || user._id == profile._id') // This is a very strange icon to use. revisit .achievement.achievement-karaoke(ng-show='profile.achievements.challenges') div(bo-class='{muted: !profile.achievements.challenges}') From 18d6bed3b86b7c6d0a5bb24ea7a0a070b82cb432 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Thu, 21 Nov 2013 09:53:50 -0800 Subject: [PATCH 050/116] [#1879] separate task schema types into habitschema, dailyschema, etc to reduce server load and to ensure the proper default `type` (some people are getting habits in the wrong columns) --- src/models/challenge.js | 10 +++--- src/models/task.js | 75 +++++++++++++++++++++++++++++++---------- src/models/user.js | 10 +++--- 3 files changed, 68 insertions(+), 27 deletions(-) diff --git a/src/models/challenge.js b/src/models/challenge.js index d00e533631..40f2ddd0c9 100644 --- a/src/models/challenge.js +++ b/src/models/challenge.js @@ -2,7 +2,7 @@ var mongoose = require("mongoose"); var Schema = mongoose.Schema; var helpers = require('habitrpg-shared/script/helpers'); var _ = require('lodash'); -var TaskSchema = require('./task').schema; +var TaskSchemas = require('./task'); var Group = require('./group').model; var ChallengeSchema = new Schema({ @@ -10,10 +10,10 @@ var ChallengeSchema = new Schema({ name: String, shortName: String, description: String, - habits: [TaskSchema], - dailys: [TaskSchema], - todos: [TaskSchema], - rewards: [TaskSchema], + habits: [TaskSchemas.HabitSchema], + dailys: [TaskSchemas.DailySchema], + todos: [TaskSchemas.TodoSchema], + rewards: [TaskSchemas.RewardSchema], leader: {type: String, ref: 'User'}, group: {type: String, ref: 'Group'}, timestamp: {type: Date, 'default': Date.now}, diff --git a/src/models/task.js b/src/models/task.js index 5a4f28953a..67d32929e9 100644 --- a/src/models/task.js +++ b/src/models/task.js @@ -12,37 +12,78 @@ var _ = require('lodash'); // Task Schema // ----------- -var TaskSchema = new Schema({ +var TaskSchema = { //_id:{type: String,'default': helpers.uuid}, id: {type: String,'default': helpers.uuid}, - history: Array, // [{date:Date, value:Number}], // this causes major performance problems text: String, - date: String, // due date for todos // FIXME we're getting parse errors, people have stored as "today" and "3/13". Need to run a migration & put this back to type: Date notes: {type: String, 'default': ''}, tags: {type: Schema.Types.Mixed, 'default': {}}, //{ "4ddf03d9-54bd-41a3-b011-ca1f1d2e9371" : true }, - type: {type:String, 'default': 'habit'}, // habit, daily - up: {type: Boolean, 'default': true}, - down: {type: Boolean, 'default': true}, - value: {type: Number, 'default': 0}, - completed: {type: Boolean, 'default': false}, + value: {type: Number, 'default': 0}, // redness priority: {type: String, 'default': '!'}, //'!!' // FIXME this should be a number or something - repeat: {type: Schema.Types.Mixed, 'default': {m:1, t:1, w:1, th:1, f:1, s:1, su:1} }, - streak: {type: Number, 'default': 0}, challenge: { id: {type: 'String', ref:'Challenge'}, broken: String, // CHALLENGE_DELETED, TASK_DELETED, UNSUBSCRIBED, CHALLENGE_CLOSED winner: String // user.profile.name // group: {type: 'Strign', ref: 'Group'} // if we restore this, rename `id` above to `challenge` } -},{ - _id: false -}); +}; + +var HabitSchema = new Schema( + _.defaults({ + type: {type:String, 'default': 'habit'}, + history: Array, // [{date:Date, value:Number}], // this causes major performance problems + up: {type: Boolean, 'default': true}, + down: {type: Boolean, 'default': true} + }, TaskSchema) + , { _id: false } +); + +var DailySchema = new Schema( + _.defaults({ + type: {type:String, 'default': 'daily'}, + history: Array, + completed: {type: Boolean, 'default': false}, + repeat: { + m: {type: Boolean, 'default': true}, + t: {type: Boolean, 'default': true}, + w: {type: Boolean, 'default': true}, + th: {type: Boolean, 'default': true}, + f: {type: Boolean, 'default': true}, + s: {type: Boolean, 'default': true}, + su: {type: Boolean, 'default': true} + }, + streak: {type: Number, 'default': 0} + }, TaskSchema) + , { _id: false } +) + +var TodoSchema = new Schema( + _.defaults({ + type: {type:String, 'default': 'todo'}, + completed: {type: Boolean, 'default': false}, + date: String // due date for todos // FIXME we're getting parse errors, people have stored as "today" and "3/13". Need to run a migration & put this back to type: Date + }, TaskSchema) + , { _id: false } +); + +var RewardSchema = new Schema( + _.defaults({ + type: {type:String, 'default': 'reward'} + }, TaskSchema) + , { _id: false } +); /** * Workaround for bug when _id & id were out of sync, we can remove this after challenges has been running for a while */ -TaskSchema.post('init', function(doc){ - if (!doc.id && doc._id) doc.id = doc._id; -}) +//_.each([HabitSchema, DailySchema, TodoSchema, RewardSchema], function(schema){ +// schema.post('init', function(doc){ +// if (!doc.id && doc._id) doc.id = doc._id; +// }) +//}) -module.exports.schema = TaskSchema; \ No newline at end of file +module.exports.TaskSchema = TaskSchema; +module.exports.HabitSchema = HabitSchema; +module.exports.DailySchema = DailySchema; +module.exports.TodoSchema = TodoSchema; +module.exports.RewardSchema = RewardSchema; diff --git a/src/models/user.js b/src/models/user.js index ccfc2d6538..9b6adc8dc8 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -9,7 +9,7 @@ var Schema = mongoose.Schema; var helpers = require('habitrpg-shared/script/helpers'); var items = require('habitrpg-shared/script/items'); var _ = require('lodash'); -var TaskSchema = require('./task').schema; +var TaskSchemas = require('./task'); var Challenge = require('./challenge').model; // User Schema @@ -219,10 +219,10 @@ var UserSchema = new Schema({ challenges: [{type: 'String', ref:'Challenge'}], - habits: [TaskSchema], - dailys: [TaskSchema], - todos: [TaskSchema], - rewards: [TaskSchema], + habits: [TaskSchemas.HabitSchema], + dailys: [TaskSchemas.DailySchema], + todos: [TaskSchemas.TodoSchema], + rewards: [TaskSchemas.RewardSchema], }, { strict: true, From f26cb2abf3ff906cc5af23e4fc67a15ecbb38a93 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 21:15:28 -0800 Subject: [PATCH 051/116] making it nicer to be in chat if someone decides to post spammy crap or huge images --- public/css/game-pane.styl | 29 ++++++++++++++++++++++++++ views/options/social/chat-message.jade | 21 +++++++++++-------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/public/css/game-pane.styl b/public/css/game-pane.styl index 74236ced21..3145928b4d 100644 --- a/public/css/game-pane.styl +++ b/public/css/game-pane.styl @@ -19,12 +19,37 @@ padding-bottom:15px border-bottom 1px solid #ddd word-wrap:break-word + position:relative &.highlight background #EEE label margin-right:5px + + .float-label + float:left + position:absolute + top:17px; + + .hidden-label + visibility:hidden + + .scrollable-message + max-height:75px + overflow-y:auto + + .expander + float: right + position: absolute + bottom: 18px + right: 20px + background: white + max-width: 20px + max-height: 20px + width: 100% + height: 100% + text-align: center .own-message border-left: 4px solid #333 @@ -34,6 +59,10 @@ p:first-child display:inline + + img + max-height:50px + vertical-align:top // Name tags .label-contributor-1, .label-contributor-2 diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 24d16810b7..4cb1af4a28 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,10 +1,13 @@ li(bindonce='group.chat', ng-repeat='message in group.chat', bo-class='{highlight: isUserMentioned(user,message), "own-message": user._id == message.uuid}') - a.label.chat-message(class='label-contributor-{{message.contributor.level}}', bo-class='{"label-npc": message.backer.npc}', ng-click='clickMember(message.uuid, true)') - span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}  - |   - markdown(ng-model='message.text') - |  -  - span.muted.time(from-now='message.timestamp') - a(bo-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') - | - i.icon-remove(tooltip='Delete') + div(class='scrollable-message') + a.label.chat-message(class='hidden-label') + span {{message.user}}  + |   + markdown(ng-model='message.text') + |  -  + span.muted.time(from-now='message.timestamp') + a(bo-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') + | + i.icon-remove(tooltip='Delete') + a.label.chat-message(class='float-label label-contributor-{{message.contributor.level}}', bo-class='{"label-npc": message.backer.npc}', ng-click='clickMember(message.uuid, true)') + span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}  From be4691cf5811037000228c0e26b219b4163d2ebd Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Sat, 23 Nov 2013 16:21:43 +1100 Subject: [PATCH 052/116] sort by level --- public/js/controllers/headerCtrl.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/public/js/controllers/headerCtrl.js b/public/js/controllers/headerCtrl.js index 65da48b89e..a5f96ad311 100644 --- a/public/js/controllers/headerCtrl.js +++ b/public/js/controllers/headerCtrl.js @@ -3,9 +3,14 @@ habitrpg.controller("HeaderCtrl", ['$scope', 'Groups', 'User', function($scope, Groups, User) { $scope.party = Groups.party(function(){ - $scope.partyMinusSelf = _.filter($scope.party.members, function(member){ - return member._id !== User.user._id; - }); + $scope.partyMinusSelf = _.sortBy( + _.filter($scope.party.members, function(member){ + return member._id !== User.user._id; + }), + function (member) { + return member.stats.lvl + } + ).reverse() }); } ]); From 9e5e035c6e5a0ab1a98066133dadaf8b5849dc36 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Fri, 22 Nov 2013 23:22:28 -0600 Subject: [PATCH 053/116] Fix matters of colons: missing space after colon in stats, colon getting placed after tags in task tag list. --- views/shared/profiles/stats.jade | 8 ++++---- views/shared/tasks/task.jade | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/views/shared/profiles/stats.jade b/views/shared/profiles/stats.jade index fc24520ea8..13b82771f9 100644 --- a/views/shared/profiles/stats.jade +++ b/views/shared/profiles/stats.jade @@ -26,11 +26,11 @@ p | : {{profile.stats.exp | number:0}} / {{tnl(profile.stats.lvl)}} p strong Strength - | : + | :  span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userStr(profile.stats.lvl)}} p strong Defense - | : + | :  span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userDef(profile.stats.lvl)}} p strong Pets Found @@ -38,10 +38,10 @@ p hr p strong Total Experience Boost - | : + | :  span(popover-trigger='mouseenter', popover='Attack + Strength') {{totalStr(profile.stats.lvl, profile.items.weapon)}} % p strong Total Damage Reduction - | : + | :  span(popover-trigger='mouseenter', popover='Defense + Protection') {{totalDef(profile.stats.lvl, profile.items.armor, profile.items.head, profile.items.shield)}} % \ No newline at end of file diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index cdb23ab44a..51be520a49 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -140,9 +140,9 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') legend.option-title Tags - label.checkbox(ng-repeat='tag in user.tags') - input(type='checkbox', ng-model='task.tags[tag.id]') - | {{tag.name}} + label.checkbox(ng-repeat='tag in user.tags') + input(type='checkbox', ng-model='task.tags[tag.id]') + | {{tag.name}} // Advanced Options span(bo-if='task.type!="reward"') From 123c515cbb44fa2504d1c91ad8b78e6385a77ee7 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 22 Nov 2013 23:22:24 -0700 Subject: [PATCH 054/116] challenges: only push history for dailies / habits --- src/models/user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/models/user.js b/src/models/user.js index 9b6adc8dc8..4b43142bd3 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -287,7 +287,9 @@ UserSchema.methods.syncScoreToChallenge = function(task, delta){ var t = chal.tasks[task.id]; if (!t) return chal.syncToUser(self); // this task was removed from the challenge, notify user t.value += delta; - t.history.push({value: t.value, date: +new Date}); + if (t.type == 'habit' || t.type == 'daily') { + t.history.push({value: t.value, date: +new Date}); + } chal.save(); }); } From 2a7adf7285a4f3d441603c233e417b0aef0e0e44 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 22:44:02 -0800 Subject: [PATCH 055/116] reverting more bindonce changes... * challenges are not showing, this could be related to the bo-if directive being broken https://github.com/Pasvaz/bindonce/issues/29 * NPCs lost their color because bindonce seems to have a major issue on tags that are using both interpolation and the bo-class directives --- views/options/social/challenge-box.jade | 4 ++-- views/options/social/challenges.jade | 8 ++++---- views/options/social/chat-message.jade | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/views/options/social/challenge-box.jade b/views/options/social/challenge-box.jade index ea8258cb29..09d545635b 100644 --- a/views/options/social/challenge-box.jade +++ b/views/options/social/challenge-box.jade @@ -6,11 +6,11 @@ a.pull-right(target='_blank', href='https://trello.com/card/challenges-individual-party-guild-public/50e5d3684fe3a7266b0036d6/58') i.icon-question-sign .modal-body(bindonce='group.challenges') - div(bo-if='group.challenges.length > 0') + div(ng-if='group.challenges.length > 0') table.table.table-striped tr(ng-repeat='challenge in group.challenges') td a(ui-sref='options.social.challenges.detail({cid:challenge._id})') {{challenge.name}} - div(bo-if='group.challenges.length == 0') + div(ng-if='group.challenges.length == 0') p. No challenges yet, visit Challenges to create one. \ No newline at end of file diff --git a/views/options/social/challenges.jade b/views/options/social/challenges.jade index b7249de08e..c15d36b32f 100644 --- a/views/options/social/challenges.jade +++ b/views/options/social/challenges.jade @@ -18,7 +18,7 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.me script(type='text/ng-template', id='partials/options.social.challenges.detail.html') // Edit button - div(bindonce='challenge', bo-if='challenge.leader==user._id') + div(bindonce='challenge', ng-if='challenge.leader==user._id') ul.unstyled li(ng-hide='challenge._locked==false') button.btn.btn-small.btn-default(ng-click='challenge._locked = false') Edit @@ -35,12 +35,12 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.ht textarea.option-content(cols='3', placeholder='Description', ng-model='challenge.description') hr - .well(bindonce='challenge', bo-if='challenge.description') {{challenge.description}} + .well(bindonce='challenge', ng-if='challenge.description') {{challenge.description}} i.icon-question-sign(popover="These are the challenge's tasks. As users participate, they will change color and gain graphs to show you the overall progress of the group.", popover-trigger='mouseenter', popover-placement='right') habitrpg-tasks(obj='challenge', main=false) // Member List - div(bindonce='challenge', bo-if='challenge.members.length > 0') + div(bindonce='challenge', ng-if='challenge.members.length > 0') h3 How's Everyone Doing? menu button.customize-option(ng-repeat='member in challenge.members', ng-click='toggleMember(challenge._id, member._id)') {{member.profile.name}} @@ -53,7 +53,7 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.ht .accordion-heading a.accordion-toggle(ng-click='toggleMember(challenge._id, member._id)') {{member.profile.name}} .accordion-body(ng-class='{collapse: $stateParams.uid != member._id}') - .accordion-inner(bo-if='$stateParams.uid == member._id') + .accordion-inner(ng-if='$stateParams.uid == member._id') div(ui-view) script(type='text/ng-template', id='partials/options.social.challenges.html') diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 4cb1af4a28..9271b75c15 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -9,5 +9,5 @@ li(bindonce='group.chat', ng-repeat='message in group.chat', bo-class='{highligh a(bo-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') | i.icon-remove(tooltip='Delete') - a.label.chat-message(class='float-label label-contributor-{{message.contributor.level}}', bo-class='{"label-npc": message.backer.npc}', ng-click='clickMember(message.uuid, true)') + a.label.chat-message(ng-class='{"label-npc": message.backer.npc}', class='float-label label-contributor-{{message.contributor.level}}', ng-click='clickMember(message.uuid, true)') span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}  From 90582c3709aaf7b5f5a21671c6f567a156329876 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 22 Nov 2013 22:57:41 -0800 Subject: [PATCH 056/116] more bindonce rollbacks... bo-if seems to work sometimes, othertimes not --- views/shared/tasks/task.jade | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index cdb23ab44a..90263608de 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -11,7 +11,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl i.icon-forward // Icons only available if you own the tasks (aka, hidden from challenge stats) - span(bo-if='!obj._locked') + span(ng-if='!obj._locked') i.icon-tags(tooltip='{{appliedTags(user.tags, task.tags)}}', ng-hide='noTags(task.tags)') // edit a(ng-hide='task._editing', ng-click='editTask(task)', tooltip='Edit') @@ -23,13 +23,13 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl a(ng-hide='!task._editing', ng-click='editTask(task);saveTask(task)', tooltip='Save') i.icon-ok(ng-hide='!task._editing') //challenges - span(bo-if='task.challenge.id') - span(bo-if='task.challenge.broken') + span(ng-if='task.challenge.id') + span(ng-if='task.challenge.broken') i.icon-bullhorn(style='background-color:red;', ng-click='task._editing = true', tooltip="Broken Challenge Link", tooltip-placement='right') - span(bo-if='!task.challenge.broken') + span(ng-if='!task.challenge.broken') i.icon-bullhorn(tooltip="Challenge") // delete - a(bo-if='!task.challenge.id', ng-click='removeTask(obj[list.type+"s"], $index)', tooltip='Delete') + a(ng-if='!task.challenge.id', ng-click='removeTask(obj[list.type+"s"], $index)', tooltip='Delete') i.icon-trash // chart @@ -67,27 +67,27 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl .task-options(ng-show='task._editing') // Broken Challenge - .well(bo-if='task.challenge.broken') - div(bo-if='task.challenge.broken=="TASK_DELETED"') + .well(ng-if='task.challenge.broken') + div(ng-if='task.challenge.broken=="TASK_DELETED"') p Broken Challenge Link: this task was part of a challenge, but has been removed from it. What would you like to do? p a(ng-click='unlink(task, "keep")') Keep It |  |  a(ng-click="removeTask(obj[list.type+'s'], $index)") Remove It - div(bo-if='task.challenge.broken=="CHALLENGE_DELETED"') + div(ng-if='task.challenge.broken=="CHALLENGE_DELETED"') p Broken Challenge Link: this task was part of a challenge, but the challenge (or group) has been deleted. What to do with the orphan tasks? p a(ng-click='unlink(task, "keep-all")') Keep Them |  |  a(ng-click='unlink(task, "remove-all")') Remove Them - div(bo-if='task.challenge.broken=="CHALLENGE_CLOSED"') + div(ng-if='task.challenge.broken=="CHALLENGE_CLOSED"') p. This challenge has been completed, and the winner was {{task.challenge.winner}}! What to do with the orphan tasks? p a(ng-click='unlink(task, "keep-all")') Keep Them |  |  a(ng-click='unlink(task, "remove-all")') Remove Them - //-div(bo-if='task.challenge.broken=="UNSUBSCRIBED"') + //-div(ng-if='task.challenge.broken=="UNSUBSCRIBED"') p Broken Challenge Link: this task was part of a challenge, but you have unsubscribed from the challenge. What to do with the orphan tasks? p a(ng-click="unlink(task, 'keep-all')") Keep Them @@ -104,7 +104,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl textarea.option-content(rows='3', ng-model='task.notes', ng-disabled='task.challenge.id') // if Habit, plus/minus command options - fieldset.option-group(bo-if='task.type=="habit" && !task.challenge.id') + fieldset.option-group(ng-if='task.type=="habit" && !task.challenge.id') legend.option-title Direction/Actions span.task-checker.action-plusminus.select-toggle input.visuallyhidden.focusable(id='{{obj._id}}_{{task.id}}-option-plus', type='checkbox', ng-model='task.up') @@ -127,14 +127,14 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', data-day='s', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') S // if Reward, pricing - fieldset.option-group.option-short(bo-if='task.type=="reward" && !task.challenge.id') + fieldset.option-group.option-short(ngs-if='task.type=="reward" && !task.challenge.id') legend.option-title Price input.option-content(type='number', size='16', min='0', step="any", ng-model='task.value') .money.input-suffix span.shop_gold // if Todos, the due date - fieldset.option-group(bo-if='task.type=="todo" && !task.challenge.id') + fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id') legend.option-title Due Date input.option-content.datepicker(type='text', data-date-format='mm/dd/yyyy', ng-model='task.date') From 5579030d204b417165e98dbe2e4fb40ef15e15af Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Sat, 23 Nov 2013 20:52:36 +1100 Subject: [PATCH 057/116] party.order set and cases added --- public/js/controllers/headerCtrl.js | 18 +++++++++++++++++- src/models/user.js | 6 +++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/public/js/controllers/headerCtrl.js b/public/js/controllers/headerCtrl.js index a5f96ad311..369f0bfc85 100644 --- a/public/js/controllers/headerCtrl.js +++ b/public/js/controllers/headerCtrl.js @@ -2,13 +2,29 @@ habitrpg.controller("HeaderCtrl", ['$scope', 'Groups', 'User', function($scope, Groups, User) { + + $scope.party = Groups.party(function(){ $scope.partyMinusSelf = _.sortBy( _.filter($scope.party.members, function(member){ return member._id !== User.user._id; }), function (member) { - return member.stats.lvl + switch(User.user.party.order) + { + case 'level': + return member.stats.lvl; + break; + case 'random': + return Math.random(); + break; + case 'pets': + return member.items.pets.length; + break; + default: + // party date joined + return true; + } } ).reverse() }); diff --git a/src/models/user.js b/src/models/user.js index 9b6adc8dc8..6a336cd4bd 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -110,8 +110,7 @@ var UserSchema = new Schema({ head: Number, shield: Number, - // -------------- Animals ------------------- - + // -------------- Animals ------------------- // Complex bit here. The result looks like: // pets: { // 'Wolf-Desert': 0, // 0 means does not own @@ -182,7 +181,8 @@ var UserSchema = new Schema({ current: String, // party._id invitation: String, // party._id lastMessageSeen: String, - leader: Boolean + leader: Boolean, + order: {type:String, 'default':'level'} }, preferences: { armorSet: String, From dcd0e7e95b5a845482c39a8afe6300d0fe9c3539 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Sat, 23 Nov 2013 21:59:58 +1100 Subject: [PATCH 058/116] =?UTF-8?q?add=20setting=20in=20Social=E2=86=92Par?= =?UTF-8?q?ty=E2=86=92Members?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/js/controllers/groupsCtrl.js | 7 +++++++ views/options/social/group.jade | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 68ed8e288e..8264dfe905 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -180,6 +180,13 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A group.$get(); } + // List of Ordering options for the party members list + $scope.partyOrderChoices = { + 'level': 'Sort by Level', + 'random': 'Sort randomly', + 'pets': 'Sort by number of pets', + }; + }]) .controller("GuildsCtrl", ['$scope', 'Groups', 'User', '$rootScope', '$state', '$location', diff --git a/views/options/social/group.jade b/views/options/social/group.jade index d310660a47..95fbae0e99 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -40,6 +40,15 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' .modal-header h3 Members .modal-body + span + | Party Members list ordering + select#partyOrder( + style='width:140px', + ng-model='user.party.order', + ng-controller='ChatCtrl', + ng-options='k as v for (k , v) in partyOrderChoices', + ng-change='set("party.order", user.party.order)' + ) table.table.table-striped(bindonce='group') tr(ng-repeat='member in group.members') td From cef1e07b18cf03e304c9178094657f950be59504 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Sat, 23 Nov 2013 22:03:13 +1100 Subject: [PATCH 059/116] =?UTF-8?q?add=20migration=20script=20=E2=86=92=20?= =?UTF-8?q?default=20'random'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- migrations/20131123_set_default_party_order.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 migrations/20131123_set_default_party_order.js diff --git a/migrations/20131123_set_default_party_order.js b/migrations/20131123_set_default_party_order.js new file mode 100644 index 0000000000..970e37e05b --- /dev/null +++ b/migrations/20131123_set_default_party_order.js @@ -0,0 +1,8 @@ +//Add default to randomize party members list +db.users.update( + {}, + {$set:{ + 'party.order': 'random', + }}, + {multi:true} +) From b36a288f041482ae374a9780fd17cd49ae7059df Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Sat, 23 Nov 2013 22:06:22 +1100 Subject: [PATCH 060/116] add sort by date joined option --- public/js/controllers/groupsCtrl.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 8264dfe905..b2d6a6376c 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -185,6 +185,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A 'level': 'Sort by Level', 'random': 'Sort randomly', 'pets': 'Sort by number of pets', + 'party_date_joined': 'Sort by Party date joined', }; }]) From 983df5c97cceab2ec5190522a0a1fd43572c676a Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Fri, 22 Nov 2013 23:22:28 -0600 Subject: [PATCH 061/116] Fix matters of colons: missing space after colon in stats, colon getting placed after tags in task tag list. --- views/shared/profiles/stats.jade | 8 ++++---- views/shared/tasks/task.jade | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/views/shared/profiles/stats.jade b/views/shared/profiles/stats.jade index fc24520ea8..13b82771f9 100644 --- a/views/shared/profiles/stats.jade +++ b/views/shared/profiles/stats.jade @@ -26,11 +26,11 @@ p | : {{profile.stats.exp | number:0}} / {{tnl(profile.stats.lvl)}} p strong Strength - | : + | :  span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userStr(profile.stats.lvl)}} p strong Defense - | : + | :  span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userDef(profile.stats.lvl)}} p strong Pets Found @@ -38,10 +38,10 @@ p hr p strong Total Experience Boost - | : + | :  span(popover-trigger='mouseenter', popover='Attack + Strength') {{totalStr(profile.stats.lvl, profile.items.weapon)}} % p strong Total Damage Reduction - | : + | :  span(popover-trigger='mouseenter', popover='Defense + Protection') {{totalDef(profile.stats.lvl, profile.items.armor, profile.items.head, profile.items.shield)}} % \ No newline at end of file diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 90263608de..f78f867d34 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -140,9 +140,9 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') legend.option-title Tags - label.checkbox(ng-repeat='tag in user.tags') - input(type='checkbox', ng-model='task.tags[tag.id]') - | {{tag.name}} + label.checkbox(ng-repeat='tag in user.tags') + input(type='checkbox', ng-model='task.tags[tag.id]') + | {{tag.name}} // Advanced Options span(bo-if='task.type!="reward"') From d4b25fdc5fad9fa4edda9be9d6259674f548c631 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Sun, 24 Nov 2013 00:37:58 +1100 Subject: [PATCH 062/116] change avatars lvl colors --- public/css/index.styl | 3 +-- views/shared/header/avatar.jade | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/css/index.styl b/public/css/index.styl index 776b93120f..4d149f27e2 100644 --- a/public/css/index.styl +++ b/public/css/index.styl @@ -164,7 +164,6 @@ div.tooltip-inner { position absolute bottom 0px right 0px - background-color #dfe9ea padding 1px 3px 1px 3px a @@ -178,4 +177,4 @@ a .modal-indented-list margin-left: 10px; - padding-left: 10px; \ No newline at end of file + padding-left: 10px; diff --git a/views/shared/header/avatar.jade b/views/shared/header/avatar.jade index 4ea0f2b05c..f064c1a2d3 100644 --- a/views/shared/header/avatar.jade +++ b/views/shared/header/avatar.jade @@ -27,4 +27,5 @@ figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile // Pet // FIXME handle @minimal, this might have to be a directive span.current-pet(class='Pet-{{profile.items.currentPet}}', ng-show='profile.items.currentPet && !minimal') - .avatar-level Lvl {{profile.stats.lvl}} + .avatar-level(class='label label-contributor-{{profile.contributor.level}}' ng-class='{"badge badge-info": {{party.leader==profile._id}}}') + | Lvl {{profile.stats.lvl}} From 0d6f3dd5e62772591f70dd73c13d3ada4265f3bd Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sat, 23 Nov 2013 09:46:28 -0600 Subject: [PATCH 063/116] Make number format consistent between current exp and exp TNL (fix #1827) --- views/shared/header/header.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/header/header.jade b/views/shared/header/header.jade index 626d295786..5f7819e656 100644 --- a/views/shared/header/header.jade +++ b/views/shared/header/header.jade @@ -20,7 +20,7 @@ .bar(style='width: {{percent(user.stats.exp,tnl(user.stats.lvl))}}%;') span.meter-text i.icon-star - | {{user.stats.exp | number:0}} / {{tnl(user.stats.lvl)}} + | {{user.stats.exp | number:0}} / {{tnl(user.stats.lvl) | number:0}} // FIXME doesn't look great here, but the "Experience" CSS title rollover covers it where it was before span(ng-show='user.history.exp') a(ng-click='toggleChart("exp")', tooltip='Progress') From df5a43633863d2229aab80fb2ca4568142ebd246 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sat, 23 Nov 2013 17:42:47 +0100 Subject: [PATCH 064/116] use countPets also for stats, fix #1898 --- public/js/controllers/rootCtrl.js | 6 ++++++ views/shared/profiles/stats.jade | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/rootCtrl.js b/public/js/controllers/rootCtrl.js index 607bd333e7..be95206e0f 100644 --- a/public/js/controllers/rootCtrl.js +++ b/public/js/controllers/rootCtrl.js @@ -24,6 +24,12 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ // count pets, mounts collected totals, etc $rootScope.countExists = function(items) {return _.reduce(items,function(m,v){return m+(v?1:0)},0)} + $rootScope.petCount = window.habitrpgShared.helpers.countPets(null, User.user.items.pets); + + $rootScope.$watch('user.items.pets', function(pets){ + $rootScope.petCount = window.habitrpgShared.helpers.countPets($rootScope.countExists(pets), User.user.items.pets); + }, true); + $scope.safeApply = function(fn) { var phase = this.$root.$$phase; if(phase == '$apply' || phase == '$digest') { diff --git a/views/shared/profiles/stats.jade b/views/shared/profiles/stats.jade index fc24520ea8..79075574fc 100644 --- a/views/shared/profiles/stats.jade +++ b/views/shared/profiles/stats.jade @@ -34,7 +34,7 @@ p span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userDef(profile.stats.lvl)}} p strong Pets Found - | : {{countExists(profile.items.pets)}} + | : {{petCount}} hr p strong Total Experience Boost From 1dfd3b8b05d5256e94f75db4a9ccadb456f5b832 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sat, 23 Nov 2013 17:45:03 +0100 Subject: [PATCH 065/116] remove code moved in previous commit --- public/js/controllers/inventoryCtrl.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/public/js/controllers/inventoryCtrl.js b/public/js/controllers/inventoryCtrl.js index 01edc645a9..28deb61463 100644 --- a/public/js/controllers/inventoryCtrl.js +++ b/public/js/controllers/inventoryCtrl.js @@ -7,15 +7,11 @@ habitrpg.controller("InventoryCtrl", ['$rootScope', '$scope', 'User', 'API_URL', $scope.selectedEgg = null; // {index: 1, name: "Tiger", value: 5} $scope.selectedPotion = null; // {index: 5, name: "Red", value: 3} - $scope.petCount = window.habitrpgShared.helpers.countPets(null, User.user.items.pets); $scope.totalPets = _.size($scope.Items.eggs) * _.size($scope.Items.hatchingPotions); // count egg, food, hatchingPotion stack totals var countStacks = function(items) { return _.reduce(items,function(m,v){return m+v;},0);} - $scope.$watch('user.items.pets', function(pets){ - $scope.petCount = window.habitrpgShared.helpers.countPets($rootScope.countExists(pets), User.user.items.pets); - }, true); $scope.$watch('user.items.mounts', function(mounts){ $scope.mountCount = $rootScope.countExists(mounts); }, true); $scope.$watch('user.items.eggs', function(eggs){ $scope.eggCount = countStacks(eggs); }, true); $scope.$watch('user.items.hatchingPotions', function(pots){ $scope.potCount = countStacks(pots); }, true); From 40de2f3bf00c1b79e4724c63fe198a225dcacd6c Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 23 Nov 2013 09:26:39 -0800 Subject: [PATCH 066/116] manual testing of bindonce commencing -____- --- views/main/filters.jade | 1 + views/options/social/chat-box.jade | 2 +- views/options/social/group.jade | 3 +++ views/shared/modals/members.jade | 6 ++++++ views/shared/profiles/achievements.jade | 7 +++++++ views/shared/tasks/lists.jade | 12 +++++++++++- views/shared/tasks/task.jade | 10 ++++++++-- 7 files changed, 37 insertions(+), 4 deletions(-) diff --git a/views/main/filters.jade b/views/main/filters.jade index 6462976628..2c5190c9bc 100644 --- a/views/main/filters.jade +++ b/views/main/filters.jade @@ -12,6 +12,7 @@ a.pull-right(ng-click='delete(tag,$index)') i.icon-trash a(ng-hide='_editing', ng-click='toggleFilter(tag)') + // todo test i.icon-bullhorn(bo-if="tag.challenge") | {{tag.name}} li diff --git a/views/options/social/chat-box.jade b/views/options/social/chat-box.jade index 1ab956f3d6..423abfeacd 100644 --- a/views/options/social/chat-box.jade +++ b/views/options/social/chat-box.jade @@ -6,7 +6,7 @@ form(ng-submit='postChat(group,message.content)') span.user-list(ng-show='!isAtListHidden') ul.list-at-user li(bindonce='users', ng-repeat='user in users | filter:query.text | limitTo: 5', ng-click='autoComplete(user)') - span.username.label(class='label-contributor-{{user.contributor.level}}', bo-class='{"label-npc": user.backer.npc}') {{user.user}} + span.username.label(class='label-contributor-{{user.contributor.level}}', ng-class='{"label-npc": user.backer.npc}') {{user.user}} table.pull-right tr td diff --git a/views/options/social/group.jade b/views/options/social/group.jade index d310660a47..fa87ef4d7d 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -9,6 +9,7 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' // ------ Information ------- .modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;') .modal-header(bindonce='group') + // todo test span(bo-if='group.leader == user.id') button.btn.btn-primary.pull-right(ng-click='save(group)', ng-show='group._editing') Save button.btn.btn-default.pull-right(ng-click='group._editing = true', ng-hide='group._editing') Edit Group @@ -48,8 +49,10 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' a(ng-click='removeMember(group, member, true)') i.icon-ban-circle(tooltip='Boot Member') a + // todo test span(bo-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') | {{member.profile.name}} + // todo test tr(bo-if='group.memberCount > group.members.length') td. {{group.memberCount - group.members.length}} more members diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 0f1074950e..83ab214b17 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -3,15 +3,21 @@ div(ng-controller='MemberModalCtrl') .modal-header(bindonce='profile') h3 span {{profile.profile.name}} + // todo test span(bo-if='profile.contributor.level') - {{contribText(profile.contributor, profile.backer)}} .modal-body(bindonce='profile') .row-fluid .span6 + // todo test img(bo-show='profile.profile.imageUrl', bo-src='{{profile.profile.imageUrl}}') + // todo test markdown(bo-show='profile.profile.blurb', ng-model='profile.profile.blurb') + // todo test ul.muted.unstyled(bo-if='profile.auth.timestamps', style='margin-top:10px;') li {{profile._id}} + // todo test li(bo-show='profile.auth.timestamps.created') - Member since {{timestamp(profile.auth.timestamps.created)}} - + // todo test li(bo-show='profile.auth.timestamps.loggedin') - Last logged in {{timestamp(profile.auth.timestamps.loggedin)}} - h3 Stats include ../profiles/stats diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index 6736171eb3..a8f8b99772 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -37,21 +37,27 @@ hr div(ng-if='profile.achievements.streak || user._id == profile._id') + // todo test .achievement.achievement-thermometer(bo-show='profile.achievements.streak') + // todo test div(bo-class='{muted: !profile.achievements.streak}') h5 {{profile.achievements.streak || 0 }} Streak Achievement(s) small Has performed {{profile.achievements.streak || 0 }} 21-day streaks on Dailies hr div(ng-if='profile.achievements.ultimateGear || user._id == profile._id') + // todo test .achievement.achievement-armor(bo-show='profile.achievements.ultimateGear') + // todo test div(bo-class='{muted: !profile.achievements.ultimateGear}') h5 Ultimate Gear small Has upgraded to the maximum weapon and armor set hr div(ng-if='profile.achievements.beastMaster || user._id == profile._id') + // todo test .achievement.achievement-rat(bo-show='profile.achievements.beastMaster') + // todo test div(bo-class='{muted: !profile.achievements.beastMaster}') h5 Beast Master small Has found all 90 pets (insanely difficult, give this user props!) @@ -79,6 +85,7 @@ div(ng-if='profile.achievements.challenges || user._id == profile._id') // This is a very strange icon to use. revisit .achievement.achievement-karaoke(ng-show='profile.achievements.challenges') + // todo test div(bo-class='{muted: !profile.achievements.challenges}') h5 Was the winner in the following challenges ul diff --git a/views/shared/tasks/lists.jade b/views/shared/tasks/lists.jade index 5f703ec89e..d848f004e5 100644 --- a/views/shared/tasks/lists.jade +++ b/views/shared/tasks/lists.jade @@ -3,19 +3,22 @@ // started to get unwieldy script(id='templates/habitrpg-tasks.html', type="text/ng-template") .grid + // todo test .module(bindonce='lists', ng-repeat='list in lists', bo-class='{"rewards-module": list.type==="reward"}') .task-column(class='{{list.type}}s') // Todos export/graph options + // todo test span.option-box.pull-right(bo-if='main && list.type=="todo"') a.option-action(ng-show='obj.history.todos', ng-click='toggleChart("todos")', tooltip='Progress') i.icon-signal - //-a.option-action(ng-href='/v1/users/{{user.id}}/calendar.ics?apiToken={{user.apiToken}}', tooltip='iCal') + //a.option-action(ng-href='/v1/users/{{user.id}}/calendar.ics?apiToken={{user.apiToken}}', tooltip='iCal') a.option-action(ng-click='notPorted()', tooltip='iCal', ng-show='false') i.icon-calendar // // Gold & Gems + // todo test span.option-box.pull-right.wallet(bo-if='main && list.type=="reward"') .money | {{gold(user.stats.gp)}} @@ -28,6 +31,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") h2.task-column_title {{list.header}} // Todo Chart + // todo test .todos-chart(bo-if='list.type == "todo"', ng-show='charts.todos') // Add New @@ -45,6 +49,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") include ./task // Static Rewards + // todo test ul.items(bo-if='main && list.type=="reward" && user.flags.itemsEnabled') li.task.reward-item(ng-hide='item.hide', ng-repeat='item in itemStore') // right-hand side control buttons @@ -53,18 +58,22 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") i.icon-comment //left-hand size commands .task-controls + // todo test a.task-action-btn.btn-reroll(bo-if='item.type=="reroll"', ng-click='modals.reroll = true') i.icon-repeat + // todo test a.money.btn-buy.item-btn(bo-if='item.type!="reroll"', ng-click='buy(item.type)') span.reward-cost {{item.value}} span.shop_gold // main content + // todo test span(bo-class='{"shop_{{item.classes}} shop-sprite item-img": true}') p.task-text {{item.text}} br // Ads + // todo test div(bo-if='main && !user.purchased.ads && list.type!="reward"') span.pull-right a(ng-click='modals.buyGems=true', tooltip=env.t('removeAds')) @@ -73,6 +82,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") ins.adsbygoogle(ng-init='initAds()', style='display: inline-block; width: 234px; height: 60px;', data-ad-client='ca-pub-3242350243827794', data-ad-slot='9529624576') // Todo Tabs + // todo test div(bo-if='main && list.type=="todo"', bo-class='{"tabbable tabs-below": list.type=="todo"}') button.task-action-btn.tile.spacious.bright(ng-show='list.showCompleted', ng-click='clearCompleted()') Clear Completed // remaining/completed tabs diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 90263608de..ae0ad5b06f 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -3,6 +3,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl .task-meta-controls // Due Date + // todo test span.task-date(bo-if='task.type=="todo" && task.date') | {{task.date}} // Streak @@ -43,6 +44,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl .task-controls.task-primary // Habits + // todo test span(bo-if='task.type=="habit"') // score() is overridden in challengesCtrl to do nothing a.task-action-btn(ng-if='task.up', ng-click='score(task,"up")') + @@ -55,6 +57,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl span.shop_gold // Daily & Todos + // todo test span.task-checker.action-yesno(bo-if='task.type=="daily" || task.type=="todo"') input.visuallyhidden.focusable(ng-if='$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox', ng-model='task.completed', ng-change='changeCheck(task)') input.visuallyhidden.focusable(ng-if='!$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox') @@ -87,7 +90,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl a(ng-click='unlink(task, "keep-all")') Keep Them |  |  a(ng-click='unlink(task, "remove-all")') Remove Them - //-div(ng-if='task.challenge.broken=="UNSUBSCRIBED"') + //div(ng-if='task.challenge.broken=="UNSUBSCRIBED"') p Broken Challenge Link: this task was part of a challenge, but you have unsubscribed from the challenge. What to do with the orphan tasks? p a(ng-click="unlink(task, 'keep-all')") Keep Them @@ -114,6 +117,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl label(for='{{obj._id}}_{{task.id}}-option-minus') // if Daily, calendar + // todo test fieldset(bo-if='task.type=="daily"', class="option-group") legend.option-title Repeat .task-controls.tile-group.repeat-days @@ -145,6 +149,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl | {{tag.name}} // Advanced Options + // todo test span(bo-if='task.type!="reward"') p.option-title.mega(ng-click='task._advanced = !task._advanced') Advanced Options fieldset.option-group.advanced-option(ng-class="{visuallyhidden: !task._advanced}") @@ -156,7 +161,8 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!" || !task.priority}', ng-click='task.challenge.id || (task.priority="!")') Easy button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!"}', ng-click='task.challenge.id || (task.priority="!!")') Medium button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!!"}', ng-click='task.challenge.id || (task.priority="!!!")') Hard - //-span(bo-if='task.type=="daily" && !task.challenge.id') + //span(ng-if='task.type=="daily" && !task.challenge.id') + // todo test span(bo-if='task.type=="daily"') legend.option-title Restore Streak input.option-content(type='number', ng-model='task.streak') From 52145a479e889f6c3ae9bc8885d86dc0155f5982 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 23 Nov 2013 10:55:56 -0800 Subject: [PATCH 067/116] testing completed, committing test results in comments --- views/main/filters.jade | 2 +- views/options/social/group.jade | 12 +++++----- views/shared/modals/members.jade | 24 +++++++++---------- views/shared/profiles/achievements.jade | 31 +++++++++++++------------ views/shared/tasks/lists.jade | 20 ++++++++-------- views/shared/tasks/task.jade | 18 +++++++------- 6 files changed, 54 insertions(+), 53 deletions(-) diff --git a/views/main/filters.jade b/views/main/filters.jade index 2c5190c9bc..8b71320f2c 100644 --- a/views/main/filters.jade +++ b/views/main/filters.jade @@ -12,7 +12,7 @@ a.pull-right(ng-click='delete(tag,$index)') i.icon-trash a(ng-hide='_editing', ng-click='toggleFilter(tag)') - // todo test + // tested - working i.icon-bullhorn(bo-if="tag.challenge") | {{tag.name}} li diff --git a/views/options/social/group.jade b/views/options/social/group.jade index fa87ef4d7d..eea8763597 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -9,8 +9,8 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' // ------ Information ------- .modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;') .modal-header(bindonce='group') - // todo test - span(bo-if='group.leader == user.id') + // tested - needs to be dynamic + span(ng-if='group.leader == user.id') button.btn.btn-primary.pull-right(ng-click='save(group)', ng-show='group._editing') Save button.btn.btn-default.pull-right(ng-click='group._editing = true', ng-hide='group._editing') Edit Group h3 {{group.name}} @@ -49,11 +49,11 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' a(ng-click='removeMember(group, member, true)') i.icon-ban-circle(tooltip='Boot Member') a - // todo test - span(bo-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') + // tested - needs to be dynamic + span(ng-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') | {{member.profile.name}} - // todo test - tr(bo-if='group.memberCount > group.members.length') + // tested - needs to be dynamic + tr(ng-if='group.memberCount > group.members.length') td. {{group.memberCount - group.members.length}} more members diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 83ab214b17..42e8579001 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -3,22 +3,22 @@ div(ng-controller='MemberModalCtrl') .modal-header(bindonce='profile') h3 span {{profile.profile.name}} - // todo test - span(bo-if='profile.contributor.level') - {{contribText(profile.contributor, profile.backer)}} + // tested - working, but needs to be dynamic + span(ng-if='profile.contributor.level') - {{contribText(profile.contributor, profile.backer)}} .modal-body(bindonce='profile') .row-fluid .span6 - // todo test - img(bo-show='profile.profile.imageUrl', bo-src='{{profile.profile.imageUrl}}') - // todo test - markdown(bo-show='profile.profile.blurb', ng-model='profile.profile.blurb') - // todo test - ul.muted.unstyled(bo-if='profile.auth.timestamps', style='margin-top:10px;') + // tested - working, but needs to be dynamic + img(ng-show='profile.profile.imageUrl', ng-src='{{profile.profile.imageUrl}}') + // tested - working, but needs to be dynamic + markdown(ng-show='profile.profile.blurb', ng-model='profile.profile.blurb') + // tested - working, but needs to be dynamic + ul.muted.unstyled(ng-if='profile.auth.timestamps', style='margin-top:10px;') li {{profile._id}} - // todo test - li(bo-show='profile.auth.timestamps.created') - Member since {{timestamp(profile.auth.timestamps.created)}} - - // todo test - li(bo-show='profile.auth.timestamps.loggedin') - Last logged in {{timestamp(profile.auth.timestamps.loggedin)}} - + // tested - working, but needs to be dynamic + li(ng-show='profile.auth.timestamps.created') - Member since {{timestamp(profile.auth.timestamps.created)}} - + // tested - working, but needs to be dynamic + li(ng-show='profile.auth.timestamps.loggedin') - Last logged in {{timestamp(profile.auth.timestamps.loggedin)}} - h3 Stats include ../profiles/stats .span6 diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index a8f8b99772..f4e26f07f2 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -29,7 +29,8 @@ small. Has contributed to HabitRPG (code, design, pixel art, legal advice, docs, etc). Want this badge? Fix a bug :) hr - + + // tested - working, but needs to be dynamic div(ng-if='profile.backer.tier') .achievement.achievement-heart h5 Kickstarter Backer - ${{profile.backer.tier}} Tier @@ -37,28 +38,28 @@ hr div(ng-if='profile.achievements.streak || user._id == profile._id') - // todo test - .achievement.achievement-thermometer(bo-show='profile.achievements.streak') - // todo test - div(bo-class='{muted: !profile.achievements.streak}') + // tested - working, but needs to be dynamic + .achievement.achievement-thermometer(ng-show='profile.achievements.streak') + // tested - working, but needs to be dynamic + div(ng-class='{muted: !profile.achievements.streak}') h5 {{profile.achievements.streak || 0 }} Streak Achievement(s) small Has performed {{profile.achievements.streak || 0 }} 21-day streaks on Dailies hr div(ng-if='profile.achievements.ultimateGear || user._id == profile._id') - // todo test - .achievement.achievement-armor(bo-show='profile.achievements.ultimateGear') - // todo test - div(bo-class='{muted: !profile.achievements.ultimateGear}') + // tested - working, but needs to be dynamic + .achievement.achievement-armor(ng-show='profile.achievements.ultimateGear') + // tested - working, but needs to be dynamic + div(ng-class='{muted: !profile.achievements.ultimateGear}') h5 Ultimate Gear small Has upgraded to the maximum weapon and armor set hr div(ng-if='profile.achievements.beastMaster || user._id == profile._id') - // todo test - .achievement.achievement-rat(bo-show='profile.achievements.beastMaster') - // todo test - div(bo-class='{muted: !profile.achievements.beastMaster}') + // tested - working, but needs to be dynamic + .achievement.achievement-rat(ng-show='profile.achievements.beastMaster') + // tested - working, but needs to be dynamic + div(ng-class='{muted: !profile.achievements.beastMaster}') h5 Beast Master small Has found all 90 pets (insanely difficult, give this user props!) hr @@ -85,8 +86,8 @@ div(ng-if='profile.achievements.challenges || user._id == profile._id') // This is a very strange icon to use. revisit .achievement.achievement-karaoke(ng-show='profile.achievements.challenges') - // todo test - div(bo-class='{muted: !profile.achievements.challenges}') + // tested - working, but needs to be dynamic + div(ng-class='{muted: !profile.achievements.challenges}') h5 Was the winner in the following challenges ul li(ng-repeat='chal in profile.achievements.challenges') {{chal}} diff --git a/views/shared/tasks/lists.jade b/views/shared/tasks/lists.jade index d848f004e5..7082730b35 100644 --- a/views/shared/tasks/lists.jade +++ b/views/shared/tasks/lists.jade @@ -3,12 +3,12 @@ // started to get unwieldy script(id='templates/habitrpg-tasks.html', type="text/ng-template") .grid - // todo test + // tested - working .module(bindonce='lists', ng-repeat='list in lists', bo-class='{"rewards-module": list.type==="reward"}') .task-column(class='{{list.type}}s') // Todos export/graph options - // todo test + // tested - working span.option-box.pull-right(bo-if='main && list.type=="todo"') a.option-action(ng-show='obj.history.todos', ng-click='toggleChart("todos")', tooltip='Progress') i.icon-signal @@ -18,7 +18,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") // // Gold & Gems - // todo test + // tested - working span.option-box.pull-right.wallet(bo-if='main && list.type=="reward"') .money | {{gold(user.stats.gp)}} @@ -31,7 +31,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") h2.task-column_title {{list.header}} // Todo Chart - // todo test + // tested - working .todos-chart(bo-if='list.type == "todo"', ng-show='charts.todos') // Add New @@ -49,7 +49,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") include ./task // Static Rewards - // todo test + // tested - working ul.items(bo-if='main && list.type=="reward" && user.flags.itemsEnabled') li.task.reward-item(ng-hide='item.hide', ng-repeat='item in itemStore') // right-hand side control buttons @@ -58,22 +58,22 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") i.icon-comment //left-hand size commands .task-controls - // todo test + // tested - working a.task-action-btn.btn-reroll(bo-if='item.type=="reroll"', ng-click='modals.reroll = true') i.icon-repeat - // todo test + // tested - working a.money.btn-buy.item-btn(bo-if='item.type!="reroll"', ng-click='buy(item.type)') span.reward-cost {{item.value}} span.shop_gold // main content - // todo test + // tested - working span(bo-class='{"shop_{{item.classes}} shop-sprite item-img": true}') p.task-text {{item.text}} br // Ads - // todo test + // tested - working div(bo-if='main && !user.purchased.ads && list.type!="reward"') span.pull-right a(ng-click='modals.buyGems=true', tooltip=env.t('removeAds')) @@ -82,7 +82,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") ins.adsbygoogle(ng-init='initAds()', style='display: inline-block; width: 234px; height: 60px;', data-ad-client='ca-pub-3242350243827794', data-ad-slot='9529624576') // Todo Tabs - // todo test + // tested - working div(bo-if='main && list.type=="todo"', bo-class='{"tabbable tabs-below": list.type=="todo"}') button.task-action-btn.tile.spacious.bright(ng-show='list.showCompleted', ng-click='clearCompleted()') Clear Completed // remaining/completed tabs diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index ae0ad5b06f..b03c763cb1 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -3,8 +3,8 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl .task-meta-controls // Due Date - // todo test - span.task-date(bo-if='task.type=="todo" && task.date') + // tested - working, but should be dynamic for when users update the date. + span.task-date(ng-if='task.type=="todo" && task.date') | {{task.date}} // Streak span(ng-show='task.streak') {{task.streak}} @@ -44,7 +44,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl .task-controls.task-primary // Habits - // todo test + // tested - working span(bo-if='task.type=="habit"') // score() is overridden in challengesCtrl to do nothing a.task-action-btn(ng-if='task.up', ng-click='score(task,"up")') + @@ -57,7 +57,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl span.shop_gold // Daily & Todos - // todo test + // tested - working span.task-checker.action-yesno(bo-if='task.type=="daily" || task.type=="todo"') input.visuallyhidden.focusable(ng-if='$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox', ng-model='task.completed', ng-change='changeCheck(task)') input.visuallyhidden.focusable(ng-if='!$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox') @@ -117,7 +117,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl label(for='{{obj._id}}_{{task.id}}-option-minus') // if Daily, calendar - // todo test + // tested - working fieldset(bo-if='task.type=="daily"', class="option-group") legend.option-title Repeat .task-controls.tile-group.repeat-days @@ -131,7 +131,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', data-day='s', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') S // if Reward, pricing - fieldset.option-group.option-short(ngs-if='task.type=="reward" && !task.challenge.id') + fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id') legend.option-title Price input.option-content(type='number', size='16', min='0', step="any", ng-model='task.value') .money.input-suffix @@ -149,7 +149,7 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl | {{tag.name}} // Advanced Options - // todo test + // tested - working span(bo-if='task.type!="reward"') p.option-title.mega(ng-click='task._advanced = !task._advanced') Advanced Options fieldset.option-group.advanced-option(ng-class="{visuallyhidden: !task._advanced}") @@ -162,8 +162,8 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!"}', ng-click='task.challenge.id || (task.priority="!!")') Medium button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!!"}', ng-click='task.challenge.id || (task.priority="!!!")') Hard //span(ng-if='task.type=="daily" && !task.challenge.id') - // todo test - span(bo-if='task.type=="daily"') + // tested - not working... wtf? changing to ng-if + span(ng-if='task.type=="daily"') legend.option-title Restore Streak input.option-content(type='number', ng-model='task.streak') button.task-action-btn.tile.spacious(type='submit') Save & Close From 4453ac9fb8cd9ed2bb3f66dbbaf53469e6bc90ba Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 23 Nov 2013 11:14:16 -0800 Subject: [PATCH 068/116] removed comments from testing. --- views/main/filters.jade | 1 - views/options/social/group.jade | 3 --- views/shared/modals/members.jade | 6 ------ views/shared/profiles/achievements.jade | 8 -------- views/shared/tasks/lists.jade | 10 ---------- views/shared/tasks/task.jade | 6 ------ 6 files changed, 34 deletions(-) diff --git a/views/main/filters.jade b/views/main/filters.jade index 8b71320f2c..6462976628 100644 --- a/views/main/filters.jade +++ b/views/main/filters.jade @@ -12,7 +12,6 @@ a.pull-right(ng-click='delete(tag,$index)') i.icon-trash a(ng-hide='_editing', ng-click='toggleFilter(tag)') - // tested - working i.icon-bullhorn(bo-if="tag.challenge") | {{tag.name}} li diff --git a/views/options/social/group.jade b/views/options/social/group.jade index eea8763597..65341f91da 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -9,7 +9,6 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' // ------ Information ------- .modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;') .modal-header(bindonce='group') - // tested - needs to be dynamic span(ng-if='group.leader == user.id') button.btn.btn-primary.pull-right(ng-click='save(group)', ng-show='group._editing') Save button.btn.btn-default.pull-right(ng-click='group._editing = true', ng-hide='group._editing') Edit Group @@ -49,10 +48,8 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' a(ng-click='removeMember(group, member, true)') i.icon-ban-circle(tooltip='Boot Member') a - // tested - needs to be dynamic span(ng-class='{"badge badge-info": group.leader==member._id}', ng-click='clickMember(member._id, true)') | {{member.profile.name}} - // tested - needs to be dynamic tr(ng-if='group.memberCount > group.members.length') td. {{group.memberCount - group.members.length}} more members diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 42e8579001..e99337b57b 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -3,21 +3,15 @@ div(ng-controller='MemberModalCtrl') .modal-header(bindonce='profile') h3 span {{profile.profile.name}} - // tested - working, but needs to be dynamic span(ng-if='profile.contributor.level') - {{contribText(profile.contributor, profile.backer)}} .modal-body(bindonce='profile') .row-fluid .span6 - // tested - working, but needs to be dynamic img(ng-show='profile.profile.imageUrl', ng-src='{{profile.profile.imageUrl}}') - // tested - working, but needs to be dynamic markdown(ng-show='profile.profile.blurb', ng-model='profile.profile.blurb') - // tested - working, but needs to be dynamic ul.muted.unstyled(ng-if='profile.auth.timestamps', style='margin-top:10px;') li {{profile._id}} - // tested - working, but needs to be dynamic li(ng-show='profile.auth.timestamps.created') - Member since {{timestamp(profile.auth.timestamps.created)}} - - // tested - working, but needs to be dynamic li(ng-show='profile.auth.timestamps.loggedin') - Last logged in {{timestamp(profile.auth.timestamps.loggedin)}} - h3 Stats include ../profiles/stats diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index f4e26f07f2..0c3ce6d860 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -30,7 +30,6 @@ Has contributed to HabitRPG (code, design, pixel art, legal advice, docs, etc). Want this badge? Fix a bug :) hr - // tested - working, but needs to be dynamic div(ng-if='profile.backer.tier') .achievement.achievement-heart h5 Kickstarter Backer - ${{profile.backer.tier}} Tier @@ -38,27 +37,21 @@ hr div(ng-if='profile.achievements.streak || user._id == profile._id') - // tested - working, but needs to be dynamic .achievement.achievement-thermometer(ng-show='profile.achievements.streak') - // tested - working, but needs to be dynamic div(ng-class='{muted: !profile.achievements.streak}') h5 {{profile.achievements.streak || 0 }} Streak Achievement(s) small Has performed {{profile.achievements.streak || 0 }} 21-day streaks on Dailies hr div(ng-if='profile.achievements.ultimateGear || user._id == profile._id') - // tested - working, but needs to be dynamic .achievement.achievement-armor(ng-show='profile.achievements.ultimateGear') - // tested - working, but needs to be dynamic div(ng-class='{muted: !profile.achievements.ultimateGear}') h5 Ultimate Gear small Has upgraded to the maximum weapon and armor set hr div(ng-if='profile.achievements.beastMaster || user._id == profile._id') - // tested - working, but needs to be dynamic .achievement.achievement-rat(ng-show='profile.achievements.beastMaster') - // tested - working, but needs to be dynamic div(ng-class='{muted: !profile.achievements.beastMaster}') h5 Beast Master small Has found all 90 pets (insanely difficult, give this user props!) @@ -86,7 +79,6 @@ div(ng-if='profile.achievements.challenges || user._id == profile._id') // This is a very strange icon to use. revisit .achievement.achievement-karaoke(ng-show='profile.achievements.challenges') - // tested - working, but needs to be dynamic div(ng-class='{muted: !profile.achievements.challenges}') h5 Was the winner in the following challenges ul diff --git a/views/shared/tasks/lists.jade b/views/shared/tasks/lists.jade index 7082730b35..268106ee83 100644 --- a/views/shared/tasks/lists.jade +++ b/views/shared/tasks/lists.jade @@ -3,12 +3,10 @@ // started to get unwieldy script(id='templates/habitrpg-tasks.html', type="text/ng-template") .grid - // tested - working .module(bindonce='lists', ng-repeat='list in lists', bo-class='{"rewards-module": list.type==="reward"}') .task-column(class='{{list.type}}s') // Todos export/graph options - // tested - working span.option-box.pull-right(bo-if='main && list.type=="todo"') a.option-action(ng-show='obj.history.todos', ng-click='toggleChart("todos")', tooltip='Progress') i.icon-signal @@ -18,7 +16,6 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") // // Gold & Gems - // tested - working span.option-box.pull-right.wallet(bo-if='main && list.type=="reward"') .money | {{gold(user.stats.gp)}} @@ -31,7 +28,6 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") h2.task-column_title {{list.header}} // Todo Chart - // tested - working .todos-chart(bo-if='list.type == "todo"', ng-show='charts.todos') // Add New @@ -49,7 +45,6 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") include ./task // Static Rewards - // tested - working ul.items(bo-if='main && list.type=="reward" && user.flags.itemsEnabled') li.task.reward-item(ng-hide='item.hide', ng-repeat='item in itemStore') // right-hand side control buttons @@ -58,22 +53,18 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") i.icon-comment //left-hand size commands .task-controls - // tested - working a.task-action-btn.btn-reroll(bo-if='item.type=="reroll"', ng-click='modals.reroll = true') i.icon-repeat - // tested - working a.money.btn-buy.item-btn(bo-if='item.type!="reroll"', ng-click='buy(item.type)') span.reward-cost {{item.value}} span.shop_gold // main content - // tested - working span(bo-class='{"shop_{{item.classes}} shop-sprite item-img": true}') p.task-text {{item.text}} br // Ads - // tested - working div(bo-if='main && !user.purchased.ads && list.type!="reward"') span.pull-right a(ng-click='modals.buyGems=true', tooltip=env.t('removeAds')) @@ -82,7 +73,6 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") ins.adsbygoogle(ng-init='initAds()', style='display: inline-block; width: 234px; height: 60px;', data-ad-client='ca-pub-3242350243827794', data-ad-slot='9529624576') // Todo Tabs - // tested - working div(bo-if='main && list.type=="todo"', bo-class='{"tabbable tabs-below": list.type=="todo"}') button.task-action-btn.tile.spacious.bright(ng-show='list.showCompleted', ng-click='clearCompleted()') Clear Completed // remaining/completed tabs diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index b03c763cb1..a16c18189b 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -3,7 +3,6 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl .task-meta-controls // Due Date - // tested - working, but should be dynamic for when users update the date. span.task-date(ng-if='task.type=="todo" && task.date') | {{task.date}} // Streak @@ -44,7 +43,6 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl .task-controls.task-primary // Habits - // tested - working span(bo-if='task.type=="habit"') // score() is overridden in challengesCtrl to do nothing a.task-action-btn(ng-if='task.up', ng-click='score(task,"up")') + @@ -57,7 +55,6 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl span.shop_gold // Daily & Todos - // tested - working span.task-checker.action-yesno(bo-if='task.type=="daily" || task.type=="todo"') input.visuallyhidden.focusable(ng-if='$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox', ng-model='task.completed', ng-change='changeCheck(task)') input.visuallyhidden.focusable(ng-if='!$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox') @@ -117,7 +114,6 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl label(for='{{obj._id}}_{{task.id}}-option-minus') // if Daily, calendar - // tested - working fieldset(bo-if='task.type=="daily"', class="option-group") legend.option-title Repeat .task-controls.tile-group.repeat-days @@ -149,7 +145,6 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl | {{tag.name}} // Advanced Options - // tested - working span(bo-if='task.type!="reward"') p.option-title.mega(ng-click='task._advanced = !task._advanced') Advanced Options fieldset.option-group.advanced-option(ng-class="{visuallyhidden: !task._advanced}") @@ -162,7 +157,6 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!"}', ng-click='task.challenge.id || (task.priority="!!")') Medium button.task-action-btn.tile(type='button', ng-class='{active: task.priority=="!!!"}', ng-click='task.challenge.id || (task.priority="!!!")') Hard //span(ng-if='task.type=="daily" && !task.challenge.id') - // tested - not working... wtf? changing to ng-if span(ng-if='task.type=="daily"') legend.option-title Restore Streak input.option-content(type='number', ng-model='task.streak') From 47cf0eb07d3834a4fa1ef9f07ed1478a2b86b664 Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Sun, 24 Nov 2013 10:49:33 +1100 Subject: [PATCH 069/116] add npc color, update leader background --- public/css/avatar.styl | 5 ++++- views/shared/header/avatar.jade | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/public/css/avatar.styl b/public/css/avatar.styl index 9a346da167..bb81bb6327 100644 --- a/public/css/avatar.styl +++ b/public/css/avatar.styl @@ -90,4 +90,7 @@ future re: pets and whatnot, this is just temporary. margin: 0 auto .character-sprites span, .pet - position: absolute \ No newline at end of file + position: absolute + +.herobox.isLeader + background: $better diff --git a/views/shared/header/avatar.jade b/views/shared/header/avatar.jade index f064c1a2d3..ce4bd5cfd8 100644 --- a/views/shared/header/avatar.jade +++ b/views/shared/header/avatar.jade @@ -3,7 +3,7 @@ Removing it will remove the user's name, but will allow more room for mounts & helms. IMO this is the lesser of two evils, revisit //-figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile.name}}', ng-class='{isUser: profile.id==user.id, hasPet: profile.items.currentPet}', data-level='{{profile.stats.lvl}}', data-uid='{{profile.id}}', rel='popover', data-placement='bottom', data-trigger='hover', data-html='true', data-content="
Level: {{profile.stats.lvl}}
GP: {{profile.stats.gp | number:0}}
{{count(profile.items.pets)}} / 90 Pets Found
") -figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile.name}}', ng-class='{isUser: user._id==profile._id && !(user.items.currentMount && user.items.currentPet), hasPet: profile.items.currentPet && profile.items.currentMount}') +figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile.name}}', ng-class='{isUser: user._id==profile._id && !(user.items.currentMount && user.items.currentPet), hasPet: profile.items.currentPet && profile.items.currentMount, isLeader: party.leader==profile._id}') .character-sprites // Mount Body span(ng-if='profile.items.currentMount', class='Mount_Body_{{profile.items.currentMount}}') @@ -27,5 +27,5 @@ figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile // Pet // FIXME handle @minimal, this might have to be a directive span.current-pet(class='Pet-{{profile.items.currentPet}}', ng-show='profile.items.currentPet && !minimal') - .avatar-level(class='label label-contributor-{{profile.contributor.level}}' ng-class='{"badge badge-info": {{party.leader==profile._id}}}') + .avatar-level(ng-class='{label:profile, "label-contributor-{{profile.contributor.level}}": profile.contributor, "label-npc": profile.backer.npc}') | Lvl {{profile.stats.lvl}} From 2604d8e21e6ef4e361f121e018961131923984cc Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 23 Nov 2013 16:20:34 -0800 Subject: [PATCH 070/116] fix for https://github.com/HabitRPG/habitrpg/issues/1903 --- public/css/game-pane.styl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/css/game-pane.styl b/public/css/game-pane.styl index 3145928b4d..c134f0b8bc 100644 --- a/public/css/game-pane.styl +++ b/public/css/game-pane.styl @@ -36,7 +36,7 @@ visibility:hidden .scrollable-message - max-height:75px + max-height:80px overflow-y:auto .expander From b793d2b753535a5cd51a06f6a5bd40c3a8250abd Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 23 Nov 2013 16:45:14 -0800 Subject: [PATCH 071/116] fix for https://github.com/HabitRPG/habitrpg/issues/1900 --- public/css/game-pane.styl | 4 ++++ views/options/social/chat-box.jade | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/public/css/game-pane.styl b/public/css/game-pane.styl index c134f0b8bc..124cc33030 100644 --- a/public/css/game-pane.styl +++ b/public/css/game-pane.styl @@ -11,6 +11,10 @@ .tavern-pane position relative height 250px + +.chat-form + position: relative + z-index: 10 .tavern-chat, .party-chat diff --git a/views/options/social/chat-box.jade b/views/options/social/chat-box.jade index 423abfeacd..07c93f774a 100644 --- a/views/options/social/chat-box.jade +++ b/views/options/social/chat-box.jade @@ -1,4 +1,4 @@ -form(ng-submit='postChat(group,message.content)') +form(ng-submit='postChat(group,message.content)', class='chat-form') .-options //FIXME ng-model makes this painfully slow! using jquery for now, which is really non-angular-like .control-group.option-large(ng-controller='AutocompleteCtrl') From 38225896f4b48a71e68901430f0a8d1b0d54ee97 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 23 Nov 2013 17:37:20 -0800 Subject: [PATCH 072/116] fix for https://github.com/HabitRPG/habitrpg/issues/1860 change tags to scroll horizontally rather than stack floating left --- public/css/filters.styl | 13 ++++++++++++- views/main/filters.jade | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/public/css/filters.styl b/public/css/filters.styl index 2af0e4a623..1c68eb6470 100644 --- a/public/css/filters.styl +++ b/public/css/filters.styl @@ -22,4 +22,15 @@ padding 2px 0 0 2px .tag-editing .tag-editing-pill - height:auto \ No newline at end of file + height:auto + +.tag-list + overflow-y: auto + white-space: nowrap + + .nav-pills + height: 43px + + li + display: inline-block + float: none \ No newline at end of file diff --git a/views/main/filters.jade b/views/main/filters.jade index 6462976628..8a6b1767d0 100644 --- a/views/main/filters.jade +++ b/views/main/filters.jade @@ -1,4 +1,4 @@ -.filters(ng-controller='FiltersCtrl') +.filters(ng-controller='FiltersCtrl', class='tag-list') .pull-left.filter-description | Tags: ul.nav.nav-pills From 0e7c7e439f5497aff6344468266e652486849e1d Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sat, 23 Nov 2013 19:33:41 -0800 Subject: [PATCH 073/116] images shown with markdown now link to themselves in an external browser window --- public/js/directives/directives.js | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/public/js/directives/directives.js b/public/js/directives/directives.js index fa8d58b622..b8aebecc3c 100644 --- a/public/js/directives/directives.js +++ b/public/js/directives/directives.js @@ -88,6 +88,51 @@ habitrpg.directive('habitrpgSortable', ['User', function(User) { return marked(markdown); }; + + // [nickgordon20131123] this hacky override wraps images with a link to the image in a new window, and also adds some classes in case we want to style + marked.InlineLexer.prototype.outputLink = function(cap, link) { + var escape = function(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + }; + if (cap[0].charAt(0) !== '!') { + return '' + + this.output(cap[1]) + + ''; + } else { + return ''
+          + escape(cap[1])
+          + ''; + } + } //hljs.tabReplace = ' '; From 2101fe255fc7f195e77dfa8271a5fef17b6123e2 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 24 Nov 2013 07:35:12 -0600 Subject: [PATCH 074/116] Place link to Markdown help prominently in Tavern chat (fix #1906) --- views/options/social/group.jade | 7 +++---- views/options/social/tavern.jade | 6 ++++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/views/options/social/group.jade b/views/options/social/group.jade index 905a4e0a3e..fe66734e9c 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -19,9 +19,8 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' label.control-label Group Name input.option-content(type='text', ng-model='group.name', placeholder='Group Name') .control-group.option-large - label.control-label Description + label.control-label Description (Markdown OK) textarea.option-content(style='height:15em;', placeholder='Description', ng-model='group.description') - include ../../shared/formatting-help .control-group.option-large label.control-label Logo URL input.option-content(type='url', placeholder='Logo URL', ng-model='group.logo') @@ -87,8 +86,7 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' .span8 div.blah-options(ng-show='group._editing') .option-large - textarea.option-content(style='height:15em;', placeholder='Message from group leader', ng-model='group.leaderMessage') - include ../../shared/formatting-help + textarea.option-content(style='height:15em;', placeholder='Message from group leader (Markdown OK)', ng-model='group.leaderMessage') table(ng-show='group.leaderMessage') tr td @@ -100,6 +98,7 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' div(ng-controller='ChatCtrl') h3 Chat include ./chat-box + include ../../shared/formatting-help ul.unstyled.tavern-chat include ./chat-message diff --git a/views/options/social/tavern.jade b/views/options/social/tavern.jade index eded297e3a..b0bb7b9b40 100644 --- a/views/options/social/tavern.jade +++ b/views/options/social/tavern.jade @@ -104,7 +104,9 @@ .span8(ng-controller='ChatCtrl') h3 Tavern Talk include ./chat-box - small.alert.alert-info. - Note: if you're reporting a bug, the developers won't see it here. Follow these instructions instead. + small + include ../../shared/formatting-help + alert.alert-info. + Note: if you're reporting a bug, the developers won't see it here. Follow these instructions instead. ul.unstyled.tavern-chat include ./chat-message From 9086ccffcd06f64d82478a5e7e294f99cdcb880f Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 24 Nov 2013 07:41:41 -0600 Subject: [PATCH 075/116] Consistent formatting of markdown hint in group edit fields --- views/options/social/group.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/options/social/group.jade b/views/options/social/group.jade index fe66734e9c..9371e3567d 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -19,8 +19,8 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' label.control-label Group Name input.option-content(type='text', ng-model='group.name', placeholder='Group Name') .control-group.option-large - label.control-label Description (Markdown OK) - textarea.option-content(style='height:15em;', placeholder='Description', ng-model='group.description') + label.control-label Description + textarea.option-content(style='height:15em;', placeholder='Description shown in public Guilds list (Markdown OK)', ng-model='group.description') .control-group.option-large label.control-label Logo URL input.option-content(type='url', placeholder='Logo URL', ng-model='group.logo') From c51a34730dd680765bda9e9db298d5f803e5e49b Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 24 Nov 2013 08:53:48 -0600 Subject: [PATCH 076/116] Tweak shop wording to remove "yet": eggs/potions/food might be used up or sold off. --- views/options/inventory/inventory.jade | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/views/options/inventory/inventory.jade b/views/options/inventory/inventory.jade index af97b0596e..4f56dd6671 100644 --- a/views/options/inventory/inventory.jade +++ b/views/options/inventory/inventory.jade @@ -7,7 +7,7 @@ script(type='text/ng-template', id='partials/options.inventory.inventory.html') li.customize-menu menu.pets-menu(label='Eggs ({{eggCount}})') - p(ng-show='eggCount < 1') You don't have any eggs yet. + p(ng-show='eggCount < 1') You don't have any eggs. div(ng-repeat='(egg,points) in ownedItems(user.items.eggs)') //TODO move positioning this styling to css button.customize-option(popover='{{Items.eggs[egg].notes}}', popover-title='{{Items.eggs[egg].text}} Egg', popover-trigger='mouseenter', popover-placement='right', ng-click='chooseEgg(egg)', class='Pet_Egg_{{egg}}', ng-class='{selectableInventory: selectedPotion && !user.items.pets[egg+"-"+selectedPotion.name]}') @@ -16,7 +16,7 @@ script(type='text/ng-template', id='partials/options.inventory.inventory.html') li.customize-menu menu.hatchingPotion-menu(label='Hatching Potions ({{potCount}})') - p(ng-show='potCount < 1') You don't have any hatching potions yet. + p(ng-show='potCount < 1') You don't have any hatching potions. div(ng-repeat='(pot,points) in ownedItems(user.items.hatchingPotions)') button.customize-option(popover='{{Items.hatchingPotions[pot].notes}}', popover-title='{{Items.hatchingPotions[pot].text}} Potion', popover-trigger='mouseenter', popover-placement='right', ng-click='choosePotion(pot)', class='Pet_HatchingPotion_{{pot}}', ng-class='{selectableInventory: selectedEgg && !user.items.pets[selectedEgg.name+"-"+pot]}') .badge.badge-info.stack-count {{points}} @@ -24,7 +24,7 @@ script(type='text/ng-template', id='partials/options.inventory.inventory.html') //-li.customize-menu menu.pets-menu(label='Food ({{foodCount}})') - p(ng-show='foodCount < 1') You don't have any food yet. + p(ng-show='foodCount < 1') You don't have any food. div(ng-repeat='(food,points) in ownedItems(user.items.food)') button.customize-option(popover='{{Items.food[food].notes}}', popover-title='{{Items.food[food].text}}', popover-trigger='mouseenter', popover-placement='right', ng-click='chooseFood(food)', class='Pet_Food_{{food}}') .badge.badge-info.stack-count {{points}} From f7908ddbcb38bfe6b6115758c1159f17ebb28ea9 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Sun, 24 Nov 2013 09:50:21 -0600 Subject: [PATCH 077/116] Correct and clarify some details on contributor rewards --- views/options/social/tavern.jade | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/views/options/social/tavern.jade b/views/options/social/tavern.jade index b0bb7b9b40..93dfd533e9 100644 --- a/views/options/social/tavern.jade +++ b/views/options/social/tavern.jade @@ -59,10 +59,10 @@ a.label.label-contributor-1(ng-click='toggleUserTier($event)') Friend (1-2) div(style='display:none;') p. - When your first submission is deployed, you will receive the HabitRPG Contributor's badge. Your name in Tavern chat will proudly display that you are a contributor. + When your first submission is deployed, you will receive the HabitRPG Contributor's badge. Your name in Tavern chat will proudly display that you are a contributor. As a bounty for your work, you will also receive 2 Gems. hr p. - When your second submission is deployed, the Crystal Armor will be available for purchase in the Rewards shop after the Golden Armor. As a bounty for your great work, you will also receive 2 Gems. + When your second submission is deployed, the Crystal Armor will be available for purchase in the Rewards shop after the Golden Armor. As a bounty for your continued work, you will also receive 2 Gems. tr td a.label.label-contributor-3(ng-click='toggleUserTier($event)') Elite (3-4) @@ -71,23 +71,23 @@ When your third submission is deployed, the Crystal Helmet will be available for purchase in the Rewards shop after the Golden Helmet. As a bounty for your great work, you will also receive 2 Gems. hr p. - When your fourth submission is deployed, the Crystal Sword will be available for purchase in the Rewards shop after the Golden Sword. As a bounty for your great work, you will also receive 2 Gems. + When your fourth submission is deployed, the Crystal Sword will be available for purchase in the Rewards shop after the Golden Sword. You will once again receive a bounty of 2 Gems. tr td a.label.label-contributor-5(ng-click='toggleUserTier($event)') Champion (5-6) div(style='display:none;') p. - When your fifth submission is deployed, the Crystal Shield will be available for purchase in the Reward shop after the Golden Shield. As a bounty for your great work, you will also receive 2 Gems. + When your fifth submission is deployed, the Crystal Shield will be available for purchase in the Reward shop after the Golden Shield. You will also receive 2 Gems. hr p. -
When your sixth submission is deployed, you will receive a Hydra Pet. As a bounty for your great work, you will also receive 2 Gems. +
When your sixth submission is deployed, you will receive a Hydra Pet. You will also receive 2 Gems. tr td a.label.label-contributor-7(ng-click='toggleUserTier($event)') Legendary (7) div(style='display:none;') p. - When your seventh submission is deployed, you will receive 2 Gems and become a member of the honored Contributor's Guild and be privy to the behind-the-scenes details of HabitRPG! + When your seventh submission is deployed, you will receive 2 Gems and become a member of the honored Contributor's Guild and be privy to the behind-the-scenes details of HabitRPG! Further contributions do not increase your level, but you may continue to earn Gem bounties and titles. tr td a.label.label-contributor-8(ng-click='toggleUserTier($event)') Heroic From fa2fb8e3fbdb4420be1081f3a314585df00512e7 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 24 Nov 2013 17:49:12 +0100 Subject: [PATCH 078/116] open named links in new window, @snicker this will not work for links auto detected by marked, we should override this piece of code https://github.com/chjj/marked/blob/master/lib/marked.js#L578 but i am not sure it is possible to do without overriding the whole function --- public/js/directives/directives.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/directives/directives.js b/public/js/directives/directives.js index b8aebecc3c..ce068984b9 100644 --- a/public/js/directives/directives.js +++ b/public/js/directives/directives.js @@ -100,7 +100,7 @@ habitrpg.directive('habitrpgSortable', ['User', function(User) { .replace(/'/g, '''); }; if (cap[0].charAt(0) !== '!') { - return ' Date: Sun, 24 Nov 2013 17:49:25 +0100 Subject: [PATCH 079/116] use jade class syntax --- views/main/filters.jade | 2 +- views/options/social/chat-box.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/views/main/filters.jade b/views/main/filters.jade index 8a6b1767d0..200dc64b52 100644 --- a/views/main/filters.jade +++ b/views/main/filters.jade @@ -1,4 +1,4 @@ -.filters(ng-controller='FiltersCtrl', class='tag-list') +.filters.tag-list(ng-controller='FiltersCtrl') .pull-left.filter-description | Tags: ul.nav.nav-pills diff --git a/views/options/social/chat-box.jade b/views/options/social/chat-box.jade index 07c93f774a..7a89b7010e 100644 --- a/views/options/social/chat-box.jade +++ b/views/options/social/chat-box.jade @@ -1,4 +1,4 @@ -form(ng-submit='postChat(group,message.content)', class='chat-form') +form.chat-form(ng-submit='postChat(group,message.content)') .-options //FIXME ng-model makes this painfully slow! using jquery for now, which is really non-angular-like .control-group.option-large(ng-controller='AutocompleteCtrl') From f4323ddc24e5f329a46af3a3a135f78abc671da0 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Sun, 24 Nov 2013 10:32:51 -0800 Subject: [PATCH 080/116] markdown links in chat will now open in a blank window. * added `target` attribute for the markdown directive to specify. default behavior is `_self`. --- public/js/directives/directives.js | 6 ++++-- views/options/social/chat-message.jade | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/public/js/directives/directives.js b/public/js/directives/directives.js index ce068984b9..d808790b7a 100644 --- a/public/js/directives/directives.js +++ b/public/js/directives/directives.js @@ -100,7 +100,7 @@ habitrpg.directive('habitrpgSortable', ['User', function(User) { .replace(/'/g, '''); }; if (cap[0].charAt(0) !== '!') { - return ' Date: Sun, 24 Nov 2013 13:13:21 -0600 Subject: [PATCH 081/116] Change Markdown help link to point at HabitRPG wiki --- views/shared/formatting-help.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/formatting-help.jade b/views/shared/formatting-help.jade index 0de22cf962..80c74be7c3 100644 --- a/views/shared/formatting-help.jade +++ b/views/shared/formatting-help.jade @@ -1,2 +1,2 @@ small - a(target='_blank', href='http://daringfireball.net/projects/markdown/') Use Markdown form formatting \ No newline at end of file + a(target='_blank', href='http://habitrpg.wikia.com/wiki/Markdown_Cheat_Sheet') Markdown formatting allowed \ No newline at end of file From d1698460e08661131fd7065860ebd6d6a8b956f5 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 24 Nov 2013 21:45:24 +0100 Subject: [PATCH 082/116] add momentjs translations, @lefnire this is a little cumbersome, the language is set server-side & momentjs languages are js functions so we can either load another javascript file in the browser or we can load the file content in window.env and execute it with eval which is what is used now. If you do not like this then feel free to revert the commit. It is useful for example for chat messages date and I will also add it to the repeat schedule so that we it is localized too --- public/js/app.js | 5 +++++ src/middleware.js | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/public/js/app.js b/public/js/app.js index 59ae20a32c..baad1d63b5 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -2,6 +2,11 @@ window.env = window.env || {}; //FIX tests +if(window.env.language && window.env.language.momentLang && window.env.language.momentLangCode){ + eval(window.env.language.momentLang); + moment.lang(window.env.language.momentLangCode); +} + window.env.t = function(string){ return (window.env.translations[string] || window.env.translations.stringNotFound); } diff --git a/src/middleware.js b/src/middleware.js index 4849fee58a..61f27ebf4f 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -106,6 +106,26 @@ var avalaibleLanguages = _.map(langCodes, function(langCode){ } }); +// Load MomentJS localization files +var momentLangs = {}; + +// Handle different language codes from MomentJS and /locales +var momentLangsMapping = { + 'en': 'en-gb', + 'no': 'nn' +}; + +_.each(langCodes, function(code){ + var lang = _.find(avalaibleLanguages, {code: code}); + lang.momentLangCode = (momentLangsMapping[code] || code); + try{ + var momentLang = momentLangsMapping[code] ? momentLangsMapping[code] : code; + // MomentJS lang files are JS files that has to be executed in the browser so we load them as plain text files + var f = fs.readFileSync(path.join(__dirname, '/../node_modules/moment/lang/' + lang.momentLangCode + '.js'), 'utf8'); + lang.momentLang = f; + }catch (e){} +}); + var getUserLanguage = function(req, callback){ var getFromBrowser = function(){ var acceptable = _(req.acceptedLanguages).map(function(lang){ @@ -152,7 +172,7 @@ module.exports.locals = function(req, res, next) { translations: translations[language.code], t: function(string){ return (translations[language.code][string] || translations[language.code].stringNotFound); - } + }, } next(); From b4d910c9cb4d6cc3485edf78a71064e1cd3b80ff Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 24 Nov 2013 21:47:07 +0100 Subject: [PATCH 083/116] typo --- src/middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware.js b/src/middleware.js index 61f27ebf4f..8fe5d8a19e 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -172,7 +172,7 @@ module.exports.locals = function(req, res, next) { translations: translations[language.code], t: function(string){ return (translations[language.code][string] || translations[language.code].stringNotFound); - }, + } } next(); From 17c97308f307c7177bd7e3afbcf8d7e854726299 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 25 Nov 2013 16:50:51 +0100 Subject: [PATCH 084/116] stable, pets row 100% width --- public/css/inventory.styl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/css/inventory.styl b/public/css/inventory.styl index f9ed52f076..6f1cfc98e3 100644 --- a/public/css/inventory.styl +++ b/public/css/inventory.styl @@ -109,6 +109,8 @@ menu button[class*="Pet_Food_"] // This adds feeding progress bars to pets. If we have any issues with `menu.pets > button`, revisit menu.pets .customize-menu + width: 100% + button position: relative .progress From 2e8fc8d2488c6eb7a71e128205d6081fe621a49d Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 25 Nov 2013 17:04:07 +0100 Subject: [PATCH 085/116] use script tag not eval to execute moment language code --- public/js/app.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/public/js/app.js b/public/js/app.js index baad1d63b5..ded963b44e 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -3,7 +3,11 @@ window.env = window.env || {}; //FIX tests if(window.env.language && window.env.language.momentLang && window.env.language.momentLangCode){ - eval(window.env.language.momentLang); + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.text = window.env.language.momentLang; + head.appendChild(script); moment.lang(window.env.language.momentLangCode); } From c0a02eeef87e99d08ecad849ca004cb6fd802d7c Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Mon, 25 Nov 2013 08:06:27 -0800 Subject: [PATCH 086/116] support for xml and json export of all user data --- package.json | 4 ++- src/controllers/dataexport.js | 56 +++++++++++++++++++++++++++++++++++ src/routes/dataexport.js | 2 ++ views/options/settings.jade | 7 ++++- 4 files changed, 67 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e1c1945076..0df468e4e3 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,9 @@ "nodemailer": "~0.5.2", "grunt-cli": "~0.1.9", "paypal-ipn": "~1.0.1", - "express-csv": "~0.6.0" + "express-csv": "~0.6.0", + "pretty-data": "git://github.com/vkiryukhin/pretty-data#master", + "js2xmlparser": "~0.1.2" }, "private": true, "subdomain": "habitrpg", diff --git a/src/controllers/dataexport.js b/src/controllers/dataexport.js index 817e20791a..65a7554ab6 100644 --- a/src/controllers/dataexport.js +++ b/src/controllers/dataexport.js @@ -1,8 +1,12 @@ var _ = require('lodash'); var csv = require('express-csv'); +var express = require('express'); var nconf = require('nconf'); var moment = require('moment'); var dataexport = module.exports; +var js2xmlparser = require("js2xmlparser"); +var pd = require('pretty-data').pd; +var User = require('../models/user').model; /* @@ -25,3 +29,55 @@ dataexport.history = function(req, res) { }); return res.csv(output); } + +var userdata = function(user) { + //may eventually need to do some parsing here to eliminate/add from/to the object, just return user for now + return user; +} + +dataexport.leanuser = function(req, res, next) { + var user = res.locals.user; + User.findOne({_id: user._id,}).lean().exec(function(err, user) { + if (err) return res.json(500, {err: err}); + if (_.isEmpty(user)) return res.json(401, NO_USER_FOUND); + res.locals.user = user; + return next(); + }); +}; + +dataexport.userdata = { + xml: function(req, res) { + var user = userdata(res.locals.user); + return res.xml({data: JSON.stringify(user), rootname: 'user'}); + }, + json: function(req, res) { + var user = userdata(res.locals.user); + return res.jsonstring(user); + }, +} + +/* + ------------------------------------------------------------------------ + Express Extensions (should be refactored into a module) + ------------------------------------------------------------------------ +*/ + +var expressres = express.response || http.ServerResponse.prototype; + +expressres.xml = function(obj, headers, status) { + var body = ''; + this.charset = this.charset || 'utf-8'; + this.header('Content-Type', 'text/xml'); + this.header('Content-Disposition', 'attachment'); + body = pd.xml(js2xmlparser(obj.rootname,obj.data)); + return this.send(body, headers, status); +}; + +expressres.jsonstring = function(obj, headers, status) { + var body = ''; + this.charset = this.charset || 'utf-8'; + this.header('Content-Type', 'application/json'); + this.header('Content-Disposition', 'attachment'); + body = pd.json(JSON.stringify(obj)); + return this.send(body, headers, status); +}; diff --git a/src/routes/dataexport.js b/src/routes/dataexport.js index 090961fd99..b84fe09bd3 100644 --- a/src/routes/dataexport.js +++ b/src/routes/dataexport.js @@ -6,5 +6,7 @@ var nconf = require('nconf'); /* Data export */ router.get('/history.csv',auth.authWithSession,dataexport.history); //[todo] encode data output options in the data controller and use these to build routes +router.get('/userdata.xml',auth.authWithSession,dataexport.leanuser,dataexport.userdata.xml); +router.get('/userdata.json',auth.authWithSession,dataexport.leanuser,dataexport.userdata.json); module.exports = router; diff --git a/views/options/settings.jade b/views/options/settings.jade index e5dd0b2cee..df14bc3b22 100644 --- a/views/options/settings.jade +++ b/views/options/settings.jade @@ -71,4 +71,9 @@ script(id='partials/options.settings.export.html', type="text/ng-template") h2 Data Export small Here are a few options for saving your Habit data. h4 Habit History - a(href="/export/history.csv") Export History (CSV) + Export History:   + a(href="/export/history.csv") (CSV)   + h4 User Data + Export User Data:   + a(href="/export/userdata.xml") (XML)   + a(href="/export/userdata.json") (JSON)   From a47a32dbd66bc50a3adeffa96160e1e4cd82196d Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 25 Nov 2013 17:30:35 +0100 Subject: [PATCH 087/116] translate days of the week, @snicker here I would like to use bo-text but does not work --- views/shared/tasks/task.jade | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index e92fc516f9..9c6921314b 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -118,13 +118,13 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl legend.option-title Repeat .task-controls.tile-group.repeat-days // note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding - button.task-action-btn.tile(ng-class='{active: task.repeat.su}', type='button', data-day='su', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)') Su - button.task-action-btn.tile(ng-class='{active: task.repeat.m}', type='button', data-day='m', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)') M - button.task-action-btn.tile(ng-class='{active: task.repeat.t}', type='button', data-day='t', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)') T - button.task-action-btn.tile(ng-class='{active: task.repeat.w}', type='button', data-day='w', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)') W - button.task-action-btn.tile(ng-class='{active: task.repeat.th}', type='button', data-day='th', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)') Th - button.task-action-btn.tile(ng-class='{active: task.repeat.f}', type='button', data-day='f', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)') F - button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', data-day='s', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') S + button.task-action-btn.tile(ng-class='{active: task.repeat.su}', type='button', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)') {{moment.weekdaysMin(0)}} + button.task-action-btn.tile(ng-class='{active: task.repeat.m}', type='button', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)') {{moment.weekdaysMin(1)}} + button.task-action-btn.tile(ng-class='{active: task.repeat.t}', type='button', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)') {{moment.weekdaysMin(2)}} + button.task-action-btn.tile(ng-class='{active: task.repeat.w}', type='button', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)') {{moment.weekdaysMin(3)}} + button.task-action-btn.tile(ng-class='{active: task.repeat.th}', type='button', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)') {{moment.weekdaysMin(4)}} + button.task-action-btn.tile(ng-class='{active: task.repeat.f}', type='button', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)') {{moment.weekdaysMin(5)}} + button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') {{moment.weekdaysMin(6)}} // if Reward, pricing fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id') From c4e8de2ee06096b3eb9afe8ac090ce1d4cda2873 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 25 Nov 2013 17:34:41 +0100 Subject: [PATCH 088/116] fix language switching --- public/js/controllers/settingsCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/controllers/settingsCtrl.js b/public/js/controllers/settingsCtrl.js index e0747ba473..1200f29bd9 100644 --- a/public/js/controllers/settingsCtrl.js +++ b/public/js/controllers/settingsCtrl.js @@ -40,7 +40,7 @@ habitrpg.controller('SettingsCtrl', $rootScope.$on('userSynced', function(){ location.reload(); }); - User.set('preferences.language', $scope.language); + User.set('preferences.language', $scope.language.code); } $scope.reroll = function(){ From d1240473dd88602d12b257763f000900b2dadeec Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 25 Nov 2013 17:38:07 +0100 Subject: [PATCH 089/116] use bindonce for days of the week, thanks @snicker! --- views/shared/tasks/task.jade | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 9c6921314b..c6eb5fe897 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -116,15 +116,15 @@ li(bindonce='list', ng-repeat='task in obj[list.type+"s"]', class='task {{taskCl // if Daily, calendar fieldset(bo-if='task.type=="daily"', class="option-group") legend.option-title Repeat - .task-controls.tile-group.repeat-days + .task-controls.tile-group.repeat-days(bindonce) // note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding - button.task-action-btn.tile(ng-class='{active: task.repeat.su}', type='button', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)') {{moment.weekdaysMin(0)}} - button.task-action-btn.tile(ng-class='{active: task.repeat.m}', type='button', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)') {{moment.weekdaysMin(1)}} - button.task-action-btn.tile(ng-class='{active: task.repeat.t}', type='button', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)') {{moment.weekdaysMin(2)}} - button.task-action-btn.tile(ng-class='{active: task.repeat.w}', type='button', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)') {{moment.weekdaysMin(3)}} - button.task-action-btn.tile(ng-class='{active: task.repeat.th}', type='button', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)') {{moment.weekdaysMin(4)}} - button.task-action-btn.tile(ng-class='{active: task.repeat.f}', type='button', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)') {{moment.weekdaysMin(5)}} - button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') {{moment.weekdaysMin(6)}} + button.task-action-btn.tile(ng-class='{active: task.repeat.su}', type='button', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)' bo-text='moment.weekdaysMin(0)') + button.task-action-btn.tile(ng-class='{active: task.repeat.m}', type='button', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)' bo-text='moment.weekdaysMin(1)') + button.task-action-btn.tile(ng-class='{active: task.repeat.t}', type='button', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)' bo-text='moment.weekdaysMin(2)') + button.task-action-btn.tile(ng-class='{active: task.repeat.w}', type='button', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)' bo-text='moment.weekdaysMin(3)') + button.task-action-btn.tile(ng-class='{active: task.repeat.th}', type='button', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)' bo-text='moment.weekdaysMin(4)') + button.task-action-btn.tile(ng-class='{active: task.repeat.f}', type='button', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)' bo-text='moment.weekdaysMin(5)') + button.task-action-btn.tile(ng-class='{active: task.repeat.s}', type='button', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)' bo-text='moment.weekdaysMin(6)') // if Reward, pricing fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id') From 91a0b094701c3e113baa1f335571c693b7f581f5 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Mon, 25 Nov 2013 22:10:50 -0600 Subject: [PATCH 090/116] Fix a few typos/inaccuracies in English app.json --- locales/en/app.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 607e721ff9..38d94fa446 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -47,7 +47,7 @@ "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.", + "reward2comment" : "But only buy if you have enough gold!", "_commentdefaulttags" : "DEFAULT TAGS", "morning" : "morning", @@ -104,7 +104,7 @@ "S": "S", "todos": "To-Dos", "Todos": "To-Dos", - "newTodo": "New Todo", + "newTodo": "New To-Do", "dueDate": "Due Date", "remaining": "Remaining", "complete": "Complete", @@ -124,7 +124,7 @@ "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", + "itemDropped" : "An item has dropped", From 878bfc7f46282dc69aa02a82d3e87862dc032967 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Tue, 26 Nov 2013 06:48:18 -0800 Subject: [PATCH 091/116] removing sensitive user data from export --- src/controllers/dataexport.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/controllers/dataexport.js b/src/controllers/dataexport.js index 65a7554ab6..6e5f6703b2 100644 --- a/src/controllers/dataexport.js +++ b/src/controllers/dataexport.js @@ -31,7 +31,10 @@ dataexport.history = function(req, res) { } var userdata = function(user) { - //may eventually need to do some parsing here to eliminate/add from/to the object, just return user for now + if(user.auth && user.auth.local) { + delete user.auth.local.salt; + delete user.auth.local.hashed_password; + } return user; } From 860a084c69203a4fc76c7cda14f96c0a99abe51e Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Tue, 26 Nov 2013 20:16:10 +0100 Subject: [PATCH 092/116] fix for multiple guilds creation --- public/js/controllers/groupsCtrl.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index b2d6a6376c..2b6e686501 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -198,8 +198,10 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A } $scope.type = 'guild'; $scope.text = 'Guild'; - $scope.newGroup = new Groups.Group({type:'guild', privacy:'private', leader: User.user._id, members: [User.user._id]}); - + var newGroup = function(){ + return new Groups.Group({type:'guild', privacy:'private', leader: User.user._id, members: [User.user._id]}); + } + $scope.newGroup = newGroup() $scope.create = function(group){ if (User.user.balance < 1) return $rootScope.modals.buyGems = true; @@ -209,6 +211,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A $scope.groups.guilds.push(saved); if(saved.privacy === 'public') $scope.groups.public.push(saved); $state.go('options.social.guilds.detail', {gid: saved._id}); + $scope.newGroup = newGroup(); }); } } From 15f3907f00d9d70445980b15f16b54cccf699d74 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Tue, 26 Nov 2013 11:51:21 -0800 Subject: [PATCH 093/116] fix for #1920 --- views/shared/header/avatar.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/header/avatar.jade b/views/shared/header/avatar.jade index ce4bd5cfd8..5d06782413 100644 --- a/views/shared/header/avatar.jade +++ b/views/shared/header/avatar.jade @@ -27,5 +27,5 @@ figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile // Pet // FIXME handle @minimal, this might have to be a directive span.current-pet(class='Pet-{{profile.items.currentPet}}', ng-show='profile.items.currentPet && !minimal') - .avatar-level(ng-class='{label:profile, "label-contributor-{{profile.contributor.level}}": profile.contributor, "label-npc": profile.backer.npc}') + .avatar-level(ng-class='{label:profile, "label-contributor- + profile.contributor.level": profile.contributor, "label-npc": profile.backer.npc}') | Lvl {{profile.stats.lvl}} From a4fb0b42ad64334bad5fbddf459c520406d13b85 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Tue, 26 Nov 2013 12:06:48 -0800 Subject: [PATCH 094/116] well, this wasn't the fix i was thinking of for #1893, but it works and I don't know why I didn't do it in the first place --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 20c014985f..0baa423a6e 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -9,5 +9,5 @@ li(bindonce='group.chat', ng-repeat='message in group.chat', bo-class='{highligh a(bo-show='user.contributor.admin || message.uuid == user.id', ng-click='deleteChatMessage(group, message)') | i.icon-remove(tooltip='Delete') - a.label.chat-message(ng-class='{"label-npc": message.backer.npc}', class='float-label label-contributor-{{message.contributor.level}}', ng-click='clickMember(message.uuid, true)') + a.label.chat-message(class='float-label', bo-class='{"label-npc": message.backer.npc, "label-contributor-{{message.contributor.level}}":message.contributor.level}', ng-click='clickMember(message.uuid, true)') span(tooltip='{{contribText(message.contributor, message.backer)}}') {{message.user}}  From 2b128f71f45b2b3cb873eacbe36f8212f28a1dad Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Tue, 26 Nov 2013 15:18:20 -0700 Subject: [PATCH 095/116] [#1532] add better validation on preferences.dayStart, and a migration to cleanup corrupt ones --- migrations/20131126_clean_dayStart.js | 5 +++++ public/js/controllers/settingsCtrl.js | 5 +++-- src/models/user.js | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 migrations/20131126_clean_dayStart.js diff --git a/migrations/20131126_clean_dayStart.js b/migrations/20131126_clean_dayStart.js new file mode 100644 index 0000000000..b2001ec7c2 --- /dev/null +++ b/migrations/20131126_clean_dayStart.js @@ -0,0 +1,5 @@ +db.users.find({'preferences.dayStart':{$exists:1}},{'preferences.dayStart':1}).forEach(function(user){ + var dayStart = +user.preferences.dayStart; + dayStart = (_.isNaN(dayStart) || dayStart < 0 || dayStart > 24) ? 0 : dayStart; + db.users.update({_id:user._id}, {$set:{'preferences.dayStart':dayStart}}); +}); diff --git a/public/js/controllers/settingsCtrl.js b/public/js/controllers/settingsCtrl.js index 1200f29bd9..890110e4c4 100644 --- a/public/js/controllers/settingsCtrl.js +++ b/public/js/controllers/settingsCtrl.js @@ -27,10 +27,11 @@ habitrpg.controller('SettingsCtrl', $scope.saveDayStart = function(){ var dayStart = +User.user.preferences.dayStart; - if (dayStart < 0 || dayStart > 24) { + if (_.isNaN(dayStart) || dayStart < 0 || dayStart > 24) { dayStart = 0; + return alert('Please enter a number between 0 and 24'); } - User.log({'op':'set', data:{'preferences.dayStart': dayStart}}); + User.set('preferences.dayStart', dayStart); } $scope.language = window.env.language; diff --git a/src/models/user.js b/src/models/user.js index 7e2637d504..43e91a746f 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -259,6 +259,10 @@ UserSchema.virtual('tasks').get(function () { UserSchema.pre('save', function(next) { //this.markModified('tasks'); + if (_.isNaN(this.preferences.dayStart) || this.preferences.dayStart < 0 || this.preferences.dayStart > 0) { + this.preferences.dayStart = 0; + } + if (!this.profile.name) { var fb = this.auth.facebook; this.profile.name = From 86f62ac2b2c24823e8c967dbaecdfcb1c09a7d0c Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Tue, 26 Nov 2013 14:56:24 -0800 Subject: [PATCH 096/116] fix for #1920, again. this is very 'un-angular' but it *actually* works. the proper way to do this is make a directive for 'userlevel' or something and have that apply the proper styles --- public/js/controllers/rootCtrl.js | 10 ++++++++++ views/shared/header/avatar.jade | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/rootCtrl.js b/public/js/controllers/rootCtrl.js index be95206e0f..f3a52e90d9 100644 --- a/public/js/controllers/rootCtrl.js +++ b/public/js/controllers/rootCtrl.js @@ -21,6 +21,16 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ return haystack && ~haystack.indexOf(needle); } + // styling helpers + $scope.userLevelStyle = function(user,style){ + style = style || ''; + if(user.backer.npc) + style += ' label-npc'; + if(user.contributor.level) + style += ' label-contributor-'+user.contributor.level; + return style; + } + // count pets, mounts collected totals, etc $rootScope.countExists = function(items) {return _.reduce(items,function(m,v){return m+(v?1:0)},0)} diff --git a/views/shared/header/avatar.jade b/views/shared/header/avatar.jade index 5d06782413..8655764885 100644 --- a/views/shared/header/avatar.jade +++ b/views/shared/header/avatar.jade @@ -27,5 +27,5 @@ figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile // Pet // FIXME handle @minimal, this might have to be a directive span.current-pet(class='Pet-{{profile.items.currentPet}}', ng-show='profile.items.currentPet && !minimal') - .avatar-level(ng-class='{label:profile, "label-contributor- + profile.contributor.level": profile.contributor, "label-npc": profile.backer.npc}') + .avatar-level(ng-class='userLevelStyle(profile,"label")') | Lvl {{profile.stats.lvl}} From 878c9756d1bf245d848c09f7e76a6219b001c6bd Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Tue, 26 Nov 2013 16:57:50 -0700 Subject: [PATCH 097/116] add CONTRIBUTING.md, which will automatically add a "read this before submitting a ticket" kinda thing to issues. --- CONTRIBUTING.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..98584215b4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,11 @@ +# Reporting Bugs + +1. go to the [https://github.com/lefnire/habitrpg/issues?state=open issue queue] and +1. check first that a ticket doesn't already exist, using the (search bar)[https://www.evernote.com/shard/s17/sh/4a159680-a709-4949-9805-d849bc124c1d/6276f24fb1dce8985eec7d5b021edd9c]; then +1. if one hasn't been submitted, (create a new ticket)[https://github.com/lefnire/habitrpg/issues/new] . If at all possible, please include your operating system, browser, (user ID)[http://habitrpg.wikia.com/wiki/Settings#UserID] and **most importantly** any JavaScript errors that may be being thrown (see (Chrome Console instructions)[https://developers.google.com/chrome-developer-tools/docs/console#opening_the_console] for how to do that). + +# Requesting a feature +TODO + +# Contributing Code +TODO: add CLA link \ No newline at end of file From aca122d6de11d24677c3a748474cbf6abe92c440 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Tue, 26 Nov 2013 17:09:13 -0700 Subject: [PATCH 098/116] fix up CONTRIBUTING.md, update "submit bugs" links with this change --- CONTRIBUTING.md | 9 +++++---- views/options/social/tavern.jade | 2 +- views/shared/footer.jade | 2 +- views/shared/profiles/achievements.jade | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 98584215b4..0ee897d4ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,12 @@ # Reporting Bugs -1. go to the [https://github.com/lefnire/habitrpg/issues?state=open issue queue] and -1. check first that a ticket doesn't already exist, using the (search bar)[https://www.evernote.com/shard/s17/sh/4a159680-a709-4949-9805-d849bc124c1d/6276f24fb1dce8985eec7d5b021edd9c]; then -1. if one hasn't been submitted, (create a new ticket)[https://github.com/lefnire/habitrpg/issues/new] . If at all possible, please include your operating system, browser, (user ID)[http://habitrpg.wikia.com/wiki/Settings#UserID] and **most importantly** any JavaScript errors that may be being thrown (see (Chrome Console instructions)[https://developers.google.com/chrome-developer-tools/docs/console#opening_the_console] for how to do that). +1. go to the [issue queue](https://github.com/lefnire/habitrpg/issues?state=open) and +1. check first that a ticket doesn't already exist, using the [search bar](https://www.evernote.com/shard/s17/sh/4a159680-a709-4949-9805-d849bc124c1d/6276f24fb1dce8985eec7d5b021edd9c) +1. if one hasn't been submitted, [create a new ticket](https://github.com/lefnire/habitrpg/issues/new). If at all possible, please include your browser, [user ID](http://habitrpg.wikia.com/wiki/Settings#UserID) and **most importantly** any JavaScript errors that may be being thrown (see [Chrome Console instructions](https://developers.google.com/chrome-developer-tools/docs/console#opening_the_console) for how to do that). # Requesting a feature -TODO + +HabitRPG uses [Trello](https://trello.com/b/EpoYEYod/habitrpg) to track feature requests. [Read more](https://trello.com/c/8gzGlle8/142-how-to-submit-a-new-request). # Contributing Code TODO: add CLA link \ No newline at end of file diff --git a/views/options/social/tavern.jade b/views/options/social/tavern.jade index eded297e3a..38a405e2bc 100644 --- a/views/options/social/tavern.jade +++ b/views/options/social/tavern.jade @@ -105,6 +105,6 @@ h3 Tavern Talk include ./chat-box small.alert.alert-info. - Note: if you're reporting a bug, the developers won't see it here. Follow these instructions instead. + Note: if you're reporting a bug, the developers won't see it here. Please use Github instead . ul.unstyled.tavern-chat include ./chat-message diff --git a/views/shared/footer.jade b/views/shared/footer.jade index e168c2da29..68e7dc271f 100644 --- a/views/shared/footer.jade +++ b/views/shared/footer.jade @@ -32,7 +32,7 @@ footer.footer(ng-controller='FooterCtrl') h4 Community ul.unstyled li - a(target='_blank', href='https://github.com/lefnire/habitrpg/issues?state=open') Submit Bug + a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues') Submit Bug li a(target='_blank', href='https://trello.com/board/habitrpg/50e5d3684fe3a7266b0036d6') Request Feature li diff --git a/views/shared/profiles/achievements.jade b/views/shared/profiles/achievements.jade index 0c3ce6d860..fefd37bf82 100644 --- a/views/shared/profiles/achievements.jade +++ b/views/shared/profiles/achievements.jade @@ -27,7 +27,7 @@ span.label(ng-if='profile.contributor.level', class='label-contributor-{{profile.contributor.level}}') {{contribText(profile.contributor, profile.backer)}} span.label(ng-if='!profile.contributor.level') Contributor small. - Has contributed to HabitRPG (code, design, pixel art, legal advice, docs, etc). Want this badge? Fix a bug :) + Has contributed to HabitRPG (code, design, pixel art, legal advice, docs, etc). Want this badge? Read more. hr div(ng-if='profile.backer.tier') From 4af9d97c338c9290966c792db9509f438a2ec99f Mon Sep 17 00:00:00 2001 From: Adrien Lemaire Date: Wed, 27 Nov 2013 11:54:00 +1100 Subject: [PATCH 099/116] Update CONTRIBUTING.md add links to "Contributing to HabitRPG" and "Tips" --- CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ee897d4ca..b2c56b1f5e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,4 +9,6 @@ HabitRPG uses [Trello](https://trello.com/b/EpoYEYod/habitrpg) to track feature requests. [Read more](https://trello.com/c/8gzGlle8/142-how-to-submit-a-new-request). # Contributing Code -TODO: add CLA link \ No newline at end of file + +* See [Contributing to HabitRPG](http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG) +* See [Tips](http://habitrpg.wikia.com/wiki/Tips) From 29f0597178048bc32c89174dbee5fde5bc0d397d Mon Sep 17 00:00:00 2001 From: Bob Steffes Date: Tue, 26 Nov 2013 20:03:52 -0800 Subject: [PATCH 100/116] Update Contributing.md Correct link to userID on wikia and make a few grammatical & punctuation changes. --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b2c56b1f5e..c08eace6c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ # Reporting Bugs -1. go to the [issue queue](https://github.com/lefnire/habitrpg/issues?state=open) and -1. check first that a ticket doesn't already exist, using the [search bar](https://www.evernote.com/shard/s17/sh/4a159680-a709-4949-9805-d849bc124c1d/6276f24fb1dce8985eec7d5b021edd9c) -1. if one hasn't been submitted, [create a new ticket](https://github.com/lefnire/habitrpg/issues/new). If at all possible, please include your browser, [user ID](http://habitrpg.wikia.com/wiki/Settings#UserID) and **most importantly** any JavaScript errors that may be being thrown (see [Chrome Console instructions](https://developers.google.com/chrome-developer-tools/docs/console#opening_the_console) for how to do that). +1. Go to the [issue queue](https://github.com/lefnire/habitrpg/issues?state=open), and +1. check first that a ticket doesn't already exist, using the [search bar](https://www.evernote.com/shard/s17/sh/4a159680-a709-4949-9805-d849bc124c1d/6276f24fb1dce8985eec7d5b021edd9c). +1. If one hasn't been submitted, [create a new ticket](https://github.com/lefnire/habitrpg/issues/new). If at all possible, please include your browser, [user ID](http://habitrpg.wikia.com/wiki/API#UserID) and **most importantly** any JavaScript errors that may be being thrown (see [Chrome Console instructions](https://developers.google.com/chrome-developer-tools/docs/console#opening_the_console) for how to do that). # Requesting a feature From 13a7292377cf16d14a475b9cdbac18d29d20d6ce Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Tue, 26 Nov 2013 21:49:53 -0800 Subject: [PATCH 101/116] emoji works, huzzah. addresses #681, #1840, and some discussion in #1908 --- bower.json | 4 +++- public/js/directives/directives.js | 12 +++++++++--- public/manifest.json | 4 +++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/bower.json b/bower.json index 5a3ad43ed9..a54c855e4f 100644 --- a/bower.json +++ b/bower.json @@ -35,7 +35,9 @@ "github-buttons": "git://github.com/mdo/github-buttons.git", "marked": "~0.2.9", "JavaScriptButtons": "git://github.com/paypal/JavaScriptButtons.git#master", - "Angular-At-Directive": "git://github.com/snicker/Angular-At-Directive#master" + "Angular-At-Directive": "git://github.com/snicker/Angular-At-Directive#master", + "js-emoji": "git://github.com/iamcal/js-emoji#master", + "gemoji": "git://github.com/github/gemoji" }, "resolutions": { "jquery": "~2.0.3", diff --git a/public/js/directives/directives.js b/public/js/directives/directives.js index d808790b7a..b5a35a69c1 100644 --- a/public/js/directives/directives.js +++ b/public/js/directives/directives.js @@ -81,12 +81,18 @@ habitrpg.directive('habitrpgSortable', ['User', function(User) { // return hljs.highlightAuto(code).value; // } }); + + emoji.img_path = 'bower_components/gemoji/images/emoji/unicode/'; var toHtml = function (markdown) { if (markdown == undefined) return ''; - - return marked(markdown); + + markdown = marked(markdown); + markdown = emoji.replace_colons(markdown); + markdown = emoji.replace_unified(markdown); + + return markdown; }; // [nickgordon20131123] this hacky override wraps images with a link to the image in a new window, and also adds some classes in case we want to style @@ -133,7 +139,7 @@ habitrpg.directive('habitrpgSortable', ['User', function(User) { + '>'; } } - + //hljs.tabReplace = ' '; return { diff --git a/public/manifest.json b/public/manifest.json index de6a0bef8b..6354c04520 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -16,6 +16,7 @@ "bower_components/Angular-At-Directive/src/at.js", "bower_components/Angular-At-Directive/src/caret.js", "bower_components/angular-bindonce/bindonce.js", + "bower_components/js-emoji/emoji.js", "bower_components/bootstrap/docs/assets/js/bootstrap.js", "bower_components/angular-bootstrap/ui-bootstrap.js", @@ -59,7 +60,8 @@ "css": [ "bower_components/bootstrap/docs/assets/css/bootstrap.css", "app.css", - "bower_components/habitrpg-shared/dist/spritesheets.css" + "bower_components/habitrpg-shared/dist/spritesheets.css", + "bower_components/js-emoji/emoji.css" ] }, "static": { From 4dbd2fd2f6b4d8b2456c13ef0b5e482560c2c713 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Wed, 27 Nov 2013 06:19:45 -0800 Subject: [PATCH 102/116] pointed to new repository with minifiable code for emoji parsing --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index a54c855e4f..4794009d1f 100644 --- a/bower.json +++ b/bower.json @@ -36,7 +36,7 @@ "marked": "~0.2.9", "JavaScriptButtons": "git://github.com/paypal/JavaScriptButtons.git#master", "Angular-At-Directive": "git://github.com/snicker/Angular-At-Directive#master", - "js-emoji": "git://github.com/iamcal/js-emoji#master", + "js-emoji": "git://github.com/snicker/js-emoji#master", "gemoji": "git://github.com/github/gemoji" }, "resolutions": { From d3eed2282c393427a455c622e24930e30fd87497 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 27 Nov 2013 16:08:34 +0100 Subject: [PATCH 103/116] fix custom day start, @lefnire we may have to restore old values or make a bailey announcement about this, also client-side the validation prevents deleting the old value, it only allows to use the increase/decrease button or selecting the old value and replacing it --- src/models/user.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/models/user.js b/src/models/user.js index 43e91a746f..94e34c2633 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -258,8 +258,7 @@ UserSchema.virtual('tasks').get(function () { UserSchema.pre('save', function(next) { //this.markModified('tasks'); - - if (_.isNaN(this.preferences.dayStart) || this.preferences.dayStart < 0 || this.preferences.dayStart > 0) { + if (_.isNaN(this.preferences.dayStart) || this.preferences.dayStart < 0 || this.preferences.dayStart > 24) { this.preferences.dayStart = 0; } From bdf32325f6ed50015a25f2765cbbfecb5839c5eb Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 27 Nov 2013 16:19:56 +0100 Subject: [PATCH 104/116] remove emoji css from manifest and move into index.styl --- public/css/index.styl | 1 + public/manifest.json | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/css/index.styl b/public/css/index.styl index 4d149f27e2..2d1e906f69 100644 --- a/public/css/index.styl +++ b/public/css/index.styl @@ -7,6 +7,7 @@ @import "../bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css" @import "../bower_components/bootstrap-tour/build/css/bootstrap-tour.min.css" @import "../bower_components/angular-loading-bar/build/loading-bar.css" +@import "../bower_components/js-emoji/emoji.css" // Custom includes @import "./tasks.styl" diff --git a/public/manifest.json b/public/manifest.json index 6354c04520..f14e5b3d97 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -60,8 +60,7 @@ "css": [ "bower_components/bootstrap/docs/assets/css/bootstrap.css", "app.css", - "bower_components/habitrpg-shared/dist/spritesheets.css", - "bower_components/js-emoji/emoji.css" + "bower_components/habitrpg-shared/dist/spritesheets.css" ] }, "static": { From 44401a9162b059dccb2c96855af2986326aebaa0 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 27 Nov 2013 16:28:09 +0100 Subject: [PATCH 105/116] add emoji.js file to tests, fix travis build --- karma.conf.js | 1 + 1 file changed, 1 insertion(+) diff --git a/karma.conf.js b/karma.conf.js index 0e1761b402..ffba336587 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -16,6 +16,7 @@ module.exports = function(config) { 'public/bower_components/angular-resource/angular-resource.min.js', 'public/bower_components/angular-mocks/angular-mocks.js', 'public/bower_components/marked/lib/marked.js', + 'public/bower_components/js-emoji/emoji.js', 'public/bower_components/habitrpg-shared/dist/habitrpg-shared.js', 'public/js/*.js', 'public/js/**/*.js', From caaebe01a200839a21bd53dc8e357f690645cc28 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Wed, 27 Nov 2013 10:53:47 -0700 Subject: [PATCH 106/116] re: d3eed22 , migration to fix 0'd dayStarts (@paglias, thanks for the fix!) --- migrations/20131127_restore_dayStart.js | 32 +++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 migrations/20131127_restore_dayStart.js diff --git a/migrations/20131127_restore_dayStart.js b/migrations/20131127_restore_dayStart.js new file mode 100644 index 0000000000..41b3774eed --- /dev/null +++ b/migrations/20131127_restore_dayStart.js @@ -0,0 +1,32 @@ +// node .migrations/20131127_restore_dayStart.js + +var mongo = require('mongoskin'); +var _ = require('lodash'); + +var backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users'); +var liveUsers = mongo.db('localhost:27017/habitrpg_new?auto_reconnect').collection('users'); + +var query = {'preferences.dayStart':{$exists:1,$ne:0}}; +var select = {'preferences.dayStart': 1}; + +backupUsers.count(query, function(err, count){ + if (err) return console.error(err); + backupUsers.findEach(query, select, {batchSize:20}, function(err, before){ + if (err) return console.error(err); + if (!before) { count--; return console.log('!before'); } + liveUsers.findById(before._id, function(err, after){ + if (err) return console.error(err); + if (!after) { count--; return console.log(before._id + ' deleted?'); } + + var dayStart = +before.preferences.dayStart; + if (after.preferences.dayStart == 0 && dayStart != 0){ + dayStart = (_.isNaN(dayStart) || dayStart < 0 || dayStart > 24) ? 0 : dayStart; + } else { + dayStart = after.preferences.dayStart; + } + + liveUsers.update({_id:after._id}, {$inc:{_v:1}, $set:{'preferences.dayStart':dayStart}}); + if (--count <= 0) console.log("DONE!"); + }) + }); +}); \ No newline at end of file diff --git a/package.json b/package.json index 0df468e4e3..7350c05643 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "karma-chai-plugins": "~0.1.0", "mocha": "~1.12.1", "karma-mocha": "~0.1.0", - "csv": "~0.3.6" + "csv": "~0.3.6", + "mongoskin": "~0.6.1" } } From db5befb570e291ad0379e3501b0aa67453687b37 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Tue, 26 Nov 2013 17:40:05 -0700 Subject: [PATCH 107/116] thanksgiving turkey & npcs --- migrations/20131126_turkey_pet.js | 1 + public/css/npcs.styl | 6 ++--- src/models/user.js | 3 ++- views/options/inventory/stable.jade | 3 ++- views/shared/modals/new-stuff.jade | 39 +++++++++++++++++++---------- 5 files changed, 34 insertions(+), 18 deletions(-) create mode 100644 migrations/20131126_turkey_pet.js diff --git a/migrations/20131126_turkey_pet.js b/migrations/20131126_turkey_pet.js new file mode 100644 index 0000000000..67ddb5093e --- /dev/null +++ b/migrations/20131126_turkey_pet.js @@ -0,0 +1 @@ +db.users.update({},{$set:{'items.pets.Turkey-Base':5}}, {multi:true}); \ No newline at end of file diff --git a/public/css/npcs.styl b/public/css/npcs.styl index 084a5c19d4..75409726a7 100644 --- a/public/css/npcs.styl +++ b/public/css/npcs.styl @@ -1,4 +1,4 @@ -.NPC-Alex, .NPC-Bailey, .NPC-Bailey-Head, .NPC-Daniel, .NPC-Justin, .NPC-Justin-Head, .NPC-Matt {background: url("/bower_components/habitrpg-shared/img/npcs/NPC-SpriteSheet.png") no-repeat} +.NPC-Alex, .NPC-Bailey, .NPC-Bailey-Head, .NPC-Daniel, .NPC-Justin, .NPC-Justin-Head, .NPC-Matt {background: url("/bower_components/habitrpg-shared/img/npcs/thanksgiving/NPC-SpriteSheet.png") no-repeat} .NPC-Alex {background-position: 0 0; width: 162px; height: 138px;} .NPC-Alex-container{margin-bottom: 20px;} @@ -14,8 +14,8 @@ height: 72px float:left .NPC-Bailey-Head - background-position: -168px -42px - width: 54px + background-position: -162px -42px + width: 60px height: 30px position: absolute top: 117px // 147 (header-height) - 30 (bailey height) diff --git a/src/models/user.js b/src/models/user.js index 43e91a746f..4dec67f8a4 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -125,7 +125,8 @@ var UserSchema = new Schema({ { 'Wolf-Veteran': Number, 'Wolf-Cerberus': Number, - 'Dragon-Hydra': Number + 'Dragon-Hydra': Number, + 'Turkey-Base': Number } ), currentPet: String, // Cactus-Desert diff --git a/views/options/inventory/stable.jade b/views/options/inventory/stable.jade index 33304e9d59..82f719e6d5 100644 --- a/views/options/inventory/stable.jade +++ b/views/options/inventory/stable.jade @@ -67,7 +67,8 @@ script(type='text/ng-template', id='partials/options.inventory.stable.pets.html' div button(ng-if='user.items.pets["Wolf-Veteran"]', class="pet-button Pet-Wolf-Veteran", ng-class='{active: user.items.currentPet == "Wolf-Veteran"}', ng-click='choosePet("Wolf", "Veteran")', popover='Veteran Wolf', popover-trigger='mouseenter', popover-placement='bottom') button(ng-if='user.items.pets["Wolf-Cerberus"]', class="pet-button Pet-Wolf-Cerberus", ng-class='{active: user.items.currentPet == "Wolf-Cerberus"}', ng-click='choosePet("Wolf", "Cerberus")', popover='Cerberus Pup', popover-trigger='mouseenter', popover-placement='bottom') - button(ng-if='user.items.pets["Dragon-Hydra"]', class="pet-button Pet-Dragon-Hydra", ng-class='{active: user.items.currentPet == "Dragon-Hydra"}', ng-click='choosePet("Dragon", "Hydra")', popover='Hydra Pet', popover-trigger='mouseenter', popover-placement='bottom') + button(ng-if='user.items.pets["Dragon-Hydra"]', class="pet-button Pet-Dragon-Hydra", ng-class='{active: user.items.currentPet == "Dragon-Hydra"}', ng-click='choosePet("Dragon", "Hydra")', popover='Hydra', popover-trigger='mouseenter', popover-placement='bottom') + button(ng-if='user.items.pets["Turkey-Base"]', class="pet-button Pet-Turkey-Base", ng-class='{active: user.items.currentPet == "Turkey-Base"}', ng-click='choosePet("Turkey", "Base")', popover='Turkey', popover-trigger='mouseenter', popover-placement='bottom') a(target='_blank', href='http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG') button(ng-if='!user.items.pets["Dragon-Hydra"]', class="pet-button pet-not-owned", popover-trigger='mouseenter', popover-placement='right', popover="Click the gold paw to learn more about how you can obtain this rare pet through contributing to HabitRPG!", popover-title='How to Get this Pet!') img(src='/bower_components/habitrpg-shared/img/PixelPaw-Gold.png') diff --git a/views/shared/modals/new-stuff.jade b/views/shared/modals/new-stuff.jade index 2afeabee87..a24c8049c8 100644 --- a/views/shared/modals/new-stuff.jade +++ b/views/shared/modals/new-stuff.jade @@ -12,25 +12,38 @@ div(modal='modals.newStuff') h3.popover-title a(target='_blank', href='https://twitter.com/Mihakuu') Bailey .popover-content - table + table.table.table-striped tr td - //ul.modal-indented-list - h4 Contrib Gear - p. - You can now unlock new a top-tier gear set and pet by contributing (code, art, docs, etc) to HabitRPG. Read more - small.muted 11/08/2013 + h4 Turkey Event (by @lemoness) + p Say hi to our NPCs, dressed to impressed for Turkey day! Also - check your stable, you'll find a fun new pet. + tr td - .herobox(style='background-color:transparent;') - .character-sprites - span.armor_7 - span.head_7 - span.shield_7 - span.weapon_8 - span.current-pet.Pet-Dragon-Hydra + h4 Chat Enhancements (by @Nick Gordon) + p. + Chat can now use markdown, Emoji, and @-tagging. Some pointers on using markdown & Emoji at here. To use @-tagging, simply type '@' in chat. + tr + td + h4 Party Sorting (by @Fandekasp) + p. + You can now adjust the way you view your party members in the top bar. They can be sorted by level, number of pets, the date they joined the party, or just randomly. Also, level colors now reflect your contributor status. + tr + td + h4 Wiki Updates (by @bobbyroberts99) + p. + The HabitRPG wiki is being speedily updated. If you’re confused about anything, go check it out - it’s a treasure trove. + + + small.muted 11/27/2013 hr + h5 11/08/2013 + table.table.table-striped + tr + td. + Contrib Gear. You can now unlock new a top-tier gear set and pet by contributing (code, art, docs, etc) to HabitRPG. Read more + h5 11/01/2013 table.table.table-striped tr From 63e44062b4efe5bc28646f41b8da6608ed1ed829 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Wed, 27 Nov 2013 11:59:07 -0700 Subject: [PATCH 108/116] thanksgiving: newstuff too --- migrations/20131126_turkey_pet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/20131126_turkey_pet.js b/migrations/20131126_turkey_pet.js index 67ddb5093e..568e38b237 100644 --- a/migrations/20131126_turkey_pet.js +++ b/migrations/20131126_turkey_pet.js @@ -1 +1 @@ -db.users.update({},{$set:{'items.pets.Turkey-Base':5}}, {multi:true}); \ No newline at end of file +db.users.update({},{$set:{'items.pets.Turkey-Base':5, 'flags.newStuff':true}}, {multi:true}); \ No newline at end of file From 1d03fee4e3f8c23d0924642af4556f58f39e20ef Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Wed, 27 Nov 2013 20:46:18 -0800 Subject: [PATCH 109/116] change reference to images directory for emoji, fixes #1935 --- public/js/directives/directives.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/directives/directives.js b/public/js/directives/directives.js index b5a35a69c1..be8982f076 100644 --- a/public/js/directives/directives.js +++ b/public/js/directives/directives.js @@ -82,7 +82,7 @@ habitrpg.directive('habitrpgSortable', ['User', function(User) { // } }); - emoji.img_path = 'bower_components/gemoji/images/emoji/unicode/'; + emoji.img_path = 'bower_components/habitrpg-shared/img/emoji/unicode/'; var toHtml = function (markdown) { if (markdown == undefined) From 62aeb7087a01a251262b8185117a5b51ffa1eced Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Wed, 27 Nov 2013 21:22:15 -0800 Subject: [PATCH 110/116] fixes #1936. petCount was only being calculated for the current user, not for the profile being displayed. This data should probably be calculated in the model rather than in a controller --- public/js/controllers/groupsCtrl.js | 2 ++ views/shared/profiles/stats.jade | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 2b6e686501..09133c3738 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -65,6 +65,8 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A } // We watch Members.selectedMember because it's asynchronously set, so would be a hassle to handle updates here $scope.$watch( function() { return Members.selectedMember; }, function (member) { + if(member) + member.petCount = window.habitrpgShared.helpers.countPets(null, member.items.pets); $scope.profile = member; }); } diff --git a/views/shared/profiles/stats.jade b/views/shared/profiles/stats.jade index 92681cafa7..1552d4cc02 100644 --- a/views/shared/profiles/stats.jade +++ b/views/shared/profiles/stats.jade @@ -34,7 +34,7 @@ p span(popover-trigger='mouseenter', popover='(Level-1)/2') {{userDef(profile.stats.lvl)}} p strong Pets Found - | : {{petCount}} + | : {{profile.petCount}} hr p strong Total Experience Boost From 5b610bfc5c91a2d604d90a5dfb673d73329bdce2 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Wed, 27 Nov 2013 22:48:48 -0800 Subject: [PATCH 111/116] small fix for sanity --- public/js/controllers/rootCtrl.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/rootCtrl.js b/public/js/controllers/rootCtrl.js index f3a52e90d9..55ada3cb67 100644 --- a/public/js/controllers/rootCtrl.js +++ b/public/js/controllers/rootCtrl.js @@ -24,9 +24,9 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ // styling helpers $scope.userLevelStyle = function(user,style){ style = style || ''; - if(user.backer.npc) + if(user && user.backer && user.backer.npc) style += ' label-npc'; - if(user.contributor.level) + if(user && user.contributor && user.contributor.level) style += ' label-contributor-'+user.contributor.level; return style; } From 20d7651a66644325832f65163c47532cd2ae4e11 Mon Sep 17 00:00:00 2001 From: Nicole Foster Date: Tue, 26 Nov 2013 23:44:50 -0500 Subject: [PATCH 112/116] Some JP translations --- locales/ja/app.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/locales/ja/app.json b/locales/ja/app.json index 879daa5c31..6d34a16a1a 100644 --- a/locales/ja/app.json +++ b/locales/ja/app.json @@ -80,7 +80,7 @@ "extraNotes": "Extra Notes", "directions/Actions": "Directions/Actions", "advancedOptions": "Advanced Options", - "difficulty": "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": "簡単", @@ -129,11 +129,11 @@ "head": "頭", "showHelm": "Show 兜", - "hair": "Hair", + "hair": "毛", "skin": "皮膚", "clothing" : "衣料", "showArmor": "Show Armor", - "other": "Other", + "other": "エキストラ", "showWeapon": "Show Weapon", "showShield": "Show Shield", "photoUrl": "写真 URL", @@ -357,7 +357,7 @@ "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", + "gems" : "宝石", "outOfGems" : "Out Of Gems", "buyMoreGems" : "Buy More Gems", "notEnoughGems" : "Not enough Gems", @@ -394,7 +394,7 @@ "close":"締める", "saveAndClose": "保存して閉じる", "cancel":"キャンセル", - "ok" : "Ok", + "ok" : "はい", "add" : "加える", "undo" : "キャンセル", "continue" : "続ける", From e7373b173d00b35409cfcbdb27712af8a273c6b0 Mon Sep 17 00:00:00 2001 From: Nicole Foster Date: Thu, 28 Nov 2013 15:05:08 -0500 Subject: [PATCH 113/116] JP translation fixes --- locales/ja/app.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locales/ja/app.json b/locales/ja/app.json index 6d34a16a1a..f96333525f 100644 --- a/locales/ja/app.json +++ b/locales/ja/app.json @@ -80,7 +80,7 @@ "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": "簡単", @@ -133,7 +133,7 @@ "skin": "皮膚", "clothing" : "衣料", "showArmor": "Show Armor", - "other": "エキストラ", + "other": "他の", "showWeapon": "Show Weapon", "showShield": "Show Shield", "photoUrl": "写真 URL", From 9bb4e2c272da392b953e2b569f3005af155918a7 Mon Sep 17 00:00:00 2001 From: Nick Gordon Date: Fri, 29 Nov 2013 09:06:13 -0800 Subject: [PATCH 114/116] update userschema to use specialPets from habitrpg-shared https://github.com/HabitRPG/habitrpg-shared/pull/45 --- src/models/user.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/models/user.js b/src/models/user.js index 9f1d3ed45f..a3d76cfd68 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -21,6 +21,8 @@ var eggPotionMapping = _.transform(items.items.eggs, function(m, egg){ })); }) +var specialPetsMapping = items.items.specialPets; // may need to revisit if we add additional information about the special pets + var UserSchema = new Schema({ // ### UUID and API Token _id: { @@ -122,12 +124,7 @@ var UserSchema = new Schema({ // First transform to a 1D eggs/potions mapping _.transform(eggPotionMapping, function(m,v,k){ m[k] = Number; }), // Then add additional pets (backer, contributor) - { - 'Wolf-Veteran': Number, - 'Wolf-Cerberus': Number, - 'Dragon-Hydra': Number, - 'Turkey-Base': Number - } + _.transform(specialPetsMapping, function(m,v,k){ m[k] = Number; }) ), currentPet: String, // Cactus-Desert From 2cd35472fc44d4ceafe6e6028e66a44743f86464 Mon Sep 17 00:00:00 2001 From: Andrea Date: Sat, 30 Nov 2013 00:07:39 -0200 Subject: [PATCH 115/116] Update app.json --- locales/es/app.json | 88 ++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/locales/es/app.json b/locales/es/app.json index a4abe78bf4..a9da398211 100644 --- a/locales/es/app.json +++ b/locales/es/app.json @@ -3,49 +3,49 @@ "_commentfrontpage":"HABITRPG PORTADA", - "synopsis" : "Un programa para construir hábitos que convierte tu vida en un Juego de Rol. Aumenta de nivel a medida que triunfas, pierde HP al fracasar, gana dinero para comprar armas y armaduras.", + "synopsis" : "Un programa para construir hábitos que convierte tu vida en un juego de rol. Aumenta de nivel a medida que triunfas, pierde HP al fracasar, gana dinero para comprar armas y armaduras.", "playButton" : "Jugar", "_commenttut": "TUTORIAL/VISITA", - "endTourButton": "Finalizar visita", + "endTourButton": "Finalizar tour", "nextButton" : "Siguiente", "prevButton" : "Volver", "tour1Title" : "Bienvenido a HabitRPG", - "tour1Text" : "Bienvenido a HabitRPG, un seguidor de hábitos que convierte tus objetivos en un Juego de Rol.", + "tour1Text" : "Bienvenido a HabitRPG, un seguidor de hábitos que convierte tus objetivos en un juego de rol.", "tour2Title" : "Hábitos", "tour2Text" : "Los hábitos son objetivos buenos o malos de los que estás pendiente constantemente.", "tour3Title" : "Diarios", "tour3Text" : "Los diarios son objetivos que quieres completar una vez al día.", "tour4Title" : "Quehaceres", "tour4Text" : "Los quehaceres son objetivos únicos que deben ser completados en algún momento.", - "tour5Title" : "Premios", - "tour5Text" : "Al completar objetivos, ganas dinero para comprar premios. Cómpralos generosamente - las recompensas son fundamentales para formar buenos hábitos. ", + "tour5Title" : "Recompensas", + "tour5Text" : "Al completar objetivos, ganas dinero para comprar recompensas. Cómpralas generosamente - las recompensas son fundamentales para formar buenos hábitos. ", "tour6Title" : "Sitúa el cursor sobre los comentarios", "tour6Text" : "Diferentes tipos de tareas tienen propiedades especiales. Mueve el cursor sobre el comentario de cada tarea para más información. Cuando estés listo para empezar, borra las tareas existentes y agrega las tuyas.", "_commentdefaulttasks":"TAREAS POR DEFECTO", - "habit1" : "1h de Trabajo Productivo", - "habit1comment": "-- Hábitos: Sigue Constantemente -- Para algunos Hábitos, sólo tiene sentido *ganar* puntos (como éste)", - "habit2" : "Comer Comida Basura", + "habit1" : "1h de trabajo productivo", + "habit1comment": "-- Hábitos: Sigue Constantemente -- Para algunos hábitos, sólo tiene sentido *ganar* puntos (como éste)", + "habit2" : "Comer comida basura", "habit2comment" : "Para otros, sólo tiene sentido *perder* puntos", - "habit3" : "Usar las Escaleras", + "habit3" : "Usar las escaleras", "habit3comment" : "Para el resto, tanto + como - tiene sentido (escaleras = ganar, elevador = perder)", - "daily1" : "1h de Proyecto Personal", - "daily1comment" : "-- Diarios: Completa Una Vez al Día -- Al final de cada día, los Diarios no cumplidos te descuentan puntos.", + "daily1" : "1h de proyecto personal", + "daily1comment" : "-- Diarios: Completa Una Vez al Día -- Al final de cada día, los diarios sin completar te descuentan puntos.", "daily2" : "Hacer Ejercicio", - "daily2comment" : "Si te está yendo bien, se vuelven verdes y son menos valiosos (experiencia, oro) y menos dañinos (PV). Esto significa que puedes darte un descanso de ellos por un rato.", - "daily3" : "45m de Lectura", - "daily3comment" : "Pero si te está yendo mal, se vuelven rojos. Peor te va, más valiosos (experiencia, oro) y más dañinos (PV) se vuelven estos objetivos. Esto te alienta a enfocarte en tus fallas, los rojos.", - "todo1" : "Llamar a Mamá", - "todo1comment" : "-- Quehaceres: Completa en Algún Momento -- Los Quehaceres no cumplidos no te harán daño, pero se volverán más valiosos con el tiempo. Esto te alentará a completar los Quehaceres obsoletos.", - "reward1" : "1 Episodio de Game of Thrones", - "reward1comment": "-- Premios: Hazte Un Obsequio! -- Al completar objetivos, ganas dinero para comprar premios. Cómpralos generosamente - las recompensas son fundamentales para formar buenos hábitos.", + "daily2comment" : "Si te está yendo bien, se vuelven verdes y son menos valiosos (experiencia, oro) y menos dañinos (HP). Esto significa que puedes darte un descanso de ellos por un rato.", + "daily3" : "45m de lectura", + "daily3comment" : "Pero si te está yendo mal, se vuelven rojos. Peor te va, más valiosos (experiencia, oro) y más dañinos (HP) se vuelven estos objetivos. Esto te alienta a enfocarte en tus fallas, los rojos.", + "todo1" : "Llamar a mamá", + "todo1comment" : "-- Quehaceres: Completa en Algún Momento -- Los quehaceres sin completar no te harán daño, pero se volverán más valiosos con el tiempo. Esto te alentará a completar los quehaceres obsoletos.", + "reward1" : "1 Episodio de Juego de Tronos", + "reward1comment": "-- Recompensas: Hazte Un Obsequio! -- Al completar objetivos, ganas dinero para comprar recompensas. Cómpralas generosamente - las recompensas son fundamentales para formar buenos hábitos.", "reward2" : "Torta", - "reward2comment" : "Pero sólo compra si tienes suficiente oro - de lo contrario perderás PV.", + "reward2comment" : "Pero sólo compra si tienes suficiente oro - de lo contrario perderás HP.", "_commentdefaulttags" : "ETIQUETA DE DEFECTO", "morning" : "mañana", @@ -53,7 +53,7 @@ "evening" : "noche", "_commenthead": "ENCABEZAMIENTO", - "health": "Vida", + "health": "Salud", "experience": "Experiencia", "history": "Historial", "anonymous": "Anónimo", @@ -81,7 +81,7 @@ "advancedOptions": "Opciones Avanzadas", "difficulty": "Dificultad", "difficultyHelpTitle": "¿Qué tan difícil es esta tarea?", - "difficultyHelpContent": "Esto multiplica su valor respecto al puntaje. Úsalo con moderación y depende más bien de nuestros algoritmos orgánicos de ajuste de valor. Pero algunas tareas son extremadamente más valiosas (Escribir una Tesis vs. Lavarme los Dientes). Haz clic para más información.", + "difficultyHelpContent": "Esto multiplica su valor respecto al puntaje. Úsalo con moderación; en lugar de eso depende de nuestros algoritmos orgánicos de ajuste de valor. Pero algunas tareas son extremadamente más valiosas (Escribir una tesis vs. Lavarme los dientes). Haz clic para más información.", "easy": "Fácil", "medium": "Medio", "hard": "Difícil", @@ -103,10 +103,10 @@ "dueDate": "Fecha de Vencimiento", "remaining": "Pendientes", "complete": "Completos", - "rewards": "Premios", + "rewards": "Recompensas", "gold": "Oro", "silver": "Plata", - "newReward": "Nuevo Premio", + "newReward": "Nueva Recompensa", "price": "Precio", "tags" : "Etiquetas", "editTags" : "Editar Etiquetas", @@ -115,8 +115,8 @@ "_commentdrops" : "SYSTEMA DE DROPS", - "dropsEnabled" : "¡Drops Habilitados!", - "dropsEnabledText1" : "¡Has activado el Sistema de drops! Ahora cuando completas tareas, tienes una pequeña azar de encontrar un ítem. Y adivina qué, has encontrado un", + "dropsEnabled" : "¡Caídas Habilitadas!", + "dropsEnabledText1" : "¡Has desbloqueado el Sistema de Caídas! Ahora cuando completas tareas, tienes una pequeña chance de encontrar un ítem. Y adivina qué, has encontrado un", "dropsEnabledText2" : "huevo", "itemDropped" : "Ha caído un ítem", @@ -131,11 +131,11 @@ "hair": "Cabello", "skin": "Piel", "clothing" : "Ropa", - "showArmor": "Show Armor", - "other": "Other", - "showWeapon": "Show Weapon", - "showShield": "Show Shield", - "photoUrl": "Url de la Imagen", + "showArmor": "Mostrar Armadura", + "other": "Más", + "showWeapon": "Mostrar Arma", + "showShield": "Mostrar Escudo", + "photoUrl": "Url de Imagen", "fullName": "Nombre Completo", "blurb": "Descripción", "websites": "Sitios Web", @@ -155,10 +155,10 @@ "party": "Grupo", "createAParty":"Crear un Grupo", - "noPartyText": "No estás en un grupo. Puedes crear uno e invitar amigos, o si te quieres incorporarse a un grupo existente, haz que ingresen:", + "noPartyText": "No estás en un grupo. Puedes crear uno e invitar amigos, o si te quieres unir a un grupo existente, haz que ingresen:", "partyName": "Nombre del Grupo", "create":"Crear", - "userId":"Id del Usuario", + "userId":"Id de Usuario", "invite":"Invitar", "leave": "Salir", "invitedTo" : "Estás Invitado A", @@ -181,12 +181,12 @@ "rarePets": "Mascotas Raras", "tavern": "Taberna", - "restButton":"Descansar En La Posada", - "checkoutButton": "Salir De La Posada", - "tavernTalkTitle":"Charla de Taberna & Busqueda de grupos", - "tavernRestingInfo" : "Mientras descansas, tus Diarios son guardados y no son afectados por el cambio de día. Salgas mañana de la posada o en una semana, continuarás en el mismo estado en que estabas cuando entraste.", + "restButton":"Descansar en la Posada", + "checkoutButton": "Salir de la Posada", + "tavernTalkTitle":"Charla de Taberna & Búsqueda de Grupos", + "tavernRestingInfo" : "Mientras descansas, tus diarios son guardados y no son afectados por el cambio de día. Salgas mañana de la posada o en una semana, continuarás en el mismo estado en que estabas cuando entraste.", "resources" : "Recursos", - "LFGPosts" : "Publicaciones de busca de grupos", + "LFGPosts" : "Publicaciones de búsqueda de grupos", "tutorials" : "Tutoriales", "achievements":"Logros", @@ -199,7 +199,7 @@ "kickstartText" : "Apoyó el proyecto en Kickstarter", "streakName" : " Logro(s) en Cadena", "streakText1" : "Ha completado ", - "stureakText2" : "Diarios durante 21 días consecutivos", + "stureakText2" : "diarios durante 21 días consecutivos", "origUserName" : "Usuario Original", "origUserText" : "Se remonta a los antiguos días de Habit (¡benditos sean por lidiar con los errores!)", "ultimGearName" : "Máximo Equipamiento", @@ -212,7 +212,7 @@ "settings":"Configuración", "customDayStart":"Personalizar Inicio del Día", "24HrClock": "Reloj 24h", - "clockInfo":"Por defecto HabitRPG chequea y reinicia tus Diarios cada día a medianoche. Puedes personalizar esto aquí (Ingresa un número entre 0 y 24).", + "clockInfo":"Por defecto HabitRPG chequea y reinicia tus diarios cada día a medianoche. Puedes personalizar esto aquí (Ingresa un número entre 0 y 24).", "misc":"Miscelánea", "hideHeader":"Ocultar Encabezado", "showHeader":"Mostrar Encabezado", @@ -231,7 +231,7 @@ "delete":"Eliminar", "deleteAltText":"Eliminar tu cuenta", "deleteHeader" : "Eliminar Cuenta", - "deleteText1":"¡Woa woa woa! ¿Estás seguro? Esto realmente eliminará tu cuenta para siempre, y nunca podrá ser recuperada. Si estás absolutamente seguro, escribe", + "deleteText1":"¡Wow wow wow! ¿Estás seguro? Esto realmente eliminará tu cuenta para siempre, y nunca podrá ser recuperada. Si estás absolutamente seguro, escribe", "deleteText2":" DELETE ", "deleteText3":"en el cuadro de texto", "API":"API", @@ -288,7 +288,7 @@ "sheild1Text": "Reduce la pérdida de HP en un 3%", "sheild2Name" : "Broquel", "sheild2Text": "Reduce la pérdida de HP en un 4%", - "sheild3Name" : "Escudo Fuerte", + "sheild3Name" : "Escudo Reforzado", "sheild3Text": "Reduce la pérdida de HP en un 5%", "sheild4Name" : "Escudo Rojo", "sheild4Text": "Reduce la pérdida de HP en un 7%", @@ -347,21 +347,21 @@ "NPCAugustinText1" : "¡Bienvenido al Mercado! Soy el comerciante;", "NPCAugustinText2" : "¿Mueres por conseguir esa mascota particular que buscas, pero no quieres esperar que caiga? ¡Cómprala aquí!", "NPCJohanssonText1" : "¡Bienvenido a la Taberna! Soy", - "NPCJohanssonText2": "el camarero. Si quieres descansar por un tiempo (¿te vas de vacaciones? ¿enfermedad repentina?), te instalaré en la posada - los Diarios no te dañarán mientras descansas. Quédate por un tiempo y conoce a los lugareños.", + "NPCJohanssonText2": "el camarero. Si quieres descansar por un tiempo (¿te vas de vacaciones? ¿enfermedad repentina?), te instalaré en la posada - los diarios no te dañarán mientras descansas. Quédate por un tiempo y conoce a los lugareños.", "NPCMelchiorText1" : "", "NPCBowenText1" : "", "NPCBochText1" : "", "_commentdeathstuff" : "DEATH", "deathTitle" : "¡Has Muerto!", - "deathText" : "Has perdido tu oro, 1 nivel y 1 pieza de equipamiento. ¡Asegúrate de completar tus Diarios para prevenir que esto pase de nuevo!", + "deathText" : "Has perdido tu oro, 1 nivel y 1 pieza de equipamiento. ¡Asegúrate de completar tus diarios para prevenir que esto pase de nuevo!", "_commentgems" : "GEMS", "gems" : "Gemas", "outOfGems" : "Sin Gemas", "buyMoreGems" : "Compra Más Gemas", "notEnoughGems" : "No hay suficientes Gemas", - "petsOutOfGems" : "¡Oops, te has quedado sin Gemas, las cuales sirven para comprar ítems especiales! Habit es un proyecto de código abierto, y le viene bien toda la ayuda que pueda conseguir - compra más Gemas para recibir esta mascota, y considéralo como una donación a los colaboradores", + "petsOutOfGems" : "¡Ups, te has quedado sin Gemas, las cuales sirven para comprar ítems especiales! Habit es un proyecto de código abierto, y le viene bien toda la ayuda que pueda conseguir - compra más Gemas para recibir esta mascota, y considéralo como una donación a los colaboradores", "gemsWhatFor" : "Se usan para comprar ítems especiales (reroll, huevos, pociones eclosionadoras, etc). Necesitarás desbloquear estas características para poder usar Gemas.", "_commentfooter": "FOOTER", From 7200ab16f4eacc558588bf83cdea4f14e1e38b24 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sat, 30 Nov 2013 10:25:51 -0700 Subject: [PATCH 116/116] thanksgiving: back to normal --- public/css/npcs.styl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/css/npcs.styl b/public/css/npcs.styl index 75409726a7..2c2370808c 100644 --- a/public/css/npcs.styl +++ b/public/css/npcs.styl @@ -1,4 +1,4 @@ -.NPC-Alex, .NPC-Bailey, .NPC-Bailey-Head, .NPC-Daniel, .NPC-Justin, .NPC-Justin-Head, .NPC-Matt {background: url("/bower_components/habitrpg-shared/img/npcs/thanksgiving/NPC-SpriteSheet.png") no-repeat} +.NPC-Alex, .NPC-Bailey, .NPC-Bailey-Head, .NPC-Daniel, .NPC-Justin, .NPC-Justin-Head, .NPC-Matt {background: url("/bower_components/habitrpg-shared/img/npcs/NPC-SpriteSheet.png") no-repeat} .NPC-Alex {background-position: 0 0; width: 162px; height: 138px;} .NPC-Alex-container{margin-bottom: 20px;}