diff --git a/media/system/js/core-uncompressed.js b/media/system/js/core-uncompressed.js
index c75dc6fde2340..63295dceec165 100644
--- a/media/system/js/core-uncompressed.js
+++ b/media/system/js/core-uncompressed.js
@@ -6,450 +6,497 @@
// Only define the Joomla namespace if not defined.
Joomla = window.Joomla || {};
-Joomla.editors = {};
-// An object to hold each editor instance on page
-Joomla.editors.instances = {};
+// Only define editors if not defined
+Joomla.editors = Joomla.editors || {};
-/**
- * Generic submit form
- */
-Joomla.submitform = function(task, form, validate) {
- if (!form) {
- form = document.getElementById('adminForm');
- }
-
- if (task) {
- form.task.value = task;
- }
-
- // Toggle HTML5 validation
- form.noValidate = !validate;
-
- // Submit the form.
- // Create the input type="submit"
- var button = document.createElement('input');
- button.style.display = 'none';
- button.type = 'submit';
+// An object to hold each editor instance on page, only define if not defined.
+Joomla.editors.instances = Joomla.editors.instances || {};
- // Append it and click it
- form.appendChild(button).click();
+(function( Joomla, document ) {
+ "use strict";
- // If "submit" was prevented, make sure we don't get a build up of buttons
- form.removeChild(button);
-};
+ /**
+ * Generic submit form
+ */
+ Joomla.submitform = function(task, form, validate) {
+ if (!form) {
+ form = document.getElementById('adminForm');
+ }
-/**
- * Default function. Usually would be overriden by the component
- */
-Joomla.submitbutton = function(pressbutton) {
- Joomla.submitform(pressbutton);
-};
+ if (task) {
+ form.task.value = task;
+ }
-/**
- * Custom behavior for JavaScript I18N in Joomla! 1.6
- *
- * Allows you to call Joomla.JText._() to get a translated JavaScript string pushed in with JText::script() in Joomla.
- */
-Joomla.JText = {
- strings: {},
- '_': function(key, def) {
- return typeof this.strings[key.toUpperCase()] !== 'undefined' ? this.strings[key.toUpperCase()] : def;
- },
- load: function(object) {
- for (var key in object) {
- this.strings[key.toUpperCase()] = object[key];
- }
- return this;
- }
-};
+ // Toggle HTML5 validation
+ form.noValidate = !validate;
+
+ // Submit the form.
+ // Create the input type="submit"
+ var button = document.createElement('input');
+ button.style.display = 'none';
+ button.type = 'submit';
+
+ // Append it and click it
+ form.appendChild(button).click();
+
+ // If "submit" was prevented, make sure we don't get a build up of buttons
+ form.removeChild(button);
+ };
+
+ /**
+ * Default function. Usually would be overriden by the component
+ */
+ Joomla.submitbutton = function( pressbutton ) {
+ Joomla.submitform( pressbutton );
+ };
+
+ /**
+ * Custom behavior for JavaScript I18N in Joomla! 1.6
+ *
+ * Allows you to call Joomla.JText._() to get a translated JavaScript string pushed in with JText::script() in Joomla.
+ */
+ Joomla.JText = {
+ strings: {},
+ '_': function( key, def ) {
+ return typeof this.strings[ key.toUpperCase() ] !== 'undefined' ? this.strings[ key.toUpperCase() ] : def;
+ },
+ load: function( object ) {
+ for ( var key in object ) {
+ if (!object.hasOwnProperty(key)) continue;
+ this.strings[ key.toUpperCase() ] = object[ key ];
+ }
+ return this;
+ }
+ };
-/**
- * Method to replace all request tokens on the page with a new one.
- */
-Joomla.replaceTokens = function(n) {
- var els = document.getElementsByTagName('input'), i;
- for (i = 0; i < els.length; i++) {
- if ((els[i].type == 'hidden') && (els[i].name.length == 32) && els[i].value == '1') {
- els[i].name = n;
- }
- }
-};
+ /**
+ * Method to replace all request tokens on the page with a new one.
+ * Probably not used anywhere
+ */
+ Joomla.replaceTokens = function( newToken ) {
+ if (!/^[0-9A-F]{32}$/i.test(newToken)) { return; }
-/**
- * USED IN: administrator/components/com_banners/views/client/tmpl/default.php
- *
- * Verifies if the string is in a valid email format
- *
- * @param string
- * @return boolean
- */
-Joomla.isEmail = function(text) {
- var regex = new RegExp("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
- return regex.test(text);
-};
+ var els = document.getElementsByTagName( 'input' ),
+ i, el;
-/**
- * USED IN: all list forms.
- *
- * Toggles the check state of a group of boxes
- *
- * Checkboxes must have an id attribute in the form cb0, cb1...
- *
- * @param mixed The number of box to 'check', for a checkbox element
- * @param string An alternative field name
- */
-Joomla.checkAll = function(checkbox, stub) {
- if (!stub) {
- stub = 'cb';
- }
- if (checkbox.form) {
- var c = 0, i, e;
- for (i = 0, n = checkbox.form.elements.length; i < n; i++) {
- e = checkbox.form.elements[i];
- if (e.type == checkbox.type) {
- if ((stub && e.id.indexOf(stub) == 0) || !stub) {
- e.checked = checkbox.checked;
- c += (e.checked == true ? 1 : 0);
- }
- }
- }
- if (checkbox.form.boxchecked) {
- checkbox.form.boxchecked.value = c;
- }
- return true;
- }
- return false;
-};
+ for ( i = 0, n = els.length; i < n; i++ ) {
+ el = els[i];
-/**
- * Render messages send via JSON
- *
- * @param object messages JavaScript object containing the messages to render. Example:
- * var messages = {
- * "message": ["Message one", "Message two"],
- * "error": ["Error one", "Error two"]
- * };
- * @return void
- */
-Joomla.renderMessages = function(messages) {
- Joomla.removeMessages();
+ if ( el.type == 'hidden' && el.value == '1' && el.name.length == 32 ) {
+ el.name = newToken;
+ }
+ }
+ };
+
+ /**
+ * USED IN: administrator/components/com_banners/views/client/tmpl/default.php
+ * Actually, probably not used anywhere. Can we deprecate in favor of ?
+ *
+ * Verifies if the string is in a valid email format
+ *
+ * @param string
+ * @return boolean
+ */
+ Joomla.isEmail = function( text ) {
+ var regex = /^[\w.!#$%&’*+\/=?^`{|}~-]+@[a-z0-9-]+(?:\.[a-z0-9-]{2,})+$/i;
+ return regex.test( text );
+ };
+
+ /**
+ * USED IN: all list forms.
+ *
+ * Toggles the check state of a group of boxes
+ *
+ * Checkboxes must have an id attribute in the form cb0, cb1...
+ *
+ * @param mixed The number of box to 'check', for a checkbox element
+ * @param string An alternative field name
+ */
+ Joomla.checkAll = function( checkbox, stub ) {
+ if (!checkbox.form) return false;
+
+ stub = stub ? stub : 'cb';
+
+ var c = 0,
+ i, e, n;
+
+ for ( i = 0, n = checkbox.form.elements.length; i < n; i++ ) {
+ e = checkbox.form.elements[ i ];
+
+ if ( e.type == checkbox.type && e.id.indexOf( stub ) === 0 ) {
+ e.checked = checkbox.checked;
+ c += e.checked ? 1 : 0;
+ }
+ }
- var messageContainer = document.getElementById('system-message-container');
+ if ( checkbox.form.boxchecked ) {
+ checkbox.form.boxchecked.value = c;
+ }
- for (var type in messages) {
- if (messages.hasOwnProperty(type)) {
+ return true;
+ };
+
+ /**
+ * Render messages send via JSON
+ * Used by some javascripts such as validate.js
+ *
+ * @param object messages JavaScript object containing the messages to render. Example:
+ * var messages = {
+ * "message": ["Message one", "Message two"],
+ * "error": ["Error one", "Error two"]
+ * };
+ * @return void
+ */
+ Joomla.renderMessages = function( messages ) {
+ Joomla.removeMessages();
+
+ var messageContainer = document.getElementById( 'system-message-container' ),
+ type, typeMessages, messagesBox, title, titleWrapper, i, messageWrapper;
+
+ for ( type in messages ) {
+ if ( !messages.hasOwnProperty( type ) ) { continue; }
// Array of messages of this type
- var typeMessages = messages[type];
+ typeMessages = messages[ type ];
// Create the alert box
- var messagesBox = document.createElement('div');
+ messagesBox = document.createElement( 'div' );
messagesBox.className = 'alert alert-' + type;
// Title
- var title = Joomla.JText._(type);
+ title = Joomla.JText._( type );
// Skip titles with untranslated strings
- if (typeof title != 'undefined') {
- var titleWrapper = document.createElement('h4');
+ if ( typeof title != 'undefined' ) {
+ titleWrapper = document.createElement( 'h4' );
titleWrapper.className = 'alert-heading';
- titleWrapper.innerHTML = Joomla.JText._(type);
+ titleWrapper.innerHTML = Joomla.JText._( type );
- messagesBox.appendChild(titleWrapper);
+ messagesBox.appendChild( titleWrapper );
}
// Add messages to the message box
- for (var i = typeMessages.length - 1; i >= 0; i--) {
- var messageWrapper = document.createElement('p');
- messageWrapper.innerHTML = typeMessages[i];
- messagesBox.appendChild(messageWrapper);
+ for ( i = typeMessages.length - 1; i >= 0; i-- ) {
+ messageWrapper = document.createElement( 'p' );
+ messageWrapper.innerHTML = typeMessages[ i ];
+ messagesBox.appendChild( messageWrapper );
}
- messageContainer.appendChild(messagesBox);
+ messageContainer.appendChild( messagesBox );
+ }
+ };
+
+
+ /**
+ * Remove messages
+ *
+ * @return void
+ */
+ Joomla.removeMessages = function() {
+ var messageContainer = document.getElementById( 'system-message-container' );
+
+ // Empty container with a while for Chrome performance issues
+ while ( messageContainer.firstChild ) messageContainer.removeChild( messageContainer.firstChild );
+
+ // Fix Chrome bug not updating element height
+ messageContainer.style.display = 'none';
+ messageContainer.offsetHeight;
+ messageContainer.style.display = '';
+ };
+
+ /**
+ * USED IN: administrator/components/com_cache/views/cache/tmpl/default.php
+ * administrator/components/com_installer/views/discover/tmpl/default_item.php
+ * administrator/components/com_installer/views/update/tmpl/default_item.php
+ * administrator/components/com_languages/helpers/html/languages.php
+ * libraries/joomla/html/html/grid.php
+ *
+ * @param isitchecked
+ * @param form
+ * @return
+ */
+ Joomla.isChecked = function( isitchecked, form ) {
+ if ( typeof form === 'undefined' ) {
+ form = document.getElementById( 'adminForm' );
}
- }
-};
+ form.boxchecked.value += isitchecked ? 1 : -1;
-/**
- * Remove messages
- *
- * @return void
- */
-Joomla.removeMessages = function() {
- var messageContainer = document.getElementById('system-message-container');
+ // If we don't have a checkall-toggle, done.
+ if ( !form.elements[ 'checkall-toggle' ] ) return;
- // Empty container with a while for Chrome performance issues
- while (messageContainer.firstChild) messageContainer.removeChild(messageContainer.firstChild);
+ // Toggle main toggle checkbox depending on checkbox selection
+ var c = true,
+ i, e, n;
- // Fix Chrome bug not updating element height
- messageContainer.style.display='none';
- messageContainer.offsetHeight;
- messageContainer.style.display='';
-};
+ for ( i = 0, n = form.elements.length; i < n; i++ ) {
+ e = form.elements[ i ];
-/**
- * USED IN: administrator/components/com_cache/views/cache/tmpl/default.php
- * administrator/components/com_installer/views/discover/tmpl/default_item.php
- * administrator/components/com_installer/views/update/tmpl/default_item.php
- * administrator/components/com_languages/helpers/html/languages.php
- * libraries/joomla/html/html/grid.php
- *
- * @param isitchecked
- * @param form
- * @return
- */
-Joomla.isChecked = function(isitchecked, form) {
- if (typeof(form) === 'undefined') {
- form = document.getElementById('adminForm');
- }
-
- if (isitchecked == true) {
- form.boxchecked.value++;
- } else {
- form.boxchecked.value--;
- }
-
- // Toggle main toggle checkbox depending on checkbox selection
- var c = true, i, e;
- for (i = 0, n = form.elements.length; i < n; i++) {
- e = form.elements[i];
- if (e.type == 'checkbox') {
- if (e.name != 'checkall-toggle' && e.checked == false) {
- c = false;
- break;
- }
- }
- }
- if (form.elements['checkall-toggle']) {
- form.elements['checkall-toggle'].checked = c;
- }
-};
+ if ( e.type == 'checkbox' && e.name != 'checkall-toggle' && !e.checked ) {
+ c = false;
+ break;
+ }
+ }
-/**
- * USED IN: libraries/joomla/html/toolbar/button/help.php
- *
- * Pops up a new window in the middle of the screen
- */
-Joomla.popupWindow = function(mypage, myname, w, h, scroll) {
- var winl = (screen.width - w) / 2, wint, winprops, win;
- wint = (screen.height - h) / 2;
- winprops = 'height=' + h + ',width=' + w + ',top=' + wint + ',left=' + winl
- + ',scrollbars=' + scroll + ',resizable';
- win = window.open(mypage, myname, winprops);
- win.window.focus();
-};
+ form.elements[ 'checkall-toggle' ].checked = c;
+ };
+
+ /**
+ * USED IN: libraries/joomla/html/toolbar/button/help.php
+ *
+ * Pops up a new window in the middle of the screen
+ */
+ Joomla.popupWindow = function( mypage, myname, w, h, scroll ) {
+ var winl = ( screen.width - w ) / 2,
+ wint = ( screen.height - h ) / 2,
+ winprops = 'height=' + h +
+ ',width=' + w +
+ ',top=' + wint +
+ ',left=' + winl +
+ ',scrollbars=' + scroll +
+ ',resizable';
+
+ window.open( mypage, myname, winprops )
+ .window.focus();
+ };
+
+ /**
+ * USED IN: libraries/joomla/html/html/grid.php
+ * In other words, on any reorderable table
+ */
+ Joomla.tableOrdering = function( order, dir, task, form ) {
+ if ( typeof form === 'undefined' ) {
+ form = document.getElementById( 'adminForm' );
+ }
-/**
- * USED IN: libraries/joomla/html/html/grid.php
- */
-Joomla.tableOrdering = function(order, dir, task, form) {
- if (typeof(form) === 'undefined') {
- form = document.getElementById('adminForm');
- }
+ form.filter_order.value = order;
+ form.filter_order_Dir.value = dir;
+ Joomla.submitform( task, form );
+ };
+
+ /**
+ * USED IN: administrator/components/com_modules/views/module/tmpl/default.php
+ *
+ * Writes a dynamically generated list
+ *
+ * @param string
+ * The parameters to insert into the