]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Refs #2538: Added some models, inheritance, more bootstrapping code
authorewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 1 Nov 2010 22:11:20 +0000 (22:11 +0000)
committerewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 1 Nov 2010 22:11:20 +0000 (22:11 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@7183 36083f99-b078-4883-b0ff-0f9b5a30f544

13 files changed:
actions/security/refreshtoken.php [new file with mode: 0644]
engine/js/classes/ElggEntity.js [new file with mode: 0644]
engine/js/classes/ElggUser.js
engine/js/lib/elgglib.js
engine/js/lib/languages.js
engine/js/tests/ElggLibTest.js
jsTestDriver.conf
views/default/js/initialise_elgg.php
views/default/js/languages.php [new file with mode: 0644]
views/default/js/languages/en.php [new file with mode: 0644]
views/default/page_elements/html_begin.php
views/default/page_elements/html_begin_admin.php
views/default/scripts/initialize_elgg.php [new file with mode: 0644]

diff --git a/actions/security/refreshtoken.php b/actions/security/refreshtoken.php
new file mode 100644 (file)
index 0000000..74a72c4
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+$ts = time();
+$token = generate_action_token($ts);
+
+echo json_encode(array('__elgg_ts' => $ts, '__elgg_token' => $token));
\ No newline at end of file
diff --git a/engine/js/classes/ElggEntity.js b/engine/js/classes/ElggEntity.js
new file mode 100644 (file)
index 0000000..9461a46
--- /dev/null
@@ -0,0 +1,20 @@
+/**
+ * Create a new ElggEntity
+ * 
+ * @class Represents an ElggEntity
+ * @property {number} guid
+ * @property {string} type
+ * @property {string} subtype
+ * @property {number} owner_guid
+ * @property {number} site_guid
+ * @property {number} container_guid
+ * @property {number} access_id
+ * @property {number} time_created
+ * @property {number} time_updated
+ * @property {number} last_action
+ * @property {string} enabled
+ * 
+ */
+elgg.ElggEntity = function(o) {
+       $.extend(this, o);
+};
\ No newline at end of file
index dec7431de440f43145e028fb3062641656cb83cf..8a7a8b7eb6657ec9b2ed938ee487c0ea1bce83bd 100644 (file)
@@ -8,15 +8,7 @@
  * @property {string} username
  */
 elgg.ElggUser = function(o) {
-       //elgg.ElggEntity.call(this, o);
-       this = o;
+       elgg.ElggEntity.call(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
+elgg.inherit(elgg.ElggUser, elgg.ElggEntity);
\ No newline at end of file
index 28cae8f8fec97770b47b64eff264de015d26f561..208c027168a377171ced2ce02bf8f2f0ca4015f3 100644 (file)
@@ -92,7 +92,8 @@ elgg.provide = function(pkg) {
  * @param {Function} parentCtor Parent class.\r
  */\r
 elgg.inherit = function(Child, Parent) {\r
-       Child.prototype = Parent;\r
+       Child.prototype = new Parent();\r
+       Child.prototype.constructor = Child;\r
 };\r
 \r
 /**\r
@@ -130,9 +131,9 @@ elgg.system_messages = function(msgs, delay, type) {
                delay = 6000;\r
        }\r
        \r
-       var messages_class = 'messages';\r
+       classes = ['elgg_system_message', 'radius8'];\r
        if (type == 'error') {\r
-               messages_class = 'messages_error';\r
+               classes.push('messages_error');\r
        }\r
 \r
        //Handle non-arrays\r
@@ -140,16 +141,20 @@ elgg.system_messages = function(msgs, delay, type) {
                msgs = [msgs];\r
        }\r
        \r
-       var messages_html = '<div class="' + messages_class + '">' \r
-               + '<span class="closeMessages">'\r
-                       + '<a href="#">' \r
-                               + elgg.echo('systemmessages:dismiss')\r
-                       + '</a>'\r
-               + '</span>'\r
-               + '<p>' + msgs.join('</p><p>') + '</p>'\r
-       + '</div>';\r
+       var messages_html = [];\r
        \r
-       $(messages_html).appendTo('#elgg_system_messages').show().animate({opacity:'1.0'},delay).fadeOut('slow');\r
+       for (var i in msgs) {\r
+               messages_html.push('<div class="' + classes.join(' ') + '">' \r
+                       + '<span class="closeMessages">'\r
+                               + '<a href="#">' \r
+                                       + elgg.echo('systemmessages:dismiss')\r
+                               + '</a>'\r
+                       + '</span>'\r
+                       + '<p>' + msgs[i] + '</p>'\r
+               + '</div>');\r
+       }\r
+       \r
+       $(messages_html.join('')).appendTo('#elgg_system_messages').animate({opacity:'1.0'},delay).fadeOut('slow');\r
 };\r
 \r
 /**\r
index 7bae74e6b871495fb47558947ace5e99caf5542e..6ac83f3506d35da13887293b3ec552afcea66676 100644 (file)
@@ -12,9 +12,7 @@ elgg.config.translations.init = function() {
 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
+       $.extend(elgg.config.translations[lang], translations);\r
 }\r
 \r
 /**\r
index d5474c6053c9be51ca1f77f9cbefa47cbb6699a3..9202964080a98759ce70a9bbb3d2374581a72fa5 100644 (file)
@@ -33,6 +33,17 @@ ElggLibTest.prototype.testRequire = function() {
        assertNoException(function(){ elgg.require('elgg.security'); });\r
 };\r
 \r
+ElggLibTest.prototype.testInherit = function() {\r
+       function Base() {}\r
+       function Child() {}\r
+       \r
+       elgg.inherit(Child, Base);\r
+       \r
+       \r
+       assertInstanceOf(Base, new Child());\r
+       assertEquals(Child, Child.prototype.constructor);\r
+};\r
+\r
 ElggLibTest.prototype.testExtendUrl = function() {\r
        var url;\r
        elgg.config.wwwroot = "http://www.elgg.org/";\r
index 347627dab9acae860696cf8e1c22215f8ef3c20b..fc1fe0b8bb423e984122519b7fc60e07a9329480 100644 (file)
@@ -3,5 +3,6 @@ server: http://localhost:42442
 load:\r
  - vendors/jquery/jquery-1.4.2.min.js\r
  - engine/js/lib/elgglib.js\r
+ - engine/js/classes/*.js\r
  - engine/js/lib/*.js\r
  - engine/js/tests/*.js
\ No newline at end of file
index 6b7a318e7d4a6af9b4e53a6116ae211fcebe33d1..b6c3f7ecdf585dd8864a35f46c3d55469e77f3e3 100644 (file)
@@ -1,3 +1,50 @@
+<?php 
+/**
+ * Bootstrap Elgg javascript
+ */
+global $CONFIG;
+
+//Include library files
+$lib_files = array(
+       //core
+       'elgglib',
+
+       //libraries
+       'security',
+       'languages',
+       'ajax',
+       'session',
+
+       //ui
+       'ui',
+       'ui.widgets',
+);
+
+foreach($lib_files as $file) {
+       include("{$CONFIG->path}engine/js/lib/$file.js");
+}
+
+//Include classes
+$model_files = array(
+       'ElggEntity',
+
+       'ElggUser',
+);
+
+foreach($model_files as $file) {
+       include("{$CONFIG->path}engine/js/classes/$file.js");
+}
+
+/**
+ * Finally, set some values that are cacheable
+ */
+?>
+
+elgg.version = '<?php echo get_version(); ?>';
+elgg.release = '<?php echo get_version(true); ?>';
+elgg.config.wwwroot = '<?php echo elgg_get_site_url(); ?>';
+elgg.security.interval = 5 * 60 * 1000; <?php //TODO make this configurable ?>
+
 $(document).ready(function () {
 
        // COLLAPSABLE WIDGETS (on Dashboard? & Profile pages)
@@ -79,6 +126,8 @@ $(document).ready(function () {
                        $(this).next(".likes_list").animate({opacity: "toggle", top: topPosition}, 500);
                }
        });
+       
+       elgg_system_message();
 
 }); /* end document ready function */
 
@@ -196,50 +245,6 @@ function widget_moreinfo() {
        });
 };
 
-// COOKIES
-jQuery.cookie = function(name, value, options) {
-       if (typeof value != 'undefined') { // name and value given, set cookie
-       options = options || {};
-               if (value === null) {
-                       value = '';
-                       options.expires = -1;
-               }
-       var expires = '';
-       if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
-               var date;
-               if (typeof options.expires == 'number') {
-                       date = new Date();
-                       date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
-               } else {
-                       date = options.expires;
-               }
-               expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
-       }
-       // CAUTION: Needed to parenthesize options.path and options.domain
-       // in the following expressions, otherwise they evaluate to undefined
-       // in the packed version for some reason.
-       var path = options.path ? '; path=' + (options.path) : '';
-       var domain = options.domain ? '; domain=' + (options.domain) : '';
-       var secure = options.secure ? '; secure' : '';
-       document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
-
-       } else { // only name given, get cookie
-               var cookieValue = null;
-               if (document.cookie && document.cookie != '') {
-                       var cookies = document.cookie.split(';');
-                       for (var i = 0; i < cookies.length; i++) {
-                               var cookie = jQuery.trim(cookies[i]);
-                               // Does this cookie string begin with the name we want?
-                               if (cookie.substring(0, name.length + 1) == (name + '=')) {
-                                       cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
-                                       break;
-                               }
-                       }
-               }
-               return cookieValue;
-       }
-};
-
 // ELGG DROP DOWN MENU
 $.fn.elgg_dropdownmenu = function(options) {
 
diff --git a/views/default/js/languages.php b/views/default/js/languages.php
new file mode 100644 (file)
index 0000000..34367aa
--- /dev/null
@@ -0,0 +1,9 @@
+<?php\r
+/**\r
+ * @uses $vars['language']\r
+ */\r
+global $CONFIG;\r
+\r
+$language = $vars['language'];\r
+\r
+echo json_encode($CONFIG->translations[$language]);
\ No newline at end of file
diff --git a/views/default/js/languages/en.php b/views/default/js/languages/en.php
new file mode 100644 (file)
index 0000000..afcf4bb
--- /dev/null
@@ -0,0 +1,2 @@
+<?php\r
+echo elgg_view('js/languages', array('language' => 'en'));
\ No newline at end of file
index 37a9999f032f63e6fa5f249b608392ada04a430e..9b4e792683727367b0a47ea9cb9e97960c942868 100644 (file)
@@ -56,8 +56,8 @@ $release = get_version(true);
        <script type="text/javascript" src="<?php echo elgg_get_site_url(); ?>_css/js.php?lastcache=<?php echo $vars['config']->lastcache; ?>&amp;js=initialise_elgg&amp;viewtype=<?php echo $vars['view']; ?>"></script>
 
        <?php
+               echo elgg_view('scripts/initialize_elgg');
                echo $feedref;
-               
        ?>
 
 <?php
index 34a70b60e535b86f467286adb4d659e235f34438..fcb61c25c56de6508d54d8cf5ec6516a7b9c9d4a 100644 (file)
@@ -25,7 +25,9 @@ $release = get_version(true);
        <script type="text/javascript" src="<?php echo elgg_get_site_url(); ?>_css/js.php?lastcache=<?php echo $vars['config']->lastcache; ?>&amp;js=initialise_elgg&amp;viewtype=<?php echo $vars['view']; ?>"></script>
 
        <?php
+               echo elgg_view('scripts/initialize_elgg');
                echo $feedref;
+               
                if (elgg_view_exists('metatags')) {
                        echo elgg_view('metatags', $vars);
                }
diff --git a/views/default/scripts/initialize_elgg.php b/views/default/scripts/initialize_elgg.php
new file mode 100644 (file)
index 0000000..03d5adc
--- /dev/null
@@ -0,0 +1,45 @@
+<?php 
+/**
+ * 
+ */
+
+?>
+<script type="text/javascript">
+/**
+ * Don't want to cache these -- they could change for every request
+ */
+elgg.config.lastcache = <?php echo (int)($vars['config']->lastcache); ?>;
+
+elgg.security.token.__elgg_ts = <?php echo $ts = time(); ?>;
+elgg.security.token.__elgg_token = '<?php echo generate_action_token($ts); ?>';
+
+<?php
+$page_owner = elgg_get_page_owner();
+
+if ($page_owner instanceof ElggEntity) {
+       $page_owner_json = array();
+       foreach ($page_owner->getExportableValues() as $v) {
+               $page_owner_json[$v] = $page_owner->$v;
+       }
+       
+       $page_owner_json['subtype'] = $page_owner->getSubtype();
+       $page_owner_json['url'] = $page_owner->getURL();
+       
+       echo 'elgg.page_owner =  '.json_encode($page_owner_json).';'; 
+}
+
+$user = get_loggedin_user();
+
+if ($user instanceof ElggUser) {
+       $user_json = array();
+       foreach ($user->getExportableValues() as $v) {
+               $user_json[$v] = $user->$v;
+       }
+       
+       $user_json['subtype'] = $user->getSubtype();
+       $user_json['url'] = $user->getURL();
+       
+       echo 'elgg.session.user = new elgg.ElggUser('.json_encode($user_json).');'; 
+}
+?>;
+</script>
\ No newline at end of file