semver v1.5.0; Merge release-1.5.0 into master

This commit is contained in:
Kerrick Long
2012-04-30 10:15:46 -05:00
8 changed files with 277 additions and 275 deletions
+2 -1
View File
@@ -1,3 +1,4 @@
deploy/
resources/
.project
.project
.sublime-project
+9 -3
View File
@@ -2,12 +2,12 @@
"just_now": {
"message": "just now",
"description": "Describe that something just happened."
},
"a_minute_ago": {
"message": "a minute ago",
"description": "Describe that something happened a minute ago."
},
"a_minute_from_now": {
"message": "a minute from now",
@@ -291,6 +291,12 @@
"button_hide": {
"message": "hide this form"
},
"submit_again": {
"message": "submit again"
},
"cancel_submission": {
"message": "cancel submission"
},
"error_empty": {
"message": "There needs to be something here."
},
@@ -476,7 +482,7 @@
"content": "Mostly Harmless"
}
}
},
"group_orangered_notifications": {
"message": "$ORANGERED$ Notifications",
+74 -74
View File
@@ -1,20 +1,20 @@
{
"just_now": {
"message": "just now",
"message": "à l'instant",
"description": "Describe that something just happened."
},
"a_minute_ago": {
"message": "a minute ago",
"message": "Il y a une minute",
"description": "Describe that something happened a minute ago."
},
"a_minute_from_now": {
"message": "a minute from now",
"message": "Dans une minute",
"decription": "Describe that something will happen in a minute."
},
"minutes_ago": {
"message": "$NUM$ minutes ago",
"message": "$NUM$ Il y a quelques minutes",
"placeholders": {
"NUM": {
"content": "$1",
@@ -23,7 +23,7 @@
}
},
"minutes_from_now": {
"message": "$NUM$ minutes from now",
"message": "$NUM$ Dans quelques minutes",
"placeholders": {
"NUM": {
"content": "$1",
@@ -32,15 +32,15 @@
}
},
"an_hour_ago": {
"message": "an hour ago",
"message": "Il y a une heure",
"description": "Describe that something happened an hour ago."
},
"an_hour_from_now": {
"message": "an hour from now",
"message": "Dans une heure",
"description": "Describe that will happen in an hour."
},
"hours_ago": {
"message": "$NUM$ hours ago",
"message": "$NUM$ Il y a quelques heures",
"placeholders": {
"NUM": {
"content": "$1",
@@ -49,7 +49,7 @@
}
},
"hours_from_now": {
"message": "$NUM$ hours from now",
"message": "$NUM$ Dans quelques heures",
"placeholders": {
"NUM": {
"content": "$1",
@@ -58,15 +58,15 @@
}
},
"yesterday": {
"message": "yesterday",
"message": "Hier",
"description": "The day before today."
},
"tomorrow": {
"message": "tomorrow",
"message": "Demain",
"description": "The day after today."
},
"days_ago": {
"message": "$NUM$ days ago",
"message": "$NUM$ Il y a quelques jours",
"placeholders": {
"NUM": {
"content": "$1",
@@ -75,7 +75,7 @@
}
},
"days_from_now": {
"message": "$NUM$ days from now",
"message": "$NUM$ Dans quelques jours",
"placeholders": {
"NUM": {
"content": "$1",
@@ -84,15 +84,15 @@
}
},
"last_week": {
"message": "last week",
"message": "La semaine dernière",
"description": "The week before this one."
},
"next_week": {
"message": "next week",
"message": "La semaine prochaine",
"description": "The week after this one."
},
"weeks_ago": {
"message": "$NUM$ weeks ago",
"message": "$NUM$ Il y a quelques semaines",
"placeholders": {
"NUM": {
"content": "$1",
@@ -101,7 +101,7 @@
}
},
"weeks_from_now": {
"message": "$NUM$ weeks from now",
"message": "$NUM$ Dans quelques semaines",
"placeholders": {
"NUM": {
"content": "$1",
@@ -110,15 +110,15 @@
}
},
"last_month": {
"message": "last month",
"message": "Le mois dernier",
"description": "The month before this one."
},
"next_month": {
"message": "next month",
"message": "Le mois prochain",
"description": "The month after this one."
},
"months_ago": {
"message": "$NUM$ months ago",
"message": "$NUM$ Il y a quelques mois",
"placeholders": {
"NUM": {
"content": "$1",
@@ -127,7 +127,7 @@
}
},
"months_from_now": {
"message": "$NUM$ months from now",
"message": "$NUM$ Dans quelques mois",
"placeholders": {
"NUM": {
"content": "$1",
@@ -136,15 +136,15 @@
}
},
"last_year": {
"message": "last year",
"message": "L'année dernière",
"description": "The year before this one."
},
"next_year": {
"message": "next year",
"message": "L'an prochain",
"description": "The year after this one."
},
"years_ago": {
"message": "$NUM$ years ago",
"message": "$NUM$ Il y a quelques années",
"placeholders": {
"NUM": {
"content": "$1",
@@ -153,7 +153,7 @@
}
},
"years_from_now": {
"message": "$NUM$ years from now",
"message": "$NUM$ Il y a quelques années",
"placeholders": {
"NUM": {
"content": "$1",
@@ -162,15 +162,15 @@
}
},
"last_century": {
"message": "last century",
"message": "Le siècle dernier",
"description": "The century before this one."
},
"next_century": {
"message": "next century",
"message": "Le siècle prochain",
"description": "The century after this one."
},
"centuries_ago": {
"message": "$NUM$ centuries ago",
"message": "$NUM$ Il y a quelques siècles",
"placeholders": {
"NUM": {
"content": "$1",
@@ -179,7 +179,7 @@
}
},
"centuries_from_now": {
"message": "$NUM$ centuries from now",
"message": "$NUM$ Dans quelques siècles",
"placeholders": {
"NUM": {
"content": "$1",
@@ -188,7 +188,7 @@
}
},
"not_activated": {
"message": "$APPNAME$ is not activated for this page. Click to activate.",
"message": "$APPNAME$ n'est pas activé sur cette page. Cliquez pour activer.",
"placeholders": {
"APPNAME": {
"content": "Mostly Harmless"
@@ -196,13 +196,13 @@
}
},
"loading": {
"message": "Loading data..."
"message": "Chargement..."
},
"viewing_comments": {
"message": "You are currently viewing the comments for this page."
"message": "Voici les commentaires pour cette page."
},
"submit_page": {
"message": "Submit this page to $REDDIT$.",
"message": "Poster sur $REDDIT$.",
"placeholders": {
"REDDIT": {
"content": "reddit"
@@ -210,7 +210,7 @@
}
},
"submitted_num_times": {
"message": "This page has been submitted $NUM$ times.",
"message": "Cette page a été postée $NUM$ fois.",
"placeholders": {
"NUM": {
"content": "$1",
@@ -219,7 +219,7 @@
}
},
"login": {
"message": "You have to be logged in to do that. $BEGIN_LINK$Click to open the login page.$END_LINK$",
"message": "Vous devez être connecté pour effectuer cette action. $BEGIN_LINK$Cliquez pour ouvrir la page de connexion.$END_LINK$",
"placeholders": {
"BEGIN_LINK": {
"content": "<a href=\"http://www.reddit.com/login\" target=\"_blank\">"
@@ -248,22 +248,22 @@
}
},
"action_unsave": {
"message": "unsave"
"message": "Ne pas sauvegarder"
},
"action_save": {
"message": "save"
"message": "Sauvegarder"
},
"action_unhide": {
"message": "unhide"
"message": "Ne plus cacher"
},
"action_hide": {
"message": "hide"
"message": "Cacher"
},
"action_share": {
"message": "share"
"message": "Partager"
},
"report_confirm": {
"message": "are you sure? $BEGIN_LINK_YES$yes$END_LINK_YES$/$BEGIN_LINK_NO$no$END_LINK_NO$",
"message": "Êtes vous sûr ? $BEGIN_LINK_YES$oui$END_LINK_YES$/$BEGIN_LINK_NO$non$END_LINK_NO$",
"placeholders": {
"BEGIN_LINK_YES": {
"content": "<a onclick=\"reddit.reportPost(event)\">"
@@ -280,25 +280,25 @@
}
},
"action_report": {
"message": "report"
"message": "signaler"
},
"action_reported": {
"message": "reported!"
"message": "signalé !"
},
"button_submit": {
"message": "submit"
"message": "soumettre"
},
"button_hide": {
"message": "hide this form"
"message": "cacher ce rapport"
},
"error_empty": {
"message": "There needs to be something here."
"message": "Vous devez mettre quelque chose ici."
},
"loading_api": {
"message": "Loading data from the API..."
},
"loading_cache": {
"message": "Loading data from the cache..."
"message": "Chargement du cache..."
},
"error_not_cached": {
"message": "Cannot create list for a URL that has not been cached."
@@ -317,7 +317,7 @@
}
},
"view_on_reddit": {
"message": "View this post on $REDDIT$",
"message": "Voir ce poste sur $REDDIT$",
"placeholders": {
"REDDIT": {
"content": "reddit"
@@ -325,7 +325,7 @@
}
},
"submitted_when": {
"message": "submitted $TIME$",
"message": "Soumis $TIME$",
"placeholders": {
"TIME": {
"content": "$1",
@@ -334,13 +334,13 @@
}
},
"by": {
"message": "by"
"message": "de"
},
"to": {
"message": "to"
"message": "à"
},
"add_comment_zero": {
"message": "add a comment"
"message": "Ajouter un commentaire"
},
"add_comment_one": {
"message": "add to the one comment"
@@ -355,7 +355,7 @@
}
},
"leave_comment": {
"message": "Leave a comment"
"message": "Laisser un commentaire"
},
"stale_posts_hiding": {
"message": "Hiding $NUM$ stale posts. $BEGIN_LINK_SHOW$Show them now$END_LINK_SHOW$, or visit the $BEGIN_LINK_OPTIONS$options page$END_LINK_OPTIONS$ to change your Fresh Content preferences.",
@@ -390,7 +390,7 @@
}
},
"orangered_received": {
"message": "You have an $ORANGERED$!",
"message": "Vous avez une $ORANGERED$!",
"placeholders": {
"ORANGERED": {
"content": "orangered"
@@ -398,31 +398,31 @@
}
},
"orangered_action": {
"message": "Click here to be taken to your inbox."
"message": "Cliquez ici pour accéder à votre messaerie."
},
"url": {
"message": "url"
},
"popular_choices": {
"message": "popular choices"
"message": "choix populaires"
},
"title": {
"message": "title"
"message": "titre"
},
"suggest_title": {
"message": "suggest title"
"message": "suggérer un titre"
},
"tab_preferences": {
"message": "Preferences"
"message": "Préférences"
},
"group_fresh_content": {
"message": "Fresh Content"
},
"fresh_content_show_one_day": {
"message": "Only show posts from today."
"message": "Montrer seulement les messages datant d'aujourd'hui."
},
"fresh_content_show_days": {
"message": "Only show posts less than $NUM$ days old.",
"message": "Montrer seulement les messages datant de moins de $NUM$ jours.",
"placeholders": {
"NUM": {
"content": "$1",
@@ -431,7 +431,7 @@
}
},
"fresh_content_show_weeks": {
"message": "Only show posts less than $NUM$ weeks old.",
"message": "Montrer seulement les messages datant de moins de $NUM$ semaines.",
"placeholders": {
"NUM": {
"content": "$1",
@@ -440,7 +440,7 @@
}
},
"fresh_content_show_months": {
"message": "Only show posts less than $NUM$ months old.",
"message": "Montrer seulement les messages datant de moins de $NUM$ mois.",
"placeholders": {
"NUM": {
"content": "$1",
@@ -449,22 +449,22 @@
}
},
"fresh_content_show_all": {
"message": "Show posts from all time."
"message": "Montrer tous les messages."
},
"fresh_content_description": {
"message": "This setting allows you to choose the oldest reddit posts you&rsquo;d like to see. Anything posted before the value you&rsquo;ve chosen will be indicated in the browser button&rsquo;s total, but will not be shown in the popup."
"message": "Cette option vous permet de ne voir les posts de Reddit qu'à partir d'une date donnée. Les post ultérieur à cette date seront inscrits dans le total des posts mais n'apparaîtront pas dans le pop-up."
},
"group_popup_width": {
"message": "Popup Width"
"message": "Hauteur du popup"
},
"popup_width_description": {
"message": "This setting allows you to set the width of the browser action popup."
"message": "Cette option vous permet de choisir la hauteur du pop-up."
},
"group_shameless_plug": {
"message": "Shameless Plug"
"message": "Plug éhonté"
},
"shameless_plug_label": {
"message": "Show the shameless plug"
"message": "Montrer le plug éhonté"
},
"shameless_plug_description": {
"message": "When checked, this will add the following to each commment you post from within $MOSTLY_HARMLESS$:$PLUG_TEXT$",
@@ -487,7 +487,7 @@
}
},
"orangered_check": {
"message": "Check for $ORANGERED$s",
"message": "Vérifier vos $ORANGERED$s",
"placeholders": {
"ORANGERED": {
"content": "orangered"
@@ -495,7 +495,7 @@
}
},
"orangered_sound_label": {
"message": "Play a sound when you have an $ORANGERED$",
"message": "Jouer un son lorsque vous recevez un $ORANGERED$",
"placeholders": {
"ORANGERED": {
"content": "orangered"
@@ -503,10 +503,10 @@
}
},
"orangered_sound_preview": {
"message": "Preview the notification sound"
"message": "Écouter le son de la notification"
},
"orangered_interval_minutes": {
"message": "Check every $NUM$ minutes",
"message": "Vérifier toutes les $NUM$ minutes",
"placeholders": {
"NUM": {
"content": "$1",
@@ -515,7 +515,7 @@
}
},
"orangered_display_time": {
"message": "Display notification for $NUM$ seconds",
"message": "Montrer la notification pendant $NUM$ seconds",
"placeholders": {
"NUM": {
"content": "$1",
+61 -109
View File
@@ -1,20 +1,20 @@
{
"just_now": {
"message": "just now",
"message": "बस अभी",
"description": "Describe that something just happened."
},
"a_minute_ago": {
"message": "a minute ago",
"message": "एक मिनट पेहले",
"description": "Describe that something happened a minute ago."
},
"a_minute_from_now": {
"message": "a minute from now",
"message": "अब से एक मिनट बाद",
"decription": "Describe that something will happen in a minute."
},
"minutes_ago": {
"message": "$NUM$ minutes ago",
"message": "$NUM$ मिनिटों पेहले",
"placeholders": {
"NUM": {
"content": "$1",
@@ -23,7 +23,7 @@
}
},
"minutes_from_now": {
"message": "$NUM$ minutes from now",
"message": "$NUM$ मिनिटों बाद",
"placeholders": {
"NUM": {
"content": "$1",
@@ -32,15 +32,15 @@
}
},
"an_hour_ago": {
"message": "an hour ago",
"message": "एक घंटे पेहले",
"description": "Describe that something happened an hour ago."
},
"an_hour_from_now": {
"message": "an hour from now",
"message": "अब से एक घंटे बाद",
"description": "Describe that will happen in an hour."
},
"hours_ago": {
"message": "$NUM$ hours ago",
"message": "$NUM$ घंटे पेहले",
"placeholders": {
"NUM": {
"content": "$1",
@@ -49,7 +49,7 @@
}
},
"hours_from_now": {
"message": "$NUM$ hours from now",
"message": "$NUM$ घंटों बाद",
"placeholders": {
"NUM": {
"content": "$1",
@@ -58,15 +58,15 @@
}
},
"yesterday": {
"message": "yesterday",
"message": "कल",
"description": "The day before today."
},
"tomorrow": {
"message": "tomorrow",
"message": "कल",
"description": "The day after today."
},
"days_ago": {
"message": "$NUM$ days ago",
"message": "$NUM$ दिनों पेहले",
"placeholders": {
"NUM": {
"content": "$1",
@@ -75,7 +75,7 @@
}
},
"days_from_now": {
"message": "$NUM$ days from now",
"message": "$NUM$ दिनों बाद",
"placeholders": {
"NUM": {
"content": "$1",
@@ -84,15 +84,15 @@
}
},
"last_week": {
"message": "last week",
"message": "गये हफ्ते",
"description": "The week before this one."
},
"next_week": {
"message": "next week",
"message": "अगले हफ्ते",
"description": "The week after this one."
},
"weeks_ago": {
"message": "$NUM$ weeks ago",
"message": "$NUM$ हफ्ते पहले",
"placeholders": {
"NUM": {
"content": "$1",
@@ -101,7 +101,7 @@
}
},
"weeks_from_now": {
"message": "$NUM$ weeks from now",
"message": "$NUM$ हफ़्तों के बाद",
"placeholders": {
"NUM": {
"content": "$1",
@@ -110,15 +110,15 @@
}
},
"last_month": {
"message": "last month",
"message": "गये महीने",
"description": "The month before this one."
},
"next_month": {
"message": "next month",
"message": "अगले महीने",
"description": "The month after this one."
},
"months_ago": {
"message": "$NUM$ months ago",
"message": "$NUM$ महीनों पेहले",
"placeholders": {
"NUM": {
"content": "$1",
@@ -127,7 +127,7 @@
}
},
"months_from_now": {
"message": "$NUM$ months from now",
"message": "$NUM$ महीनों बाद",
"placeholders": {
"NUM": {
"content": "$1",
@@ -136,15 +136,15 @@
}
},
"last_year": {
"message": "last year",
"message": "गये साल",
"description": "The year before this one."
},
"next_year": {
"message": "next year",
"message": "अगले साल",
"description": "The year after this one."
},
"years_ago": {
"message": "$NUM$ years ago",
"message": "$NUM$ सालों पेहले",
"placeholders": {
"NUM": {
"content": "$1",
@@ -153,7 +153,7 @@
}
},
"years_from_now": {
"message": "$NUM$ years from now",
"message": "$NUM$ सालों बाद",
"placeholders": {
"NUM": {
"content": "$1",
@@ -162,15 +162,15 @@
}
},
"last_century": {
"message": "last century",
"message": "पिछली सदी",
"description": "The century before this one."
},
"next_century": {
"message": "next century",
"message": "अगली सदी",
"description": "The century after this one."
},
"centuries_ago": {
"message": "$NUM$ centuries ago",
"message": "$NUM$ सदियों पेहले",
"placeholders": {
"NUM": {
"content": "$1",
@@ -179,7 +179,7 @@
}
},
"centuries_from_now": {
"message": "$NUM$ centuries from now",
"message": "$NUM$ सदियों बाद",
"placeholders": {
"NUM": {
"content": "$1",
@@ -188,7 +188,7 @@
}
},
"not_activated": {
"message": "$APPNAME$ is not activated for this page. Click to activate.",
"message": "$APPNAME$ इस पेज के लिए सक्रिय नहीं है | कृपया क्लिक कर के एक्टिवेट करे |",
"placeholders": {
"APPNAME": {
"content": "Mostly Harmless"
@@ -196,13 +196,13 @@
}
},
"loading": {
"message": "Loading data..."
"message": "जानकारी प्राप्त..."
},
"viewing_comments": {
"message": "You are currently viewing the comments for this page."
"message": "आप इस पेज की टिप्पणियां पढ़ रहे है |"
},
"submit_page": {
"message": "Submit this page to $REDDIT$.",
"message": "$REDDIT$ पे प्रस्तुत करें |",
"placeholders": {
"REDDIT": {
"content": "reddit"
@@ -210,7 +210,7 @@
}
},
"submitted_num_times": {
"message": "This page has been submitted $NUM$ times.",
"message": "यह पेज $NUM$ बार प्रस्तुत किये जा चूका है |",
"placeholders": {
"NUM": {
"content": "$1",
@@ -219,7 +219,7 @@
}
},
"login": {
"message": "You have to be logged in to do that. $BEGIN_LINK$Click to open the login page.$END_LINK$",
"message": "यह काम करने के लिए लोग इन करना ज़रूरी है | $BEGIN_LINK$लोग इन करने के लिए, यहाँ क्लिक करें |$END_LINK$",
"placeholders": {
"BEGIN_LINK": {
"content": "<a href=\"http://www.reddit.com/login\" target=\"_blank\">"
@@ -230,7 +230,7 @@
}
},
"api_error": {
"message": "There was an API error. HTTP Status: $STATUS$. Click to try again.",
"message": "एक API ऐर्रोर हुई है | HTTP की स्तिथि : $STATUS$. दोबारा कोशिश करने के लिए, कृप्या क्लिक करें |",
"placeholders": {
"STATUS": {
"content": "$1",
@@ -239,7 +239,7 @@
}
},
"api_timeout": {
"message": "The API timed out after $NUM$ seconds. Click to try again.",
"message": "API इतने $NUM$ सेकंड बाद बंद हुई | दोबारा कोशिश करने के लिए, कृप्या क्लिक करें |",
"placeholders": {
"NUM": {
"content": "$1",
@@ -248,22 +248,22 @@
}
},
"action_unsave": {
"message": "unsave"
"message": "न जमा करे"
},
"action_save": {
"message": "save"
"message": "जमा करे"
},
"action_unhide": {
"message": "unhide"
"message": "दिखाएँ"
},
"action_hide": {
"message": "hide"
"message": "छिपायें"
},
"action_share": {
"message": "share"
"message": "दोस्तों के साथ बाटें"
},
"report_confirm": {
"message": "are you sure? $BEGIN_LINK_YES$yes$END_LINK_YES$/$BEGIN_LINK_NO$no$END_LINK_NO$",
"message": "क्या आप सच मैं येह करना चाहते हैं $BEGIN_LINK_YES$हाँ$END_LINK_YES$/$BEGIN_LINK_NO$नहीं$END_LINK_NO$",
"placeholders": {
"BEGIN_LINK_YES": {
"content": "<a onclick=\"reddit.reportPost(event)\">"
@@ -280,31 +280,31 @@
}
},
"action_report": {
"message": "report"
"message": "रिपोर्ट करें"
},
"action_reported": {
"message": "reported!"
"message": "रिपोर्ट हो चुकी ! "
},
"button_submit": {
"message": "submit"
"message": "प्रस्तुत करें"
},
"button_hide": {
"message": "hide this form"
"message": "यह फॉर्म छिपायें "
},
"error_empty": {
"message": "There needs to be something here."
"message": "यहाँ कुछ होना चाहिएThere needs to be something here."
},
"loading_api": {
"message": "Loading data from the API..."
"message": "API से जानकारी प्राप्त हो रही है..."
},
"loading_cache": {
"message": "Loading data from the cache..."
"message": "cache से जानकारी प्राप्त हो रही है..."
},
"error_not_cached": {
"message": "Cannot create list for a URL that has not been cached."
"message": "जो URL की cache न हुई हो, उसकी लिस्ट नहीं बन सकती|"
},
"score": {
"message": "$UPS$ upvotes, $DOWNS$ downvotes.",
"message": "$UPS$ उप्वोते, $DOWNS$ डाउनवोट",
"placeholders": {
"UPS": {
"content": "$1",
@@ -317,7 +317,7 @@
}
},
"view_on_reddit": {
"message": "View this post on $REDDIT$",
"message": "$REDDIT$ पर देखे ",
"placeholders": {
"REDDIT": {
"content": "reddit"
@@ -325,7 +325,7 @@
}
},
"submitted_when": {
"message": "submitted $TIME$",
"message": "प्रस्तुत हुई $TIME$",
"placeholders": {
"TIME": {
"content": "$1",
@@ -334,19 +334,19 @@
}
},
"by": {
"message": "by"
"message": "द्वारा"
},
"to": {
"message": "to"
"message": "से"
},
"add_comment_zero": {
"message": "add a comment"
"message": "टिपण्णी दे"
},
"add_comment_one": {
"message": "add to the one comment"
},
"add_comment_many": {
"message": "add to the $NUM$ comments",
"message": "$NUM$ टिप्पणियों मैं शामिल करे |",
"placeholders": {
"NUM": {
"content": "$1",
@@ -355,10 +355,10 @@
}
},
"leave_comment": {
"message": "Leave a comment"
"message": "टिपण्णी दे"
},
"stale_posts_hiding": {
"message": "Hiding $NUM$ stale posts. $BEGIN_LINK_SHOW$Show them now$END_LINK_SHOW$, or visit the $BEGIN_LINK_OPTIONS$options page$END_LINK_OPTIONS$ to change your Fresh Content preferences.",
"message": "$NUM$ पुराणी पोस्ट चिय्पयी गयी है | $BEGIN_LINK_SHOW$अभी दिखाएँ$END_LINK_SHOW$, वरना $BEGIN_LINK_OPTIONS$ओपशंस$END_LINK_OPTIONS$ में जा कर Fresh Content में जा कर की सेट्टिंग चंगे करें |",
"placeholders": {
"NUM": {
"content": "$1",
@@ -379,7 +379,7 @@
}
},
"stale_posts_showing": {
"message": "Showing stale posts. Visit the $BEGIN_LINK_OPTIONS$options page$END_LINK_OPTIONS$ to change your Fresh Content preferences.",
"message": "पुरानी पोस्ट दिखाई जा रही है |. $BEGIN_LINK_OPTIONS$ओपशंस$END_LINK_OPTIONS$ में जा कर Fresh Content में जा कर की सेट्टिंग चंगे करें |",
"placeholders": {
"BEGIN_LINK_OPTIONS": {
"content": "<a target=\"_blank\" href=\"/fancy-settings/index.html\">"
@@ -575,51 +575,3 @@
"timeout_length_never": {
"message": "Do not timeout; only show an error error when the API is down."
},
"timeout_length_description": {
"message": "If the $REDDIT$ API is slow or down, $MOSTLY_HARMLESS$ can display an error after trying to reach the API for a certain amount of time. Longer timeout lengths mean more time waiting for a result from the $REDDIT$ API. Shorter timeout lengths mean a higher possibility of timing out when $REDDIT$ may only be slow instead of down.",
"placeholders": {
"REDDIT": {
"content": "reddit"
},
"MOSTLY_HARMLESS": {
"content": "Mostly Harmless"
}
}
},
"tab_privacy": {
"message": "Privacy"
},
"group_wait_for_click": {
"message": "Wait for click"
},
"wait_for_click_description": {
"message": "If this checkbox is selected, $MOSTLY_HARMLESS$ will not activate unless you click its icon.",
"placeholders": {
"MOSTLY_HARMLESS": {
"content": "Mostly Harmless"
}
}
},
"excluded_domains": {
"message": "Excluded domains"
},
"excluded_domains_description": {
"message": "Put domains or subdomains, one per line, in the above text box. Any page on the listed domains will not activate $MOSTLY_HARMLESS$.",
"placeholders": {
"MOSTLY_HARMLESS": {
"content": "Mostly Harmless"
}
}
},
"excluded_regex": {
"message": "Excluded regex"
},
"excluded_regex_description": {
"message": "Put regular expressions, one per line, in the above text box. Any page that matches these regular expressions will not activate $MOSTLY_HARMLESS$.",
"placeholders": {
"MOSTLY_HARMLESS": {
"content": "Mostly Harmless"
}
}
}
}
+10 -2
View File
@@ -178,6 +178,7 @@ ol[data-commentspage="true"] button.cancel {
letter-spacing:-1px;
line-height:29px;
height:29px;
margin: 5px 0 0 62px;
}
.morelink:hover, .mlh {
border-color:#879eb4;
@@ -205,6 +206,11 @@ ol[data-commentspage="true"] button.cancel {
background-image:url('/pix/sprite.png');
background-position:-4px -43px;
}
.close-button {
position: absolute;
right: 8px;
bottom: 10px;
}
#submit fieldset {
background-color: #CEE3F8;
border: 0;
@@ -214,14 +220,16 @@ ol[data-commentspage="true"] button.cancel {
width:500px;
font-size: small;
}
#submit input[type="text"] {
#submit input[type="text"], #submit textarea {
width: 492px;
padding: 3px;
margin: 0 0 5px;
border: 1px solid gray;
height: 22px;
font-family: verdana, arial, helvetica, sans-serif;
max-width: 492px;
}
#submit input, #submit label {
#submit input, #submit label, #submit textarea {
display: block;
font-size: large;
margin: 0 0 5px;
+2 -1
View File
@@ -12,7 +12,8 @@
background = new Background();
function initBackground() {
background.clearCache();
cache.removeAll();
button.setBadgeDefaults();
chrome.tabs.onUpdated.addListener(background.prepareBrowserAction);
background.watchMail();
window.setInterval(background.clearCache, (settings.get('cacheTime') * 60 * 1000));
+117 -83
View File
@@ -301,10 +301,10 @@ BrowserAction.prototype.setBadgeError = function (tabId, text) {
*/
BrowserAction.prototype.setBadgeFor = function (url, tabId) {
var cachedPosts;
cachedPosts = cache.get(url);
chrome.browserAction.setIcon({'path': '/pix/alien.png', 'tabId': tabId});
if (cachedPosts.isCommentsPage === true) {
chrome.browserAction.setBadgeText({'text': '...', 'tabId': tabId});
chrome.browserAction.setTitle({'title': chrome.i18n.getMessage('viewing_comments'), 'tabId': tabId});
@@ -321,7 +321,7 @@ BrowserAction.prototype.setBadgeFor = function (url, tabId) {
chrome.browserAction.setBadgeBackgroundColor({'color': [255, 69, 0, 255], 'tabId': tabId});
chrome.browserAction.setPopup({popup: '/html/popup.html', tabId: tabId});
}
return true;
};
@@ -349,24 +349,24 @@ function RedditAPI(domain) {
* @param {Object} data If it exists, send this as a FormData() object.
* @param {Function} cback If it exists, call this function when the request is complete, passing a parameter: the API's response as an object.
* @return {Object} Returns the API's response as an object if there is no callback.
* @method
* @method
*/
RedditAPI.prototype.apiTransmit = function (type, url, data, cback) {
var req, apiTimeout, notificationArea;
function processResponse () {
if (req.readyState === 4) {
if (req.status === 200) {
if (JSON.parse(req.responseText).jquery && JSON.parse(req.responseText).jquery[3][3][0] === '.error.USER_REQUIRED') {
throw chrome.i18n.getMessage('login');
}
clearTimeout(apiTimeout);
if (cback) {
cback(JSON.parse(req.responseText));
}
if (notificationArea) {
notificationArea.innerHTML = '';
notificationArea.style.display = 'none';
@@ -380,12 +380,12 @@ RedditAPI.prototype.apiTransmit = function (type, url, data, cback) {
}
}
}
function handleTimeout () {
req.abort();
throw chrome.i18n.getMessage('api_timeout', settings.get('timeoutLength').toString());
}
notificationArea = document.getElementById('notificationArea');
req = new XMLHttpRequest();
req.open(type, url, true);
@@ -411,21 +411,21 @@ RedditAPI.prototype.apiTransmit = function (type, url, data, cback) {
*/
RedditAPI.prototype.getInfo = function (url, tabId) {
var apiTimeout, isCommentsPage, reqUrl, req, postsObj, postCount;
function processResponse () {
if (req.readyState === 4) {
if (req.status === 200) {
var response;
clearTimeout(apiTimeout);
response = JSON.parse(req.responseText);
cache.set('modhash', response.data.modhash);
postsObj = {};
postCount = 0;
for (i = 0; i < response.data.children.length; i++) {
var child;
child = response.data.children[i];
postsObj[child.data.name] = {
'url': url,
@@ -433,7 +433,7 @@ RedditAPI.prototype.getInfo = function (url, tabId) {
};
postCount++;
}
cache.set(url, {
'count': postCount,
'posts': postsObj,
@@ -447,24 +447,24 @@ RedditAPI.prototype.getInfo = function (url, tabId) {
}
}
}
function handleTimeout () {
req.abort();
button.setBadgeError(tabId, chrome.i18n.getMessage('api_timeout', settings.get('timeoutLength').toString()));
}
button.setBadgeLoading(tabId);
isCommentsPage = this.commentsMatchPattern.test(url);
if (isCommentsPage) {
var matches;
matches = url.match(this.commentsMatchPattern);
reqUrl = 'http://' + this.domain + '/by_id/t3_' + matches[3] + '.json?app=mh';
} else {
reqUrl = 'http://' + this.domain + '/api/info.json?app=mh&url=' + encodeURIComponent(url);
}
req = new XMLHttpRequest();
req.open('GET', reqUrl, true);
req.onreadystatechange = processResponse;
@@ -483,7 +483,7 @@ RedditAPI.prototype.getInfo = function (url, tabId) {
*/
RedditAPI.prototype.voteUpPost = function (e) {
var listItem, fullName, url, reqUrl, oldCache, voteWas, scoreWas, upsWas, downsWas, scoreElem, formData;
function success () {
if (voteWas === '1') {
@@ -528,10 +528,10 @@ RedditAPI.prototype.voteUpPost = function (e) {
oldCache.posts[fullName].data.downs = downsWas - 1;
}
cache.set(url, oldCache);
}
listItem = e.srcElement.parentNode.parentNode;
fullName = listItem.id;
voteWas = listItem.getAttribute('data-dir');
@@ -545,7 +545,7 @@ RedditAPI.prototype.voteUpPost = function (e) {
formData = new FormData();
formData.append('id', fullName);
formData.append('uh', cache.get('modhash'));
if (voteWas === '1') {
formData.append('dir','0');
} else if (voteWas === '0') {
@@ -553,7 +553,7 @@ RedditAPI.prototype.voteUpPost = function (e) {
} else if (voteWas === '-1') {
formData.append('dir','1');
}
this.apiTransmit('POST', reqUrl, formData, success);
};
@@ -566,7 +566,7 @@ RedditAPI.prototype.voteUpPost = function (e) {
*/
RedditAPI.prototype.voteDownPost = function (e) {
var listItem, fullName, url, reqUrl, oldCache, voteWas, scoreWas, upsWas, downsWas, scoreElem, formData;
function success () {
if (voteWas === '1') {
@@ -610,10 +610,10 @@ RedditAPI.prototype.voteDownPost = function (e) {
oldCache.posts[fullName].data.downs = downsWas - 1;
}
cache.set(url, oldCache);
}
listItem = e.srcElement.parentNode.parentNode;
fullName = listItem.id;
voteWas = listItem.getAttribute('data-dir');
@@ -627,7 +627,7 @@ RedditAPI.prototype.voteDownPost = function (e) {
formData = new FormData();
formData.append('id', fullName);
formData.append('uh', cache.get('modhash'));
if (voteWas === '1') {
formData.append('dir','-1');
} else if (voteWas === '0') {
@@ -635,7 +635,7 @@ RedditAPI.prototype.voteDownPost = function (e) {
} else if (voteWas === '-1') {
formData.append('dir','0');
}
this.apiTransmit('POST', reqUrl, formData, success);
};
@@ -648,7 +648,7 @@ RedditAPI.prototype.voteDownPost = function (e) {
*/
RedditAPI.prototype.savePost = function (e) {
var listItem, fullName, url, reqUrl, oldCache, formData;
function success () {
listItem.setAttribute('data-saved', 'true');
listItem.className.replace(/\bsaved\b/,'');
@@ -658,7 +658,7 @@ RedditAPI.prototype.savePost = function (e) {
oldCache.posts[fullName].data.saved = true;
cache.set(url, oldCache);
}
listItem = e.srcElement.parentNode.parentNode.parentNode;
fullName = listItem.id;
url = listItem.parentNode.getAttribute('data-url');
@@ -679,7 +679,7 @@ RedditAPI.prototype.savePost = function (e) {
*/
RedditAPI.prototype.unsavePost = function (e) {
var listItem, fullName, url, reqUrl, oldCache, formData;
function success () {
listItem.setAttribute('data-saved', 'false');
listItem.className.replace(/\bunsave\b/,'');
@@ -689,7 +689,7 @@ RedditAPI.prototype.unsavePost = function (e) {
oldCache.posts[fullName].data.saved = false;
cache.set(url, oldCache);
}
listItem = e.srcElement.parentNode.parentNode.parentNode;
fullName = listItem.id;
url = listItem.parentNode.getAttribute('data-url');
@@ -710,7 +710,7 @@ RedditAPI.prototype.unsavePost = function (e) {
*/
RedditAPI.prototype.hidePost = function (e) {
var listItem, fullName, url, reqUrl, oldCache, formData;
function success () {
listItem.setAttribute('data-hidestatus', 'true');
e.srcElement.innerHTML = chrome.i18n.getMessage('action_unhide');
@@ -718,7 +718,7 @@ RedditAPI.prototype.hidePost = function (e) {
oldCache.posts[fullName].data.hidden = true;
cache.set(url, oldCache);
}
listItem = e.srcElement.parentNode.parentNode.parentNode;
fullName = listItem.id;
url = listItem.parentNode.getAttribute('data-url');
@@ -739,7 +739,7 @@ RedditAPI.prototype.hidePost = function (e) {
*/
RedditAPI.prototype.unhidePost = function (e) {
var listItem, fullName, url, reqUrl, oldCache, formData;
function success () {
listItem.setAttribute('data-hidestatus', 'false');
e.srcElement.innerHTML = chrome.i18n.getMessage('action_hide');
@@ -747,7 +747,7 @@ RedditAPI.prototype.unhidePost = function (e) {
oldCache.posts[fullName].data.hidden = false;
cache.set(url, oldCache);
}
listItem = e.srcElement.parentNode.parentNode.parentNode;
fullName = listItem.id;
url = listItem.parentNode.getAttribute('data-url');
@@ -796,7 +796,7 @@ RedditAPI.prototype.denyReport = function (e) {
*/
RedditAPI.prototype.reportPost = function (e) {
var listItem, fullName, url, reqUrl, oldCache, formData;
function success () {
listItem.setAttribute('data-hidestatus', 'true');
e.srcElement.parentNode.parentNode.childNodes[3].innerHTML = 'unhide';
@@ -806,7 +806,7 @@ RedditAPI.prototype.reportPost = function (e) {
listItem.setAttribute('data-reportstatus', 'true');
e.srcElement.parentNode.innerHTML = chrome.i18n.getMessage('action_reported');
}
listItem = e.srcElement.parentNode.parentNode.parentNode.parentNode;
fullName = listItem.id;
url = listItem.parentNode.getAttribute('data-url');
@@ -827,10 +827,10 @@ RedditAPI.prototype.reportPost = function (e) {
*/
RedditAPI.prototype.submitComment = function (e) {
var listItem, fullName, status, submitButton, cancelButton, textarea, comment, formData;
function success (response) {
var postedCommentUrl, commentsUrl, url, oldCache;
postedCommentUrl = response.jquery[18][3][0][0].data.id.split('_')[1];
commentsUrl = document.getElementById(fullName).parentNode.getElementsByClassName('thumblink')[0].getAttribute('href');
status.innerHTML = 'submitted! <a href="' + commentsUrl + postedCommentUrl + '" target="_blank">click to view your comment.</a>';
@@ -844,7 +844,7 @@ RedditAPI.prototype.submitComment = function (e) {
oldCache.posts[fullName].savedCommentText = '';
cache.set(url, oldCache);
}
submitButton = e.srcElement;
listItem = submitButton.parentNode.parentNode.parentNode;
fullName = listItem.id;
@@ -852,7 +852,7 @@ RedditAPI.prototype.submitComment = function (e) {
cancelButton = submitButton.parentNode.getElementsByClassName('cancel')[0];
textarea = e.srcElement.parentNode.getElementsByTagName('textarea')[0];
comment = settings.get('shamelessPlug') ? textarea.value + '\n\n*Posted from [Mostly Harmless](http://kerrick.github.com/Mostly-Harmless), a Google Chrome extension for awesome redditors.*' : textarea.value;
if (textarea.value === '') {
status.innerHTML = chrome.i18n.getMessage('error_empty');
} else {
@@ -878,7 +878,7 @@ RedditAPI.prototype.submitComment = function (e) {
*/
RedditAPI.prototype.submitLink = function (e, tabId) {
var url, title, subreddit, status, submitButton, formData;
function success (response) {
if (typeof response.jquery[16][3][0] !== 'undefined' && response.jquery[16][3][0].substring(0,15) === '.error.NO_LINKS') {
status.innerHTML = 'that reddit only allows text posts';
@@ -900,13 +900,13 @@ RedditAPI.prototype.submitLink = function (e, tabId) {
status.innerHTML = 'unknown error occured, please try again.'
}
}
submitButton = e.srcElement;
status = submitButton.parentNode.getElementsByClassName('status')[0];
title = document.getElementById('submit_title');
subreddit = document.getElementById('submit_reddit');
url = document.getElementById('submit_url');
if (title.value === '' || subreddit.value === '') {
status.innerHTML = chrome.i18n.getMessage('error_empty');
} else {
@@ -961,12 +961,22 @@ function Background() {
* @method
*/
Background.prototype.clearCache = function () {
var oldReddits;
var oldCache, newCache;
oldReddits = cache.get('reddits');
cache.removeAll();
button.setBadgeDefaults();
cache.set('reddits', oldReddits)
oldCache = cache.toObject();
newCache = {
modhash: oldCache.modhash,
reddits: oldCache.reddits
};
utils.forEachIn(oldCache, function (cachedUrl, data) {
chrome.tabs.query({url: cachedUrl}, function (results) {
if (results.length > 0) {
newCache[cachedUrl] = oldCache[cachedUrl];
}
cache.fromObject(newCache); // It's messy to put it here since it'll get called over and over, but chrome.tabs.query is asynch.
});
});
};
/**
@@ -988,30 +998,30 @@ Background.prototype.prepareBrowserAction = function (tabId, info, tab, force) {
console.log(chrome.i18n.getMessage('loading_cache'));
button.setBadgeFor(tab.url, tabId);
}
return true;
}
if (force === true) {
setBadge();
} else if (info.status === 'loading') {
try {
var excludedRegex, match;
excludedRegex = settings.get('excludedRegex').split('\n');
excludedDomains = settings.get('excludedDomains').split('\n');
match = false;
for (var i = 0; i < excludedRegex.length; i++) {
if (tab.url.match(new RegExp(excludedRegex[i], "i")) !== null) {
match = true;
}
}
if (utils.parseURL(tab.url).host in utils.objConvert(excludedDomains)) {
match = true;
}
if (settings.get('waitForClick') === false && match === false) {
setBadge();
} else {
@@ -1031,17 +1041,17 @@ Background.prototype.prepareBrowserAction = function (tabId, info, tab, force) {
*/
Background.prototype.watchMail = function () {
var mailProcess, pop;
function showNotification (hasMail) {
var mailInterval;
mailInterval = settings.get('mailInterval') * 1000 * 60;
if (hasMail === true && background.notificationIsShown === false) {
if (settings.get('mailSound') === true) {
pop.play();
}
background.notification = webkitNotifications.createNotification(
'/pix/mail.png', // icon url - can be relative
chrome.i18n.getMessage('orangered_received'), // notification title
@@ -1059,22 +1069,22 @@ Background.prototype.watchMail = function () {
} else if (hasMail === false && background.notificationIsShown === true) {
background.notification.cancel();
}
window.setTimeout(checkPrefs, mailInterval);
}
function getMail () {
reddit.apiTransmit('GET', 'http://' + reddit.domain + '/api/me.json?app=mh', null, function (response) {
showNotification(response.data.has_mail);
});
}
function checkPrefs () {
if (settings.get('checkMail') === true) {
getMail();
}
}
pop = document.createElement('audio');
pop.src = '/pix/pop.ogg';
checkPrefs();
@@ -1100,25 +1110,25 @@ function Popup() {
*/
Popup.prototype.createListHTML = function (url) {
var listHTML, staleCounter;
if (cache.get(url) === undefined) {
throw chrome.i18n.getMessage('error_not_cached');
}
listHTML = '<div id="notificationArea"></div>';
listHTML += '<ol id="posts" data-url="' + url + '" data-commentspage="' + cache.get(url).isCommentsPage.toString() + '">';
staleCounter = 0;
utils.forEachIn(cache.get(url).posts, function (name, value) {
var data, voteDir, hiddenText, hideStatus, hideAction, saveText, saveStatus, saveAction, isFreshEnough, freshText, thumbSrc, commentText;
data = value.data;
if (data.likes === true) voteDir = 1;
if (data.likes === null) voteDir = 0;
if (data.likes === false) voteDir = -1;
hideStatus = data.hidden;
hiddenText = hideStatus === true ? 'unhide' : 'hide';
hideAction = hideStatus === true ? 'reddit.unhidePost(event)' : 'reddit.hidePost(event)';
hideAction = hideStatus === true ? 'reddit.unhidePost(event)' : 'reddit.hidePost(event)';
saveStatus = data.saved;
saveText = saveStatus === true ? 'unsave' : 'save';
saveAction = saveStatus === true ? 'reddit.unsavePost(event)' : 'reddit.savePost(event)';
@@ -1127,7 +1137,7 @@ Popup.prototype.createListHTML = function (url) {
if (!isFreshEnough) staleCounter++;
freshText = isFreshEnough ? 'fresh' : 'stale';
thumbSrc = data.thumbnail.indexOf('/') === 0 ? 'http://' + reddit.domain + data.thumbnail : data.thumbnail;
listHTML += '<li id="' + data.name + '" class="' + freshText + '" data-dir="' + voteDir.toString() + '" data-score="' + data.score + '" data-ups="' + data.ups + '" data-downs="' + data.downs + '" data-savestatus="' + saveStatus + '" data-hidestatus="' + hideStatus + '">';
listHTML += '<div class="votes">';
listHTML += '<a class="upmod" onclick="reddit.voteUpPost(event)"></a>';
@@ -1174,15 +1184,19 @@ Popup.prototype.createListHTML = function (url) {
listHTML += '</form>';
listHTML += '</li>';
});
listHTML += '</ol>'
listHTML += '</ol>';
listHTML += '<div class="morelink">';
listHTML += '<a onclick="popup.replaceWithSubmitForm()">' + chrome.i18n.getMessage('submit_again') + '</a>';
listHTML += '<div class="nub"></div>';
listHTML += '</div>';
if (staleCounter > 0) {
listHTML += '<div id="information">' + chrome.i18n.getMessage('stale_posts_hiding', staleCounter.toString()) + '</div>';
}
return listHTML;
};
/**
@@ -1194,14 +1208,14 @@ Popup.prototype.createListHTML = function (url) {
*/
Popup.prototype.createSubmitForm = function (tab) {
var submitHTML, redditCache;
redditCache = cache.get('reddits');
submitHTML = '<div id="notificationArea"></div>';
submitHTML += '<form id="submit">';
submitHTML += '<h1>' + chrome.i18n.getMessage('submit_page') + '</h1>';
submitHTML += '<fieldset>';
submitHTML += '<label for="submit_title">' + chrome.i18n.getMessage('title') + '</label>';
submitHTML += '<input id="submit_title" name="submit_title" type="text" />';
submitHTML += '<textarea id="submit_title" name="submit_title" type="text"></textarea>';
submitHTML += '<input id="submit_title_suggest" type="button" value="' + chrome.i18n.getMessage('suggest_title') + '" onclick="document.getElementById(\'submit_title\').value=\'' + tab.title + '\'" />';
submitHTML += '</fieldset>';
submitHTML += '<fieldset>';
@@ -1223,10 +1237,30 @@ Popup.prototype.createSubmitForm = function (tab) {
submitHTML += '<input type="button" id="submit_submit" onclick="reddit.submitLink(event, \'' + tab.id + '\')" value="' + chrome.i18n.getMessage('submit_page') + '" />';
submitHTML += '<span class="status"></span>'
submitHTML += '</form>';
return submitHTML;
}
/**
* Replace the contents of the popup with a submit form.
* @alias Popup.replaceWithSubmitForm()
* @return {Boolean} Returns true.
* @method
*/
Popup.prototype.replaceWithSubmitForm = function () {
var close;
chrome.tabs.getSelected(null, function(currTab) {
document.getElementById('body').style.width = '';
document.getElementById('body').innerHTML = popup.createSubmitForm(currTab);
close = document.createElement('button');
close = document.body.appendChild(close);
close.innerHTML = chrome.i18n.getMessage('cancel_submission');
close.className = 'close-button';
close.setAttribute('onclick', 'window.close()');
});
};
/**
* Show stale posts.
* @alias Popup.showStalePosts()
@@ -1235,10 +1269,10 @@ Popup.prototype.createSubmitForm = function (tab) {
*/
Popup.prototype.showStalePosts = function () {
var stalePosts;
stalePosts = document.getElementsByClassName('stale');
document.getElementById('information').innerHTML = chrome.i18n.getMessage('stale_posts_showing');
while (stalePosts.length > 0) {
stalePosts[0].className = 'stale-shown';
}
@@ -1265,7 +1299,7 @@ Popup.prototype.showCommentForm = function (postId) {
*/
Popup.prototype.cacheComment = function (e) {
var value, postId, url, oldCache;
value = e.srcElement.value;
postId = e.srcElement.parentNode.parentNode.parentNode.id
url = e.srcElement.parentNode.parentNode.parentNode.parentNode.getAttribute('data-url');
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "Mostly Harmless",
"version": "1.4.1",
"version": "1.5.0",
"description": "Find, vote on, save, hide, and report links on reddit; submit new links; These and more! http://kerrick.github.com/Mostly-Harmless",
"browser_action": {
"default_icon": "pix/alien.png",
@@ -19,4 +19,4 @@
"background_page": "html/background.html",
"options_page": "fancy-settings/index.html",
"default_locale": "en_US"
}
}