]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Refs #2538: Pulled in some i18n features
authorewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 1 Nov 2010 20:28:41 +0000 (20:28 +0000)
committerewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 1 Nov 2010 20:28:41 +0000 (20:28 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@7182 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/js/classes/ElggUser.js [new file with mode: 0644]
engine/js/lib/elgglib.js
engine/js/lib/languages.js [new file with mode: 0644]
engine/js/lib/session.js
engine/js/tests/ElggLanguagesTest.js [new file with mode: 0644]

diff --git a/engine/js/classes/ElggUser.js b/engine/js/classes/ElggUser.js
new file mode 100644 (file)
index 0000000..dec7431
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * Create a new ElggUser
+ *
+ * @param {Object} o
+ * @extends ElggEntity
+ * @class Represents an ElggUser
+ * @property {string} name
+ * @property {string} username
+ */
+elgg.ElggUser = function(o) {
+       //elgg.ElggEntity.call(this, o);
+       this = o;
+};
+
+//elgg.inherit(elgg.ElggUser, elgg.ElggEntity);
+
+/**
+ * @return {boolean} Whether the user is an admin
+ */
+elgg.ElggUser.prototype.isAdmin = function() {
+       return this.admin === 'yes';
+};
\ No newline at end of file
index c0ce69fab4f827851659909099f56a25c13d764c..28cae8f8fec97770b47b64eff264de015d26f561 100644 (file)
@@ -68,6 +68,33 @@ elgg.provide = function(pkg) {
        }\r
 };\r
 \r
+/**\r
+ * Inherit the prototype methods from one constructor into another.\r
+ * \r
+ * @example\r
+ * <pre>\r
+ * function ParentClass(a, b) { }\r
+ * \r
+ * ParentClass.prototype.foo = function(a) { alert(a); }\r
+ *\r
+ * function ChildClass(a, b, c) {\r
+ *     //equivalent of parent::__construct(a, b); in PHP\r
+ *     ParentClass.call(this, a, b);\r
+ * }\r
+ *\r
+ * elgg.inherit(ChildClass, ParentClass);\r
+ *\r
+ * var child = new ChildClass('a', 'b', 'see');\r
+ * child.foo('boo!'); // alert('boo!');\r
+ * </pre>\r
+ *\r
+ * @param {Function} childCtor Child class.\r
+ * @param {Function} parentCtor Parent class.\r
+ */\r
+elgg.inherit = function(Child, Parent) {\r
+       Child.prototype = Parent;\r
+};\r
+\r
 /**\r
  * Prepend elgg.config.wwwroot to a url if the url doesn't already have it.\r
  * \r
@@ -122,10 +149,7 @@ elgg.system_messages = function(msgs, delay, type) {
                + '<p>' + msgs.join('</p><p>') + '</p>'\r
        + '</div>';\r
        \r
-       $(messages_html).insertAfter('#layout_header').click(function () {\r
-               $(this).stop().fadeOut('slow');\r
-               return false;\r
-       }).show().animate({opacity:'1.0'},delay).fadeOut('slow');\r
+       $(messages_html).appendTo('#elgg_system_messages').show().animate({opacity:'1.0'},delay).fadeOut('slow');\r
 };\r
 \r
 /**\r
diff --git a/engine/js/lib/languages.js b/engine/js/lib/languages.js
new file mode 100644 (file)
index 0000000..7bae74e
--- /dev/null
@@ -0,0 +1,92 @@
+/**\r
+ * Provides language-related functionality\r
+ */\r
+elgg.provide('elgg.config.translations');\r
+\r
+elgg.config.language = 'en';\r
+\r
+elgg.config.translations.init = function() {\r
+       elgg.reload_all_translations();\r
+};\r
+\r
+elgg.add_translation = function(lang, translations) {\r
+       elgg.provide('elgg.config.translations.' + lang);\r
+       \r
+       var t = elgg.config.translations;\r
+       \r
+       t[lang] = $.extend(t[lang], translations);\r
+}\r
+\r
+/**\r
+ * Load the translations for the given language.\r
+ * \r
+ * If no language is specified, the default language is used.\r
+ * @param {string} language\r
+ * @return {XMLHttpRequest}\r
+ */\r
+elgg.reload_all_translations = function(language) {\r
+       var lang = language || elgg.get_language();\r
+       elgg.getJSON('_css/js.php', {\r
+               data: {\r
+                       'js': 'languages/'+lang,\r
+                       'viewtype': 'default',\r
+                       'lastcache': elgg.config.lastcache\r
+               },\r
+               success: function(json) {\r
+                       elgg.add_translation(lang, json);\r
+               }\r
+       });\r
+};\r
+\r
+/**\r
+ * @deprecated Use elgg.reload_all_translations\r
+ */\r
+elgg.config.translations.load = elgg.reload_all_translations;\r
+\r
+/**\r
+ * Get the current language\r
+ * @return {String}\r
+ */\r
+elgg.get_language = function() {\r
+       var user = elgg.get_loggedin_user();\r
+       \r
+       if (user && user.language) {\r
+               return user.language;\r
+       }\r
+       \r
+       return elgg.config.language;\r
+};\r
+\r
+/**\r
+ * Translates a string\r
+ * \r
+ * @param {String} key The string to translate\r
+ * @param {String} language The language to display it in\r
+ * @return {String} The translation\r
+ */\r
+elgg.echo = function(key, language) {\r
+       var translations,\r
+               dlang = elgg.get_language();\r
+       \r
+       language = language || dlang;\r
+       \r
+       translations = elgg.config.translations[language];\r
+       if (translations && translations[key]) {\r
+               return translations[key];\r
+       }\r
+       \r
+       if (language == dlang) {\r
+               return undefined;\r
+       }\r
+       \r
+       translations = elgg.config.translations[dlang];\r
+       if (translations && translations[key]) {\r
+               return translations[key];\r
+       }\r
+       \r
+       return undefined;\r
+};\r
+\r
+$(function() {\r
+       elgg.config.translations.init();\r
+});
\ No newline at end of file
index 446dbfac19627c3432722eedd2ed7b8eeece3154..227c607eb948b444f444f0986cfff91e1ada2e4d 100644 (file)
@@ -80,6 +80,36 @@ elgg.session.cookie = function(name, value, options) {
        document.cookie = cookies.join('; ');\r
 };\r
 \r
