]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #3091 adds load functions for js and css
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 12 Mar 2011 22:25:02 +0000 (22:25 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 12 Mar 2011 22:25:02 +0000 (22:25 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@8675 36083f99-b078-4883-b0ff-0f9b5a30f544

18 files changed:
engine/lib/admin.php
engine/lib/elgglib.php
engine/lib/views.php
engine/tests/api/helpers.php
mod/blog/lib/blog.php
mod/blog/start.php
mod/developers/views/default/page/theme_preview.php
mod/notifications/index.php
mod/notifications/views/default/notifications/subscriptions/forminternals.php
mod/pages/start.php
mod/tinymce/start.php
mod/tinymce/views/default/tinymce/init.php
mod/zaudio/start.php
mod/zaudio/views/default/zaudio/audioplayer.php
views/default/input/autocomplete.php
views/default/input/friendspicker.php
views/default/input/userpicker.php
views/default/page/elements/head.php

index 104b362a9ea5caf37a08ad6e79e986c1500cfa98..8ef01e7cce00aeded6350cfa0202abb6e06cc824 100644 (file)
@@ -285,6 +285,7 @@ function admin_pagesetup() {
        if (elgg_in_context('admin')) {
                $url = elgg_get_simplecache_url('css', 'admin');
                elgg_register_css('elgg.admin', $url);
+               elgg_load_css('elgg.admin');
                elgg_unregister_css('elgg');
 
                // setup footer menu
@@ -330,8 +331,10 @@ function admin_settings_page_handler($page) {
        elgg_unregister_css('elgg');
        $url = elgg_get_simplecache_url('js', 'admin');
        elgg_register_js('elgg.admin', $url);
+       elgg_load_js('elgg.admin');
 
        elgg_register_js('jquery.jeditable', 'vendors/jquery/jquery.jeditable.mini.js');
+       elgg_load_js('jquery.jeditable');
 
        // default to dashboard
        if (!isset($page[0]) || empty($page[0])) {
index 93be114f2aa16333f81776ddb094cf00ca70b4c9..45546a3f0c9d9f4ca434f3e3aa61351a3e75dc58 100644 (file)
@@ -182,6 +182,44 @@ function elgg_register_js($name, $url, $location = 'head', $priority = 500) {
        return elgg_register_external_file('js', $name, $url, $location, $priority);
 }
 
+/**
+ * Unregister a JavaScript file
+ *
+ * @param string $name The identifier for the JavaScript library
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_js($name) {
+       return elgg_unregister_external_file('js', $name);
+}
+
+/**
+ * Load a JavaScript resource on this page
+ *
+ * This must be called before elgg_view_page(). It can be called before the
+ * script is registered. If you do not want a script loaded, unregister it.
+ *
+ * @param string $name Identifier of the JavaScript resource
+ *
+ * @since 1.8.0
+ */
+function elgg_load_js($name) {
+       elgg_load_external_file('js', $name);
+}
+
+/**
+ * Get the JavaScript URLs that are loaded
+ *
+ * @param string $location 'head' or 'footer'
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_js($location = 'head') {
+       return elgg_get_loaded_external_files('js', $location);
+}
+
 /**
  * Register a CSS file for inclusion in the HTML head
  *
@@ -196,10 +234,46 @@ function elgg_register_css($name, $url, $priority = 500) {
        return elgg_register_external_file('css', $name, $url, 'head', $priority);
 }
 
+/**
+ * Unregister a CSS file
+ *
+ * @param string $name The identifier for the CSS file
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_css($name) {
+       return elgg_unregister_external_file('css', $name);
+}
+
+/**
+ * Load a CSS file for this page
+ *
+ * This must be called before elgg_view_page(). It can be called before the
+ * CSS file is registered. If you do not want a CSS file loaded, unregister it.
+ *
+ * @param string $name Identifier of the CSS file
+ *
+ * @since 1.8.0
+ */
+function elgg_load_css($name) {
+       elgg_load_external_file('css', $name);
+}
+
+/**
+ * Get the loaded CSS URLs
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_css() {
+       return elgg_get_loaded_external_files('css', 'head');
+}
+
 /**
  * Core registration function for external files
  *
- * @param string $type     Type of external resource
+ * @param string $type     Type of external resource (js or css)
  * @param string $name     Identifier used as key
  * @param string $url      URL
  * @param string $location Location in the page to include the file
@@ -216,58 +290,40 @@ function elgg_register_external_file($type, $name, $url, $location, $priority =
        }
 
        $url = elgg_format_url($url);
-
+       $url = elgg_normalize_url($url);
+       
        if (!isset($CONFIG->externals)) {
                $CONFIG->externals = array();
        }
 
        if (!isset($CONFIG->externals[$type])) {
-               $CONFIG->externals[$type]  = array();
-       }
-
-       if (!isset($CONFIG->externals[$type][$location])) {
-               $CONFIG->externals[$type][$location] = array();
+               $CONFIG->externals[$type] = array();
        }
 
        $name = trim(strtolower($name));
 
-       $item = new stdClass();
-       $item->url = elgg_normalize_url($url);
-       $item->priority = max((int)$priority, 0);
+       if (isset($CONFIG->externals[$type][$name])) {
+               // update a registered item
+               $item = $CONFIG->externals[$type][$name];
 
-       $CONFIG->externals[$type][$location][$name] = $item;
+       } else {
+               $item = new stdClass();
+               $item->loaded = false;
+       }
 
-       return true;
-}
+       $item->url = $url;
+       $item->priority = max((int)$priority, 0);
+       $item->location = $location;
 
-/**
- * Unregister a JavaScript file
- *
- * @param string $name The identifier for the JavaScript library
- *
- * @return bool
- * @since 1.8.0
- */
-function elgg_unregister_js($name) {
-       return elgg_unregister_external_file('js', $name);
-}
+       $CONFIG->externals[$type][$name] = $item;
 
-/**
- * Unregister a CSS file
- *
- * @param string $name The identifier for the CSS file
- *
- * @return bool
- * @since 1.8.0
- */
-function elgg_unregister_css($name) {
-       return elgg_unregister_external_file('css', $name);
+       return true;
 }
 
 /**
  * Unregister an external file
  *
- * @param string $type Type of file: javascript or css
+ * @param string $type Type of file: js or css
  * @param string $name The identifier of the file
  *
  * @return bool
@@ -284,57 +340,72 @@ function elgg_unregister_external_file($type, $name) {
                return false;
        }
 
-       foreach ($CONFIG->externals[$type] as $location => $files) {
-               if (array_key_exists($name, $CONFIG->externals[$type][$location])) {
-                       unset($CONFIG->externals[$type][$location][$name]);
-                       return true;
-               }
+       $name = trim(strtolower($name));
+       
+       if (array_key_exists($name, $CONFIG->externals[$type])) {
+               unset($CONFIG->externals[$type][$name]);
+               return true;
        }
 
        return false;
 }
 
 /**
- * Get the JavaScript URLs
+ * Load an external resource for use on this page
  *
- * @param string $location 'head' or 'footer'
+ * @param string $type Type of file: js or css
+ * @param string $name
  *
- * @return array
  * @since 1.8.0
  */
-function elgg_get_js($location = 'head') {
-       return elgg_get_external_file('js', $location);
-}
+function elgg_load_external_file($type, $name) {
+       global $CONFIG;
 
-/**
- * Get the CSS URLs
- *
- * @return array
- * @since 1.8.0
- */
-function elgg_get_css() {
-       return elgg_get_external_file('css', 'head');
+       if (!isset($CONFIG->externals)) {
+               $CONFIG->externals = array();
+       }
+
+       if (!isset($CONFIG->externals[$type])) {
+               $CONFIG->externals[$type] = array();
+       }
+
+       $name = trim(strtolower($name));
+
+       if (isset($CONFIG->externals[$type][$name])) {
+               // update a registered item
+               $CONFIG->externals[$type][$name]->loaded = true;
+       } else {
+               $item = new stdClass();
+               $item->loaded = true;
+               $item->url = '';
+               $item->location = '';
+               $item->priority = 500;
+
+               $CONFIG->externals[$type][$name] = $item;
+       }
 }
 
 /**
  * Get external resource descriptors
  *
- * @param string $type     Type of resource
+ * @param string $type     Type of file: js or css
  * @param string $location Page location
  *
  * @return array
  * @since 1.8.0
  */
-function elgg_get_external_file($type, $location) {
+function elgg_get_loaded_external_files($type, $location) {
        global $CONFIG;
 
-       if (isset($CONFIG->externals) &&
-               isset($CONFIG->externals[$type]) &&
-               isset($CONFIG->externals[$type][$location])) {
+       if (isset($CONFIG->externals) && isset($CONFIG->externals[$type])) {
+               $items = array_values($CONFIG->externals[$type]);
 
-               $items = array_values($CONFIG->externals[$type][$location]);
-               usort($items, create_function('$a,$b','return $a->priority >= $b->priority;'));
-               array_walk($items, create_function('&$v,$k', '$v = $v->url;'));
+               $callback = "return \$v->loaded == true && \$v->location == $location;";
+               $items = array_filter($items, create_function('&$v,$k', $callback));
+               if ($items) {
+                       usort($items, create_function('$a,$b','return $a->priority >= $b->priority;'));
+                       array_walk($items, create_function('&$v,$k', '$v = $v->url;'));
+               }
                return $items;
        }
        return array();
@@ -1769,6 +1840,8 @@ function elgg_is_valid_options_for_batch_operation($options, $type) {
  */
 function elgg_walled_garden_index() {
        elgg_register_css('elgg.walled_garden', '/css/walled_garden.css');
+       elgg_load_css('elgg.walled_garden');
+       
        $login = elgg_view('core/account/login_walled_garden');
 
        echo elgg_view_page('', $login, 'walled_garden');
@@ -1816,6 +1889,11 @@ function elgg_init() {
        elgg_register_page_handler('js', 'js_page_handler');
        elgg_register_page_handler('css', 'css_page_handler');
 
+       elgg_register_js('elgg.autocomplete', 'js/lib/autocomplete.js');
+       elgg_register_js('elgg.userpicker', 'js/lib/userpicker.js');
+       elgg_register_js('elgg.friendspicker', 'js/lib/friends_picker.js');
+       elgg_register_js('jquery.easing', 'vendors/jquery/jquery.easing.1.3.packed.js');
+
        // Trigger the shutdown:system event upon PHP shutdown.
        register_shutdown_function('_elgg_shutdown_hook');
 
index 3d126332ac2c0b0c234b4394d6fd9cc22442d65b..637e9c4604cf97e665aa6215ef2b42bcdc97d055 100644 (file)
@@ -1471,9 +1471,11 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype)
 function elgg_views_register_core_head_elements() {
        $url = elgg_get_simplecache_url('js', 'elgg');
        elgg_register_js('elgg', $url, 'head', 10);
+       elgg_load_js('elgg');
 
        $url = elgg_get_simplecache_url('css', 'elgg');
        elgg_register_css('elgg', $url, 10);
+       elgg_load_css('elgg');
 }
 
 /**
@@ -1495,6 +1497,9 @@ function elgg_views_boot() {
        elgg_register_js('jquery', '/vendors/jquery/jquery-1.5.min.js', 'head', 1);
        elgg_register_js('jquery-ui', '/vendors/jquery/jquery-ui-1.8.9.min.js', 'head', 2);
        elgg_register_js('jquery.form', '/vendors/jquery/jquery.form.js');
+       elgg_load_js('jquery');
+       elgg_load_js('jquery-ui');
+       elgg_load_js('jquery.form');
 
        elgg_register_event_handler('ready', 'system', 'elgg_views_register_core_head_elements');
 
index b7057220ba004ccba091e920abec1d776b1f1437..1362b3c9d65fcbfc3489b9cdf439218732c1832b 100644 (file)
@@ -106,7 +106,7 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
                // specify name
                $result = elgg_register_js('key', 'http://test1.com', 'footer');
                $this->assertTrue($result);
-               $this->assertIdentical('http://test1.com', $CONFIG->externals['js']['footer']['key']->url);
+               $this->assertIdentical('http://test1.com', $CONFIG->externals['js']['key']->url);
 
                // send a bad url
                $result = elgg_register_js();
@@ -122,7 +122,7 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
                // specify name
                $result = elgg_register_css('key', 'http://test1.com');
                $this->assertTrue($result);
-               $this->assertIdentical('http://test1.com', $CONFIG->externals['css']['head']['key']->url);
+               $this->assertIdentical('http://test1.com', $CONFIG->externals['css']['key']->url);
        }
 
        /**
@@ -148,11 +148,25 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
                $this->assertFalse($result);
 
                $result = elgg_unregister_js('id2');
-               $this->assertIdentical($urls['id3'], $CONFIG->externals['js']['head']['id3']->url);
+               $this->assertIdentical($urls['id3'], $CONFIG->externals['js']['id3']->url);
        }
 
        /**
-        * Test elgg_get_js()
+        * Test elgg_load_js()
+        */
+       public function testElggLoadJS() {
+               global $CONFIG;
+
+               // load before register
+               elgg_load_js('key');
+               $result = elgg_register_js('key', 'http://test1.com', 'footer');
+               $this->assertTrue($result);
+               $js_urls = elgg_get_loaded_js('footer');
+               $this->assertIdentical(array('http://test1.com'), $js_urls);
+       }
+
+       /**
+        * Test elgg_get_loaded_js()
         */
        public function testElggGetJS() {
                global $CONFIG;
@@ -162,14 +176,15 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
                $urls = array('id1' => "$base/urla", 'id2' => "$base/urlb", 'id3' => "$base/urlc");
                foreach ($urls as $id => $url) {
                        elgg_register_js($id, $url);
+                       elgg_load_js($id);
                }
 
-               $js_urls = elgg_get_js('head');
+               $js_urls = elgg_get_loaded_js('head');
                $this->assertIdentical($js_urls[0], $urls['id1']);
                $this->assertIdentical($js_urls[1], $urls['id2']);
                $this->assertIdentical($js_urls[2], $urls['id3']);
 
-               $js_urls = elgg_get_js('footer');
+               $js_urls = elgg_get_loaded_js('footer');
                $this->assertIdentical(array(), $js_urls);
        }
 }
index 94ab65da1d96a34f544dcf70a64bd94241825bab..df307d70e4edda84c5c070900e0edb354d7d4eee 100644 (file)
@@ -298,8 +298,7 @@ function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) {
                        elgg_push_breadcrumb($blog->title, $blog->getURL());
                        elgg_push_breadcrumb(elgg_echo('edit'));
                        
-                       $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft');
-                       elgg_register_js('elgg.blog', $blog_js);
+                       elgg_load_js('elgg.blog');
 
                        $content = elgg_view_form('blog/save', $vars, $body_vars);
                        $sidebar = elgg_view('blog/sidebar/revisions', $vars);
index 01d78b4dd1ca991836800f96ae5c18c6e1859f97..8ebb967cc0a154d60b6620a210462aff57c571f0 100644 (file)
@@ -30,6 +30,10 @@ function blog_init() {
        // add to the main css
        elgg_extend_view('css/screen', 'blog/css');
 
+       // register the blog's JavaScript
+       $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft');
+       elgg_register_js('elgg.blog', $blog_js);
+
        // routing of urls
        elgg_register_page_handler('blog', 'blog_page_handler');
 
index 0fe7e47322f357c881ec7e522d73bb7ebfcd1ec3..97df551ae1fd62a89686b5b163c50113afc545d3 100644 (file)
@@ -32,7 +32,7 @@ header("Content-type: text/html; charset=UTF-8");
        <![endif]-->
 
 <?php
-foreach (elgg_get_js() as $script) {
+foreach (elgg_get_loaded_js() as $script) {
 ?>
        <script type="text/javascript" src="<?php echo $script; ?>"></script>
 <?php
index 30ee1b74bc7b2896abe393e24d4c9421f9ac94d6..49c91fe0e3b32b96fd6fadcf2d22b64c5818fa69 100644 (file)
@@ -14,7 +14,8 @@ gatekeeper();
 set_page_owner(elgg_get_logged_in_user_guid());
 
 $js_url = elgg_get_simplecache_url('js', 'friendsPickerv1');
-elgg_register_js('friendsPicker', $js_url);
+elgg_register_js('friendsPickerv1', $js_url);
+elgg_load_js('friendsPickerv1');
 
 // Set the context to settings
 elgg_set_context('settings');
index fac8c083c9f879c41360f89e377b09be4917514f..6731c59e307eb908afc833058353233c020c9ec2 100644 (file)
@@ -3,8 +3,8 @@
  * Hacked up friends picker that needs to be replaced
  */
 
-elgg_register_js('elgg.friendspicker', 'js/lib/friends_picker.js');
-elgg_register_js('jquery.easing', 'vendors/jquery/jquery.easing.1.3.packed.js');
+elgg_load_js('elgg.friendspicker');
+elgg_load_js('jquery.easing');
 
 ?>
 <div class="elgg-module elgg-module-info">
index 23c564da5287ac842dfb36ab84fd74364085d1fa..3404a8cd2d605bcb1513b37bc4f3fea93aaf32a1 100644 (file)
@@ -33,9 +33,15 @@ function pages_init() {
        elgg_register_action("pages/editwelcome", "$action_base/editwelcome.php");
        elgg_register_action("pages/delete", "$action_base/delete.php");
 
-       // Extend some views
+       // Extend the main css view
        elgg_extend_view('css/elgg', 'pages/css');
 
+       // Register javascript needed for sidebar menu
+       $js_url = 'mod/pages/vendors/jquery-treeview/jquery.treeview.min.js';
+       elgg_register_js('jquery-treeview', $js_url);
+       $css_url = 'mod/pages/vendors/jquery-treeview/jquery.treeview.css';
+       elgg_register_css('jquery-treeview', $css_url);
+
        // Register entity type for search
        elgg_register_entity_type('object', 'page');
        elgg_register_entity_type('object', 'page_top');
@@ -100,10 +106,8 @@ function pages_page_handler($page) {
        elgg_load_library('elgg:pages');
        
        // add the jquery treeview files for navigation
-       $js_url = elgg_get_site_url() . 'mod/pages/vendors/jquery-treeview/jquery.treeview.min.js';
-       elgg_register_js('jquery-treeview', $js_url);
-       $css_url = elgg_get_site_url() . 'mod/pages/vendors/jquery-treeview/jquery.treeview.css';
-       elgg_register_css('jquery-treeview', $css_url);
+       elgg_load_js('jquery-treeview');
+       elgg_load_css('jquery-treeview');
 
        if (!isset($page[0])) {
                $page[0] = 'all';
index 81667f8d53a2d21c199b07ff63e609fce85fa992..1b641ff866afcda9f5ab8412cd4a10eab5e8cec8 100644 (file)
@@ -8,6 +8,9 @@
 function tinymce_init() {
        elgg_extend_view('css/elgg', 'tinymce/css');
        elgg_extend_view('css/admin', 'tinymce/css');
+
+       elgg_register_js('tinymce', 'mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js');
+       elgg_register_js('elgg.tinymce', elgg_get_simplecache_url('js', 'tinymce'));
        
        elgg_extend_view('input/longtext', 'tinymce/init');
        
index 3fe08771c1b5c9bd7e82eca339cf1aaa4f389f32..35dd71613a708c23f76018a4cb118adff28d6b78 100644 (file)
@@ -3,5 +3,5 @@
  * Initialize the TinyMCE script
  */
 
-elgg_register_js('tinymce', 'mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js');
-elgg_register_js('elgg.tinymce', elgg_get_simplecache_url('js', 'tinymce'));
\ No newline at end of file
+elgg_load_js('tinymce');
+elgg_load_js('elgg.tinymce');
\ No newline at end of file
index c440456b7dcc1f6da1603ee729789dd7642685e1..b353dffb9503a5f49b8bba7c95c72169a666a236 100644 (file)
@@ -12,4 +12,7 @@ elgg_register_event_handler('init', 'system', 'zaudio_init');
 
 function zaudio_init() {
        elgg_extend_view('css/elgg', 'zaudio/css');
+
+       $js_url = elgg_get_site_url() . 'mod/zaudio/audioplayer/audio-player.js';
+       elgg_register_js('elgg.zaudio', $js_url);
 }
index 6898506a6099729bb8cbcbc909b1f424cd84cc58..bae725458890d0830356e2c6ca0be3591c11faf0 100644 (file)
@@ -4,8 +4,7 @@
  * @package ElggZAudio
  */
 
-$js_url = elgg_get_site_url() . 'mod/zaudio/audioplayer/audio-player.js';
-elgg_register_js('elgg.zaudio', $js_url);
+elgg_load_js('elgg.zaudio');
 
 $swf_url = elgg_get_site_url() . 'mod/zaudio/audioplayer/player.swf';
 $mp3_url = elgg_get_site_url() . "mod/file/download.php?file_guid={$vars['file_guid']}";
index 212333141830fff3e2832081b3841da3d01bec31..b16d08fc3553117975bc66de05cad7d88ceca80e 100644 (file)
@@ -29,7 +29,7 @@ $ac_url_params = http_build_query(array(
 unset($vars['match_on']);
 unset($vars['match_owner']);
 
-elgg_register_js('elgg.autocomplete', 'js/lib/autocomplete.js');
+elgg_load_js('elgg.autocomplete');
 
 ?>
 
index b5f347e0ca1c72855be3be93b6b923893a55613d..1a60e0d88f3a0b6f078813db3f2a96d1352a2fdd 100644 (file)
@@ -11,8 +11,8 @@
  * @uses $vars['entities'] The array of ElggUser objects
  */
 
-elgg_register_js('elgg.friendspicker', 'js/lib/friends_picker.js');
-elgg_register_js('jquery.easing', 'vendors/jquery/jquery.easing.1.3.packed.js');
+elgg_load_js('elgg.friendspicker');
+elgg_load_js('jquery.easing');
 
 
 $chararray = elgg_echo('friendspicker:chararray');
index 8280305b08297373d5bde5dcd6133a95afffe9fb..656effc98e68d3568fd2b0117040341ac2f3ede2 100644 (file)
@@ -18,7 +18,7 @@
  *
  */
 
-elgg_register_js('elgg.userpicker', 'js/lib/userpicker.js');
+elgg_load_js('elgg.userpicker');
 
 function user_picker_add_user($user_id) {
        $user = get_entity($user_id);
index 209eb35f439ae6b0df1150f53f9b808cedae8b54..5f9bf479871e66535bbaad77f6b0ef32a1c7030d 100644 (file)
@@ -30,8 +30,8 @@ END;
        $feedref = "";
 }
 
-$js = elgg_get_js('head');
-$css = elgg_get_css();
+$js = elgg_get_loaded_js('head');
+$css = elgg_get_loaded_css();
 
 $version = get_version();
 $release = get_version(true);