diff options
-rw-r--r-- | engine/lib/elgglib.php | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index fe4f4ea03..d162768f7 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -100,6 +100,182 @@ function forward($location = "") { } /** + * Register a JavaScript file for inclusion + * + * This function handles adding JavaScript to a web page. If multiple + * calls are made to register the same JavaScript file based on the $id + * variable, only the last file is included. This allows a plugin to add + * JavaScript from a view that may be called more than once. It also handles + * more than one plugin adding the same JavaScript. + * + * Plugin authors are encouraged to use the $id variable. jQuery plugins + * often have filenames such as jquery.rating.js. In that case, the id + * would be "jquery.rating". It is recommended to not use version numbers + * in the id. + * + * The JavaScript files can be local to the server or remote (such as + * Google's CDN). + * + * @param string $url URL of the JavaScript file + * @param string $id An identifier of the JavaScript library + * @param string $location Page location: head or footer. (default: head) + * @return bool + */ +function elgg_register_js($url, $id = '', $location = 'head') { + return elgg_register_external_file('javascript', $url, $id, $location); +} + +/** + * Register a CSS file for inclusion in the HTML head + * + * @param string $url URL of the CSS file + * @param string $id An identifier for the CSS file + * @return bool + */ +function elgg_register_css($url, $id = '') { + return elgg_register_external_file('css', $url, $id, 'head'); +} + +/** + * Core registration function for external files + * + * @param string $type Type of external resource + * @param string $url URL + * @param string $id Identifier used as key + * @param string $location Location in the page to include the file + * @return bool + */ +function elgg_register_external_file($type, $url, $id, $location) { + global $CONFIG; + + if (empty($url)) { + return false; + } + + 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(); + } + + if (!$id) { + $id = count($CONFIG->externals[$type][$location]); + } else { + $id = trim(strtolower($id)); + } + + $CONFIG->externals[$type][$location][$id] = $url; + + return true; +} + +/** + * Unregister a JavaScript file + * + * @param string $id The identifier for the JavaScript library + * @param string $url Optional URL to search for if id is not specified + * @param string $location Location in the page + * @return bool + */ +function elgg_unregister_js($id = '', $url = '', $location = 'head') { + return elgg_unregister_external_file('javascript', $id, $url, $location); +} + +/** + * Unregister an external file + * + * @param string $id The identifier of the CSS file + * @param string $url Optional URL to search for if id is not specified + * @param string $location Location in the page + * @return bool + */ +function elgg_unregister_css($id = '', $url = '') { + return elgg_unregister_external_file('css', $id, $url, 'head'); +} + +/** + * Unregister an external file + * + * @param string $type Type of file: javascript or css + * @param string $id The identifier of the file + * @param string $url Optional URL to search for if the id is not specified + * @param string $location Location in the page + * @return bool + */ +function elgg_unregister_external_file($type, $id = '', $url = '', $location = 'head') { + global $CONFIG; + + if (!isset($CONFIG->externals)) { + return false; + } + + if (!isset($CONFIG->externals[$type])) { + return false; + } + + if (!isset($CONFIG->externals[$type][$location])) { + return false; + } + + if (array_key_exists($id, $CONFIG->externals[$type][$location])) { + unset($CONFIG->externals[$type][$location][$id]); + return true; + } + + // was not registered with an id so do a search for the url + $key = array_search($url, $CONFIG->externals[$type][$location]); + if ($key) { + unset($CONFIG->externals[$type][$location][$key]); + return true; + } + + return false; +} + +/** + * Get the JavaScript URLs + * + * @return array + */ +function elgg_get_js($location = 'head') { + return elgg_get_external_file('javascript', $location); +} + +/** + * Get the CSS URLs + * + * @return array + */ +function elgg_get_css() { + return elgg_get_external_file('css', 'head'); +} + +/** + * Get external resource descriptors + * + * @param string $type Type of resource + * @param string $location Page location + * @return array + */ +function elgg_get_external_file($type, $location) { + global $CONFIG; + + if (isset($CONFIG->externals) && + isset($CONFIG->externals[$type]) && + isset($CONFIG->externals[$type][$location])) { + + return array_values($CONFIG->externals[$type][$location]); + } + return array(); +} + +/** * Returns the HTML for "likes" and "like this" on entities. * * @param ElggEntity $entity The entity to like |