+/**\r
+ * @return {ElggUser} The logged in user\r
+ */\r
+elgg.get_loggedin_user = function() {\r
+       return elgg.session.user;\r
+};\r
+\r
+/**\r
+ * @return {number} The GUID of the logged in user\r
+ */\r
+elgg.get_loggedin_userid = function() {\r
+       var user = elgg.get_loggedin_user();\r
+       return user ? user.guid : 0;\r
+};\r
+\r
+/**\r
+ * @return {boolean} Whether there is a user logged in\r
+ */\r
+elgg.isloggedin = function() {\r
+       return (elgg.get_loggedin_user() instanceof elgg.ElggUser);\r
+};\r
+\r
+/**\r
+ * @return {boolean} Whether there is an admin logged in\r
+ */\r
+elgg.isadminloggedin = function() {\r
+       var user = elgg.get_loggedin_user();\r
+       return (user instanceof ElggUser) && user.isAdmin();\r
+};\r
+\r
 /**\r
  * @deprecated Use elgg.session.cookie instead\r
  */\r
diff --git a/engine/js/tests/ElggLanguagesTest.js b/engine/js/tests/ElggLanguagesTest.js
new file mode 100644 (file)
index 0000000..950d5d3
--- /dev/null
@@ -0,0 +1,45 @@
+ElggLanguagesTest = TestCase("ElggLanguagesTest");\r
+\r
+ElggLanguagesTest.prototype.setUp = function() {\r
+       this.ajax = $.ajax;\r
+       \r
+       //Immediately execute some dummy "returned" javascript instead of sending\r
+       //an actual ajax request\r
+       $.ajax = function(settings) {\r
+               var lang = settings.data.js.split('/')[1];\r
+               elgg.config.translations[lang] = {'language':lang};\r
+       };\r
+};\r
+\r
+ElggLanguagesTest.prototype.tearDown = function() {\r
+       $.ajax = this.ajax;\r
+       \r
+       //clear translations\r
+       elgg.config.translations['en'] = undefined;\r
+       elgg.config.translations['aa'] = undefined;\r
+};\r
+\r
+ElggLanguagesTest.prototype.testLoadTranslations = function() {\r
+       assertUndefined(elgg.config.translations['en']);\r
+       assertUndefined(elgg.config.translations['aa']);\r
+       \r
+       elgg.reload_all_translations();\r
+       elgg.reload_all_translations('aa');\r
+       \r
+       assertNotUndefined(elgg.config.translations['en']['language']);\r
+       assertNotUndefined(elgg.config.translations['aa']['language']);\r
+};\r
+\r
+ElggLanguagesTest.prototype.testElggEchoTranslates = function() {\r
+       elgg.reload_all_translations('en');\r
+       elgg.reload_all_translations('aa');\r
+       \r
+       assertEquals('en', elgg.echo('language'));\r
+       assertEquals('aa', elgg.echo('language', 'aa'));\r
+};\r
+\r
+ElggLanguagesTest.prototype.testElggEchoFallsBackToDefaultLanguage = function() {\r
+       elgg.reload_all_translations('en');\r
+       assertEquals('en', elgg.echo('language', 'aa'));\r
+};\r
+\r