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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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/installer.js') 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 From 8f5a0ad6f73e7b7757b02c827436384c96069b5a Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Fri, 24 Jul 2015 09:20:50 +0200 Subject: [ticket/14039] Revamp updater PHPBB3-14039 --- phpBB/assets/javascript/installer.js | 121 ++++++++++++++++++++++++++++++++--- 1 file changed, 112 insertions(+), 9 deletions(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 56bfd6aea9..db0c0870ff 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -11,6 +11,7 @@ var progressBarTriggered = false; var progressTimer = null; var currentProgress = 0; + var refreshRequested = false; // Template related variables var $contentWrapper = $('.install-body').find('.main'); @@ -67,7 +68,8 @@ break; case 'log': $msgElement.addClass('log'); - $logContainer.append($msgElement); + $logContainer.prepend($msgElement); + $logContainer.addClass('show_border'); break; case 'success': $msgElement.addClass('successbox'); @@ -77,13 +79,54 @@ } } + /** + * Render a download box + */ + function addDownloadBox(downloadArray) + { + var $downloadContainer = $('#download-wrapper'); + var $downloadBox, $title, $content, $link; + + for (var i = 0; i < downloadArray.length; i++) { + $downloadBox = $('

'); + $downloadBox.addClass('download-box'); + + $title = $(''); + $title.text(downloadArray[i].title); + $downloadBox.append($title); + + if (downloadArray[i].hasOwnProperty('msg')) { + $content = $('

