aboutsummaryrefslogtreecommitdiff
path: root/engine/lib
diff options
context:
space:
mode:
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2011-03-12 22:25:02 +0000
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2011-03-12 22:25:02 +0000
commitbfb0a3e9b289e4036bfeb3e694586387fc4f904e (patch)
tree6beec05b6424702e036d67622db37ac6f8852a54 /engine/lib
parent1bd696b3d8eb8175cc2b6583716fe3e89110aab0 (diff)
downloadelgg-bfb0a3e9b289e4036bfeb3e694586387fc4f904e.tar.gz
elgg-bfb0a3e9b289e4036bfeb3e694586387fc4f904e.tar.bz2
Fixes #3091 adds load functions for js and css
git-svn-id: http://code.elgg.org/elgg/trunk@8675 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'engine/lib')
-rw-r--r--engine/lib/admin.php3
-rw-r--r--engine/lib/elgglib.php202
-rw-r--r--engine/lib/views.php5
3 files changed, 148 insertions, 62 deletions
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
index 104b362a9..8ef01e7cc 100644
--- a/engine/lib/admin.php
+++ b/engine/lib/admin.php
@@ -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])) {
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 93be114f2..45546a3f0 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -183,6 +183,44 @@ function elgg_register_js($name, $url, $location = 'head', $priority = 500) {
}
/**
+ * 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
*
* @param string $name An identifier for the CSS file
@@ -197,9 +235,45 @@ function elgg_register_css($name, $url, $priority = 500) {
}
/**
+ * 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');
diff --git a/engine/lib/views.php b/engine/lib/views.php
index 3d126332a..637e9c460 100644
--- a/engine/lib/views.php
+++ b/engine/lib/views.php
@@ -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');