// Copyright 1999-2024. WebPros International GmbH. All rights reserved.
const PanelMigrator = {};
function formatMessage()
{
var result = arguments[0];
for (var i = 1; i < arguments.length; i++) {
result = result.replace("%" + i, arguments[i]);
}
return result;
}
// Convert newlines to HTML line breaks (
tag)
function nl2br(str)
{
return str.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1
$2');
}
function formatStr(str)
{
return nl2br(str.escapeHTML());
}
// Get URL to migrator's image (from htdocs/images directory) specified by image filename,
// which could be used in "src" attribute of
tag.
function migratorImage(image)
{
return "/modules/panel-migrator/images/" + image;
}
// Shortcut to set on click handler for child elements of specified root element matching specified CSS class.
function observeClickOnChildElement(rootElement, childClass, callback)
{
rootElement.select('.' + childClass).each(function(childElement) {
childElement.observe('click', callback);
});
}
// Shortcut to toggle (show/hide) child elements of specified root element matching specified CSS class.
function toggleChildElement(rootElement, childClass, isToggle)
{
rootElement.select('.' + childClass).each(function(childElement) {
childElement.toggle(isToggle);
});
}
// Shortcut to get text content of a child element
function getChildElementText(rootElement, childClass)
{
var result = null;
rootElement.select('.' + childClass).each(function(childElement) {
result = childElement.textContent;
});
return result;
}
// Count items in an array which conform to some condition.
function countItems(object, conditionFunction)
{
var result = 0;
for (var key in object) {
if (object.hasOwnProperty(key)) {
if (conditionFunction(key, object[key])) {
result += 1;
}
}
}
return result;
}
// Check if array contains an element conforming some condition.
// Condition is specified by function, which should accept one argument - item from the array,
// and return true if item conforms to the condition, false otherwise.
function containsElement(array, conditionFunction)
{
for (var i = 0; i < array.length; i++) {
if (conditionFunction(array[i])) {
return true;
}
}
return false;
}
// Shortcut to check if item is in array
function inArray(item, array)
{
return array.indexOf(item) >= 0;
}
// Get property recursively by list of property names
// For example, if we have object
// o = {'a': {'b': {'c': 'd', 'e': 'f'}}}
// the function call
// getPropertyChain(o, ['a', 'b', 'c'])
// will return
// 'd'
// Also, default value could be specified - if any of the properties in the chain is not found,
// the default value is returned
function getPropertyChain(object, propertiesList, defaultValue)
{
var item = object;
for (var i = 0; i < propertiesList.length; i++) {
var propertyName = propertiesList[i];
if (item.hasOwnProperty(propertyName)) {
item = item[propertyName];
} else {
return defaultValue;
}
}
return item;
}
// Show only one element from specified list, hide all the others
function showOnly(allElements, elementToShow)
{
for (var i = 0; i < allElements.length; i++) {
var element = allElements[i];
if (element === elementToShow) {
element.show();
} else {
element.hide();
}
}
}
// Simple comparison function to compare properties of 2 objects
function objectsEqual(obj1, obj2) {
if (obj1 === obj2) {
return true;
}
if (!(obj1 instanceof Object) || !(obj2 instanceof Object)) {
return false;
}
for (var key1 in obj1) {
if (obj1.hasOwnProperty(key1)) {
if (!obj2.hasOwnProperty(key1)) {
return false;
}
if (!objectsEqual(obj1[key1], obj2[key1])) {
return false;
}
}
}
for (var key2 in obj2) {
if (obj2.hasOwnProperty(key2)) {
if (!obj1.hasOwnProperty(key2)) {
return false;
}
if (!objectsEqual(obj1[key2], obj2[key2])) {
return false;
}
}
}
return true;
}
// Disable button and show spinner that operation is in progress
function disableButtonInProgress(button, progressLocaleKey)
{
disableButtonPlain(button);
button.update('' + migratorLocale.lmsg(progressLocaleKey) + '')
}
// Disable button
function disableButtonPlain(button)
{
button.disabled = true;
button.up().addClassName('disabled');
}
// Common enumerations
var issueSeverity = {
ERROR: 'error',
WARNING: 'warning'
};
var statuses = {
FINISHED_OK: 'finished-ok',
FINISHED_ERRORS: 'finished-errors',
FINISHED_WARNINGS: 'finished-warnings',
ON_HOLD: 'on-hold',
IN_PROGRESS: 'in-progress',
CANCELLED: 'cancelled',
NOT_STARTED: 'not-started'
};
Jsw.onReady(function() {
var lastKeys = [];
var pass = 'pleskmigratoriddqd';
Event.observe(document, 'keypress', function(event) {
var key = event.key;
lastKeys.push(key);
if (lastKeys.length > pass.length) {
lastKeys.shift();
}
if (lastKeys.length == pass.length) {
if (pass == lastKeys.join('')) {
new Ajax.Request('/modules/panel-migrator/index.php/index/toggle-advanced-mode', {
onSuccess: function (response) {
window.location.reload(true);
}
});
}
}
});
});
PanelMigrator.initAppState = function () {
const state = { mounted: true };
const pathChangeObserver = PanelMigrator.observePathChange(() => {
state.mounted = false;
pathChangeObserver.disconnect();
});
return state;
}
PanelMigrator.observePathChange = function (callback) {
let oldPathname = document.location.pathname;
const body = document.querySelector('body');
const observer = new MutationObserver(() => {
if (oldPathname !== document.location.pathname) {
oldPathname = document.location.pathname;
callback();
}
});
observer.observe(body, { childList: true, subtree: true });
return observer;
};