Merge branch '3.1.x'

Conflicts:
	phpBB/styles/subsilver2/template/posting_body.html
This commit is contained in:
Marc Alexander 2015-05-30 12:41:24 +02:00
commit e9601813c1
4 changed files with 200 additions and 262 deletions

View file

@ -1,3 +1,5 @@
/* global bbfontstyle */
var phpbb = {}; var phpbb = {};
phpbb.alertTime = 100; phpbb.alertTime = 100;
@ -21,7 +23,7 @@ phpbb.isTouch = (window && typeof window.ontouchstart !== 'undefined');
/** /**
* Display a loading screen * Display a loading screen
* *
* @returns object Returns loadingIndicator. * @returns {object} Returns loadingIndicator.
*/ */
phpbb.loadingIndicator = function() { phpbb.loadingIndicator = function() {
if (!$loadingIndicator.is(':visible')) { if (!$loadingIndicator.is(':visible')) {
@ -54,7 +56,7 @@ phpbb.clearLoadingTimeout = function() {
/** /**
* Close popup alert after a specified delay * 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) { phpbb.closeDarkenWrapper = function(delay) {
phpbbAlertTimer = setTimeout(function() { phpbbAlertTimer = setTimeout(function() {
@ -67,14 +69,12 @@ phpbb.closeDarkenWrapper = function(delay) {
* *
* You can only call one alert or confirm box at any one time. * 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} title Title of the message, eg "Information" (HTML).
* @param string msg Message to display (HTML). * @param {string} msg Message to display (HTML).
* @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.alert = function(title, msg, fadedark) { phpbb.alert = function(title, msg) {
var $alert = $('#phpbb_alert'); var $alert = $('#phpbb_alert');
$alert.find('.alert_title').html(title); $alert.find('.alert_title').html(title);
$alert.find('.alert_text').html(msg); $alert.find('.alert_text').html(msg);
@ -94,7 +94,7 @@ phpbb.alert = function(title, msg, fadedark) {
/** /**
* Handler for opening an alert box. * Handler for opening an alert box.
* *
* @param jQuery $alert jQuery object. * @param {jQuery} $alert jQuery object.
*/ */
phpbb.alert.open = function($alert) { phpbb.alert.open = function($alert) {
if (!$dark.is(':visible')) { if (!$dark.is(':visible')) {
@ -134,8 +134,8 @@ phpbb.alert.open = function($alert) {
/** /**
* Handler for closing an alert box. * Handler for closing an alert box.
* *
* @param jQuery $alert jQuery object. * @param {jQuery} $alert jQuery object.
* @param bool fadedark Whether to remove dark background. * @param {bool} fadedark Whether to remove dark background.
*/ */
phpbb.alert.close = function($alert, fadedark) { phpbb.alert.close = function($alert, fadedark) {
var $fade = (fadedark) ? $dark : $alert; 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. * You can only call one alert or confirm box at any one time.
* *
* @param string msg Message to display (HTML). * @param {string} msg Message to display (HTML).
* @param function callback Callback. Bool param, whether the user pressed * @param {function} callback Callback. Bool param, whether the user pressed
* yes or no (or whatever their language is). * 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. * to yes.
* *
* @returns object Returns the div created. * @returns {object} Returns the div created.
*/ */
phpbb.confirm = function(msg, callback, fadedark) { phpbb.confirm = function(msg, callback, fadedark) {
var $confirmDiv = $('#phpbb_confirm'); var $confirmDiv = $('#phpbb_confirm');
@ -197,8 +197,8 @@ phpbb.confirm = function(msg, callback, fadedark) {
/** /**
* Turn a querystring into an array. * Turn a querystring into an array.
* *
* @argument string string The querystring to parse. * @argument {string} string The querystring to parse.
* @returns object The object created. * @returns {object} The object created.
*/ */
phpbb.parseQuerystring = function(string) { phpbb.parseQuerystring = function(string) {
var params = {}, i, split; var params = {}, i, split;
@ -223,12 +223,7 @@ phpbb.parseQuerystring = function(string) {
* For more info, view the following page on the phpBB wiki: * For more info, view the following page on the phpBB wiki:
* http://wiki.phpbb.com/JavaScript_Function.phpbb.ajaxify * http://wiki.phpbb.com/JavaScript_Function.phpbb.ajaxify
* *
* @param object options Options. * @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.
*/ */
phpbb.ajaxify = function(options) { phpbb.ajaxify = function(options) {
var $elements = $(options.selector), 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 * It cannot be called from outside this function, and is purely here to
* avoid repetition of code. * 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) { function returnHandler(res) {
var alert; var alert;
@ -436,8 +431,8 @@ phpbb.search = {
/** /**
* Get cached search data. * Get cached search data.
* *
* @param string id Search ID. * @param {string} id Search ID.
* @return bool|object. Cached data object. Returns false if no data exists. * @returns {bool|object} Cached data object. Returns false if no data exists.
*/ */
phpbb.search.cache.get = function(id) { phpbb.search.cache.get = function(id) {
if (this.data[id]) { if (this.data[id]) {
@ -449,11 +444,9 @@ phpbb.search.cache.get = function(id) {
/** /**
* Set search cache data value. * Set search cache data value.
* *
* @param string id Search ID. * @param {string} id Search ID.
* @param string key Data key. * @param {string} key Data key.
* @param string value Data value. * @param {string} value Data value.
*
* @return undefined
*/ */
phpbb.search.cache.set = function(id, key, value) { phpbb.search.cache.set = function(id, key, value) {
if (!this.data[id]) { if (!this.data[id]) {
@ -465,21 +458,19 @@ phpbb.search.cache.set = function(id, key, value) {
/** /**
* Cache search result. * Cache search result.
* *
* @param string id Search ID. * @param {string} id Search ID.
* @param string keyword Keyword. * @param {string} keyword Keyword.
* @param array results Search results. * @param {Array} results Search results.
*
* @return undefined
*/ */
phpbb.search.cache.setResults = function(id, keyword, value) { phpbb.search.cache.setResults = function(id, keyword, results) {
this.data[id].results[keyword] = value; this.data[id].results[keyword] = results;
}; };
/** /**
* Trim spaces from keyword and lower its case. * Trim spaces from keyword and lower its case.
* *
* @param string keyword Search keyword to clean. * @param {string} keyword Search keyword to clean.
* @return string Cleaned string. * @returns {string} Cleaned string.
*/ */
phpbb.search.cleanKeyword = function(keyword) { phpbb.search.cleanKeyword = function(keyword) {
return $.trim(keyword).toLowerCase(); return $.trim(keyword).toLowerCase();
@ -489,11 +480,11 @@ phpbb.search.cleanKeyword = function(keyword) {
* Get clean version of search keyword. If textarea supports several keywords * Get clean version of search keyword. If textarea supports several keywords
* (one per line), it fetches the current keyword based on the caret position. * (one per line), it fetches the current keyword based on the caret position.
* *
* @param jQuery $input Search input|textarea. * @param {jQuery} $input Search input|textarea.
* @param string keyword Input|textarea value. * @param {string} keyword Input|textarea value.
* @param bool multiline Whether textarea supports multiple search keywords. * @param {bool} multiline Whether textarea supports multiple search keywords.
* *
* @return string Clean string. * @returns string Clean string.
*/ */
phpbb.search.getKeyword = function($input, keyword, multiline) { phpbb.search.getKeyword = function($input, keyword, multiline) {
if (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 * Get the textarea line number on which the keyword resides - for textareas
* that support multiple keywords (one per line). * that support multiple keywords (one per line).
* *
* @param jQuery $textarea Search textarea. * @param {jQuery} $textarea Search textarea.
* @return int * @returns {int} The line number.
*/ */
phpbb.search.getKeywordLine = function ($textarea) { phpbb.search.getKeywordLine = function ($textarea) {
var selectionStart = $textarea.get(0).selectionStart; 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 * Set the value on the input|textarea. If textarea supports multiple
* keywords, only the active keyword is replaced. * keywords, only the active keyword is replaced.
* *
* @param jQuery $input Search input|textarea. * @param {jQuery} $input Search input|textarea.
* @param string value Value to set. * @param {string} value Value to set.
* @param bool multiline Whether textarea supports multiple search keywords. * @param {bool} multiline Whether textarea supports multiple search keywords.
*
* @return undefined
*/ */
phpbb.search.setValue = function($input, value, multiline) { phpbb.search.setValue = function($input, value, multiline) {
if (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. * Sets the onclick event to set the value on the input|textarea to the selected search result.
* *
* @param jQuery $input Search input|textarea. * @param {jQuery} $input Search input|textarea.
* @param object value Result object. * @param {object} value Result object.
* @param jQuery $row Result element. * @param {jQuery} $row Result element.
* @param jQuery $container jQuery object for the search container. * @param {jQuery} $container jQuery object for the search container.
*
* @return undefined
*/ */
phpbb.search.setValueOnClick = function($input, value, $row, $container) { phpbb.search.setValueOnClick = function($input, value, $row, $container) {
$row.click(function() { $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 * 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. * 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 {Array} data Data to be sent to the server.
* @param object event Onkeyup event object. * @param {object} event Onkeyup event object.
* @param function sendRequest Function to execute AJAX request. * @param {function} sendRequest Function to execute AJAX request.
* *
* @return bool Returns false. * @returns {bool} Returns false.
*/ */
phpbb.search.filter = function(data, event, sendRequest) { phpbb.search.filter = function(data, event, sendRequest) {
var $this = $(this), var $this = $(this),
@ -616,12 +603,10 @@ phpbb.search.filter = function(data, event, sendRequest) {
/** /**
* Handle search result response. * Handle search result response.
* *
* @param object res Data received from server. * @param {object} res Data received from server.
* @param jQuery $input Search input|textarea. * @param {jQuery} $input Search input|textarea.
* @param bool fromCache Whether the results are from the cache. * @param {bool} fromCache Whether the results are from the cache.
* @param function callback Optional callback to run when assigning each search result. * @param {function} callback Optional callback to run when assigning each search result.
*
* @return undefined
*/ */
phpbb.search.handleResponse = function(res, $input, fromCache, callback) { phpbb.search.handleResponse = function(res, $input, fromCache, callback) {
if (typeof res !== 'object') { if (typeof res !== 'object') {
@ -648,12 +633,10 @@ phpbb.search.handleResponse = function(res, $input, fromCache, callback) {
/** /**
* Show search results. * Show search results.
* *
* @param array results Search results. * @param {Array} results Search results.
* @param jQuery $input Search input|textarea. * @param {jQuery} $input Search input|textarea.
* @param jQuery $container Search results container element. * @param {jQuery} $container Search results container element.
* @param function callback Optional callback to run when assigning each search result. * @param {function} callback Optional callback to run when assigning each search result.
*
* @return undefined
*/ */
phpbb.search.showResults = function(results, $input, $container, callback) { phpbb.search.showResults = function(results, $input, $container, callback) {
var $resultContainer = $('.search-results', $container); var $resultContainer = $('.search-results', $container);
@ -690,8 +673,7 @@ phpbb.search.showResults = function(results, $input, $container, callback) {
/** /**
* Clear search results. * Clear search results.
* *
* @param jQuery $container Search results container. * @param {jQuery} $container Search results container.
* @return undefined
*/ */
phpbb.search.clearResults = function($container) { phpbb.search.clearResults = function($container) {
$container.children(':not(.search-result-tpl)').remove(); $container.children(':not(.search-result-tpl)').remove();
@ -710,8 +692,8 @@ phpbb.history = {};
/** /**
* Check whether a method in the native history object is supported. * Check whether a method in the native history object is supported.
* *
* @param string fn Method name. * @param {string} fn Method name.
* @return bool Returns true if the method is supported. * @returns {bool} Returns true if the method is supported.
*/ */
phpbb.history.isSupported = function(fn) { phpbb.history.isSupported = function(fn) {
return !(typeof history === 'undefined' || typeof history[fn] === 'undefined'); 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 * Wrapper for the pushState and replaceState methods of the
* native history object. * native history object.
* *
* @param string mode Mode. Either push or replace. * @param {string} mode Mode. Either push or replace.
* @param string url New URL. * @param {string} url New URL.
* @param string title Optional page title. * @param {string} [title] Optional page title.
* @patam object obj Optional state object. * @param {object} [obj] Optional state object.
*
* @return undefined
*/ */
phpbb.history.alterUrl = function(mode, url, title, obj) { phpbb.history.alterUrl = function(mode, url, title, obj) {
var fn = mode + 'State'; var fn = mode + 'State';
@ -747,11 +727,9 @@ phpbb.history.alterUrl = function(mode, url, title, obj) {
/** /**
* Wrapper for the native history.replaceState method. * Wrapper for the native history.replaceState method.
* *
* @param string url New URL. * @param {string} url New URL.
* @param string title Optional page title. * @param {string} [title] Optional page title.
* @patam object obj Optional state object. * @param {object} [obj] Optional state object.
*
* @return undefined
*/ */
phpbb.history.replaceUrl = function(url, title, obj) { phpbb.history.replaceUrl = function(url, title, obj) {
phpbb.history.alterUrl('replace', 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. * Wrapper for the native history.pushState method.
* *
* @param string url New URL. * @param {string} url New URL.
* @param string title Optional page title. * @param {string} [title] Optional page title.
* @patam object obj Optional state object. * @param {object} [obj] Optional state object.
*
* @return undefined
*/ */
phpbb.history.pushUrl = function(url, title, obj) { phpbb.history.pushUrl = function(url, title, obj) {
phpbb.history.alterUrl('push', 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 * 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) { phpbb.timezoneSwitchDate = function(keepSelection) {
var $timezoneCopy = $('#timezone_copy'); var $timezoneCopy = $('#timezone_copy');
@ -796,7 +773,7 @@ phpbb.timezoneSwitchDate = function(keepSelection) {
} }
if ($tzDate.val() !== '') { 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')) { 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. * 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) { phpbb.timezonePreselectSelect = function(forceSelector) {
@ -900,8 +877,8 @@ phpbb.ajaxCallbacks = {};
* *
* See the phpbb.ajaxify comments for information on stuff like parameters. * See the phpbb.ajaxify comments for information on stuff like parameters.
* *
* @param string id The name of the callback. * @param {string} id The name of the callback.
* @param function callback The callback to be called. * @param {function} callback The callback to be called.
*/ */
phpbb.addAjaxCallback = function(id, callback) { phpbb.addAjaxCallback = function(id, callback) {
if (typeof callback === 'function') { if (typeof callback === 'function') {
@ -992,7 +969,7 @@ phpbb.addAjaxCallback('toggle_link', function() {
* types text. * types text.
* *
* @param {jQuery} $items jQuery object(s) to resize * @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 * configuration. See configuration variable
* *
* Optional parameters: * Optional parameters:
@ -1036,7 +1013,7 @@ phpbb.resizeTextArea = function($items, options) {
function autoResize(item) { function autoResize(item) {
function setHeight(height) { 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'); $item.css({height: height + 'px', resize: 'none'}).addClass('auto-resized');
configuration.resizeCallback.call(item, $item); configuration.resizeCallback.call(item, $item);
} }
@ -1053,7 +1030,7 @@ phpbb.resizeTextArea = function($items, options) {
configuration.maxHeight configuration.maxHeight
), ),
$item = $(item), $item = $(item),
height = parseInt($item.height()), height = parseInt($item.height(), 10),
scrollHeight = (item.scrollHeight) ? item.scrollHeight : 0; scrollHeight = (item.scrollHeight) ? item.scrollHeight : 0;
if (height < 0) { if (height < 0) {
@ -1092,7 +1069,7 @@ phpbb.resizeTextArea = function($items, options) {
* @param {Array} endTags List of end tags to look for * @param {Array} endTags List of end tags to look for
* For example, Array('[/code]') * 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) { phpbb.inBBCodeTag = function(textarea, startTags, endTags) {
var start = textarea.selectionStart, var start = textarea.selectionStart,
@ -1164,7 +1141,7 @@ phpbb.applyCodeEditor = function(textarea) {
* @param {boolean} stripCodeStart If true, only part of line * @param {boolean} stripCodeStart If true, only part of line
* after [code] tag will be returned. * after [code] tag will be returned.
* *
* @return {string} Line of text * @returns {string} Line of text
*/ */
function getLastLine(stripCodeStart) { function getLastLine(stripCodeStart) {
var start = textarea.selectionStart, var start = textarea.selectionStart,
@ -1197,7 +1174,7 @@ phpbb.applyCodeEditor = function(textarea) {
/** /**
* Append text at cursor position * Append text at cursor position
* *
* @param {string} Text Text to append * @param {string} text Text to append
*/ */
function appendText(text) { function appendText(text) {
var start = textarea.selectionStart, var start = textarea.selectionStart,
@ -1245,10 +1222,10 @@ phpbb.applyCodeEditor = function(textarea) {
* This function will enable the drag and drop animation for a specified * This function will enable the drag and drop animation for a specified
* textarea. * 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) { phpbb.showDragNDrop = function(textarea) {
if (textarea == null) { if (!textarea) {
return; return;
} }
@ -1423,9 +1400,9 @@ phpbb.registerDropdown = function(toggle, dropdown, options) {
/** /**
* Get the HTML for a color palette table. * Get the HTML for a color palette table.
* *
* @param string dir Palette direction - either v or h * @param {string} dir Palette direction - either v or h
* @param int width Palette cell width. * @param {int} width Palette cell width.
* @param int height Palette cell height. * @param {int} height Palette cell height.
*/ */
phpbb.colorPalette = function(dir, width, height) { phpbb.colorPalette = function(dir, width, height) {
var r = 0, var r = 0,
@ -1477,7 +1454,7 @@ phpbb.colorPalette = function(dir, width, height) {
/** /**
* Register a color palette. * 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) { phpbb.registerPalette = function(el) {
var orientation = el.attr('data-orientation'), var orientation = el.attr('data-orientation'),
@ -1506,15 +1483,15 @@ phpbb.registerPalette = function(el) {
} }
e.preventDefault(); e.preventDefault();
}); });
} };
/** /**
* Set display of page element * Set display of page element
* *
* @param string id The ID of the element to change * @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 {int} action Set to 0 if element display should be toggled, -1 for
* hiding the element, and 1 for showing it. * 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 * other CSS "display" types
*/ */
phpbb.toggleDisplay = function(id, action, type) { phpbb.toggleDisplay = function(id, action, type) {
@ -1535,8 +1512,7 @@ phpbb.toggleDisplay = function(id, action, type) {
* Toggle additional settings based on the selected * Toggle additional settings based on the selected
* option of select element. * option of select element.
* *
* @param jQuery el jQuery select element object. * @param {jQuery} el jQuery select element object.
* @return undefined
*/ */
phpbb.toggleSelectSettings = function(el) { phpbb.toggleSelectSettings = function(el) {
el.children().each(function() { el.children().each(function() {
@ -1550,8 +1526,8 @@ phpbb.toggleSelectSettings = function(el) {
* Get function from name. * Get function from name.
* Based on http://stackoverflow.com/a/359910 * Based on http://stackoverflow.com/a/359910
* *
* @param string functionName Function to get. * @param {string} functionName Function to get.
* @return function * @returns function
*/ */
phpbb.getFunctionByName = function (functionName) { phpbb.getFunctionByName = function (functionName) {
var namespaces = functionName.split('.'), var namespaces = functionName.split('.'),

View file

@ -159,7 +159,7 @@ function insert_text(text, spaces, popup) {
/** /**
* Add inline attachment at position * Add inline attachment at position
*/ */
function attach_inline(index, filename) { function attachInline(index, filename) {
insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
document.forms[form_name].elements[text_name].focus(); document.forms[form_name].elements[text_name].focus();
} }

View file

@ -1,14 +1,14 @@
/* global phpbb, plupload, attachInline */
plupload.addI18n(phpbb.plupload.i18n); plupload.addI18n(phpbb.plupload.i18n);
phpbb.plupload.ids = []; phpbb.plupload.ids = [];
(function($) { // Avoid conflicts with other libraries (function($) { // Avoid conflicts with other libraries
"use strict"; 'use strict';
/** /**
* Set up the uploader. * Set up the uploader.
*
* @return undefined
*/ */
phpbb.plupload.initialize = function() { phpbb.plupload.initialize = function() {
// Initialize the Plupload uploader. // Initialize the Plupload uploader.
@ -20,7 +20,7 @@ phpbb.plupload.initialize = function() {
// Only execute if Plupload initialized successfully. // Only execute if Plupload initialized successfully.
phpbb.plupload.uploader.bind('Init', function() { 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; phpbb.plupload.rowTpl = $('#attach-row-tpl')[0].outerHTML;
// Hide the basic upload panel and remove the attach row template. // 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 * Unsets all elements in the object uploader.settings.multipart_params whose keys
* begin with 'attachment_data[' * begin with 'attachment_data['
*
* @return undefined
*/ */
phpbb.plupload.clearParams = function() { phpbb.plupload.clearParams = function() {
var obj = phpbb.plupload.uploader.settings.multipart_params; 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. * Update uploader.settings.multipart_params object with new data.
* *
* @param object obj * @param {object} obj
* @return undefined
*/ */
phpbb.plupload.updateMultipartParams = function(obj) { phpbb.plupload.updateMultipartParams = function(obj) {
phpbb.plupload.uploader.settings.multipart_params = $.extend( var settings = phpbb.plupload.uploader.settings;
phpbb.plupload.uploader.settings.multipart_params, settings.multipart_params = $.extend(settings.multipart_params, obj);
obj
);
}; };
/** /**
* Convert the array of attachment objects into an object that PHP would expect as POST data. * 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 * expected by the server
*/ */
phpbb.plupload.getSerializedData = function() { phpbb.plupload.getSerializedData = function() {
@ -100,22 +95,19 @@ phpbb.plupload.getSerializedData = function() {
* Get the index from the phpbb.plupload.data array where the given * Get the index from the phpbb.plupload.data array where the given
* attachment id appears. * attachment id appears.
* *
* @param int attach_id The attachment id of the file. * @param {int} attachId The attachment id of the file.
* @return bool Returns false if the id cannot be found. * @returns {bool|int} Index of the file if exists, otherwise false.
* @return int Returns the index of the file if it exists.
*/ */
phpbb.plupload.getIndex = function(attach_id) { phpbb.plupload.getIndex = function(attachId) {
var index = $.inArray(Number(attach_id), phpbb.plupload.ids); var index = $.inArray(Number(attachId), phpbb.plupload.ids);
return (index !== -1) ? index : false; return (index !== -1) ? index : false;
}; };
/** /**
* Set the data in phpbb.plupload.data and phpbb.plupload.ids arrays. * 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. * array(index => object(property: value). Requires attach_id to be one of the object properties.
*
* @return undefined
*/ */
phpbb.plupload.setData = function(data) { phpbb.plupload.setData = function(data) {
// Make sure that the array keys are reset. // 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. * Update the attachment data in the HTML and the phpbb & phpbb.plupload objects.
* *
* @param array data Array containing the new data to use. * @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 {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 {int} index The index from phpbb.plupload_ids that was affected by the action.
* @param array downloadUrl Optional array of download urls to update. * @param {Array} downloadUrl Optional array of download urls to update.
* @return undefined
*/ */
phpbb.plupload.update = function(data, action, index, downloadUrl) { 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. * Update the relevant elements and hidden data for all attachments.
* *
* @param array downloadUrl Optional array of download urls to update. * @param {Array} downloadUrl Optional array of download urls to update.
* @return undefined
*/ */
phpbb.plupload.updateRows = function(downloadUrl) { phpbb.plupload.updateRows = function(downloadUrl) {
for (var i = 0; i < phpbb.plupload.ids.length; i++) { 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 * data for the file inserted into it. The row is then appended or prepended to
* #file-list based on the attach_order setting. * #file-list based on the attach_order setting.
* *
* @param object file Plupload file object for the new attachment. * @param {object} file Plupload file object for the new attachment.
* @return undefined
*/ */
phpbb.plupload.insertRow = function(file) { phpbb.plupload.insertRow = function(file) {
var row = $(phpbb.plupload.rowTpl); var row = $(phpbb.plupload.rowTpl);
@ -183,9 +172,8 @@ phpbb.plupload.insertRow = function(file) {
/** /**
* Update the relevant elements and hidden data for an attachment. * 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 {int} index The index from phpbb.plupload.ids of the attachment to edit.
* @param array downloadUrl Optional array of download urls to update. * @param {Array} downloadUrl Optional array of download urls to update.
* @return undefined
*/ */
phpbb.plupload.updateRow = function(index, downloadUrl) { phpbb.plupload.updateRow = function(index, downloadUrl) {
var attach = phpbb.plupload.data[index], var attach = phpbb.plupload.data[index],
@ -197,7 +185,7 @@ phpbb.plupload.updateRow = function(index, downloadUrl) {
link = $('<a></a>'); link = $('<a></a>');
link.attr('href', url).html(attach.real_filename); 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 + ']'); 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. * Update hidden input data for an attachment.
* *
* @param object row jQuery object for the attachment row. * @param {object} row jQuery object for the attachment row.
* @param object attach Attachment data object from phpbb.plupload.data * @param {object} attach Attachment data object from phpbb.plupload.data
* @param int index Attachment index from phpbb.plupload.ids * @param {int} index Attachment index from phpbb.plupload.ids
* @return undefined
*/ */
phpbb.plupload.updateHiddenData = function(row, attach, index) { phpbb.plupload.updateHiddenData = function(row, attach, index) {
row.find('input[type="hidden"]').remove(); row.find('input[type="hidden"]').remove();
for (var key in attach) { for (var key in attach) {
if (!attach.hasOwnProperty(key)) {
return;
}
var input = $('<input />') var input = $('<input />')
.attr('type', 'hidden') .attr('type', 'hidden')
.attr('name', 'attachment_data[' + index + '][' + key +']') .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 * responds with the updated attachment data list so that any future
* uploads can maintain state with the server * uploads can maintain state with the server
* *
* @param object row jQuery object for the attachment row. * @param {object} row jQuery object for the attachment row.
* @param int attachId Attachment id of the file to be removed. * @param {int} attachId Attachment id of the file to be removed.
*
* @return undefined
*/ */
phpbb.plupload.deleteFile = function(row, attachId) { phpbb.plupload.deleteFile = function(row, attachId) {
// If there's no attach id, then the file hasn't been uploaded. Simply delete the row. // 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. * Check the attachment list and hide its container if it's empty.
*
* @return undefined
*/ */
phpbb.plupload.hideEmptyList = function() { phpbb.plupload.hideEmptyList = function() {
if (!$('#file-list').children().length) { if (!$('#file-list').children().length) {
$('#file-list-container').slideUp(100); $('#file-list-container').slideUp(100);
} }
} };
/** /**
* Update the indices used in inline attachment bbcodes. This ensures that the bbcodes * 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 * before the phpbb.plupload,data and phpbb.plupload.ids arrays are updated, otherwise it will
* not work correctly. * not work correctly.
* *
* @param string action The action that occurred -- either "addition" or "removal" * @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. * @param {int} index The index of the attachment from phpbb.plupload.ids that was affected.
*
* @return undefined
*/ */
phpbb.plupload.updateBbcode = function(action, index) { phpbb.plupload.updateBbcode = function(action, index) {
var textarea = $('#message', phpbb.plupload.form), var textarea = $('#message', phpbb.plupload.form),
@ -330,46 +315,41 @@ phpbb.plupload.updateBbcode = function(action, index) {
return; return;
} }
// Private function used to replace the bbcode. function runUpdate(i) {
var updateBbcode = function(match, fileName) { var regex = new RegExp('\\[attachment=' + i + '\\](.*?)\\[\\/attachment\\]', 'g');
// Remove the bbcode if the file was removed. text = text.replace(regex, function updateBbcode(_, fileName) {
if (removal && index === i) { // Remove the bbcode if the file was removed.
return ''; if (removal && index === i) {
} return '';
var newIndex = i + ((removal) ? -1 : 1); }
return '[attachment=' + newIndex +']' + fileName + '[/attachment]'; var newIndex = i + ((removal) ? -1 : 1);
}; return '[attachment=' + newIndex +']' + fileName + '[/attachment]';
});
}
// Private function used to generate search regexp // Loop forwards when removing and backwards when adding ensures we don't
var searchRegexp = function(index) { // corrupt the bbcode index.
return new RegExp('\\[attachment=' + index + '\\](.*?)\\[\\/attachment\\]', 'g');
}
// 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;
}
return (removal) ? (i < phpbb.plupload.ids.length): (i >= index);
}
var i; var i;
if (removal) {
while (searchLoop()) { for (i = index; i < phpbb.plupload.ids.length; i++) {
text = text.replace(searchRegexp(i), updateBbcode); runUpdate(i);
(removal) ? i++ : i--; }
} else {
for (i = phpbb.plupload.ids.length - 1; i >= index; i--) {
runUpdate(i);
}
} }
textarea.val(text); textarea.val(text);
}; };
/** /**
* Get Plupload file objects based on their upload status. * Get Plupload file objects based on their upload status.
* *
* @param int status Plupload status - plupload.DONE, plupload.FAILED, plupload.QUEUED, * @param {int} status Plupload status - plupload.DONE, plupload.FAILED,
* plupload.STARTED, plupload.STOPPED * 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) { phpbb.plupload.getFilesByStatus = function(status) {
var files = []; var files = [];
@ -380,14 +360,14 @@ phpbb.plupload.getFilesByStatus = function(status) {
} }
}); });
return files; return files;
} };
/** /**
* Check whether the user has reached the maximun number of files that he's allowed * 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 * to upload. If so, disables the uploader and marks the queued files as failed. Otherwise
* makes sure that the uploader is enabled. * 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() { phpbb.plupload.handleMaxFilesReached = function() {
// If there is no limit, the user is an admin or moderator. // If there is no limit, the user is an admin or moderator.
@ -408,33 +388,28 @@ phpbb.plupload.handleMaxFilesReached = function() {
phpbb.plupload.enableUploader(); phpbb.plupload.enableUploader();
} }
return false; return false;
} };
/** /**
* Disable the uploader * Disable the uploader
*
* @return undefined
*/ */
phpbb.plupload.disableUploader = function() { phpbb.plupload.disableUploader = function() {
$('#add_files').addClass('disabled'); $('#add_files').addClass('disabled');
phpbb.plupload.uploader.disableBrowse(); phpbb.plupload.uploader.disableBrowse();
} };
/** /**
* Enable the uploader * Enable the uploader
*
* @return undefined
*/ */
phpbb.plupload.enableUploader = function() { phpbb.plupload.enableUploader = function() {
$('#add_files').removeClass('disabled'); $('#add_files').removeClass('disabled');
phpbb.plupload.uploader.disableBrowse(false); phpbb.plupload.uploader.disableBrowse(false);
} };
/** /**
* Mark all queued files as failed. * Mark all queued files as failed.
* *
* @param string error Error message to present to the user. * @param {string} error Error message to present to the user.
* @return undefined
*/ */
phpbb.plupload.markQueuedFailed = function(error) { phpbb.plupload.markQueuedFailed = function(error) {
var files = phpbb.plupload.getFilesByStatus(plupload.QUEUED); var files = phpbb.plupload.getFilesByStatus(plupload.QUEUED);
@ -443,22 +418,24 @@ phpbb.plupload.markQueuedFailed = function(error) {
$('#' + file.id).find('.file-progress').hide(); $('#' + file.id).find('.file-progress').hide();
phpbb.plupload.fileError(file, error); phpbb.plupload.fileError(file, error);
}); });
} };
/** /**
* Marks a file as failed and sets the error message for it. * Marks a file as failed and sets the error message for it.
* *
* @param object file Plupload file object that failed. * @param {object} file Plupload file object that failed.
* @param string error Error message to present to the user. * @param {string} error Error message to present to the user.
* @return undefined
*/ */
phpbb.plupload.fileError = function(file, error) { phpbb.plupload.fileError = function(file, error) {
file.status = plupload.FAILED; file.status = plupload.FAILED;
file.error = error; 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.uploader = new plupload.Uploader(phpbb.plupload.config);
phpbb.plupload.initialize(); phpbb.plupload.initialize();
var $fileList = $('#file-list');
/** /**
* Insert inline attachment bbcode. * 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'), var attachId = $(this).parents('.attach-row').attr('data-attach-id'),
index = phpbb.plupload.getIndex(attachId); index = phpbb.plupload.getIndex(attachId);
attach_inline(index, phpbb.plupload.data[index].real_filename); attachInline(index, phpbb.plupload.data[index].real_filename);
e.preventDefault(); e.preventDefault();
}); });
/** /**
* Delete a file. * Delete a file.
*/ */
$('#file-list').on('click', '.file-delete', function(e) { $fileList.on('click', '.file-delete', function(e) {
var row = $(this).parents('.attach-row'), var row = $(this).parents('.attach-row'),
attachId = row.attr('data-attach-id'); 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. * 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')); phpbb.alert($(this).attr('data-error-title'), $(this).attr('data-error-message'));
e.preventDefault(); 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 * 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 * for some reason the filename is set to 'blob' whenever a file is chunked
* *
* @param object up The plupload.Uploader object * @param {object} up The plupload.Uploader object
* @param object file The plupload.File object that is about to be * @param {object} file The plupload.File object that is about to be uploaded
* uploaded
*
* @return undefined
*/ */
phpbb.plupload.uploader.bind('BeforeUpload', function(up, file) { phpbb.plupload.uploader.bind('BeforeUpload', function(up, file) {
if (phpbb.plupload.handleMaxFilesReached()) { 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 * 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 * is reported to the user and the upload of this particular file is halted
* *
* @param object up The plupload.Uploader object * @param {object} up The plupload.Uploader object
* @param object file The plupload.File object whose chunk has just * @param {object} file The plupload.File object whose chunk has just
* been uploaded * been uploaded
* @param object response The response object from the server * @param {object} response The response object from the server
*
* @return undefined
*/ */
phpbb.plupload.uploader.bind('ChunkUploaded', function(up, file, response) { phpbb.plupload.uploader.bind('ChunkUploaded', function(up, file, response) {
if (response.chunk >= response.chunks - 1) { 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. * Fires when files are added to the queue.
*
* @return undefined
*/ */
phpbb.plupload.uploader.bind('FilesAdded', function(up, files) { phpbb.plupload.uploader.bind('FilesAdded', function(up, files) {
// Prevent unnecessary requests to the server if the user already uploaded // 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 // Switch the active tab if the style supports it
if (typeof activateSubPanel == 'function') { if (typeof activateSubPanel === 'function') {
activateSubPanel('attach-panel'); activateSubPanel('attach-panel'); // jshint ignore: line
} }
// Show the file list if there aren't any files currently. // Show the file list if there aren't any files currently.
if (!$('#file-list-container').is(':visible')) { var $fileListContainer = $('#file-list-container');
$('#file-list-container').show(100); if (!$fileListContainer.is(':visible')) {
$fileListContainer.show(100);
} }
$.each(files, function(i, file) { $.each(files, function(i, file) {
@ -609,7 +579,7 @@ phpbb.plupload.uploader.bind('FilesAdded', function(up, files) {
}); });
up.bind('UploadProgress', function(up, file) { 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 + '%'); $('#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 * appends it to the next file upload so that the server can maintain state
* with regards to the attachments in a given post * with regards to the attachments in a given post
* *
* @param object up The plupload.Uploader object * @param {object} up The plupload.Uploader object
* @param object file The plupload.File object that has just been * @param {object} file The plupload.File object that has just been
* uploaded * uploaded
* @param string response The response string from the server * @param {string} response The response string from the server
*
* @return undefined
*/ */
phpbb.plupload.uploader.bind('FileUploaded', function(up, file, response) { phpbb.plupload.uploader.bind('FileUploaded', function(up, file, response) {
var json = {}, var json = {},
@ -643,7 +611,7 @@ phpbb.plupload.uploader.bind('FileUploaded', function(up, file, response) {
row.find('.file-progress').hide(); row.find('.file-progress').hide();
try { try {
json = $.parseJSON(response.response); json = JSON.parse(response.response);
} catch (e) { } catch (e) {
error = 'Error parsing server response.'; error = 'Error parsing server response.';
} }
@ -662,25 +630,19 @@ phpbb.plupload.uploader.bind('FileUploaded', function(up, file, response) {
if (typeof error !== 'undefined') { if (typeof error !== 'undefined') {
phpbb.plupload.fileError(file, error); phpbb.plupload.fileError(file, error);
} else if (file.status === plupload.DONE) { } 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.attr('data-attach-id', file.attachment_data.attach_id);
row.find('.file-inline-bbcode').show(); row.find('.file-inline-bbcode').show();
row.find('.file-status').addClass('file-uploaded'); 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. * 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 // Hide the progress bar
setTimeout(function() { setTimeout(function() {
$('#file-total-progress-bar').fadeOut(500, function() { $('#file-total-progress-bar').fadeOut(500, function() {

View file

@ -42,8 +42,8 @@ phpbb.addAjaxCallback('mark_forums_read', function(res) {
/** /**
* This callback will mark all topic icons read * This callback will mark all topic icons read
* *
* @param update_topic_links bool Whether "Mark topics read" links should be * @param {bool} [update_topic_links=true] Whether "Mark topics read" links
* updated. Defaults to true. * should be updated. Defaults to true.
*/ */
phpbb.addAjaxCallback('mark_topics_read', function(res, updateTopicLinks) { phpbb.addAjaxCallback('mark_topics_read', function(res, updateTopicLinks) {
var readTitle = res.NO_UNREAD_POSTS; var readTitle = res.NO_UNREAD_POSTS;
@ -138,9 +138,9 @@ phpbb.markNotifications = function($popup, unreadCount) {
} }
// Update page title // Update page title
$('title').text( var $title = $('title');
(unreadCount ? '(' + unreadCount + ')' : '') + $('title').text().replace(/(\(([0-9])\))/, '') var originalTitle = $title.text().replace(/(\((\d+)\))/, '');
); $title.text((unreadCount ? '(' + unreadCount + ')' : '') + originalTitle);
}; };
// This callback finds the post from the delete link, and removes it. // This callback finds the post from the delete link, and removes it.
@ -205,7 +205,7 @@ phpbb.addAjaxCallback('vote_poll', function(res) {
// Set min-height to prevent the page from jumping when the content changes // Set min-height to prevent the page from jumping when the content changes
var updatePanelHeight = function (height) { var updatePanelHeight = function (height) {
var height = (typeof height === 'undefined') ? panel.find('.inner').outerHeight() : height; height = (typeof height === 'undefined') ? panel.find('.inner').outerHeight() : height;
panel.css('min-height', height); panel.css('min-height', height);
}; };
updatePanelHeight(); updatePanelHeight();
@ -378,7 +378,7 @@ $('#member_search').click(function () {
*/ */
$(function() { $(function() {
phpbb.resizeTextArea($('textarea:not(#message-box textarea, .no-auto-resize)'), {minHeight: 75, maxHeight: 250}); phpbb.resizeTextArea($('textarea:not(#message-box textarea, .no-auto-resize)'), {minHeight: 75, maxHeight: 250});
phpbb.resizeTextArea($('#message-box textarea')); phpbb.resizeTextArea($('textarea', '#message-box'));
}); });