diff options
Diffstat (limited to 'views/default/js')
| -rw-r--r-- | views/default/js/admin.php | 126 | ||||
| -rw-r--r-- | views/default/js/elgg.php | 77 | ||||
| -rw-r--r-- | views/default/js/initialise_elgg.php | 4 | ||||
| -rw-r--r-- | views/default/js/initialize_elgg.php | 52 | ||||
| -rw-r--r-- | views/default/js/languages.php | 33 | ||||
| -rw-r--r-- | views/default/js/languages/en.php | 2 | ||||
| -rw-r--r-- | views/default/js/lightbox.php | 36 | ||||
| -rw-r--r-- | views/default/js/walled_garden.php | 67 | 
8 files changed, 397 insertions, 0 deletions
diff --git a/views/default/js/admin.php b/views/default/js/admin.php new file mode 100644 index 000000000..e8aa0d2ed --- /dev/null +++ b/views/default/js/admin.php @@ -0,0 +1,126 @@ +<?php +/** + * Admin-area specific javascript functions. + * + * @since 1.8 + */ + +if (0) { ?><script><?php } +?> +elgg.provide('elgg.admin'); + +elgg.admin.init = function () { + +	// system messages do not fade in admin area, instead slide up when clicked +	$('.elgg-system-messages li').stop(true); +	$('.elgg-system-messages li').die('click'); +	$('.elgg-system-messages li').live('click', function() { +		$(this).stop().slideUp('medium'); +	}); + +	// draggable plugin reordering +	$('#elgg-plugin-list > ul').sortable({ +		items:                'li:has(> .elgg-state-draggable)', +		handle:               '.elgg-head', +		forcePlaceholderSize: true, +		placeholder:          'elgg-widget-placeholder', +		opacity:              0.8, +		revert:               500, +		stop:                 elgg.admin.movePlugin +	}); + +	// in-line editing for custom profile fields. +	// @note this requires jquery.jeditable plugin +	$(".elgg-state-editable").editable(elgg.admin.editProfileField, { +		type:   'text', +		onblur: 'submit', +		width:  '300px', +		height: 'none', +		style:  'display:inline;' +	}); + +	// draggable profile field reordering. +	$('#elgg-profile-fields').sortable({ +		items: 'li', +		handle: 'span.elgg-state-draggable', +		stop: elgg.admin.moveProfileField +	}); + +	// admin notices delete ajax +	$('a.elgg-admin-notice').click(elgg.admin.deleteNotice); +}; + +/** + * Save the plugin order after a move event. + * + * @param {Object} e  Event object. + * @param {Object} ui jQueryUI object + * @return void + */ +elgg.admin.movePlugin = function(e, ui) { +	// get guid from id like elgg-object-<guid> +	var pluginGuid = ui.item.attr('id'); +	pluginGuid = pluginGuid.replace('elgg-object-', ''); + +	elgg.action('admin/plugins/set_priority', { +		data: { +				plugin_guid: pluginGuid, +				// we start at priority 1 +				priority: ui.item.index() + 1 +			} +	}); +}; + +/** + * In-line editing for custom profile fields + * + * @param string   value    The new value + * @param {Object} settings The settings used for editable + * @return void + */ +elgg.admin.editProfileField = function(value, settings) { +	var id = $(this).attr('id'); +	id = id.replace('elgg-profile-field-', ''); + +	var data = { +		id:    id, +		label: value +	}; + +	elgg.action('profile/fields/edit', data); +	return value; +}; + +/** + * Save the plugin profile order after a move event. + * + * @param {Object} e  Event object. + * @param {Object} ui jQueryUI object + * @return void + */ +elgg.admin.moveProfileField = function(e, ui) { +	var orderArr = $('#elgg-profile-fields').sortable('toArray'); +	var orderStr = orderArr.join(','); + +	elgg.action('profile/fields/reorder', { +		fieldorder: orderStr +	}); +}; + +/** + * Fires the ajax action to delete the admin notice then hides the notice. + * + * @return void + */ +elgg.admin.deleteNotice = function(e) { +	e.preventDefault(); +	var $container = $(this).closest('p'); +	 +	elgg.action($(this).attr('href'), { +		success: function(json) { +			$container.slideUp('medium'); +		} +	}); +}; + +elgg.register_hook_handler('init', 'system', elgg.admin.init, 1000);
\ No newline at end of file diff --git a/views/default/js/elgg.php b/views/default/js/elgg.php new file mode 100644 index 000000000..c3b56e398 --- /dev/null +++ b/views/default/js/elgg.php @@ -0,0 +1,77 @@ +<?php +/** + * Core Elgg javascript loader + */ +global $CONFIG; + +$prereq_files = array( +	"vendors/sprintf.js", +	"js/lib/elgglib.js", +); + +foreach ($prereq_files as $file) { +	include("{$CONFIG->path}$file"); +} + +//No such thing as autoloading classes in javascript +$model_files = array( +	'ElggEntity', +	'ElggUser', +	'ElggPriorityList', +); + +foreach ($model_files as $file) { +	include("{$CONFIG->path}js/classes/$file.js"); +} + +//Include library files +$libs = array( +	//libraries +	'prototypes', +	'hooks', +	'security', +	'languages', +	'ajax', +	'session', +	'pageowner', +	'configuration', + +	//ui +	'ui', +	'ui.widgets', +); + +foreach ($libs as $file) { +	include("{$CONFIG->path}js/lib/$file.js"); +	// putting a new line between the files to address https://github.com/elgg/elgg/issues/3081 +	echo "\n"; +} + +/** + * Set some values that are cacheable + */ +if (0) { ?><script><?php } +?> + +elgg.version = '<?php echo get_version(); ?>'; +elgg.release = '<?php echo get_version(true); ?>'; +elgg.config.wwwroot = '<?php echo elgg_get_site_url(); ?>'; +<?php //@todo make this configurable ?> +elgg.security.interval = 5 * 60 * 1000; +elgg.config.domReady = false; +elgg.config.language = '<?php echo isset($CONFIG->language) ? $CONFIG->language : 'en'; ?>'; +elgg.config.languageReady = false; + +//After the DOM is ready +$(function() { +	elgg.config.domReady = true; +	elgg.initWhenReady(); +}); + +<?php + +$previous_content = elgg_view('js/initialise_elgg'); +if ($previous_content) { +	elgg_deprecated_notice("The view 'js/initialise_elgg' has been deprecated for js/elgg", 1.8); +	echo $previous_content; +} diff --git a/views/default/js/initialise_elgg.php b/views/default/js/initialise_elgg.php new file mode 100644 index 000000000..3d617953a --- /dev/null +++ b/views/default/js/initialise_elgg.php @@ -0,0 +1,4 @@ +<?php +/** + * This has been deprecated in 1.8 - see elgg.php in this directory. + */
\ No newline at end of file diff --git a/views/default/js/initialize_elgg.php b/views/default/js/initialize_elgg.php new file mode 100644 index 000000000..b45c33463 --- /dev/null +++ b/views/default/js/initialize_elgg.php @@ -0,0 +1,52 @@ +<?php  +/** + * Initialize Elgg's js lib with the uncacheable data + */ + +if (0) { ?><script><?php } +?> +/** + * Don't want to cache these -- they could change for every request + */ +elgg.config.lastcache = <?php echo (int)elgg_get_config('lastcache'); ?>; +elgg.config.viewtype = '<?php echo elgg_get_viewtype(); ?>'; +elgg.config.simplecache_enabled = <?php echo (int)elgg_is_simplecache_enabled(); ?>; + +elgg.security.token.__elgg_ts = <?php echo $ts = time(); ?>; +elgg.security.token.__elgg_token = '<?php echo generate_action_token($ts); ?>'; + +<?php +// @todo json export should be smoother than this...   +// @todo Might also be nice to make url exportable. $entity->url? yes please! +$page_owner = elgg_get_page_owner_entity(); + +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 = elgg_get_logged_in_user_entity(); + +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(); +	$user_json['admin'] = $user->isAdmin(); +	 +	echo 'elgg.session.user = new elgg.ElggUser(' . json_encode($user_json) . ');';  +} +?> + +//Before the DOM is ready, but elgg's js framework is fully initalized +elgg.trigger_hook('boot', 'system');
\ No newline at end of file diff --git a/views/default/js/languages.php b/views/default/js/languages.php new file mode 100644 index 000000000..fcf903d4b --- /dev/null +++ b/views/default/js/languages.php @@ -0,0 +1,33 @@ +<?php +/** + * @uses $vars['language'] + * @uses $vars['lc'] if present, client will be sent long expires headers + */ + +$language = $vars['language']; +$lastcache = elgg_extract('lc', $vars, 0); + +// @todo add server-side caching +if ($lastcache) { +	// we're relying on lastcache changes to predict language changes +	$etag = '"' . md5("$language|$lastcache") .  '"'; + +	header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true); +	header("Pragma: public", true); +	header("Cache-Control: public", true); +	header("ETag: $etag"); + +	if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) === $etag) { +		header("HTTP/1.1 304 Not Modified"); +		exit; +	} +} + +$all_translations = elgg_get_config('translations'); +$translations = $all_translations['en']; + +if ($language != 'en') { +	$translations = array_merge($translations, $all_translations[$language]); +} + +echo json_encode($translations);
\ 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 index 000000000..8a604cc12 --- /dev/null +++ b/views/default/js/languages/en.php @@ -0,0 +1,2 @@ +<?php +echo elgg_view('js/languages', array('language' => 'en'));
\ No newline at end of file diff --git a/views/default/js/lightbox.php b/views/default/js/lightbox.php new file mode 100644 index 000000000..a1f018eea --- /dev/null +++ b/views/default/js/lightbox.php @@ -0,0 +1,36 @@ +<?php +/** + * Elgg lightbox + * + * Usage + * Call elgg_load_js('lightbox') and elgg_load_css('lightbox') then + * apply the class elgg-lightbox to links. + * + * Advanced Usage + * Elgg is distributed with the Fancybox jQuery library. Please go to + * http://fancybox.net for more information on the options of this lightbox. + * + * Overriding + * In a plugin, override this view and override the registration for the + * lightbox JavaScript and CSS (@see elgg_views_boot()). + * + * @todo add support for passing options: $('#myplugin-lightbox').elgg.ui.lightbox(options); + */ + +if (0) { ?><script><?php } +?> + +/** + * Lightbox initialization + */ +elgg.ui.lightbox_init = function() { +	$(".elgg-lightbox").fancybox(); +} + +elgg.register_hook_handler('init', 'system', elgg.ui.lightbox_init); + +<?php + +$js_path = elgg_get_config('path'); +$js_path = "{$js_path}vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js"; +include $js_path; diff --git a/views/default/js/walled_garden.php b/views/default/js/walled_garden.php new file mode 100644 index 000000000..e228df507 --- /dev/null +++ b/views/default/js/walled_garden.php @@ -0,0 +1,67 @@ +<?php +/** + * Walled garden JavaScript + * + * @since 1.8 + */ + +$cancel_button = elgg_view('input/button', array( +	'value' => elgg_echo('cancel'), +	'class' => 'elgg-button-cancel mlm', +)); +$cancel_button = json_encode($cancel_button); + +if (0) { ?><script><?php } +?> + +elgg.provide('elgg.walled_garden'); + +elgg.walled_garden.init = function () { + +	$('.forgot_link').click(elgg.walled_garden.load('lost_password')); +	$('.registration_link').click(elgg.walled_garden.load('register')); + +	$('input.elgg-button-cancel').live('click', function(event) { +		var $wgs = $('.elgg-walledgarden-single'); +		if ($wgs.is(':visible')) { +			$('.elgg-walledgarden-double').fadeToggle(); +			$wgs.fadeToggle(); +			$wgs.remove(); +		} +		event.preventDefault(); +	}); +}; + +/** + * Creates a closure for loading walled garden content through ajax + * + * @param {String} view Name of the walled garden view + * @return {Object} + */ +elgg.walled_garden.load = function(view) { +	return function(event) { +		var id = '#elgg-walledgarden-' + view; +		id = id.replace('_', '-'); +		//@todo display some visual element that indicates that loading of content is running +		elgg.get('walled_garden/' + view, { +			'success' : function(data) { +				var $wg = $('.elgg-body-walledgarden'); +				$wg.append(data); +				$(id).find('input.elgg-button-submit').after(<?php echo $cancel_button; ?>); + +				if (view == 'register' && $wg.hasClass('hidden')) { +					// this was a failed register, display the register form ASAP +					$('#elgg-walledgarden-login').toggle(false); +					$(id).toggle(); +					$wg.removeClass('hidden'); +				} else { +					$('#elgg-walledgarden-login').fadeToggle(); +					$(id).fadeToggle(); +				} +			} +		}); +		event.preventDefault(); +	}; +}; + +elgg.register_hook_handler('init', 'system', elgg.walled_garden.init);
\ No newline at end of file  | 
