diff options
author | Marc Alexander <admin@m-a-styles.de> | 2015-05-30 12:40:46 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2015-05-30 12:40:46 +0200 |
commit | d6cd90d3258387493da813a1251252c57344c405 (patch) | |
tree | b76253c1ff8abbaad011cf9113db3bfe94fdf725 /phpBB/assets/javascript | |
parent | df4b391baadd3b9194062a4907ef4b55b265ffab (diff) | |
parent | da6f751cefedd0573611cf3e9123b4345759d779 (diff) | |
download | forums-d6cd90d3258387493da813a1251252c57344c405.tar forums-d6cd90d3258387493da813a1251252c57344c405.tar.gz forums-d6cd90d3258387493da813a1251252c57344c405.tar.bz2 forums-d6cd90d3258387493da813a1251252c57344c405.tar.xz forums-d6cd90d3258387493da813a1251252c57344c405.zip |
Merge pull request #3658 from callumacrae/js-refactoring-again
JS Refactoring
Diffstat (limited to 'phpBB/assets/javascript')
-rw-r--r-- | phpBB/assets/javascript/core.js | 212 | ||||
-rw-r--r-- | phpBB/assets/javascript/editor.js | 2 | ||||
-rw-r--r-- | phpBB/assets/javascript/plupload.js | 232 |
3 files changed, 192 insertions, 254 deletions
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 9182d70473..88ef5733fe 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -1,3 +1,5 @@ +/* global bbfontstyle */ + var phpbb = {}; phpbb.alertTime = 100; @@ -21,7 +23,7 @@ phpbb.isTouch = (window && typeof window.ontouchstart !== 'undefined'); /** * Display a loading screen * - * @returns object Returns loadingIndicator. + * @returns {object} Returns loadingIndicator. */ phpbb.loadingIndicator = function() { if (!$loadingIndicator.is(':visible')) { @@ -54,7 +56,7 @@ phpbb.clearLoadingTimeout = function() { /** * Close popup alert after a specified delay * -* @param int Delay in ms until darkenwrapper's click event is triggered +* @param {int} delay Delay in ms until darkenwrapper's click event is triggered */ phpbb.closeDarkenWrapper = function(delay) { phpbbAlertTimer = setTimeout(function() { @@ -67,14 +69,12 @@ phpbb.closeDarkenWrapper = function(delay) { * * You can only call one alert or confirm box at any one time. * - * @param string title Title of the message, eg "Information" (HTML). - * @param string msg Message to display (HTML). - * @param bool fadedark Remove the dark background when done? Defaults - * to yes. + * @param {string} title Title of the message, eg "Information" (HTML). + * @param {string} msg Message to display (HTML). * - * @returns object Returns the div created. + * @returns {object} Returns the div created. */ -phpbb.alert = function(title, msg, fadedark) { +phpbb.alert = function(title, msg) { var $alert = $('#phpbb_alert'); $alert.find('.alert_title').html(title); $alert.find('.alert_text').html(msg); @@ -94,7 +94,7 @@ phpbb.alert = function(title, msg, fadedark) { /** * Handler for opening an alert box. * -* @param jQuery $alert jQuery object. +* @param {jQuery} $alert jQuery object. */ phpbb.alert.open = function($alert) { if (!$dark.is(':visible')) { @@ -134,8 +134,8 @@ phpbb.alert.open = function($alert) { /** * Handler for closing an alert box. * -* @param jQuery $alert jQuery object. -* @param bool fadedark Whether to remove dark background. +* @param {jQuery} $alert jQuery object. +* @param {bool} fadedark Whether to remove dark background. */ phpbb.alert.close = function($alert, fadedark) { var $fade = (fadedark) ? $dark : $alert; @@ -153,13 +153,13 @@ phpbb.alert.close = function($alert, fadedark) { * * You can only call one alert or confirm box at any one time. * - * @param string msg Message to display (HTML). - * @param function callback Callback. Bool param, whether the user pressed + * @param {string} msg Message to display (HTML). + * @param {function} callback Callback. Bool param, whether the user pressed * yes or no (or whatever their language is). - * @param bool fadedark Remove the dark background when done? Defaults + * @param {bool} fadedark Remove the dark background when done? Defaults * to yes. * - * @returns object Returns the div created. + * @returns {object} Returns the div created. */ phpbb.confirm = function(msg, callback, fadedark) { var $confirmDiv = $('#phpbb_confirm'); @@ -197,8 +197,8 @@ phpbb.confirm = function(msg, callback, fadedark) { /** * Turn a querystring into an array. * - * @argument string string The querystring to parse. - * @returns object The object created. + * @argument {string} string The querystring to parse. + * @returns {object} The object created. */ phpbb.parseQuerystring = function(string) { var params = {}, i, split; @@ -223,12 +223,7 @@ phpbb.parseQuerystring = function(string) { * For more info, view the following page on the phpBB wiki: * http://wiki.phpbb.com/JavaScript_Function.phpbb.ajaxify * - * @param object options Options. - * @param bool/function refresh If we are sent back a refresh, should it be - * acted upon? This can either be true / false / a function. - * @param function callback Callback to call on completion of event. Has - * three parameters: the element that the event was evoked from, the JSON - * that was returned and (if it is a form) the form action. + * @param {object} options Options. */ phpbb.ajaxify = function(options) { var $elements = $(options.selector), @@ -290,7 +285,7 @@ phpbb.ajaxify = function(options) { * It cannot be called from outside this function, and is purely here to * avoid repetition of code. * - * @param object res The object sent back by the server. + * @param {object} res The object sent back by the server. */ function returnHandler(res) { var alert; @@ -436,8 +431,8 @@ phpbb.search = { /** * Get cached search data. * - * @param string id Search ID. - * @return bool|object. Cached data object. Returns false if no data exists. + * @param {string} id Search ID. + * @returns {bool|object} Cached data object. Returns false if no data exists. */ phpbb.search.cache.get = function(id) { if (this.data[id]) { @@ -449,11 +444,9 @@ phpbb.search.cache.get = function(id) { /** * Set search cache data value. * - * @param string id Search ID. - * @param string key Data key. - * @param string value Data value. - * - * @return undefined + * @param {string} id Search ID. + * @param {string} key Data key. + * @param {string} value Data value. */ phpbb.search.cache.set = function(id, key, value) { if (!this.data[id]) { @@ -465,21 +458,19 @@ phpbb.search.cache.set = function(id, key, value) { /** * Cache search result. * - * @param string id Search ID. - * @param string keyword Keyword. - * @param array results Search results. - * - * @return undefined + * @param {string} id Search ID. + * @param {string} keyword Keyword. + * @param {Array} results Search results. */ -phpbb.search.cache.setResults = function(id, keyword, value) { - this.data[id].results[keyword] = value; +phpbb.search.cache.setResults = function(id, keyword, results) { + this.data[id].results[keyword] = results; }; /** * Trim spaces from keyword and lower its case. * - * @param string keyword Search keyword to clean. - * @return string Cleaned string. + * @param {string} keyword Search keyword to clean. + * @returns {string} Cleaned string. */ phpbb.search.cleanKeyword = function(keyword) { return $.trim(keyword).toLowerCase(); @@ -489,11 +480,11 @@ phpbb.search.cleanKeyword = function(keyword) { * Get clean version of search keyword. If textarea supports several keywords * (one per line), it fetches the current keyword based on the caret position. * - * @param jQuery $input Search input|textarea. - * @param string keyword Input|textarea value. - * @param bool multiline Whether textarea supports multiple search keywords. + * @param {jQuery} $input Search input|textarea. + * @param {string} keyword Input|textarea value. + * @param {bool} multiline Whether textarea supports multiple search keywords. * - * @return string Clean string. + * @returns string Clean string. */ phpbb.search.getKeyword = function($input, keyword, multiline) { if (multiline) { @@ -507,8 +498,8 @@ phpbb.search.getKeyword = function($input, keyword, multiline) { * Get the textarea line number on which the keyword resides - for textareas * that support multiple keywords (one per line). * - * @param jQuery $textarea Search textarea. - * @return int + * @param {jQuery} $textarea Search textarea. + * @returns {int} The line number. */ phpbb.search.getKeywordLine = function ($textarea) { var selectionStart = $textarea.get(0).selectionStart; @@ -519,11 +510,9 @@ phpbb.search.getKeywordLine = function ($textarea) { * Set the value on the input|textarea. If textarea supports multiple * keywords, only the active keyword is replaced. * - * @param jQuery $input Search input|textarea. - * @param string value Value to set. - * @param bool multiline Whether textarea supports multiple search keywords. - * - * @return undefined + * @param {jQuery} $input Search input|textarea. + * @param {string} value Value to set. + * @param {bool} multiline Whether textarea supports multiple search keywords. */ phpbb.search.setValue = function($input, value, multiline) { if (multiline) { @@ -538,12 +527,10 @@ phpbb.search.setValue = function($input, value, multiline) { /** * Sets the onclick event to set the value on the input|textarea to the selected search result. * - * @param jQuery $input Search input|textarea. - * @param object value Result object. - * @param jQuery $row Result element. - * @param jQuery $container jQuery object for the search container. - * - * @return undefined + * @param {jQuery} $input Search input|textarea. + * @param {object} value Result object. + * @param {jQuery} $row Result element. + * @param {jQuery} $container jQuery object for the search container. */ phpbb.search.setValueOnClick = function($input, value, $row, $container) { $row.click(function() { @@ -558,11 +545,11 @@ phpbb.search.setValueOnClick = function($input, value, $row, $container) { * already, those are displayed instead. Executes the AJAX request function * itself due to the need to use a timeout to limit the number of requests. * - * @param array data Data to be sent to the server. - * @param object event Onkeyup event object. - * @param function sendRequest Function to execute AJAX request. + * @param {Array} data Data to be sent to the server. + * @param {object} event Onkeyup event object. + * @param {function} sendRequest Function to execute AJAX request. * - * @return bool Returns false. + * @returns {bool} Returns false. */ phpbb.search.filter = function(data, event, sendRequest) { var $this = $(this), @@ -616,12 +603,10 @@ phpbb.search.filter = function(data, event, sendRequest) { /** * Handle search result response. * - * @param object res Data received from server. - * @param jQuery $input Search input|textarea. - * @param bool fromCache Whether the results are from the cache. - * @param function callback Optional callback to run when assigning each search result. - * - * @return undefined + * @param {object} res Data received from server. + * @param {jQuery} $input Search input|textarea. + * @param {bool} fromCache Whether the results are from the cache. + * @param {function} callback Optional callback to run when assigning each search result. */ phpbb.search.handleResponse = function(res, $input, fromCache, callback) { if (typeof res !== 'object') { @@ -648,12 +633,10 @@ phpbb.search.handleResponse = function(res, $input, fromCache, callback) { /** * Show search results. * - * @param array results Search results. - * @param jQuery $input Search input|textarea. - * @param jQuery $container Search results container element. - * @param function callback Optional callback to run when assigning each search result. - * - * @return undefined + * @param {Array} results Search results. + * @param {jQuery} $input Search input|textarea. + * @param {jQuery} $container Search results container element. + * @param {function} callback Optional callback to run when assigning each search result. */ phpbb.search.showResults = function(results, $input, $container, callback) { var $resultContainer = $('.search-results', $container); @@ -690,8 +673,7 @@ phpbb.search.showResults = function(results, $input, $container, callback) { /** * Clear search results. * - * @param jQuery $container Search results container. - * @return undefined + * @param {jQuery} $container Search results container. */ phpbb.search.clearResults = function($container) { $container.children(':not(.search-result-tpl)').remove(); @@ -710,8 +692,8 @@ phpbb.history = {}; /** * Check whether a method in the native history object is supported. * -* @param string fn Method name. -* @return bool Returns true if the method is supported. +* @param {string} fn Method name. +* @returns {bool} Returns true if the method is supported. */ phpbb.history.isSupported = function(fn) { return !(typeof history === 'undefined' || typeof history[fn] === 'undefined'); @@ -721,12 +703,10 @@ phpbb.history.isSupported = function(fn) { * Wrapper for the pushState and replaceState methods of the * native history object. * -* @param string mode Mode. Either push or replace. -* @param string url New URL. -* @param string title Optional page title. -* @patam object obj Optional state object. -* -* @return undefined +* @param {string} mode Mode. Either push or replace. +* @param {string} url New URL. +* @param {string} [title] Optional page title. +* @param {object} [obj] Optional state object. */ phpbb.history.alterUrl = function(mode, url, title, obj) { var fn = mode + 'State'; @@ -747,11 +727,9 @@ phpbb.history.alterUrl = function(mode, url, title, obj) { /** * Wrapper for the native history.replaceState method. * -* @param string url New URL. -* @param string title Optional page title. -* @patam object obj Optional state object. -* -* @return undefined +* @param {string} url New URL. +* @param {string} [title] Optional page title. +* @param {object} [obj] Optional state object. */ phpbb.history.replaceUrl = function(url, title, obj) { phpbb.history.alterUrl('replace', url, title, obj); @@ -760,11 +738,9 @@ phpbb.history.replaceUrl = function(url, title, obj) { /** * Wrapper for the native history.pushState method. * -* @param string url New URL. -* @param string title Optional page title. -* @patam object obj Optional state object. -* -* @return undefined +* @param {string} url New URL. +* @param {string} [title] Optional page title. +* @param {object} [obj] Optional state object. */ phpbb.history.pushUrl = function(url, title, obj) { phpbb.history.alterUrl('push', url, title, obj); @@ -773,7 +749,8 @@ phpbb.history.pushUrl = function(url, title, obj) { /** * Hide the optgroups that are not the selected timezone * -* @param bool keepSelection Shall we keep the value selected, or shall the user be forced to repick one. +* @param {bool} keepSelection Shall we keep the value selected, or shall the +* user be forced to repick one. */ phpbb.timezoneSwitchDate = function(keepSelection) { var $timezoneCopy = $('#timezone_copy'); @@ -796,7 +773,7 @@ phpbb.timezoneSwitchDate = function(keepSelection) { } if ($tzDate.val() !== '') { - $timezone.children('optgroup').remove(':not([data-tz-value="' + $('#tz_date').val() + '"])'); + $timezone.children('optgroup').remove(':not([data-tz-value="' + $tzDate.val() + '"])'); } if ($tzDate.val() === $tzSelectDateSuggest.attr('data-suggested-tz')) { @@ -831,7 +808,7 @@ phpbb.timezoneEnableDateSelection = function() { /** * Preselect a date/time or suggest one, if it is not picked. * -* @param bool forceSelector Shall we select the suggestion? +* @param {bool} forceSelector Shall we select the suggestion? */ phpbb.timezonePreselectSelect = function(forceSelector) { @@ -900,8 +877,8 @@ phpbb.ajaxCallbacks = {}; * * See the phpbb.ajaxify comments for information on stuff like parameters. * - * @param string id The name of the callback. - * @param function callback The callback to be called. + * @param {string} id The name of the callback. + * @param {function} callback The callback to be called. */ phpbb.addAjaxCallback = function(id, callback) { if (typeof callback === 'function') { @@ -992,7 +969,7 @@ phpbb.addAjaxCallback('toggle_link', function() { * types text. * * @param {jQuery} $items jQuery object(s) to resize -* @param {object} options Optional parameter that adjusts default +* @param {object} [options] Optional parameter that adjusts default * configuration. See configuration variable * * Optional parameters: @@ -1036,7 +1013,7 @@ phpbb.resizeTextArea = function($items, options) { function autoResize(item) { function setHeight(height) { - height += parseInt($item.css('height')) - $item.height(); + height += parseInt($item.css('height'), 10) - $item.height(); $item.css({height: height + 'px', resize: 'none'}).addClass('auto-resized'); configuration.resizeCallback.call(item, $item); } @@ -1053,7 +1030,7 @@ phpbb.resizeTextArea = function($items, options) { configuration.maxHeight ), $item = $(item), - height = parseInt($item.height()), + height = parseInt($item.height(), 10), scrollHeight = (item.scrollHeight) ? item.scrollHeight : 0; if (height < 0) { @@ -1092,7 +1069,7 @@ phpbb.resizeTextArea = function($items, options) { * @param {Array} endTags List of end tags to look for * For example, Array('[/code]') * -* @return {boolean} True if cursor is in bbcode tag +* @returns {boolean} True if cursor is in bbcode tag */ phpbb.inBBCodeTag = function(textarea, startTags, endTags) { var start = textarea.selectionStart, @@ -1164,7 +1141,7 @@ phpbb.applyCodeEditor = function(textarea) { * @param {boolean} stripCodeStart If true, only part of line * after [code] tag will be returned. * - * @return {string} Line of text + * @returns {string} Line of text */ function getLastLine(stripCodeStart) { var start = textarea.selectionStart, @@ -1197,7 +1174,7 @@ phpbb.applyCodeEditor = function(textarea) { /** * Append text at cursor position * - * @param {string} Text Text to append + * @param {string} text Text to append */ function appendText(text) { var start = textarea.selectionStart, @@ -1245,10 +1222,10 @@ phpbb.applyCodeEditor = function(textarea) { * This function will enable the drag and drop animation for a specified * textarea. * - * @param {object} textarea Textarea DOM object to apply editor to + * @param {HTMLElement} textarea Textarea DOM object to apply editor to */ phpbb.showDragNDrop = function(textarea) { - if (textarea == null) { + if (!textarea) { return; } @@ -1423,9 +1400,9 @@ phpbb.registerDropdown = function(toggle, dropdown, options) { /** * Get the HTML for a color palette table. * -* @param string dir Palette direction - either v or h -* @param int width Palette cell width. -* @param int height Palette cell height. +* @param {string} dir Palette direction - either v or h +* @param {int} width Palette cell width. +* @param {int} height Palette cell height. */ phpbb.colorPalette = function(dir, width, height) { var r = 0, @@ -1477,7 +1454,7 @@ phpbb.colorPalette = function(dir, width, height) { /** * Register a color palette. * -* @param object el jQuery object for the palette container. +* @param {jQuery} el jQuery object for the palette container. */ phpbb.registerPalette = function(el) { var orientation = el.attr('data-orientation'), @@ -1506,15 +1483,15 @@ phpbb.registerPalette = function(el) { } e.preventDefault(); }); -} +}; /** * Set display of page element * -* @param string id The ID of the element to change -* @param int action Set to 0 if element display should be toggled, -1 for +* @param {string} id The ID of the element to change +* @param {int} action Set to 0 if element display should be toggled, -1 for * hiding the element, and 1 for showing it. -* @param string type Display type that should be used, e.g. inline, block or +* @param {string} type Display type that should be used, e.g. inline, block or * other CSS "display" types */ phpbb.toggleDisplay = function(id, action, type) { @@ -1535,8 +1512,7 @@ phpbb.toggleDisplay = function(id, action, type) { * Toggle additional settings based on the selected * option of select element. * -* @param jQuery el jQuery select element object. -* @return undefined +* @param {jQuery} el jQuery select element object. */ phpbb.toggleSelectSettings = function(el) { el.children().each(function() { @@ -1550,8 +1526,8 @@ phpbb.toggleSelectSettings = function(el) { * Get function from name. * Based on http://stackoverflow.com/a/359910 * -* @param string functionName Function to get. -* @return function +* @param {string} functionName Function to get. +* @returns function */ phpbb.getFunctionByName = function (functionName) { var namespaces = functionName.split('.'), diff --git a/phpBB/assets/javascript/editor.js b/phpBB/assets/javascript/editor.js index c58e4d19dd..298526ab1f 100644 --- a/phpBB/assets/javascript/editor.js +++ b/phpBB/assets/javascript/editor.js @@ -159,7 +159,7 @@ function insert_text(text, spaces, popup) { /** * Add inline attachment at position */ -function attach_inline(index, filename) { +function attachInline(index, filename) { insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); document.forms[form_name].elements[text_name].focus(); } diff --git a/phpBB/assets/javascript/plupload.js b/phpBB/assets/javascript/plupload.js index e0d2e05a84..3845de6c56 100644 --- a/phpBB/assets/javascript/plupload.js +++ b/phpBB/assets/javascript/plupload.js @@ -1,14 +1,14 @@ +/* global phpbb, plupload, attachInline */ + plupload.addI18n(phpbb.plupload.i18n); phpbb.plupload.ids = []; (function($) { // Avoid conflicts with other libraries -"use strict"; +'use strict'; /** * Set up the uploader. - * - * @return undefined */ phpbb.plupload.initialize = function() { // Initialize the Plupload uploader. @@ -20,7 +20,7 @@ phpbb.plupload.initialize = function() { // Only execute if Plupload initialized successfully. phpbb.plupload.uploader.bind('Init', function() { - phpbb.plupload.form = $(phpbb.plupload.config.form_hook)[0], + phpbb.plupload.form = $(phpbb.plupload.config.form_hook)[0]; phpbb.plupload.rowTpl = $('#attach-row-tpl')[0].outerHTML; // Hide the basic upload panel and remove the attach row template. @@ -48,8 +48,6 @@ phpbb.plupload.initialize = function() { /** * Unsets all elements in the object uploader.settings.multipart_params whose keys * begin with 'attachment_data[' - * - * @return undefined */ phpbb.plupload.clearParams = function() { var obj = phpbb.plupload.uploader.settings.multipart_params; @@ -65,20 +63,17 @@ phpbb.plupload.clearParams = function() { /** * Update uploader.settings.multipart_params object with new data. * - * @param object obj - * @return undefined + * @param {object} obj */ phpbb.plupload.updateMultipartParams = function(obj) { - phpbb.plupload.uploader.settings.multipart_params = $.extend( - phpbb.plupload.uploader.settings.multipart_params, - obj - ); + var settings = phpbb.plupload.uploader.settings; + settings.multipart_params = $.extend(settings.multipart_params, obj); }; /** * Convert the array of attachment objects into an object that PHP would expect as POST data. * - * @return object An object in the form 'attachment_data[i][key]': value as + * @returns {object} An object in the form 'attachment_data[i][key]': value as * expected by the server */ phpbb.plupload.getSerializedData = function() { @@ -100,22 +95,19 @@ phpbb.plupload.getSerializedData = function() { * Get the index from the phpbb.plupload.data array where the given * attachment id appears. * - * @param int attach_id The attachment id of the file. - * @return bool Returns false if the id cannot be found. - * @return int Returns the index of the file if it exists. + * @param {int} attachId The attachment id of the file. + * @returns {bool|int} Index of the file if exists, otherwise false. */ -phpbb.plupload.getIndex = function(attach_id) { - var index = $.inArray(Number(attach_id), phpbb.plupload.ids); +phpbb.plupload.getIndex = function(attachId) { + var index = $.inArray(Number(attachId), phpbb.plupload.ids); return (index !== -1) ? index : false; }; /** * Set the data in phpbb.plupload.data and phpbb.plupload.ids arrays. * - * @param array data Array containing the new data to use. In the form of + * @param {Array} data Array containing the new data to use. In the form of * array(index => object(property: value). Requires attach_id to be one of the object properties. - * - * @return undefined */ phpbb.plupload.setData = function(data) { // Make sure that the array keys are reset. @@ -130,11 +122,10 @@ phpbb.plupload.setData = function(data) { /** * Update the attachment data in the HTML and the phpbb & phpbb.plupload objects. * - * @param array data Array containing the new data to use. - * @param string action The action that required the update. Used to update the inline attachment bbcodes. - * @param int index The index from phpbb.plupload_ids that was affected by the action. - * @param array downloadUrl Optional array of download urls to update. - * @return undefined + * @param {Array} data Array containing the new data to use. + * @param {string} action The action that required the update. Used to update the inline attachment bbcodes. + * @param {int} index The index from phpbb.plupload_ids that was affected by the action. + * @param {Array} downloadUrl Optional array of download urls to update. */ phpbb.plupload.update = function(data, action, index, downloadUrl) { @@ -148,8 +139,7 @@ phpbb.plupload.update = function(data, action, index, downloadUrl) { /** * Update the relevant elements and hidden data for all attachments. * - * @param array downloadUrl Optional array of download urls to update. - * @return undefined + * @param {Array} downloadUrl Optional array of download urls to update. */ phpbb.plupload.updateRows = function(downloadUrl) { for (var i = 0; i < phpbb.plupload.ids.length; i++) { @@ -163,8 +153,7 @@ phpbb.plupload.updateRows = function(downloadUrl) { * data for the file inserted into it. The row is then appended or prepended to * #file-list based on the attach_order setting. * - * @param object file Plupload file object for the new attachment. - * @return undefined + * @param {object} file Plupload file object for the new attachment. */ phpbb.plupload.insertRow = function(file) { var row = $(phpbb.plupload.rowTpl); @@ -183,9 +172,8 @@ phpbb.plupload.insertRow = function(file) { /** * Update the relevant elements and hidden data for an attachment. * - * @param int index The index from phpbb.plupload.ids of the attachment to edit. - * @param array downloadUrl Optional array of download urls to update. - * @return undefined + * @param {int} index The index from phpbb.plupload.ids of the attachment to edit. + * @param {Array} downloadUrl Optional array of download urls to update. */ phpbb.plupload.updateRow = function(index, downloadUrl) { var attach = phpbb.plupload.data[index], @@ -197,7 +185,7 @@ phpbb.plupload.updateRow = function(index, downloadUrl) { link = $('<a></a>'); link.attr('href', url).html(attach.real_filename); - row.find('.file-name').html(link) + row.find('.file-name').html(link); } row.find('textarea').attr('name', 'comment_list[' + index + ']'); @@ -207,15 +195,18 @@ phpbb.plupload.updateRow = function(index, downloadUrl) { /** * Update hidden input data for an attachment. * - * @param object row jQuery object for the attachment row. - * @param object attach Attachment data object from phpbb.plupload.data - * @param int index Attachment index from phpbb.plupload.ids - * @return undefined + * @param {object} row jQuery object for the attachment row. + * @param {object} attach Attachment data object from phpbb.plupload.data + * @param {int} index Attachment index from phpbb.plupload.ids */ phpbb.plupload.updateHiddenData = function(row, attach, index) { row.find('input[type="hidden"]').remove(); for (var key in attach) { + if (!attach.hasOwnProperty(key)) { + return; + } + var input = $('<input />') .attr('type', 'hidden') .attr('name', 'attachment_data[' + index + '][' + key +']') @@ -230,10 +221,8 @@ phpbb.plupload.updateHiddenData = function(row, attach, index) { * responds with the updated attachment data list so that any future * uploads can maintain state with the server * - * @param object row jQuery object for the attachment row. - * @param int attachId Attachment id of the file to be removed. - * - * @return undefined + * @param {object} row jQuery object for the attachment row. + * @param {int} attachId Attachment id of the file to be removed. */ phpbb.plupload.deleteFile = function(row, attachId) { // If there's no attach id, then the file hasn't been uploaded. Simply delete the row. @@ -300,14 +289,12 @@ phpbb.plupload.deleteFile = function(row, attachId) { /** * Check the attachment list and hide its container if it's empty. - * - * @return undefined */ phpbb.plupload.hideEmptyList = function() { if (!$('#file-list').children().length) { $('#file-list-container').slideUp(100); } -} +}; /** * Update the indices used in inline attachment bbcodes. This ensures that the bbcodes @@ -315,10 +302,8 @@ phpbb.plupload.hideEmptyList = function() { * before the phpbb.plupload,data and phpbb.plupload.ids arrays are updated, otherwise it will * not work correctly. * - * @param string action The action that occurred -- either "addition" or "removal" - * @param int index The index of the attachment from phpbb.plupload.ids that was affected. - * - * @return undefined + * @param {string} action The action that occurred -- either "addition" or "removal" + * @param {int} index The index of the attachment from phpbb.plupload.ids that was affected. */ phpbb.plupload.updateBbcode = function(action, index) { var textarea = $('#message', phpbb.plupload.form), @@ -330,46 +315,41 @@ phpbb.plupload.updateBbcode = function(action, index) { return; } - // Private function used to replace the bbcode. - var updateBbcode = function(match, fileName) { - // Remove the bbcode if the file was removed. - if (removal && index === i) { - return ''; - } - var newIndex = i + ((removal) ? -1 : 1); - return '[attachment=' + newIndex +']' + fileName + '[/attachment]'; - }; - - // Private function used to generate search regexp - var searchRegexp = function(index) { - return new RegExp('\\[attachment=' + index + '\\](.*?)\\[\\/attachment\\]', 'g'); + function runUpdate(i) { + var regex = new RegExp('\\[attachment=' + i + '\\](.*?)\\[\\/attachment\\]', 'g'); + text = text.replace(regex, function updateBbcode(_, fileName) { + // Remove the bbcode if the file was removed. + if (removal && index === i) { + return ''; + } + var newIndex = i + ((removal) ? -1 : 1); + return '[attachment=' + newIndex +']' + fileName + '[/attachment]'; + }); } - // The update order of the indices is based on the action taken to ensure that we don't corrupt - // the bbcode index by updating it several times as we move through the loop. - // Removal loop starts at the removed index and moves to the end of the array. - // Addition loop starts at the end of the array and moves to the added index at 0. - var searchLoop = function() { - if (typeof i === 'undefined') { - i = (removal) ? index : phpbb.plupload.ids.length - 1; + + // Loop forwards when removing and backwards when adding ensures we don't + // corrupt the bbcode index. + var i; + if (removal) { + for (i = index; i < phpbb.plupload.ids.length; i++) { + runUpdate(i); + } + } else { + for (i = phpbb.plupload.ids.length - 1; i >= index; i--) { + runUpdate(i); } - return (removal) ? (i < phpbb.plupload.ids.length): (i >= index); } - var i; - while (searchLoop()) { - text = text.replace(searchRegexp(i), updateBbcode); - (removal) ? i++ : i--; - } textarea.val(text); }; /** * Get Plupload file objects based on their upload status. * - * @param int status Plupload status - plupload.DONE, plupload.FAILED, plupload.QUEUED, - * plupload.STARTED, plupload.STOPPED + * @param {int} status Plupload status - plupload.DONE, plupload.FAILED, + * plupload.QUEUED, plupload.STARTED, plupload.STOPPED * - * @return Returns an array of the Plupload file objects matching the status. + * @returns {Array} The Plupload file objects matching the status. */ phpbb.plupload.getFilesByStatus = function(status) { var files = []; @@ -380,14 +360,14 @@ phpbb.plupload.getFilesByStatus = function(status) { } }); return files; -} +}; /** * Check whether the user has reached the maximun number of files that he's allowed * to upload. If so, disables the uploader and marks the queued files as failed. Otherwise * makes sure that the uploader is enabled. * - * @return bool Returns true if the limit has been reached. False if otherwise. + * @returns {bool} True if the limit has been reached. False if otherwise. */ phpbb.plupload.handleMaxFilesReached = function() { // If there is no limit, the user is an admin or moderator. @@ -408,33 +388,28 @@ phpbb.plupload.handleMaxFilesReached = function() { phpbb.plupload.enableUploader(); } return false; -} +}; /** * Disable the uploader - * - * @return undefined */ phpbb.plupload.disableUploader = function() { $('#add_files').addClass('disabled'); phpbb.plupload.uploader.disableBrowse(); -} +}; /** * Enable the uploader - * - * @return undefined */ phpbb.plupload.enableUploader = function() { $('#add_files').removeClass('disabled'); phpbb.plupload.uploader.disableBrowse(false); -} +}; /** * Mark all queued files as failed. * - * @param string error Error message to present to the user. - * @return undefined + * @param {string} error Error message to present to the user. */ phpbb.plupload.markQueuedFailed = function(error) { var files = phpbb.plupload.getFilesByStatus(plupload.QUEUED); @@ -443,22 +418,24 @@ phpbb.plupload.markQueuedFailed = function(error) { $('#' + file.id).find('.file-progress').hide(); phpbb.plupload.fileError(file, error); }); -} +}; /** * Marks a file as failed and sets the error message for it. * - * @param object file Plupload file object that failed. - * @param string error Error message to present to the user. - * @return undefined + * @param {object} file Plupload file object that failed. + * @param {string} error Error message to present to the user. */ phpbb.plupload.fileError = function(file, error) { file.status = plupload.FAILED; file.error = error; - $('#' + file.id).find('.file-status').addClass('file-error').attr({'data-error-title': phpbb.plupload.lang.ERROR, 'data-error-message': error}); -} - - + $('#' + file.id).find('.file-status') + .addClass('file-error') + .attr({ + 'data-error-title': phpbb.plupload.lang.ERROR, + 'data-error-message': error + }); +}; /** @@ -467,24 +444,23 @@ phpbb.plupload.fileError = function(file, error) { phpbb.plupload.uploader = new plupload.Uploader(phpbb.plupload.config); phpbb.plupload.initialize(); - - +var $fileList = $('#file-list'); /** * Insert inline attachment bbcode. */ - $('#file-list').on('click', '.file-inline-bbcode', function(e) { +$fileList.on('click', '.file-inline-bbcode', function(e) { var attachId = $(this).parents('.attach-row').attr('data-attach-id'), index = phpbb.plupload.getIndex(attachId); - attach_inline(index, phpbb.plupload.data[index].real_filename); + attachInline(index, phpbb.plupload.data[index].real_filename); e.preventDefault(); }); /** * Delete a file. */ -$('#file-list').on('click', '.file-delete', function(e) { +$fileList.on('click', '.file-delete', function(e) { var row = $(this).parents('.attach-row'), attachId = row.attr('data-attach-id'); @@ -495,7 +471,7 @@ $('#file-list').on('click', '.file-delete', function(e) { /** * Display the error message for a particular file when the error icon is clicked. */ -$('#file-list').on('click', '.file-error', function(e) { +$fileList.on('click', '.file-error', function(e) { phpbb.alert($(this).attr('data-error-title'), $(this).attr('data-error-message')); e.preventDefault(); }); @@ -520,11 +496,8 @@ phpbb.plupload.uploader.bind('Error', function(up, error) { * send the real filename along with the chunk. This is necessary because * for some reason the filename is set to 'blob' whenever a file is chunked * - * @param object up The plupload.Uploader object - * @param object file The plupload.File object that is about to be - * uploaded - * - * @return undefined + * @param {object} up The plupload.Uploader object + * @param {object} file The plupload.File object that is about to be uploaded */ phpbb.plupload.uploader.bind('BeforeUpload', function(up, file) { if (phpbb.plupload.handleMaxFilesReached()) { @@ -539,12 +512,10 @@ phpbb.plupload.uploader.bind('BeforeUpload', function(up, file) { * response from the server and checks for an error. If an error occurs it * is reported to the user and the upload of this particular file is halted * - * @param object up The plupload.Uploader object - * @param object file The plupload.File object whose chunk has just + * @param {object} up The plupload.Uploader object + * @param {object} file The plupload.File object whose chunk has just * been uploaded - * @param object response The response object from the server - * - * @return undefined + * @param {object} response The response object from the server */ phpbb.plupload.uploader.bind('ChunkUploaded', function(up, file, response) { if (response.chunk >= response.chunks - 1) { @@ -584,8 +555,6 @@ phpbb.plupload.uploader.bind('ChunkUploaded', function(up, file, response) { /** * Fires when files are added to the queue. - * - * @return undefined */ phpbb.plupload.uploader.bind('FilesAdded', function(up, files) { // Prevent unnecessary requests to the server if the user already uploaded @@ -595,13 +564,14 @@ phpbb.plupload.uploader.bind('FilesAdded', function(up, files) { } // Switch the active tab if the style supports it - if (typeof activateSubPanel == 'function') { - activateSubPanel('attach-panel'); + if (typeof activateSubPanel === 'function') { + activateSubPanel('attach-panel'); // jshint ignore: line } // Show the file list if there aren't any files currently. - if (!$('#file-list-container').is(':visible')) { - $('#file-list-container').show(100); + var $fileListContainer = $('#file-list-container'); + if (!$fileListContainer.is(':visible')) { + $fileListContainer.show(100); } $.each(files, function(i, file) { @@ -609,7 +579,7 @@ phpbb.plupload.uploader.bind('FilesAdded', function(up, files) { }); up.bind('UploadProgress', function(up, file) { - $('#' + file.id + " .file-progress-bar").css('width', file.percent + '%'); + $('.file-progress-bar', '#' + file.id).css('width', file.percent + '%'); $('#file-total-progress-bar').css('width', up.total.percent + '%'); }); @@ -627,12 +597,10 @@ phpbb.plupload.uploader.bind('FilesAdded', function(up, files) { * appends it to the next file upload so that the server can maintain state * with regards to the attachments in a given post * - * @param object up The plupload.Uploader object - * @param object file The plupload.File object that has just been + * @param {object} up The plupload.Uploader object + * @param {object} file The plupload.File object that has just been * uploaded - * @param string response The response string from the server - * - * @return undefined + * @param {string} response The response string from the server */ phpbb.plupload.uploader.bind('FileUploaded', function(up, file, response) { var json = {}, @@ -643,7 +611,7 @@ phpbb.plupload.uploader.bind('FileUploaded', function(up, file, response) { row.find('.file-progress').hide(); try { - json = $.parseJSON(response.response); + json = JSON.parse(response.response); } catch (e) { error = 'Error parsing server response.'; } @@ -662,25 +630,19 @@ phpbb.plupload.uploader.bind('FileUploaded', function(up, file, response) { if (typeof error !== 'undefined') { phpbb.plupload.fileError(file, error); } else if (file.status === plupload.DONE) { - file.attachment_data = json['data'][0]; + file.attachment_data = json.data[0]; row.attr('data-attach-id', file.attachment_data.attach_id); row.find('.file-inline-bbcode').show(); row.find('.file-status').addClass('file-uploaded'); - phpbb.plupload.update(json['data'], 'addition', 0, [json['download_url']]); + phpbb.plupload.update(json.data, 'addition', 0, [json.download_url]); } }); /** * Fires when the entire queue of files have been uploaded. - * - * @param object up The plupload.Uploader object - * @param array files An array of plupload.File objects that have just - * been uploaded as part of a queue - * - * @return undefined */ -phpbb.plupload.uploader.bind('UploadComplete', function(up, files) { +phpbb.plupload.uploader.bind('UploadComplete', function() { // Hide the progress bar setTimeout(function() { $('#file-total-progress-bar').fadeOut(500, function() { |