From 11623dd6718ec12504286db3dfcd042ccb4e3688 Mon Sep 17 00:00:00 2001 From: MateBartus Date: Tue, 28 Apr 2015 22:33:04 +0200 Subject: [ticket/13740] Front facing files and controllers [ci skip] PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 205 +++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 phpBB/assets/javascript/installer.js (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js new file mode 100644 index 0000000000..302d95e7c6 --- /dev/null +++ b/phpBB/assets/javascript/installer.js @@ -0,0 +1,205 @@ +/** + * Installer's AJAX frontend handler + */ + +(function($) { // Avoid conflicts with other libraries + // Global variables + var pollTimer = null; + var nextReadPosition = 0; + + // Template related variables + var $contentWrapper = $('.install-body').find('.main'); + + // Intercept form submits + intercept_form_submit($('#install_install')); + + function poll_content(xhReq) { + var messages = xhReq.responseText; + + do { + var unprocessed = messages.substring(nextReadPosition); + var messageEndIndex = unprocessed.indexOf('}\n\n'); + + if (messageEndIndex !== -1) { + var endOfMessageIndex = messageEndIndex + 3; // 3 is the length of "}\n\n" + var message = unprocessed.substring(0, endOfMessageIndex); + parse_message(message); + nextReadPosition += endOfMessageIndex; + } + } while (messageEndIndex !== -1); + + if (xhReq.readyState === 4) { + $('#loading_indicator').css('display', 'none'); + reset_polling(); + } + } + + function parse_message(messageJSON) { + $('#loading_indicator').css('display', 'none'); + + messageJSON = messageJSON.trim(); + var responseObject = JSON.parse(messageJSON); + + // Parse object + if (responseObject.hasOwnProperty('errors')) { + add_message('error', responseObject.errors) + } + + if (responseObject.hasOwnProperty('warnings')) { + add_message('warning', responseObject.warnings) + } + + if (responseObject.hasOwnProperty('logs')) { + add_message('log', responseObject.logs); + } + + if (responseObject.hasOwnProperty('form')) { + add_form(responseObject.form); + } + } + + function add_message(type, messages) { + // Get message containers + var errorContainer = $('#error-container'); + var warningContainer = $('#warning-container'); + var logContainer = $('#log-container'); + + var title, description, msgElement, arraySize = messages.length; + for (var i = 0; i < arraySize; i++) { + msgElement = $('
'); + title = $(document.createElement('strong')); + title.text(messages[i].title); + msgElement.append(title); + + if (messages[i].hasOwnProperty('description')) { + description = $(document.createElement('p')); + description.text(messages[i].description); + msgElement.append(description); + } + + switch (type) { + case 'error': + msgElement.addClass('errorbox'); + errorContainer.append(msgElement); + break; + case 'warning': + msgElement.addClass('warningbox'); + warningContainer.append(msgElement); + break; + case 'log': + msgElement.addClass('log'); + logContainer.append(msgElement); + break; + } + } + } + + function add_form(formHtml) { + var formContainer = $('#content-container'); + formContainer.html(formHtml); + var form = $('#install_install'); + intercept_form_submit(form); + } + + function start_polling(xhReq) { + reset_polling(); + pollTimer = setInterval(function () { + poll_content(xhReq); + }, 500); + } + + function reset_polling() { + clearInterval(pollTimer); + nextReadPosition = 0; + } + + function submit_form(form, submitBtn) { + form.css('display', 'none'); + + var xhReq = create_xhr_object(); + xhReq.open('POST', form.attr('action'), true); + xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xhReq.send(get_form_fields(form, submitBtn)); + + // Clear content + setup_ajax_layout(); + $('#loading_indicator').css('display', 'block'); + + start_polling(xhReq); + } + + // Workaround for submit buttons + function get_form_fields(form, submitBtn) { + var formData = form.serialize(); + //var submitBtn = form.find(':submit'); + formData += ((formData.length) ? '&' : '') + encodeURIComponent(submitBtn.attr('name')) + '='; + formData += encodeURIComponent(submitBtn.attr('value')); + + return formData; + } + + function intercept_form_submit(form) { + if (!form.length) { + return; + } + + form.find(':submit').bind('click', function (event) { + event.preventDefault(); + submit_form(form, $(this)); + }); + + } + + /** + * jQuery cannot be used as the response is streamed, and + * as of now, jQuery does not provide access to the response until + * the connection is not closed. + */ + function create_xhr_object() { + var xhReq; + + if (window.XMLHttpRequest) { + xhReq = new XMLHttpRequest(); + } + else if (window.ActiveXObject) { + xhReq = new ActiveXObject("Msxml2.XMLHTTP"); + } + + return xhReq; + } + + function setup_ajax_layout() { + // Clear content + $contentWrapper.html(''); + + var $header = $('
'); + $header.attr('id', 'header-container'); + $contentWrapper.append($header); + + var $description = $('
'); + $description.attr('id', 'description-container'); + $contentWrapper.append($description); + + var $errorContainer = $('
'); + $errorContainer.attr('id', 'error-container'); + $contentWrapper.append($errorContainer); + + var $warningContainer = $('
'); + $warningContainer.attr('id', 'warning-container'); + $contentWrapper.append($warningContainer); + + var $installerContentWrapper = $('
'); + $installerContentWrapper.attr('id', 'content-container'); + $contentWrapper.append($installerContentWrapper); + + var $logContainer = $('
'); + $logContainer.attr('id', 'log-container'); + $contentWrapper.append($logContainer); + + var $spinner = $('
'); + $spinner.attr('id', 'loading_indicator'); + $spinner.html(' '); + $contentWrapper.append($spinner); + } +})(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From b7ef709549597f2fa4f9c8525bfd602f81644530 Mon Sep 17 00:00:00 2001 From: MateBartus Date: Wed, 3 Jun 2015 01:31:48 +0200 Subject: [ticket/13740] Implement progress bar for AJAX UI PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 135 ++++++++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 35 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 302d95e7c6..ea5ca638b8 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -3,9 +3,12 @@ */ (function($) { // Avoid conflicts with other libraries - // Global variables + // Installer variables var pollTimer = null; var nextReadPosition = 0; + var progressBarTriggered = false; + var progressTimer = null; + var currentProgress = 0; // Template related variables var $contentWrapper = $('.install-body').find('.main'); @@ -56,49 +59,112 @@ if (responseObject.hasOwnProperty('form')) { add_form(responseObject.form); } + + if (responseObject.hasOwnProperty('progress')) { + set_progress(responseObject.progress); + } } function add_message(type, messages) { // Get message containers - var errorContainer = $('#error-container'); - var warningContainer = $('#warning-container'); - var logContainer = $('#log-container'); + var $errorContainer = $('#error-container'); + var $warningContainer = $('#warning-container'); + var $logContainer = $('#log-container'); - var title, description, msgElement, arraySize = messages.length; + var $title, $description, $msgElement, arraySize = messages.length; for (var i = 0; i < arraySize; i++) { - msgElement = $('
'); - title = $(document.createElement('strong')); - title.text(messages[i].title); - msgElement.append(title); + $msgElement = $('
'); + $title = $(document.createElement('strong')); + $title.text(messages[i].title); + $msgElement.append($title); if (messages[i].hasOwnProperty('description')) { - description = $(document.createElement('p')); - description.text(messages[i].description); - msgElement.append(description); + $description = $(document.createElement('p')); + $description.text(messages[i].description); + $msgElement.append($description); } switch (type) { case 'error': - msgElement.addClass('errorbox'); - errorContainer.append(msgElement); + $msgElement.addClass('errorbox'); + $errorContainer.append($msgElement); break; case 'warning': - msgElement.addClass('warningbox'); - warningContainer.append(msgElement); + $msgElement.addClass('warningbox'); + $warningContainer.append($msgElement); break; case 'log': - msgElement.addClass('log'); - logContainer.append(msgElement); + $msgElement.addClass('log'); + $logContainer.append($msgElement); break; } } } function add_form(formHtml) { - var formContainer = $('#content-container'); - formContainer.html(formHtml); - var form = $('#install_install'); - intercept_form_submit(form); + var $formContainer = $('#content-container'); + $formContainer.html(formHtml); + var $form = $('#install_install'); + intercept_form_submit($form); + } + + function set_progress(progressObject) { + var $statusText, $progressBar, $progressText, $progressFiller; + + if (progressObject.task_name.length) { + if (!progressBarTriggered) { + // Create progress bar + var $contentContainer = $('#content-container'); + + // Create progress bar elements + $progressBar = $('
'); + $progressBar.attr('id', 'progress-bar'); + $progressText = $('

'); + $progressText.attr('id', 'progress-bar-text'); + $progressFiller = $(''); + $progressFiller.attr('id', 'progress-bar-filler'); + + $statusText = $('

'); + $statusText.attr('id', 'progress-status-text'); + + $progressBar.append($progressFiller); + $progressBar.append($progressText); + + $contentContainer.append($statusText); + $contentContainer.append($progressBar); + + progressBarTriggered = true; + } else { + $statusText = $('#progress-status-text'); + } + + // Update progress bar + $statusText.text(progressObject.task_name + '…'); + increment_progress_bar(Math.round(progressObject.task_num / progressObject.task_count * 100)); + } + } + + function increment_progress_bar(progressLimit) { + var $progressFiller = $('#progress-bar-filler'); + var $progressText = $('#progress-bar-text'); + var progressStart = $progressFiller.width() / $progressFiller.offsetParent().width() * 100; + currentProgress = Math.floor(progressStart); + + clearInterval(progressTimer); + progressTimer = setInterval(function() { + incrementFiller($progressText, $progressFiller, progressLimit); + }, 10); + } + + function incrementFiller($progressText, $progressFiller, progressLimit) { + currentProgress++; + $progressText.text(currentProgress + '%'); + $progressFiller.css('width', currentProgress + '%'); + + if (currentProgress >= progressLimit || currentProgress >= 100) { + console.log("In if; " + progressLimit + "; " + currentProgress); + clearInterval(progressTimer); + } } function start_polling(xhReq) { @@ -113,14 +179,14 @@ nextReadPosition = 0; } - function submit_form(form, submitBtn) { - form.css('display', 'none'); + function submit_form($form, $submitBtn) { + $form.css('display', 'none'); var xhReq = create_xhr_object(); - xhReq.open('POST', form.attr('action'), true); + xhReq.open('POST', $form.attr('action'), true); xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - xhReq.send(get_form_fields(form, submitBtn)); + xhReq.send(get_form_fields($form, $submitBtn)); // Clear content setup_ajax_layout(); @@ -130,23 +196,22 @@ } // Workaround for submit buttons - function get_form_fields(form, submitBtn) { - var formData = form.serialize(); - //var submitBtn = form.find(':submit'); - formData += ((formData.length) ? '&' : '') + encodeURIComponent(submitBtn.attr('name')) + '='; - formData += encodeURIComponent(submitBtn.attr('value')); + function get_form_fields($form, $submitBtn) { + var formData = $form.serialize(); + formData += ((formData.length) ? '&' : '') + encodeURIComponent($submitBtn.attr('name')) + '='; + formData += encodeURIComponent($submitBtn.attr('value')); return formData; } - function intercept_form_submit(form) { - if (!form.length) { + function intercept_form_submit($form) { + if (!$form.length) { return; } - form.find(':submit').bind('click', function (event) { + $form.find(':submit').bind('click', function (event) { event.preventDefault(); - submit_form(form, $(this)); + submit_form($form, $(this)); }); } -- cgit v1.2.1 From 63c3500dacc8d272e85273a67f56faa51a9d5fba Mon Sep 17 00:00:00 2001 From: MateBartus Date: Wed, 3 Jun 2015 16:35:23 +0200 Subject: [ticket/13740] Clean up JS code some more PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 299 +++++++++++++++++++++-------------- 1 file changed, 183 insertions(+), 116 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index ea5ca638b8..8afac0da78 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -3,6 +3,9 @@ */ (function($) { // Avoid conflicts with other libraries + + 'use strict'; + // Installer variables var pollTimer = null; var nextReadPosition = 0; @@ -14,58 +17,37 @@ var $contentWrapper = $('.install-body').find('.main'); // Intercept form submits - intercept_form_submit($('#install_install')); - - function poll_content(xhReq) { - var messages = xhReq.responseText; - - do { - var unprocessed = messages.substring(nextReadPosition); - var messageEndIndex = unprocessed.indexOf('}\n\n'); - - if (messageEndIndex !== -1) { - var endOfMessageIndex = messageEndIndex + 3; // 3 is the length of "}\n\n" - var message = unprocessed.substring(0, endOfMessageIndex); - parse_message(message); - nextReadPosition += endOfMessageIndex; - } - } while (messageEndIndex !== -1); - - if (xhReq.readyState === 4) { - $('#loading_indicator').css('display', 'none'); - reset_polling(); - } - } - - function parse_message(messageJSON) { - $('#loading_indicator').css('display', 'none'); - - messageJSON = messageJSON.trim(); - var responseObject = JSON.parse(messageJSON); - - // Parse object - if (responseObject.hasOwnProperty('errors')) { - add_message('error', responseObject.errors) - } + interceptFormSubmit($('#install_install')); - if (responseObject.hasOwnProperty('warnings')) { - add_message('warning', responseObject.warnings) - } + /** + * Creates an XHR object + * + * jQuery cannot be used as the response is streamed, and + * as of now, jQuery does not provide access to the response until + * the connection is not closed. + * + * @return XMLHttpRequest|ActiveXObject + */ + function createXhrObject() { + var xhReq; - if (responseObject.hasOwnProperty('logs')) { - add_message('log', responseObject.logs); + if (window.XMLHttpRequest) { + xhReq = new XMLHttpRequest(); } - - if (responseObject.hasOwnProperty('form')) { - add_form(responseObject.form); + else if (window.ActiveXObject) { + xhReq = new ActiveXObject("Msxml2.XMLHTTP"); } - if (responseObject.hasOwnProperty('progress')) { - set_progress(responseObject.progress); - } + return xhReq; } - function add_message(type, messages) { + /** + * Displays error, warning and log messages + * + * @param type + * @param messages + */ + function addMessage(type, messages) { // Get message containers var $errorContainer = $('#error-container'); var $warningContainer = $('#warning-container'); @@ -101,14 +83,24 @@ } } - function add_form(formHtml) { + /** + * Displays a form from the response + * + * @param formHtml + */ + function addForm(formHtml) { var $formContainer = $('#content-container'); $formContainer.html(formHtml); var $form = $('#install_install'); - intercept_form_submit($form); + interceptFormSubmit($form); } - function set_progress(progressObject) { + /** + * Renders progress bar + * + * @param progressObject + */ + function setProgress(progressObject) { var $statusText, $progressBar, $progressText, $progressFiller; if (progressObject.task_name.length) { @@ -140,101 +132,128 @@ // Update progress bar $statusText.text(progressObject.task_name + '…'); - increment_progress_bar(Math.round(progressObject.task_num / progressObject.task_count * 100)); + incrementProgressBar(Math.round(progressObject.task_num / progressObject.task_count * 100)); } } - function increment_progress_bar(progressLimit) { - var $progressFiller = $('#progress-bar-filler'); - var $progressText = $('#progress-bar-text'); - var progressStart = $progressFiller.width() / $progressFiller.offsetParent().width() * 100; - currentProgress = Math.floor(progressStart); + /** + * Parse messages from the response object + * + * @param messageJSON + */ + function parseMessage(messageJSON) { + $('#loading_indicator').css('display', 'none'); - clearInterval(progressTimer); - progressTimer = setInterval(function() { - incrementFiller($progressText, $progressFiller, progressLimit); - }, 10); - } + var responseObject = JSON.parse(messageJSON); - function incrementFiller($progressText, $progressFiller, progressLimit) { - currentProgress++; - $progressText.text(currentProgress + '%'); - $progressFiller.css('width', currentProgress + '%'); + // Parse object + if (responseObject.hasOwnProperty('errors')) { + addMessage('error', responseObject.errors); + } - if (currentProgress >= progressLimit || currentProgress >= 100) { - console.log("In if; " + progressLimit + "; " + currentProgress); - clearInterval(progressTimer); + if (responseObject.hasOwnProperty('warnings')) { + addMessage('warning', responseObject.warnings); } - } - function start_polling(xhReq) { - reset_polling(); - pollTimer = setInterval(function () { - poll_content(xhReq); - }, 500); - } + if (responseObject.hasOwnProperty('logs')) { + addMessage('log', responseObject.logs); + } - function reset_polling() { - clearInterval(pollTimer); - nextReadPosition = 0; + if (responseObject.hasOwnProperty('form')) { + addForm(responseObject.form); + } + + if (responseObject.hasOwnProperty('progress')) { + setProgress(responseObject.progress); + } } - function submit_form($form, $submitBtn) { - $form.css('display', 'none'); + /** + * Process updates in streamed response + * + * @param xhReq XHR object + */ + function pollContent(xhReq) { + var messages = xhReq.responseText; + var msgSeparator = '}\n\n'; + var unprocessed, messageEndIndex, endOfMessageIndex, message; - var xhReq = create_xhr_object(); - xhReq.open('POST', $form.attr('action'), true); - xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - xhReq.send(get_form_fields($form, $submitBtn)); + do { + unprocessed = messages.substring(nextReadPosition); + messageEndIndex = unprocessed.indexOf(msgSeparator); - // Clear content - setup_ajax_layout(); - $('#loading_indicator').css('display', 'block'); + if (messageEndIndex !== -1) { + endOfMessageIndex = messageEndIndex + msgSeparator.length; + message = unprocessed.substring(0, endOfMessageIndex); + parseMessage(message); + nextReadPosition += endOfMessageIndex; + } + } while (messageEndIndex !== -1); - start_polling(xhReq); + if (xhReq.readyState === 4) { + $('#loading_indicator').css('display', 'none'); + resetPolling(); + } } - // Workaround for submit buttons - function get_form_fields($form, $submitBtn) { - var formData = $form.serialize(); - formData += ((formData.length) ? '&' : '') + encodeURIComponent($submitBtn.attr('name')) + '='; - formData += encodeURIComponent($submitBtn.attr('value')); - - return formData; - } + /** + * Animates the progress bar + * + * @param $progressText + * @param $progressFiller + * @param progressLimit + */ + function incrementFiller($progressText, $progressFiller, progressLimit) { + currentProgress++; + $progressText.text(currentProgress + '%'); + $progressFiller.css('width', currentProgress + '%'); - function intercept_form_submit($form) { - if (!$form.length) { - return; + if (currentProgress >= progressLimit || currentProgress >= 100) { + clearInterval(progressTimer); } + } - $form.find(':submit').bind('click', function (event) { - event.preventDefault(); - submit_form($form, $(this)); - }); + /** + * Wrapper function for progress bar rendering and animating + * + * @param progressLimit + */ + function incrementProgressBar(progressLimit) { + var $progressFiller = $('#progress-bar-filler'); + var $progressText = $('#progress-bar-text'); + var progressStart = $progressFiller.width() / $progressFiller.offsetParent().width() * 100; + currentProgress = Math.floor(progressStart); + clearInterval(progressTimer); + progressTimer = setInterval(function() { + incrementFiller($progressText, $progressFiller, progressLimit); + }, 10); } /** - * jQuery cannot be used as the response is streamed, and - * as of now, jQuery does not provide access to the response until - * the connection is not closed. + * Sets up timer for processing the streamed HTTP response + * + * @param xhReq */ - function create_xhr_object() { - var xhReq; - - if (window.XMLHttpRequest) { - xhReq = new XMLHttpRequest(); - } - else if (window.ActiveXObject) { - xhReq = new ActiveXObject("Msxml2.XMLHTTP"); - } + function startPolling(xhReq) { + resetPolling(); + pollTimer = setInterval(function () { + pollContent(xhReq); + }, 500); + } - return xhReq; + /** + * Resets the polling timer + */ + function resetPolling() { + clearInterval(pollTimer); + nextReadPosition = 0; } - function setup_ajax_layout() { + /** + * Renders the AJAX UI layout + */ + function setupAjaxLayout() { // Clear content $contentWrapper.html(''); @@ -267,4 +286,52 @@ $spinner.html(' '); $contentWrapper.append($spinner); } + + function submitForm($form, $submitBtn) { + $form.css('display', 'none'); + + var xhReq = createXhrObject(); + xhReq.open('POST', $form.attr('action'), true); + xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xhReq.send(getFormFields($form, $submitBtn)); + + // Clear content + setupAjaxLayout(); + $('#loading_indicator').css('display', 'block'); + + startPolling(xhReq); + } + + /** + * Add submit button to the POST information + * + * @param $form + * @param $submitBtn + * + * @returns {*} + */ + function getFormFields($form, $submitBtn) { + var formData = $form.serialize(); + formData += ((formData.length) ? '&' : '') + encodeURIComponent($submitBtn.attr('name')) + '='; + formData += encodeURIComponent($submitBtn.attr('value')); + + return formData; + } + + /** + * Intercept form submit events and determine the submit button used + * + * @param $form + */ + function interceptFormSubmit($form) { + if (!$form.length) { + return; + } + + $form.find(':submit').bind('click', function (event) { + event.preventDefault(); + submitForm($form, $(this)); + }); + } })(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From 1b81bf5b2370c045a6369705d2a11a2b35fe2281 Mon Sep 17 00:00:00 2001 From: CHItA Date: Fri, 5 Jun 2015 17:43:30 +0200 Subject: [ticket/13740] Add better progress handling, also add log messages PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 8afac0da78..a9a315c0d5 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -204,13 +204,14 @@ * @param progressLimit */ function incrementFiller($progressText, $progressFiller, progressLimit) { - currentProgress++; - $progressText.text(currentProgress + '%'); - $progressFiller.css('width', currentProgress + '%'); - if (currentProgress >= progressLimit || currentProgress >= 100) { clearInterval(progressTimer); + return; } + + currentProgress++; + $progressText.text(currentProgress + '%'); + $progressFiller.css('width', currentProgress + '%'); } /** -- cgit v1.2.1 From db4cfa7df62d5911bc5a0edcdc59236c39aede08 Mon Sep 17 00:00:00 2001 From: CHItA Date: Thu, 11 Jun 2015 19:32:11 +0200 Subject: [ticket/13740] Add navigation bar support for the installer Also added various UI elements and texts. [ci skip] PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 61 ++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 9 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index a9a315c0d5..eafcd78f47 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -95,6 +95,45 @@ interceptFormSubmit($form); } + /** + * Handles navigation status updates + * + * @param navObj + */ + function updateNavbarStatus(navObj) { + var navID, $stage, $stageListItem, $active; + $active = $('#activemenu'); + + if (navObj.hasOwnProperty('finished')) { + // This should be an Array + var navItems = navObj.finished; + + for (var i = 0; i < navItems.length; i++) { + navID = 'installer-stage-' + navItems[i]; + $stage = $('#' + navID); + $stageListItem = $stage.parent(); + + if ($active.length && $active.is($stageListItem)) { + $active.removeAttr('id'); + } + + $stage.addClass('completed'); + } + } + + if (navObj.hasOwnProperty('active')) { + navID = 'installer-stage-' + navObj.active; + $stage = $('#' + navID); + $stageListItem = $stage.parent(); + + if ($active.length && !$active.is($stageListItem)) { + $active.removeAttr('id'); + } + + $stageListItem.attr('id', 'activemenu'); + } + } + /** * Renders progress bar * @@ -166,6 +205,10 @@ if (responseObject.hasOwnProperty('progress')) { setProgress(responseObject.progress); } + + if (responseObject.hasOwnProperty('nav')) { + updateNavbarStatus(responseObject.nav); + } } /** @@ -231,6 +274,14 @@ }, 10); } + /** + * Resets the polling timer + */ + function resetPolling() { + clearInterval(pollTimer); + nextReadPosition = 0; + } + /** * Sets up timer for processing the streamed HTTP response * @@ -240,15 +291,7 @@ resetPolling(); pollTimer = setInterval(function () { pollContent(xhReq); - }, 500); - } - - /** - * Resets the polling timer - */ - function resetPolling() { - clearInterval(pollTimer); - nextReadPosition = 0; + }, 250); } /** -- cgit v1.2.1 From 5ce170dcc3f798627d95876ce6777882ffb8b83e Mon Sep 17 00:00:00 2001 From: CHItA Date: Sun, 14 Jun 2015 13:36:45 +0200 Subject: [ticket/13740] Remove ActiveXObject as it is supported by IE versions >= 8 PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index eafcd78f47..68a4eb499b 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -3,7 +3,6 @@ */ (function($) { // Avoid conflicts with other libraries - 'use strict'; // Installer variables @@ -26,18 +25,11 @@ * as of now, jQuery does not provide access to the response until * the connection is not closed. * - * @return XMLHttpRequest|ActiveXObject + * @return XMLHttpRequest */ function createXhrObject() { - var xhReq; - - if (window.XMLHttpRequest) { - xhReq = new XMLHttpRequest(); - } - else if (window.ActiveXObject) { - xhReq = new ActiveXObject("Msxml2.XMLHTTP"); - } - + var xhReq = new XMLHttpRequest(); + xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); return xhReq; } @@ -336,7 +328,6 @@ var xhReq = createXhrObject(); xhReq.open('POST', $form.attr('action'), true); - xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhReq.send(getFormFields($form, $submitBtn)); -- cgit v1.2.1 From 609eb7a4d3e2b763f3e69e8bb61adc3ee3ced328 Mon Sep 17 00:00:00 2001 From: CHItA Date: Thu, 18 Jun 2015 01:41:50 +0200 Subject: [ticket/13740] Fix AJAX HTTP header setting PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 68a4eb499b..105818f82b 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -28,9 +28,7 @@ * @return XMLHttpRequest */ function createXhrObject() { - var xhReq = new XMLHttpRequest(); - xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - return xhReq; + return new XMLHttpRequest(); } /** @@ -328,6 +326,7 @@ var xhReq = createXhrObject(); xhReq.open('POST', $form.attr('action'), true); + xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhReq.send(getFormFields($form, $submitBtn)); -- cgit v1.2.1 From 97d08d6f56cf448fd4def8a4d29c570da91faa89 Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Wed, 22 Jul 2015 03:16:16 +0200 Subject: [ticket/13740] Allow language change in the installer PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 105818f82b..91e8eb4797 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -330,6 +330,9 @@ xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhReq.send(getFormFields($form, $submitBtn)); + // Disable language selector + $('#language_selector :input, label').css('display', 'none'); + // Clear content setupAjaxLayout(); $('#loading_indicator').css('display', 'block'); -- cgit v1.2.1 From fbd5929606169d3f780f0a59760c171b20bd906d Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Thu, 23 Jul 2015 20:50:33 +0200 Subject: [ticket/13740] Login admin when install finished PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 91e8eb4797..4640d03de7 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -165,6 +165,19 @@ } } + // Set cookies + function setCookies(cookies) { + var cookie; + + for (var i = 0; i < cookies.length; i++) { + // Set cookie name and value + cookie = encodeURIComponent(cookies[i].name) + '=' + encodeURIComponent(cookies[i].value); + // Set path + cookie += '; path=/'; + document.cookie = cookie; + } + } + /** * Parse messages from the response object * @@ -199,6 +212,10 @@ if (responseObject.hasOwnProperty('nav')) { updateNavbarStatus(responseObject.nav); } + + if (responseObject.hasOwnProperty('cookies')) { + setCookies(responseObject.cookies); + } } /** @@ -321,6 +338,7 @@ $contentWrapper.append($spinner); } + // Submits a form function submitForm($form, $submitBtn) { $form.css('display', 'none'); -- cgit v1.2.1 From 3840882b93e96f8f510d4086d650bb9df55873ca Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Thu, 23 Jul 2015 23:35:20 +0200 Subject: [ticket/13740] Add success message when install finished PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 4640d03de7..da30f136bd 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -52,7 +52,7 @@ if (messages[i].hasOwnProperty('description')) { $description = $(document.createElement('p')); - $description.text(messages[i].description); + $description.html(messages[i].description); $msgElement.append($description); } @@ -69,6 +69,10 @@ $msgElement.addClass('log'); $logContainer.append($msgElement); break; + case 'success': + $msgElement.addClass('successbox'); + $errorContainer.prepend($msgElement); + break; } } } @@ -201,6 +205,10 @@ addMessage('log', responseObject.logs); } + if (responseObject.hasOwnProperty('success')) { + addMessage('success', responseObject.success); + } + if (responseObject.hasOwnProperty('form')) { addForm(responseObject.form); } -- cgit v1.2.1 From 27d2d58e0529172de7d0403292bc10842a45ef98 Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Thu, 23 Jul 2015 23:46:36 +0200 Subject: [ticket/13740] Use tabs instead of spaces in JS file PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 788 +++++++++++++++++------------------ 1 file changed, 394 insertions(+), 394 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index da30f136bd..4e44e2755c 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -3,398 +3,398 @@ */ (function($) { // Avoid conflicts with other libraries - 'use strict'; - - // Installer variables - var pollTimer = null; - var nextReadPosition = 0; - var progressBarTriggered = false; - var progressTimer = null; - var currentProgress = 0; - - // Template related variables - var $contentWrapper = $('.install-body').find('.main'); - - // Intercept form submits - interceptFormSubmit($('#install_install')); - - /** - * Creates an XHR object - * - * jQuery cannot be used as the response is streamed, and - * as of now, jQuery does not provide access to the response until - * the connection is not closed. - * - * @return XMLHttpRequest - */ - function createXhrObject() { - return new XMLHttpRequest(); - } - - /** - * Displays error, warning and log messages - * - * @param type - * @param messages - */ - function addMessage(type, messages) { - // Get message containers - var $errorContainer = $('#error-container'); - var $warningContainer = $('#warning-container'); - var $logContainer = $('#log-container'); - - var $title, $description, $msgElement, arraySize = messages.length; - for (var i = 0; i < arraySize; i++) { - $msgElement = $('

'); - $title = $(document.createElement('strong')); - $title.text(messages[i].title); - $msgElement.append($title); - - if (messages[i].hasOwnProperty('description')) { - $description = $(document.createElement('p')); - $description.html(messages[i].description); - $msgElement.append($description); - } - - switch (type) { - case 'error': - $msgElement.addClass('errorbox'); - $errorContainer.append($msgElement); - break; - case 'warning': - $msgElement.addClass('warningbox'); - $warningContainer.append($msgElement); - break; - case 'log': - $msgElement.addClass('log'); - $logContainer.append($msgElement); - break; - case 'success': - $msgElement.addClass('successbox'); - $errorContainer.prepend($msgElement); - break; - } - } - } - - /** - * Displays a form from the response - * - * @param formHtml - */ - function addForm(formHtml) { - var $formContainer = $('#content-container'); - $formContainer.html(formHtml); - var $form = $('#install_install'); - interceptFormSubmit($form); - } - - /** - * Handles navigation status updates - * - * @param navObj - */ - function updateNavbarStatus(navObj) { - var navID, $stage, $stageListItem, $active; - $active = $('#activemenu'); - - if (navObj.hasOwnProperty('finished')) { - // This should be an Array - var navItems = navObj.finished; - - for (var i = 0; i < navItems.length; i++) { - navID = 'installer-stage-' + navItems[i]; - $stage = $('#' + navID); - $stageListItem = $stage.parent(); - - if ($active.length && $active.is($stageListItem)) { - $active.removeAttr('id'); - } - - $stage.addClass('completed'); - } - } - - if (navObj.hasOwnProperty('active')) { - navID = 'installer-stage-' + navObj.active; - $stage = $('#' + navID); - $stageListItem = $stage.parent(); - - if ($active.length && !$active.is($stageListItem)) { - $active.removeAttr('id'); - } - - $stageListItem.attr('id', 'activemenu'); - } - } - - /** - * Renders progress bar - * - * @param progressObject - */ - function setProgress(progressObject) { - var $statusText, $progressBar, $progressText, $progressFiller; - - if (progressObject.task_name.length) { - if (!progressBarTriggered) { - // Create progress bar - var $contentContainer = $('#content-container'); - - // Create progress bar elements - $progressBar = $('
'); - $progressBar.attr('id', 'progress-bar'); - $progressText = $('

'); - $progressText.attr('id', 'progress-bar-text'); - $progressFiller = $(''); - $progressFiller.attr('id', 'progress-bar-filler'); - - $statusText = $('

'); - $statusText.attr('id', 'progress-status-text'); - - $progressBar.append($progressFiller); - $progressBar.append($progressText); - - $contentContainer.append($statusText); - $contentContainer.append($progressBar); - - progressBarTriggered = true; - } else { - $statusText = $('#progress-status-text'); - } - - // Update progress bar - $statusText.text(progressObject.task_name + '…'); - incrementProgressBar(Math.round(progressObject.task_num / progressObject.task_count * 100)); - } - } - - // Set cookies - function setCookies(cookies) { - var cookie; - - for (var i = 0; i < cookies.length; i++) { - // Set cookie name and value - cookie = encodeURIComponent(cookies[i].name) + '=' + encodeURIComponent(cookies[i].value); - // Set path - cookie += '; path=/'; - document.cookie = cookie; - } - } - - /** - * Parse messages from the response object - * - * @param messageJSON - */ - function parseMessage(messageJSON) { - $('#loading_indicator').css('display', 'none'); - - var responseObject = JSON.parse(messageJSON); - - // Parse object - if (responseObject.hasOwnProperty('errors')) { - addMessage('error', responseObject.errors); - } - - if (responseObject.hasOwnProperty('warnings')) { - addMessage('warning', responseObject.warnings); - } - - if (responseObject.hasOwnProperty('logs')) { - addMessage('log', responseObject.logs); - } - - if (responseObject.hasOwnProperty('success')) { - addMessage('success', responseObject.success); - } - - if (responseObject.hasOwnProperty('form')) { - addForm(responseObject.form); - } - - if (responseObject.hasOwnProperty('progress')) { - setProgress(responseObject.progress); - } - - if (responseObject.hasOwnProperty('nav')) { - updateNavbarStatus(responseObject.nav); - } - - if (responseObject.hasOwnProperty('cookies')) { - setCookies(responseObject.cookies); - } - } - - /** - * Process updates in streamed response - * - * @param xhReq XHR object - */ - function pollContent(xhReq) { - var messages = xhReq.responseText; - var msgSeparator = '}\n\n'; - var unprocessed, messageEndIndex, endOfMessageIndex, message; - - do { - unprocessed = messages.substring(nextReadPosition); - messageEndIndex = unprocessed.indexOf(msgSeparator); - - if (messageEndIndex !== -1) { - endOfMessageIndex = messageEndIndex + msgSeparator.length; - message = unprocessed.substring(0, endOfMessageIndex); - parseMessage(message); - nextReadPosition += endOfMessageIndex; - } - } while (messageEndIndex !== -1); - - if (xhReq.readyState === 4) { - $('#loading_indicator').css('display', 'none'); - resetPolling(); - } - } - - /** - * Animates the progress bar - * - * @param $progressText - * @param $progressFiller - * @param progressLimit - */ - function incrementFiller($progressText, $progressFiller, progressLimit) { - if (currentProgress >= progressLimit || currentProgress >= 100) { - clearInterval(progressTimer); - return; - } - - currentProgress++; - $progressText.text(currentProgress + '%'); - $progressFiller.css('width', currentProgress + '%'); - } - - /** - * Wrapper function for progress bar rendering and animating - * - * @param progressLimit - */ - function incrementProgressBar(progressLimit) { - var $progressFiller = $('#progress-bar-filler'); - var $progressText = $('#progress-bar-text'); - var progressStart = $progressFiller.width() / $progressFiller.offsetParent().width() * 100; - currentProgress = Math.floor(progressStart); - - clearInterval(progressTimer); - progressTimer = setInterval(function() { - incrementFiller($progressText, $progressFiller, progressLimit); - }, 10); - } - - /** - * Resets the polling timer - */ - function resetPolling() { - clearInterval(pollTimer); - nextReadPosition = 0; - } - - /** - * Sets up timer for processing the streamed HTTP response - * - * @param xhReq - */ - function startPolling(xhReq) { - resetPolling(); - pollTimer = setInterval(function () { - pollContent(xhReq); - }, 250); - } - - /** - * Renders the AJAX UI layout - */ - function setupAjaxLayout() { - // Clear content - $contentWrapper.html(''); - - var $header = $('

'); - $header.attr('id', 'header-container'); - $contentWrapper.append($header); - - var $description = $('
'); - $description.attr('id', 'description-container'); - $contentWrapper.append($description); - - var $errorContainer = $('
'); - $errorContainer.attr('id', 'error-container'); - $contentWrapper.append($errorContainer); - - var $warningContainer = $('
'); - $warningContainer.attr('id', 'warning-container'); - $contentWrapper.append($warningContainer); - - var $installerContentWrapper = $('
'); - $installerContentWrapper.attr('id', 'content-container'); - $contentWrapper.append($installerContentWrapper); - - var $logContainer = $('
'); - $logContainer.attr('id', 'log-container'); - $contentWrapper.append($logContainer); - - var $spinner = $('
'); - $spinner.attr('id', 'loading_indicator'); - $spinner.html(' '); - $contentWrapper.append($spinner); - } - - // Submits a form - function submitForm($form, $submitBtn) { - $form.css('display', 'none'); - - var xhReq = createXhrObject(); - xhReq.open('POST', $form.attr('action'), true); - xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - xhReq.send(getFormFields($form, $submitBtn)); - - // Disable language selector - $('#language_selector :input, label').css('display', 'none'); - - // Clear content - setupAjaxLayout(); - $('#loading_indicator').css('display', 'block'); - - startPolling(xhReq); - } - - /** - * Add submit button to the POST information - * - * @param $form - * @param $submitBtn - * - * @returns {*} - */ - function getFormFields($form, $submitBtn) { - var formData = $form.serialize(); - formData += ((formData.length) ? '&' : '') + encodeURIComponent($submitBtn.attr('name')) + '='; - formData += encodeURIComponent($submitBtn.attr('value')); - - return formData; - } - - /** - * Intercept form submit events and determine the submit button used - * - * @param $form - */ - function interceptFormSubmit($form) { - if (!$form.length) { - return; - } - - $form.find(':submit').bind('click', function (event) { - event.preventDefault(); - submitForm($form, $(this)); - }); - } + 'use strict'; + + // Installer variables + var pollTimer = null; + var nextReadPosition = 0; + var progressBarTriggered = false; + var progressTimer = null; + var currentProgress = 0; + + // Template related variables + var $contentWrapper = $('.install-body').find('.main'); + + // Intercept form submits + interceptFormSubmit($('#install_install')); + + /** + * Creates an XHR object + * + * jQuery cannot be used as the response is streamed, and + * as of now, jQuery does not provide access to the response until + * the connection is not closed. + * + * @return XMLHttpRequest + */ + function createXhrObject() { + return new XMLHttpRequest(); + } + + /** + * Displays error, warning and log messages + * + * @param type + * @param messages + */ + function addMessage(type, messages) { + // Get message containers + var $errorContainer = $('#error-container'); + var $warningContainer = $('#warning-container'); + var $logContainer = $('#log-container'); + + var $title, $description, $msgElement, arraySize = messages.length; + for (var i = 0; i < arraySize; i++) { + $msgElement = $('
'); + $title = $(document.createElement('strong')); + $title.text(messages[i].title); + $msgElement.append($title); + + if (messages[i].hasOwnProperty('description')) { + $description = $(document.createElement('p')); + $description.html(messages[i].description); + $msgElement.append($description); + } + + switch (type) { + case 'error': + $msgElement.addClass('errorbox'); + $errorContainer.append($msgElement); + break; + case 'warning': + $msgElement.addClass('warningbox'); + $warningContainer.append($msgElement); + break; + case 'log': + $msgElement.addClass('log'); + $logContainer.append($msgElement); + break; + case 'success': + $msgElement.addClass('successbox'); + $errorContainer.prepend($msgElement); + break; + } + } + } + + /** + * Displays a form from the response + * + * @param formHtml + */ + function addForm(formHtml) { + var $formContainer = $('#content-container'); + $formContainer.html(formHtml); + var $form = $('#install_install'); + interceptFormSubmit($form); + } + + /** + * Handles navigation status updates + * + * @param navObj + */ + function updateNavbarStatus(navObj) { + var navID, $stage, $stageListItem, $active; + $active = $('#activemenu'); + + if (navObj.hasOwnProperty('finished')) { + // This should be an Array + var navItems = navObj.finished; + + for (var i = 0; i < navItems.length; i++) { + navID = 'installer-stage-' + navItems[i]; + $stage = $('#' + navID); + $stageListItem = $stage.parent(); + + if ($active.length && $active.is($stageListItem)) { + $active.removeAttr('id'); + } + + $stage.addClass('completed'); + } + } + + if (navObj.hasOwnProperty('active')) { + navID = 'installer-stage-' + navObj.active; + $stage = $('#' + navID); + $stageListItem = $stage.parent(); + + if ($active.length && !$active.is($stageListItem)) { + $active.removeAttr('id'); + } + + $stageListItem.attr('id', 'activemenu'); + } + } + + /** + * Renders progress bar + * + * @param progressObject + */ + function setProgress(progressObject) { + var $statusText, $progressBar, $progressText, $progressFiller; + + if (progressObject.task_name.length) { + if (!progressBarTriggered) { + // Create progress bar + var $contentContainer = $('#content-container'); + + // Create progress bar elements + $progressBar = $('
'); + $progressBar.attr('id', 'progress-bar'); + $progressText = $('

'); + $progressText.attr('id', 'progress-bar-text'); + $progressFiller = $(''); + $progressFiller.attr('id', 'progress-bar-filler'); + + $statusText = $('

'); + $statusText.attr('id', 'progress-status-text'); + + $progressBar.append($progressFiller); + $progressBar.append($progressText); + + $contentContainer.append($statusText); + $contentContainer.append($progressBar); + + progressBarTriggered = true; + } else { + $statusText = $('#progress-status-text'); + } + + // Update progress bar + $statusText.text(progressObject.task_name + '…'); + incrementProgressBar(Math.round(progressObject.task_num / progressObject.task_count * 100)); + } + } + + // Set cookies + function setCookies(cookies) { + var cookie; + + for (var i = 0; i < cookies.length; i++) { + // Set cookie name and value + cookie = encodeURIComponent(cookies[i].name) + '=' + encodeURIComponent(cookies[i].value); + // Set path + cookie += '; path=/'; + document.cookie = cookie; + } + } + + /** + * Parse messages from the response object + * + * @param messageJSON + */ + function parseMessage(messageJSON) { + $('#loading_indicator').css('display', 'none'); + + var responseObject = JSON.parse(messageJSON); + + // Parse object + if (responseObject.hasOwnProperty('errors')) { + addMessage('error', responseObject.errors); + } + + if (responseObject.hasOwnProperty('warnings')) { + addMessage('warning', responseObject.warnings); + } + + if (responseObject.hasOwnProperty('logs')) { + addMessage('log', responseObject.logs); + } + + if (responseObject.hasOwnProperty('success')) { + addMessage('success', responseObject.success); + } + + if (responseObject.hasOwnProperty('form')) { + addForm(responseObject.form); + } + + if (responseObject.hasOwnProperty('progress')) { + setProgress(responseObject.progress); + } + + if (responseObject.hasOwnProperty('nav')) { + updateNavbarStatus(responseObject.nav); + } + + if (responseObject.hasOwnProperty('cookies')) { + setCookies(responseObject.cookies); + } + } + + /** + * Process updates in streamed response + * + * @param xhReq XHR object + */ + function pollContent(xhReq) { + var messages = xhReq.responseText; + var msgSeparator = '}\n\n'; + var unprocessed, messageEndIndex, endOfMessageIndex, message; + + do { + unprocessed = messages.substring(nextReadPosition); + messageEndIndex = unprocessed.indexOf(msgSeparator); + + if (messageEndIndex !== -1) { + endOfMessageIndex = messageEndIndex + msgSeparator.length; + message = unprocessed.substring(0, endOfMessageIndex); + parseMessage(message); + nextReadPosition += endOfMessageIndex; + } + } while (messageEndIndex !== -1); + + if (xhReq.readyState === 4) { + $('#loading_indicator').css('display', 'none'); + resetPolling(); + } + } + + /** + * Animates the progress bar + * + * @param $progressText + * @param $progressFiller + * @param progressLimit + */ + function incrementFiller($progressText, $progressFiller, progressLimit) { + if (currentProgress >= progressLimit || currentProgress >= 100) { + clearInterval(progressTimer); + return; + } + + currentProgress++; + $progressText.text(currentProgress + '%'); + $progressFiller.css('width', currentProgress + '%'); + } + + /** + * Wrapper function for progress bar rendering and animating + * + * @param progressLimit + */ + function incrementProgressBar(progressLimit) { + var $progressFiller = $('#progress-bar-filler'); + var $progressText = $('#progress-bar-text'); + var progressStart = $progressFiller.width() / $progressFiller.offsetParent().width() * 100; + currentProgress = Math.floor(progressStart); + + clearInterval(progressTimer); + progressTimer = setInterval(function() { + incrementFiller($progressText, $progressFiller, progressLimit); + }, 10); + } + + /** + * Resets the polling timer + */ + function resetPolling() { + clearInterval(pollTimer); + nextReadPosition = 0; + } + + /** + * Sets up timer for processing the streamed HTTP response + * + * @param xhReq + */ + function startPolling(xhReq) { + resetPolling(); + pollTimer = setInterval(function () { + pollContent(xhReq); + }, 250); + } + + /** + * Renders the AJAX UI layout + */ + function setupAjaxLayout() { + // Clear content + $contentWrapper.html(''); + + var $header = $('

'); + $header.attr('id', 'header-container'); + $contentWrapper.append($header); + + var $description = $('
'); + $description.attr('id', 'description-container'); + $contentWrapper.append($description); + + var $errorContainer = $('
'); + $errorContainer.attr('id', 'error-container'); + $contentWrapper.append($errorContainer); + + var $warningContainer = $('
'); + $warningContainer.attr('id', 'warning-container'); + $contentWrapper.append($warningContainer); + + var $installerContentWrapper = $('
'); + $installerContentWrapper.attr('id', 'content-container'); + $contentWrapper.append($installerContentWrapper); + + var $logContainer = $('
'); + $logContainer.attr('id', 'log-container'); + $contentWrapper.append($logContainer); + + var $spinner = $('
'); + $spinner.attr('id', 'loading_indicator'); + $spinner.html(' '); + $contentWrapper.append($spinner); + } + + // Submits a form + function submitForm($form, $submitBtn) { + $form.css('display', 'none'); + + var xhReq = createXhrObject(); + xhReq.open('POST', $form.attr('action'), true); + xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xhReq.send(getFormFields($form, $submitBtn)); + + // Disable language selector + $('#language_selector :input, label').css('display', 'none'); + + // Clear content + setupAjaxLayout(); + $('#loading_indicator').css('display', 'block'); + + startPolling(xhReq); + } + + /** + * Add submit button to the POST information + * + * @param $form + * @param $submitBtn + * + * @returns {*} + */ + function getFormFields($form, $submitBtn) { + var formData = $form.serialize(); + formData += ((formData.length) ? '&' : '') + encodeURIComponent($submitBtn.attr('name')) + '='; + formData += encodeURIComponent($submitBtn.attr('value')); + + return formData; + } + + /** + * Intercept form submit events and determine the submit button used + * + * @param $form + */ + function interceptFormSubmit($form) { + if (!$form.length) { + return; + } + + $form.find(':submit').bind('click', function (event) { + event.preventDefault(); + submitForm($form, $(this)); + }); + } })(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From 0d88b3f9e9f8d845044febce3c5df4f7e73b61f6 Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Fri, 24 Jul 2015 11:06:50 +0200 Subject: [ticket/13740] Fix message element creation in JS PHPBB3-13740 --- phpBB/assets/javascript/installer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 4e44e2755c..56bfd6aea9 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -46,12 +46,12 @@ var $title, $description, $msgElement, arraySize = messages.length; for (var i = 0; i < arraySize; i++) { $msgElement = $('
'); - $title = $(document.createElement('strong')); + $title = $(''); $title.text(messages[i].title); $msgElement.append($title); if (messages[i].hasOwnProperty('description')) { - $description = $(document.createElement('p')); + $description = $('

'); $description.html(messages[i].description); $msgElement.append($description); } -- cgit v1.2.1