'); + $content.text(downloadArray[i].msg); + $downloadBox.append($content); + } + + $link = $(''); + $link.addClass('button1'); + $link.attr('href', downloadArray[i].href); + $link.text(downloadArray[i].download); + $downloadBox.append($link); + + $downloadContainer.append($downloadBox); + } + } + + /** + * Render update files' status + */ + function addUpdateFileStatus(fileStatus) + { + var $statusContainer = $('#file-status-wrapper'); + $statusContainer.html(fileStatus); + } + /** * Displays a form from the response * * @param formHtml */ function addForm(formHtml) { - var $formContainer = $('#content-container'); + var $formContainer = $('#form-wrapper'); $formContainer.html(formHtml); var $form = $('#install_install'); interceptFormSubmit($form); @@ -139,7 +182,7 @@ if (progressObject.task_name.length) { if (!progressBarTriggered) { // Create progress bar - var $contentContainer = $('#content-container'); + var $progressBarWrapper = $('#progress-bar-container'); // Create progress bar elements $progressBar = $('

'); @@ -155,10 +198,21 @@ $progressBar.append($progressFiller); $progressBar.append($progressText); - $contentContainer.append($statusText); - $contentContainer.append($progressBar); + $progressBarWrapper.append($statusText); + $progressBarWrapper.append($progressBar); progressBarTriggered = true; + } else if (progressObject.hasOwnProperty('restart')) { + clearInterval(progressTimer); + + $progressFiller = $('#progress-bar-filler'); + $progressText = $('#progress-bar-text'); + $statusText = $('#progress-status-text'); + + $progressText.text('0%'); + $progressFiller.css('width', '0%'); + + currentProgress = 0; } else { $statusText = $('#progress-status-text'); } @@ -217,6 +271,14 @@ setProgress(responseObject.progress); } + if (responseObject.hasOwnProperty('download')) { + addDownloadBox(responseObject.download); + } + + if (responseObject.hasOwnProperty('file_status')) { + addUpdateFileStatus(responseObject.file_status); + } + if (responseObject.hasOwnProperty('nav')) { updateNavbarStatus(responseObject.nav); } @@ -224,6 +286,10 @@ if (responseObject.hasOwnProperty('cookies')) { setCookies(responseObject.cookies); } + + if (responseObject.hasOwnProperty('refresh')) { + refreshRequested = true; + } } /** @@ -243,7 +309,7 @@ if (messageEndIndex !== -1) { endOfMessageIndex = messageEndIndex + msgSeparator.length; message = unprocessed.substring(0, endOfMessageIndex); - parseMessage(message); + parseMessage($.trim(message)); nextReadPosition += endOfMessageIndex; } } while (messageEndIndex !== -1); @@ -251,6 +317,11 @@ if (xhReq.readyState === 4) { $('#loading_indicator').css('display', 'none'); resetPolling(); + + if (refreshRequested) { + refreshRequested = false; + doRefresh(); + } } } @@ -309,10 +380,26 @@ }, 250); } + /** + * Refresh page + */ + function doRefresh() { + resetPolling(); + + var xhReq = createXhrObject(); + xhReq.open('GET', $(location).attr('pathname'), true); + xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhReq.send(); + + startPolling(xhReq); + } + /** * Renders the AJAX UI layout */ function setupAjaxLayout() { + progressBarTriggered = false; + // Clear content $contentWrapper.html(''); @@ -332,14 +419,30 @@ $warningContainer.attr('id', 'warning-container'); $contentWrapper.append($warningContainer); - var $installerContentWrapper = $('
'); - $installerContentWrapper.attr('id', 'content-container'); - $contentWrapper.append($installerContentWrapper); + var $progressContainer = $('
'); + $progressContainer.attr('id', 'progress-bar-container'); + $contentWrapper.append($progressContainer); var $logContainer = $('
'); $logContainer.attr('id', 'log-container'); $contentWrapper.append($logContainer); + var $installerContentWrapper = $('
'); + $installerContentWrapper.attr('id', 'content-container'); + $contentWrapper.append($installerContentWrapper); + + var $installerDownloadWrapper = $('
'); + $installerDownloadWrapper.attr('id', 'download-wrapper'); + $installerContentWrapper.append($installerDownloadWrapper); + + var $updaterFileStatusWrapper = $('
'); + $updaterFileStatusWrapper.attr('id', 'file-status-wrapper'); + $installerContentWrapper.append($updaterFileStatusWrapper); + + var $formWrapper = $('
'); + $formWrapper.attr('id', 'form-wrapper'); + $installerContentWrapper.append($formWrapper); + var $spinner = $('
'); $spinner.attr('id', 'loading_indicator'); $spinner.html(' '); -- cgit v1.2.1 From 74ae7d2a8d396701f0ae8bdbcb19cd67135c5f8d Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Sun, 18 Oct 2015 11:33:49 +0200 Subject: [ticket/14039] Only show log container when it has content PHPBB3-14039 --- phpBB/assets/javascript/installer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index db0c0870ff..e61adc7f99 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -69,7 +69,7 @@ case 'log': $msgElement.addClass('log'); $logContainer.prepend($msgElement); - $logContainer.addClass('show_border'); + $logContainer.addClass('show_log_container'); break; case 'success': $msgElement.addClass('successbox'); -- cgit v1.2.1 From e02432ec82a03539b94cad2814f2603d8bfe3a0b Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Sun, 8 Nov 2015 22:06:10 +0100 Subject: [ticket/14277] Fix undefined index error in migrations PHPBB3-14277 --- phpBB/assets/javascript/installer.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index e61adc7f99..4930d16901 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -243,8 +243,21 @@ */ function parseMessage(messageJSON) { $('#loading_indicator').css('display', 'none'); + var responseObject; - var responseObject = JSON.parse(messageJSON); + try { + responseObject = JSON.parse(messageJSON); + } + catch (err) { + if (window.console) { + console.log('Failed to parse JSON object\n\nMessage: ' + err.message + '\n\nServer Response: ' + messageJSON); + } else { + alert('Failed to parse JSON object\n\nMessage: ' + err.message + '\n\nServer Response: ' + messageJSON); + } + + resetPolling(); + return; + } // Parse object if (responseObject.hasOwnProperty('errors')) { -- cgit v1.2.1 From 671598656c8f04c8d072835b0fe26d12ca564067 Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Mon, 9 Nov 2015 09:15:17 +0100 Subject: [ticket/14277] Fix CS PHPBB3-14277 --- phpBB/assets/javascript/installer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 4930d16901..4fc2e55b66 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -247,8 +247,7 @@ try { responseObject = JSON.parse(messageJSON); - } - catch (err) { + } catch (err) { if (window.console) { console.log('Failed to parse JSON object\n\nMessage: ' + err.message + '\n\nServer Response: ' + messageJSON); } else { -- cgit v1.2.1 From d7317c9b25e5343bc28bd7cee7ad825cba30734a Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 7 Dec 2015 16:41:23 +0100 Subject: [ticket/14310] Put progress percentage inside span and make more visible PHPBB3-14310 --- phpBB/assets/javascript/installer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 4fc2e55b66..c5909556c6 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -191,12 +191,12 @@ $progressText.attr('id', 'progress-bar-text'); $progressFiller = $(''); $progressFiller.attr('id', 'progress-bar-filler'); + $progressFiller.html($progressText); $statusText = $('

'); $statusText.attr('id', 'progress-status-text'); $progressBar.append($progressFiller); - $progressBar.append($progressText); $progressBarWrapper.append($statusText); $progressBarWrapper.append($progressBar); -- cgit v1.2.1 From a649768e17d25bcf55ae539420abe4eb4b7a1ef1 Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Wed, 28 Oct 2015 15:00:11 +0100 Subject: [ticket/14262] Move convertor to controller PHPBB3-14262 --- phpBB/assets/javascript/installer.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index c5909556c6..7bb2bb426d 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -236,6 +236,22 @@ } } + // Redirects user + function redirect(url, use_ajax) { + if (use_ajax) { + resetPolling(); + + var xhReq = createXhrObject(); + xhReq.open('GET', url, true); + xhReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhReq.send(); + + startPolling(xhReq); + } else { + window.location.href = url; + } + } + /** * Parse messages from the response object * @@ -302,6 +318,10 @@ if (responseObject.hasOwnProperty('refresh')) { refreshRequested = true; } + + if (responseObject.hasOwnProperty('redirect')) { + redirect(responseObject.redirect.url, responseObject.redirect.use_ajax); + } } /** -- cgit v1.2.1 From 43cdb35b848b914d11cc1ccb57f84497a012db86 Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Fri, 29 Jan 2016 17:06:23 +0100 Subject: [ticket/14438] Allign progressbar text to center PHPBB3-14438 --- phpBB/assets/javascript/installer.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index c5909556c6..5f2c65c776 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -177,7 +177,7 @@ * @param progressObject */ function setProgress(progressObject) { - var $statusText, $progressBar, $progressText, $progressFiller; + var $statusText, $progressBar, $progressText, $progressFiller, $progressFillerText; if (progressObject.task_name.length) { if (!progressBarTriggered) { @@ -189,18 +189,23 @@ $progressBar.attr('id', 'progress-bar'); $progressText = $('

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

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

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

'); $statusText.attr('id', 'progress-status-text'); + $progressFiller.append($progressFillerText); + $progressBar.append($progressText); $progressBar.append($progressFiller); $progressBarWrapper.append($statusText); $progressBarWrapper.append($progressBar); + $progressFillerText.css('width', $progressBar.width()); + progressBarTriggered = true; } else if (progressObject.hasOwnProperty('restart')) { clearInterval(progressTimer); @@ -210,6 +215,7 @@ $statusText = $('#progress-status-text'); $progressText.text('0%'); + $progressFillerText.text('0%'); $progressFiller.css('width', '0%'); currentProgress = 0; @@ -342,15 +348,20 @@ * * @param $progressText * @param $progressFiller + * @param $progressFillerText * @param progressLimit */ - function incrementFiller($progressText, $progressFiller, progressLimit) { + function incrementFiller($progressText, $progressFiller, $progressFillerText, progressLimit) { if (currentProgress >= progressLimit || currentProgress >= 100) { clearInterval(progressTimer); return; } + var $progressBar = $('#progress-bar'); + currentProgress++; + $progressFillerText.css('width', $progressBar.width()); + $progressFillerText.text(currentProgress + '%'); $progressText.text(currentProgress + '%'); $progressFiller.css('width', currentProgress + '%'); } @@ -362,13 +373,14 @@ */ function incrementProgressBar(progressLimit) { var $progressFiller = $('#progress-bar-filler'); + var $progressFillerText = $('#progress-bar-filler-text'); 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); + incrementFiller($progressText, $progressFiller, $progressFillerText, progressLimit); }, 10); } -- cgit v1.2.1 From 7cdeb70bcf0fd4eb9c06fbbca2160df11758f474 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Fri, 5 Feb 2016 10:29:49 +0100 Subject: [ticket/14452] Define $progressFillerText in installer.js PHPBB3-14452 --- phpBB/assets/javascript/installer.js | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 958450ed57..4a4f381844 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -211,6 +211,7 @@ clearInterval(progressTimer); $progressFiller = $('#progress-bar-filler'); + $progressFillerText = $('#progress-bar-filler-text'); $progressText = $('#progress-bar-text'); $statusText = $('#progress-status-text'); -- cgit v1.2.1 From 955b9ede33c5696173a760ea271ec32d79e843b9 Mon Sep 17 00:00:00 2001 From: Mate Bartus Date: Thu, 11 Feb 2016 13:18:30 +0100 Subject: [ticket/14462] Further speed improvements - Cache the secondary container - Only initialize tasks/modules that are being used - Add timeout error message in the AJAX UI PHPBB3-14462 --- phpBB/assets/javascript/installer.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 4a4f381844..0e54654ff1 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -12,6 +12,7 @@ var progressTimer = null; var currentProgress = 0; var refreshRequested = false; + var transmissionOver = false; // Template related variables var $contentWrapper = $('.install-body').find('.main'); @@ -329,6 +330,12 @@ if (responseObject.hasOwnProperty('redirect')) { redirect(responseObject.redirect.url, responseObject.redirect.use_ajax); } + + if (responseObject.hasOwnProperty('over')) { + if (responseObject.over) { + transmissionOver = true; + } + } } /** @@ -357,10 +364,21 @@ $('#loading_indicator').css('display', 'none'); resetPolling(); + var timeoutDetected = !transmissionOver; + if (refreshRequested) { refreshRequested = false; doRefresh(); } + + if (timeoutDetected) { + addMessage('error', + [{ + title:'The installer detected a timeout.', + description: 'The installer has detected a timeout, you may try to refresh the page, that may lead to data corruption. We suggest that you either increase your timeout settings or try to use the CLI.' + }] + ); + } } } @@ -420,6 +438,7 @@ */ function startPolling(xhReq) { resetPolling(); + transmissionOver = false; pollTimer = setInterval(function () { pollContent(xhReq); }, 250); -- cgit v1.2.1 From 2084404d2a0648d406749d67e44f1ba3ba44d7df Mon Sep 17 00:00:00 2001 From: Oliver Schramm Date: Sat, 13 Feb 2016 23:10:40 +0100 Subject: [ticket/14462] Make timeout error translateable PHPBB3-14462 --- phpBB/assets/javascript/installer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 0e54654ff1..d9f446a28d 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -374,8 +374,8 @@ if (timeoutDetected) { addMessage('error', [{ - title:'The installer detected a timeout.', - description: 'The installer has detected a timeout, you may try to refresh the page, that may lead to data corruption. We suggest that you either increase your timeout settings or try to use the CLI.' + title: installLang.title, + description: installLang.msg }] ); } -- cgit v1.2.1 From 062358f8b1d9a7fa3d9be97f6b58e06fea7ca844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Bartus?= Date: Sun, 28 Feb 2016 00:19:24 +0100 Subject: [ticket/14487] Try to handle connection timeouts PHPBB3-14487 --- phpBB/assets/javascript/installer.js | 62 ++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 6 deletions(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index d9f446a28d..03b5b7deae 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -13,6 +13,9 @@ var currentProgress = 0; var refreshRequested = false; var transmissionOver = false; + var status = ''; + var statusCount = 0; + var statusTimeout = null; // Template related variables var $contentWrapper = $('.install-body').find('.main'); @@ -372,12 +375,45 @@ } if (timeoutDetected) { - addMessage('error', - [{ - title: installLang.title, - description: installLang.msg - }] - ); + status = queryInstallerStatus(); + statusCount = 0; + + if (status === 'continue') { + refreshRequested = false; + doRefresh(); + } else if (status === 'running') { + statusTimeout = setTimeout(function() { + var s = queryInstallerStatus(); + if (statusCount === 12) { // 1 minute hard cap + s = 'fail'; + } + + if (s === 'continue') { + refreshRequested = false; + doRefresh(); + clearTimeout(statusTimeout); + } else if (s === 'fail') { + addMessage('error', + [{ + title: installLang.title, + description: installLang.msg + }] + ); + clearTimeout(statusTimeout); + } + + statusCount++; + }, + 5000 + ); + } else { + addMessage('error', + [{ + title: installLang.title, + description: installLang.msg + }] + ); + } } } } @@ -564,4 +600,18 @@ submitForm($form, $(this)); }); } + + /** + * Queries the installer's status + */ + function queryInstallerStatus() + { + var data = null; + $.ajax({url: "../installer/status", dataType: "json"}) + .done(function(d) { + data = d; + }); + + return data.status; + } })(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From 8993fef9c0ac2b49b9d51f9f804a13193ec64c36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Bartus?= Date: Mon, 29 Feb 2016 16:18:35 +0100 Subject: [ticket/14487] Update javascript PHPBB3-14487 --- phpBB/assets/javascript/installer.js | 104 +++++++++++++++++------------------ 1 file changed, 50 insertions(+), 54 deletions(-) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 03b5b7deae..166c2ec472 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -13,9 +13,7 @@ var currentProgress = 0; var refreshRequested = false; var transmissionOver = false; - var status = ''; var statusCount = 0; - var statusTimeout = null; // Template related variables var $contentWrapper = $('.install-body').find('.main'); @@ -341,6 +339,55 @@ } } + /** + * Processes status data + * + * @param status + */ + function processTimeoutResponse(status) { + if (statusCount === 12) { // 1 minute hard cap + status = 'fail'; + } + + if (status === 'continue') { + refreshRequested = false; + doRefresh(); + } else if (status === 'running') { + statusCount++; + setTimeout(queryInstallerStatus, 5000); + } else { + addMessage('error', + [{ + title: installLang.title, + description: installLang.msg + }] + ); + } + } + + /** + * Queries the installer's status + */ + function queryInstallerStatus() { + var url = $(location).attr('pathname'); + var lookUp = 'install/app.php'; + var position = url.indexOf(lookUp); + + if (position === -1) { + lookUp = 'install'; + position = url.indexOf(lookUp); + + if (position === -1) { + return false; + } + } + + url = url.substring(0, position) + lookUp + '/installer/status'; + $.getJSON(url, function(data) { + processTimeoutResponse(data.status); + }); + } + /** * Process updates in streamed response * @@ -375,45 +422,8 @@ } if (timeoutDetected) { - status = queryInstallerStatus(); statusCount = 0; - - if (status === 'continue') { - refreshRequested = false; - doRefresh(); - } else if (status === 'running') { - statusTimeout = setTimeout(function() { - var s = queryInstallerStatus(); - if (statusCount === 12) { // 1 minute hard cap - s = 'fail'; - } - - if (s === 'continue') { - refreshRequested = false; - doRefresh(); - clearTimeout(statusTimeout); - } else if (s === 'fail') { - addMessage('error', - [{ - title: installLang.title, - description: installLang.msg - }] - ); - clearTimeout(statusTimeout); - } - - statusCount++; - }, - 5000 - ); - } else { - addMessage('error', - [{ - title: installLang.title, - description: installLang.msg - }] - ); - } + queryInstallerStatus(); } } } @@ -600,18 +610,4 @@ submitForm($form, $(this)); }); } - - /** - * Queries the installer's status - */ - function queryInstallerStatus() - { - var data = null; - $.ajax({url: "../installer/status", dataType: "json"}) - .done(function(d) { - data = d; - }); - - return data.status; - } })(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From dacbf0922756a930821337b2d95d9982df1a43cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Bartus?= Date: Mon, 29 Feb 2016 16:40:09 +0100 Subject: [ticket/14487] Add loading indicator while polling status PHPBB3-14487 --- phpBB/assets/javascript/installer.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB/assets/javascript/installer.js') diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 166c2ec472..a11b76b863 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -354,8 +354,10 @@ doRefresh(); } else if (status === 'running') { statusCount++; + $('#loading_indicator').css('display', 'block'); setTimeout(queryInstallerStatus, 5000); } else { + $('#loading_indicator').css('display', 'none'); addMessage('error', [{ title: installLang.title, -- cgit v1.2.1