Viewing File: /usr/local/cpanel/base/frontend/jupiter/tools/index.cmb.js
/*
* tools/views/sslStatus.js Copyright 2022 cPanel, L.L.C.
* All rights reserved.
* copyright@cpanel.net http://cpanel.net
* This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
define(
'app/views/sslStatus',[
"angular",
"cjt/util/locale",
"cjt/modules",
"cjt/services/cpanel/SSLStatus",
"uiBootstrap",
],
function(angular, LOCALE, modules, SSLStatus) {
"use strict";
var MODULE_NAMESPACE = "cpanel.tools.views.sslStatus";
var MODULE_DEPENDANCIES = [
"cjt2.cpanel",
SSLStatus.namespace,
];
var CONTROLLER_NAME = "sslStatusController";
var CONTROLLER_INJECTABLES = ["$scope", SSLStatus.serviceName, "$timeout"];
var CONTROLLER = function SSLStatusController($scope, $service, $timeout) {
$scope.sslStatusString = null;
$scope.sslStatusLoaded = false;
$scope.sslValidationIconClasses = "fas fa-spinner fa-spin";
$scope.statusColorClasses = "";
$scope.certErrorsMessage = "";
$scope.domainLink = "#";
$scope._setSSLCertificate = function _setSSLCertificate(sslCertificate) {
$scope.sslStatusLoaded = true;
$scope.sslStatusString = sslCertificate.getTypeName();
$scope.expandedSslStatusString = sslCertificate.getTypeName({ stripMarkup: true });
$scope.sslValidationIconClasses = sslCertificate.getIconClasses() === "fas fa-unlock-alt" ? "ri-lock-unlock-line" : "ri-lock-line";
$scope.statusColorClasses = sslCertificate.getStatusColorClass();
$scope.sslSecured = $scope.statusColorClasses !== "text-danger";
$scope.certHasErrors = sslCertificate.hasErrors;
$scope.certErrorsMessage = LOCALE.maketext("The certificate has the following errors: [list_and,_1]", sslCertificate.getErrors());
// since a cert is always returned, if it has any kind of validation type, display it as ssl
$scope.domainLink = sslCertificate.validationType ? "https://" + $scope.primaryDomain : "http://" + $scope.primaryDomain;
};
$scope._domainNotSet = function _domainNotSet() {
throw "primaryDomain must be set on init";
};
// return this for testing
return $timeout(function() {
if (!$scope.primaryDomain) {
$scope._domainNotSet();
return;
}
$scope.domainLink = "http://" + $scope.primaryDomain;
return $service.getDomainSSLCertificate($scope.primaryDomain, true).then($scope._setSSLCertificate.bind($scope));
}, 1);
};
CONTROLLER_INJECTABLES.push(CONTROLLER);
var app = angular.module(MODULE_NAMESPACE, MODULE_DEPENDANCIES);
app.controller(CONTROLLER_NAME, CONTROLLER_INJECTABLES);
return {
"controller": CONTROLLER_NAME,
"class": CONTROLLER,
"namespace": MODULE_NAMESPACE,
};
}
);
(function(root) {
define("jquery-chosen", ["jquery"], function() {
return (function() {
/*!
Chosen, a Select Box Enhancer for jQuery and Prototype
by Patrick Filler for Harvest, http://getharvest.com
Version 1.5.1
Full source at https://github.com/harvesthq/chosen
Copyright (c) 2011-2016 Harvest http://getharvest.com
MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
This file is generated by `grunt build`, do not edit it by hand.
*/
(function() {
var $, AbstractChosen, Chosen, SelectParser, _ref,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
SelectParser = (function() {
function SelectParser() {
this.options_index = 0;
this.parsed = [];
}
SelectParser.prototype.add_node = function(child) {
if (child.nodeName.toUpperCase() === "OPTGROUP") {
return this.add_group(child);
} else {
return this.add_option(child);
}
};
SelectParser.prototype.add_group = function(group) {
var group_position, option, _i, _len, _ref, _results;
group_position = this.parsed.length;
this.parsed.push({
array_index: group_position,
group: true,
label: this.escapeExpression(group.label),
title: group.title ? group.title : void 0,
children: 0,
disabled: group.disabled,
classes: group.className
});
_ref = group.childNodes;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
_results.push(this.add_option(option, group_position, group.disabled));
}
return _results;
};
SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
if (option.nodeName.toUpperCase() === "OPTION") {
if (option.text !== "") {
if (group_position != null) {
this.parsed[group_position].children += 1;
}
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
value: option.value,
text: option.text,
html: option.innerHTML,
title: option.title ? option.title : void 0,
selected: option.selected,
disabled: group_disabled === true ? group_disabled : option.disabled,
group_array_index: group_position,
group_label: group_position != null ? this.parsed[group_position].label : null,
classes: option.className,
style: option.style.cssText
});
} else {
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
empty: true
});
}
return this.options_index += 1;
}
};
SelectParser.prototype.escapeExpression = function(text) {
var map, unsafe_chars;
if ((text == null) || text === false) {
return "";
}
if (!/[\&\<\>\"\'\`]/.test(text)) {
return text;
}
map = {
"<": "<",
">": ">",
'"': """,
"'": "'",
"`": "`"
};
unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
return text.replace(unsafe_chars, function(chr) {
return map[chr] || "&";
});
};
return SelectParser;
})();
SelectParser.select_to_array = function(select) {
var child, parser, _i, _len, _ref;
parser = new SelectParser();
_ref = select.childNodes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
child = _ref[_i];
parser.add_node(child);
}
return parser.parsed;
};
AbstractChosen = (function() {
function AbstractChosen(form_field, options) {
this.form_field = form_field;
this.options = options != null ? options : {};
if (!AbstractChosen.browser_is_supported()) {
return;
}
this.is_multiple = this.form_field.multiple;
this.set_default_text();
this.set_default_values();
this.setup();
this.set_up_html();
this.register_observers();
this.on_ready();
}
AbstractChosen.prototype.set_default_values = function() {
var _this = this;
this.click_test_action = function(evt) {
return _this.test_active_click(evt);
};
this.activate_action = function(evt) {
return _this.activate_field(evt);
};
this.active_field = false;
this.mouse_on_container = false;
this.results_showing = false;
this.result_highlighted = null;
this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
this.disable_search_threshold = this.options.disable_search_threshold || 0;
this.disable_search = this.options.disable_search || false;
this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
this.group_search = this.options.group_search != null ? this.options.group_search : true;
this.search_contains = this.options.search_contains || false;
this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
this.max_selected_options = this.options.max_selected_options || Infinity;
this.inherit_select_classes = this.options.inherit_select_classes || false;
this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
this.include_group_label_in_selected = this.options.include_group_label_in_selected || false;
return this.max_shown_results = this.options.max_shown_results || Number.POSITIVE_INFINITY;
};
AbstractChosen.prototype.set_default_text = function() {
if (this.form_field.getAttribute("data-placeholder")) {
this.default_text = this.form_field.getAttribute("data-placeholder");
} else if (this.is_multiple) {
this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
} else {
this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
}
return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
};
AbstractChosen.prototype.choice_label = function(item) {
if (this.include_group_label_in_selected && (item.group_label != null)) {
return "<b class='group-name'>" + item.group_label + "</b>" + item.html;
} else {
return item.html;
}
};
AbstractChosen.prototype.mouse_enter = function() {
return this.mouse_on_container = true;
};
AbstractChosen.prototype.mouse_leave = function() {
return this.mouse_on_container = false;
};
AbstractChosen.prototype.input_focus = function(evt) {
var _this = this;
if (this.is_multiple) {
if (!this.active_field) {
return setTimeout((function() {
return _this.container_mousedown();
}), 50);
}
} else {
if (!this.active_field) {
return this.activate_field();
}
}
};
AbstractChosen.prototype.input_blur = function(evt) {
var _this = this;
if (!this.mouse_on_container) {
this.active_field = false;
return setTimeout((function() {
return _this.blur_test();
}), 100);
}
};
AbstractChosen.prototype.results_option_build = function(options) {
var content, data, data_content, shown_results, _i, _len, _ref;
content = '';
shown_results = 0;
_ref = this.results_data;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
data = _ref[_i];
data_content = '';
if (data.group) {
data_content = this.result_add_group(data);
} else {
data_content = this.result_add_option(data);
}
if (data_content !== '') {
shown_results++;
content += data_content;
}
if (options != null ? options.first : void 0) {
if (data.selected && this.is_multiple) {
this.choice_build(data);
} else if (data.selected && !this.is_multiple) {
this.single_set_selected_text(this.choice_label(data));
}
}
if (shown_results >= this.max_shown_results) {
break;
}
}
return content;
};
AbstractChosen.prototype.result_add_option = function(option) {
var classes, option_el;
if (!option.search_match) {
return '';
}
if (!this.include_option_in_results(option)) {
return '';
}
classes = [];
if (!option.disabled && !(option.selected && this.is_multiple)) {
classes.push("active-result");
}
if (option.disabled && !(option.selected && this.is_multiple)) {
classes.push("disabled-result");
}
if (option.selected) {
classes.push("result-selected");
}
if (option.group_array_index != null) {
classes.push("group-option");
}
if (option.classes !== "") {
classes.push(option.classes);
}
option_el = document.createElement("li");
option_el.className = classes.join(" ");
option_el.style.cssText = option.style;
option_el.setAttribute("data-option-array-index", option.array_index);
option_el.innerHTML = option.search_text;
if (option.title) {
option_el.title = option.title;
}
return this.outerHTML(option_el);
};
AbstractChosen.prototype.result_add_group = function(group) {
var classes, group_el;
if (!(group.search_match || group.group_match)) {
return '';
}
if (!(group.active_options > 0)) {
return '';
}
classes = [];
classes.push("group-result");
if (group.classes) {
classes.push(group.classes);
}
group_el = document.createElement("li");
group_el.className = classes.join(" ");
group_el.innerHTML = group.search_text;
if (group.title) {
group_el.title = group.title;
}
return this.outerHTML(group_el);
};
AbstractChosen.prototype.results_update_field = function() {
this.set_default_text();
if (!this.is_multiple) {
this.results_reset_cleanup();
}
this.result_clear_highlight();
this.results_build();
if (this.results_showing) {
return this.winnow_results();
}
};
AbstractChosen.prototype.reset_single_select_options = function() {
var result, _i, _len, _ref, _results;
_ref = this.results_data;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
result = _ref[_i];
if (result.selected) {
_results.push(result.selected = false);
} else {
_results.push(void 0);
}
}
return _results;
};
AbstractChosen.prototype.results_toggle = function() {
if (this.results_showing) {
return this.results_hide();
} else {
return this.results_show();
}
};
AbstractChosen.prototype.results_search = function(evt) {
if (this.results_showing) {
return this.winnow_results();
} else {
return this.results_show();
}
};
AbstractChosen.prototype.winnow_results = function() {
var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
this.no_results_clear();
results = 0;
searchText = this.get_search_text();
escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
zregex = new RegExp(escapedSearchText, 'i');
regex = this.get_search_regex(escapedSearchText);
_ref = this.results_data;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
option.search_match = false;
results_group = null;
if (this.include_option_in_results(option)) {
if (option.group) {
option.group_match = false;
option.active_options = 0;
}
if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
results_group = this.results_data[option.group_array_index];
if (results_group.active_options === 0 && results_group.search_match) {
results += 1;
}
results_group.active_options += 1;
}
option.search_text = option.group ? option.label : option.html;
if (!(option.group && !this.group_search)) {
option.search_match = this.search_string_match(option.search_text, regex);
if (option.search_match && !option.group) {
results += 1;
}
if (option.search_match) {
if (searchText.length) {
startpos = option.search_text.search(zregex);
text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
}
if (results_group != null) {
results_group.group_match = true;
}
} else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
option.search_match = true;
}
}
}
}
this.result_clear_highlight();
if (results < 1 && searchText.length) {
this.update_results_content("");
return this.no_results(searchText);
} else {
this.update_results_content(this.results_option_build());
return this.winnow_results_set_highlight();
}
};
AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
var regex_anchor;
regex_anchor = this.search_contains ? "" : "^";
return new RegExp(regex_anchor + escaped_search_string, 'i');
};
AbstractChosen.prototype.search_string_match = function(search_string, regex) {
var part, parts, _i, _len;
if (regex.test(search_string)) {
return true;
} else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
parts = search_string.replace(/\[|\]/g, "").split(" ");
if (parts.length) {
for (_i = 0, _len = parts.length; _i < _len; _i++) {
part = parts[_i];
if (regex.test(part)) {
return true;
}
}
}
}
};
AbstractChosen.prototype.choices_count = function() {
var option, _i, _len, _ref;
if (this.selected_option_count != null) {
return this.selected_option_count;
}
this.selected_option_count = 0;
_ref = this.form_field.options;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
if (option.selected) {
this.selected_option_count += 1;
}
}
return this.selected_option_count;
};
AbstractChosen.prototype.choices_click = function(evt) {
evt.preventDefault();
if (!(this.results_showing || this.is_disabled)) {
return this.results_show();
}
};
AbstractChosen.prototype.keyup_checker = function(evt) {
var stroke, _ref;
stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
this.search_field_scale();
switch (stroke) {
case 8:
if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
return this.keydown_backstroke();
} else if (!this.pending_backstroke) {
this.result_clear_highlight();
return this.results_search();
}
break;
case 13:
evt.preventDefault();
if (this.results_showing) {
return this.result_select(evt);
}
break;
case 27:
if (this.results_showing) {
this.results_hide();
}
return true;
case 9:
case 38:
case 40:
case 16:
case 91:
case 17:
case 18:
break;
default:
return this.results_search();
}
};
AbstractChosen.prototype.clipboard_event_checker = function(evt) {
var _this = this;
return setTimeout((function() {
return _this.results_search();
}), 50);
};
AbstractChosen.prototype.container_width = function() {
if (this.options.width != null) {
return this.options.width;
} else {
return "" + this.form_field.offsetWidth + "px";
}
};
AbstractChosen.prototype.include_option_in_results = function(option) {
if (this.is_multiple && (!this.display_selected_options && option.selected)) {
return false;
}
if (!this.display_disabled_options && option.disabled) {
return false;
}
if (option.empty) {
return false;
}
return true;
};
AbstractChosen.prototype.search_results_touchstart = function(evt) {
this.touch_started = true;
return this.search_results_mouseover(evt);
};
AbstractChosen.prototype.search_results_touchmove = function(evt) {
this.touch_started = false;
return this.search_results_mouseout(evt);
};
AbstractChosen.prototype.search_results_touchend = function(evt) {
if (this.touch_started) {
return this.search_results_mouseup(evt);
}
};
AbstractChosen.prototype.outerHTML = function(element) {
var tmp;
if (element.outerHTML) {
return element.outerHTML;
}
tmp = document.createElement("div");
tmp.appendChild(element);
return tmp.innerHTML;
};
AbstractChosen.browser_is_supported = function() {
if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
return false;
}
if (/Android/i.test(window.navigator.userAgent)) {
if (/Mobile/i.test(window.navigator.userAgent)) {
return false;
}
}
if (/IEMobile/i.test(window.navigator.userAgent)) {
return false;
}
if (/Windows Phone/i.test(window.navigator.userAgent)) {
return false;
}
if (/BlackBerry/i.test(window.navigator.userAgent)) {
return false;
}
if (/BB10/i.test(window.navigator.userAgent)) {
return false;
}
if (window.navigator.appName === "Microsoft Internet Explorer") {
return document.documentMode >= 8;
}
return true;
};
AbstractChosen.default_multiple_text = "Select Some Options";
AbstractChosen.default_single_text = "Select an Option";
AbstractChosen.default_no_result_text = "No results match";
return AbstractChosen;
})();
$ = jQuery;
$.fn.extend({
chosen: function(options) {
if (!AbstractChosen.browser_is_supported()) {
return this;
}
return this.each(function(input_field) {
var $this, chosen;
$this = $(this);
chosen = $this.data('chosen');
if (options === 'destroy') {
if (chosen instanceof Chosen) {
chosen.destroy();
}
return;
}
if (!(chosen instanceof Chosen)) {
$this.data('chosen', new Chosen(this, options));
}
});
}
});
Chosen = (function(_super) {
__extends(Chosen, _super);
function Chosen() {
_ref = Chosen.__super__.constructor.apply(this, arguments);
return _ref;
}
Chosen.prototype.setup = function() {
this.form_field_jq = $(this.form_field);
this.current_selectedIndex = this.form_field.selectedIndex;
return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
};
Chosen.prototype.set_up_html = function() {
var container_classes, container_props;
container_classes = ["chosen-container"];
container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
if (this.inherit_select_classes && this.form_field.className) {
container_classes.push(this.form_field.className);
}
if (this.is_rtl) {
container_classes.push("chosen-rtl");
}
container_props = {
'class': container_classes.join(' '),
'style': "width: " + (this.container_width()) + ";",
'title': this.form_field.title
};
if (this.form_field.id.length) {
container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
}
this.container = $("<div />", container_props);
if (this.is_multiple) {
this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
} else {
this.container.html('<a class="chosen-single chosen-default"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
}
this.form_field_jq.hide().after(this.container);
this.dropdown = this.container.find('div.chosen-drop').first();
this.search_field = this.container.find('input').first();
this.search_results = this.container.find('ul.chosen-results').first();
this.search_field_scale();
this.search_no_results = this.container.find('li.no-results').first();
if (this.is_multiple) {
this.search_choices = this.container.find('ul.chosen-choices').first();
this.search_container = this.container.find('li.search-field').first();
} else {
this.search_container = this.container.find('div.chosen-search').first();
this.selected_item = this.container.find('.chosen-single').first();
}
this.results_build();
this.set_tab_index();
return this.set_label_behavior();
};
Chosen.prototype.on_ready = function() {
return this.form_field_jq.trigger("chosen:ready", {
chosen: this
});
};
Chosen.prototype.register_observers = function() {
var _this = this;
this.container.bind('touchstart.chosen', function(evt) {
_this.container_mousedown(evt);
return evt.preventDefault();
});
this.container.bind('touchend.chosen', function(evt) {
_this.container_mouseup(evt);
return evt.preventDefault();
});
this.container.bind('mousedown.chosen', function(evt) {
_this.container_mousedown(evt);
});
this.container.bind('mouseup.chosen', function(evt) {
_this.container_mouseup(evt);
});
this.container.bind('mouseenter.chosen', function(evt) {
_this.mouse_enter(evt);
});
this.container.bind('mouseleave.chosen', function(evt) {
_this.mouse_leave(evt);
});
this.search_results.bind('mouseup.chosen', function(evt) {
_this.search_results_mouseup(evt);
});
this.search_results.bind('mouseover.chosen', function(evt) {
_this.search_results_mouseover(evt);
});
this.search_results.bind('mouseout.chosen', function(evt) {
_this.search_results_mouseout(evt);
});
this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
_this.search_results_mousewheel(evt);
});
this.search_results.bind('touchstart.chosen', function(evt) {
_this.search_results_touchstart(evt);
});
this.search_results.bind('touchmove.chosen', function(evt) {
_this.search_results_touchmove(evt);
});
this.search_results.bind('touchend.chosen', function(evt) {
_this.search_results_touchend(evt);
});
this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
_this.results_update_field(evt);
});
this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
_this.activate_field(evt);
});
this.form_field_jq.bind("chosen:open.chosen", function(evt) {
_this.container_mousedown(evt);
});
this.form_field_jq.bind("chosen:close.chosen", function(evt) {
_this.input_blur(evt);
});
this.search_field.bind('blur.chosen', function(evt) {
_this.input_blur(evt);
});
this.search_field.bind('keyup.chosen', function(evt) {
_this.keyup_checker(evt);
});
this.search_field.bind('keydown.chosen', function(evt) {
_this.keydown_checker(evt);
});
this.search_field.bind('focus.chosen', function(evt) {
_this.input_focus(evt);
});
this.search_field.bind('cut.chosen', function(evt) {
_this.clipboard_event_checker(evt);
});
this.search_field.bind('paste.chosen', function(evt) {
_this.clipboard_event_checker(evt);
});
if (this.is_multiple) {
return this.search_choices.bind('click.chosen', function(evt) {
_this.choices_click(evt);
});
} else {
return this.container.bind('click.chosen', function(evt) {
evt.preventDefault();
});
}
};
Chosen.prototype.destroy = function() {
$(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
if (this.search_field[0].tabIndex) {
this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
}
this.container.remove();
this.form_field_jq.removeData('chosen');
return this.form_field_jq.show();
};
Chosen.prototype.search_field_disabled = function() {
this.is_disabled = this.form_field_jq[0].disabled;
if (this.is_disabled) {
this.container.addClass('chosen-disabled');
this.search_field[0].disabled = true;
if (!this.is_multiple) {
this.selected_item.unbind("focus.chosen", this.activate_action);
}
return this.close_field();
} else {
this.container.removeClass('chosen-disabled');
this.search_field[0].disabled = false;
if (!this.is_multiple) {
return this.selected_item.bind("focus.chosen", this.activate_action);
}
}
};
Chosen.prototype.container_mousedown = function(evt) {
if (!this.is_disabled) {
if (evt && evt.type === "mousedown" && !this.results_showing) {
evt.preventDefault();
}
if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
if (!this.active_field) {
if (this.is_multiple) {
this.search_field.val("");
}
$(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action);
this.results_show();
} else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
evt.preventDefault();
this.results_toggle();
}
return this.activate_field();
}
}
};
Chosen.prototype.container_mouseup = function(evt) {
if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
return this.results_reset(evt);
}
};
Chosen.prototype.search_results_mousewheel = function(evt) {
var delta;
if (evt.originalEvent) {
delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
}
if (delta != null) {
evt.preventDefault();
if (evt.type === 'DOMMouseScroll') {
delta = delta * 40;
}
return this.search_results.scrollTop(delta + this.search_results.scrollTop());
}
};
Chosen.prototype.blur_test = function(evt) {
if (!this.active_field && this.container.hasClass("chosen-container-active")) {
return this.close_field();
}
};
Chosen.prototype.close_field = function() {
$(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
this.active_field = false;
this.results_hide();
this.container.removeClass("chosen-container-active");
this.clear_backstroke();
this.show_search_field_default();
return this.search_field_scale();
};
Chosen.prototype.activate_field = function() {
this.container.addClass("chosen-container-active");
this.active_field = true;
this.search_field.val(this.search_field.val());
return this.search_field.focus();
};
Chosen.prototype.test_active_click = function(evt) {
var active_container;
active_container = $(evt.target).closest('.chosen-container');
if (active_container.length && this.container[0] === active_container[0]) {
return this.active_field = true;
} else {
return this.close_field();
}
};
Chosen.prototype.results_build = function() {
this.parsing = true;
this.selected_option_count = null;
this.results_data = SelectParser.select_to_array(this.form_field);
if (this.is_multiple) {
this.search_choices.find("li.search-choice").remove();
} else if (!this.is_multiple) {
this.single_set_selected_text();
if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
this.search_field[0].readOnly = true;
this.container.addClass("chosen-container-single-nosearch");
} else {
this.search_field[0].readOnly = false;
this.container.removeClass("chosen-container-single-nosearch");
}
}
this.update_results_content(this.results_option_build({
first: true
}));
this.search_field_disabled();
this.show_search_field_default();
this.search_field_scale();
return this.parsing = false;
};
Chosen.prototype.result_do_highlight = function(el) {
var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
if (el.length) {
this.result_clear_highlight();
this.result_highlight = el;
this.result_highlight.addClass("highlighted");
maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
visible_top = this.search_results.scrollTop();
visible_bottom = maxHeight + visible_top;
high_top = this.result_highlight.position().top + this.search_results.scrollTop();
high_bottom = high_top + this.result_highlight.outerHeight();
if (high_bottom >= visible_bottom) {
return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
} else if (high_top < visible_top) {
return this.search_results.scrollTop(high_top);
}
}
};
Chosen.prototype.result_clear_highlight = function() {
if (this.result_highlight) {
this.result_highlight.removeClass("highlighted");
}
return this.result_highlight = null;
};
Chosen.prototype.results_show = function() {
if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
this.form_field_jq.trigger("chosen:maxselected", {
chosen: this
});
return false;
}
this.container.addClass("chosen-with-drop");
this.results_showing = true;
this.search_field.focus();
this.search_field.val(this.search_field.val());
this.winnow_results();
return this.form_field_jq.trigger("chosen:showing_dropdown", {
chosen: this
});
};
Chosen.prototype.update_results_content = function(content) {
return this.search_results.html(content);
};
Chosen.prototype.results_hide = function() {
if (this.results_showing) {
this.result_clear_highlight();
this.container.removeClass("chosen-with-drop");
this.form_field_jq.trigger("chosen:hiding_dropdown", {
chosen: this
});
}
return this.results_showing = false;
};
Chosen.prototype.set_tab_index = function(el) {
var ti;
if (this.form_field.tabIndex) {
ti = this.form_field.tabIndex;
this.form_field.tabIndex = -1;
return this.search_field[0].tabIndex = ti;
}
};
Chosen.prototype.set_label_behavior = function() {
var _this = this;
this.form_field_label = this.form_field_jq.parents("label");
if (!this.form_field_label.length && this.form_field.id.length) {
this.form_field_label = $("label[for='" + this.form_field.id + "']");
}
if (this.form_field_label.length > 0) {
return this.form_field_label.bind('click.chosen', function(evt) {
if (_this.is_multiple) {
return _this.container_mousedown(evt);
} else {
return _this.activate_field();
}
});
}
};
Chosen.prototype.show_search_field_default = function() {
if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
this.search_field.val(this.default_text);
return this.search_field.addClass("default");
} else {
this.search_field.val("");
return this.search_field.removeClass("default");
}
};
Chosen.prototype.search_results_mouseup = function(evt) {
var target;
target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
if (target.length) {
this.result_highlight = target;
this.result_select(evt);
return this.search_field.focus();
}
};
Chosen.prototype.search_results_mouseover = function(evt) {
var target;
target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
if (target) {
return this.result_do_highlight(target);
}
};
Chosen.prototype.search_results_mouseout = function(evt) {
if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
return this.result_clear_highlight();
}
};
Chosen.prototype.choice_build = function(item) {
var choice, close_link,
_this = this;
choice = $('<li />', {
"class": "search-choice"
}).html("<span>" + (this.choice_label(item)) + "</span>");
if (item.disabled) {
choice.addClass('search-choice-disabled');
} else {
close_link = $('<a />', {
"class": 'search-choice-close',
'data-option-array-index': item.array_index
});
close_link.bind('click.chosen', function(evt) {
return _this.choice_destroy_link_click(evt);
});
choice.append(close_link);
}
return this.search_container.before(choice);
};
Chosen.prototype.choice_destroy_link_click = function(evt) {
evt.preventDefault();
evt.stopPropagation();
if (!this.is_disabled) {
return this.choice_destroy($(evt.target));
}
};
Chosen.prototype.choice_destroy = function(link) {
if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
this.show_search_field_default();
if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
this.results_hide();
}
link.parents('li').first().remove();
return this.search_field_scale();
}
};
Chosen.prototype.results_reset = function() {
this.reset_single_select_options();
this.form_field.options[0].selected = true;
this.single_set_selected_text();
this.show_search_field_default();
this.results_reset_cleanup();
this.form_field_jq.trigger("change");
if (this.active_field) {
return this.results_hide();
}
};
Chosen.prototype.results_reset_cleanup = function() {
this.current_selectedIndex = this.form_field.selectedIndex;
return this.selected_item.find("abbr").remove();
};
Chosen.prototype.result_select = function(evt) {
var high, item;
if (this.result_highlight) {
high = this.result_highlight;
this.result_clear_highlight();
if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
this.form_field_jq.trigger("chosen:maxselected", {
chosen: this
});
return false;
}
if (this.is_multiple) {
high.removeClass("active-result");
} else {
this.reset_single_select_options();
}
high.addClass("result-selected");
item = this.results_data[high[0].getAttribute("data-option-array-index")];
item.selected = true;
this.form_field.options[item.options_index].selected = true;
this.selected_option_count = null;
if (this.is_multiple) {
this.choice_build(item);
} else {
this.single_set_selected_text(this.choice_label(item));
}
if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
this.results_hide();
}
this.show_search_field_default();
if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
this.form_field_jq.trigger("change", {
'selected': this.form_field.options[item.options_index].value
});
}
this.current_selectedIndex = this.form_field.selectedIndex;
evt.preventDefault();
return this.search_field_scale();
}
};
Chosen.prototype.single_set_selected_text = function(text) {
if (text == null) {
text = this.default_text;
}
if (text === this.default_text) {
this.selected_item.addClass("chosen-default");
} else {
this.single_deselect_control_build();
this.selected_item.removeClass("chosen-default");
}
return this.selected_item.find("span").html(text);
};
Chosen.prototype.result_deselect = function(pos) {
var result_data;
result_data = this.results_data[pos];
if (!this.form_field.options[result_data.options_index].disabled) {
result_data.selected = false;
this.form_field.options[result_data.options_index].selected = false;
this.selected_option_count = null;
this.result_clear_highlight();
if (this.results_showing) {
this.winnow_results();
}
this.form_field_jq.trigger("change", {
deselected: this.form_field.options[result_data.options_index].value
});
this.search_field_scale();
return true;
} else {
return false;
}
};
Chosen.prototype.single_deselect_control_build = function() {
if (!this.allow_single_deselect) {
return;
}
if (!this.selected_item.find("abbr").length) {
this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
}
return this.selected_item.addClass("chosen-single-with-deselect");
};
Chosen.prototype.get_search_text = function() {
return $('<div/>').text($.trim(this.search_field.val())).html();
};
Chosen.prototype.winnow_results_set_highlight = function() {
var do_high, selected_results;
selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
if (do_high != null) {
return this.result_do_highlight(do_high);
}
};
Chosen.prototype.no_results = function(terms) {
var no_results_html;
no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
no_results_html.find("span").first().html(terms);
this.search_results.append(no_results_html);
return this.form_field_jq.trigger("chosen:no_results", {
chosen: this
});
};
Chosen.prototype.no_results_clear = function() {
return this.search_results.find(".no-results").remove();
};
Chosen.prototype.keydown_arrow = function() {
var next_sib;
if (this.results_showing && this.result_highlight) {
next_sib = this.result_highlight.nextAll("li.active-result").first();
if (next_sib) {
return this.result_do_highlight(next_sib);
}
} else {
return this.results_show();
}
};
Chosen.prototype.keyup_arrow = function() {
var prev_sibs;
if (!this.results_showing && !this.is_multiple) {
return this.results_show();
} else if (this.result_highlight) {
prev_sibs = this.result_highlight.prevAll("li.active-result");
if (prev_sibs.length) {
return this.result_do_highlight(prev_sibs.first());
} else {
if (this.choices_count() > 0) {
this.results_hide();
}
return this.result_clear_highlight();
}
}
};
Chosen.prototype.keydown_backstroke = function() {
var next_available_destroy;
if (this.pending_backstroke) {
this.choice_destroy(this.pending_backstroke.find("a").first());
return this.clear_backstroke();
} else {
next_available_destroy = this.search_container.siblings("li.search-choice").last();
if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
this.pending_backstroke = next_available_destroy;
if (this.single_backstroke_delete) {
return this.keydown_backstroke();
} else {
return this.pending_backstroke.addClass("search-choice-focus");
}
}
}
};
Chosen.prototype.clear_backstroke = function() {
if (this.pending_backstroke) {
this.pending_backstroke.removeClass("search-choice-focus");
}
return this.pending_backstroke = null;
};
Chosen.prototype.keydown_checker = function(evt) {
var stroke, _ref1;
stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
this.search_field_scale();
if (stroke !== 8 && this.pending_backstroke) {
this.clear_backstroke();
}
switch (stroke) {
case 8:
this.backstroke_length = this.search_field.val().length;
break;
case 9:
if (this.results_showing && !this.is_multiple) {
this.result_select(evt);
}
this.mouse_on_container = false;
break;
case 13:
if (this.results_showing) {
evt.preventDefault();
}
break;
case 32:
if (this.disable_search) {
evt.preventDefault();
}
break;
case 38:
evt.preventDefault();
this.keyup_arrow();
break;
case 40:
evt.preventDefault();
this.keydown_arrow();
break;
}
};
Chosen.prototype.search_field_scale = function() {
var div, f_width, h, style, style_block, styles, w, _i, _len;
if (this.is_multiple) {
h = 0;
w = 0;
style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
for (_i = 0, _len = styles.length; _i < _len; _i++) {
style = styles[_i];
style_block += style + ":" + this.search_field.css(style) + ";";
}
div = $('<div />', {
'style': style_block
});
div.text(this.search_field.val());
$('body').append(div);
w = div.width() + 25;
div.remove();
f_width = this.container.outerWidth();
if (w > f_width - 10) {
w = f_width - 10;
}
return this.search_field.css({
'width': w + 'px'
});
}
};
return Chosen;
})(AbstractChosen);
}).call(this);
}).apply(root, arguments);
});
}(this));
(function(root) {
define("angular-chosen", ["angular","jquery-chosen"], function() {
return (function() {
/**
* angular-chosen-localytics - Angular Chosen directive is an AngularJS Directive that brings the Chosen jQuery in a Angular way
* @version v1.3.0
* @link http://github.com/leocaseiro/angular-chosen
* @license MIT
*/
(function() {
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
angular.module('localytics.directives', []);
angular.module('localytics.directives').directive('chosen', [
'$timeout', function($timeout) {
var CHOSEN_OPTION_WHITELIST, NG_OPTIONS_REGEXP, isEmpty, snakeCase;
NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/;
CHOSEN_OPTION_WHITELIST = ['persistentCreateOption', 'createOptionText', 'createOption', 'skipNoResults', 'noResultsText', 'allowSingleDeselect', 'disableSearchThreshold', 'disableSearch', 'enableSplitWordSearch', 'inheritSelectClasses', 'maxSelectedOptions', 'placeholderTextMultiple', 'placeholderTextSingle', 'searchContains', 'singleBackstrokeDelete', 'displayDisabledOptions', 'displaySelectedOptions', 'width', 'includeGroupLabelInSelected', 'maxShownResults'];
snakeCase = function(input) {
return input.replace(/[A-Z]/g, function($1) {
return "_" + ($1.toLowerCase());
});
};
isEmpty = function(value) {
var key;
if (angular.isArray(value)) {
return value.length === 0;
} else if (angular.isObject(value)) {
for (key in value) {
if (value.hasOwnProperty(key)) {
return false;
}
}
}
return true;
};
return {
restrict: 'A',
require: '?ngModel',
priority: 1,
link: function(scope, element, attr, ngModel) {
var chosen, empty, initOrUpdate, match, options, origRender, startLoading, stopLoading, updateMessage, valuesExpr, viewWatch;
scope.disabledValuesHistory = scope.disabledValuesHistory ? scope.disabledValuesHistory : [];
element = $(element);
element.addClass('localytics-chosen');
options = scope.$eval(attr.chosen) || {};
angular.forEach(attr, function(value, key) {
if (indexOf.call(CHOSEN_OPTION_WHITELIST, key) >= 0) {
return attr.$observe(key, function(value) {
options[snakeCase(key)] = String(element.attr(attr.$attr[key])).slice(0, 2) === '{{' ? value : scope.$eval(value);
return updateMessage();
});
}
});
startLoading = function() {
return element.addClass('loading').attr('disabled', true).trigger('chosen:updated');
};
stopLoading = function() {
element.removeClass('loading');
if (angular.isDefined(attr.disabled)) {
element.attr('disabled', attr.disabled);
} else {
element.attr('disabled', false);
}
return element.trigger('chosen:updated');
};
chosen = null;
empty = false;
initOrUpdate = function() {
var defaultText;
if (chosen) {
return element.trigger('chosen:updated');
} else {
$timeout(function() {
chosen = element.chosen(options).data('chosen');
});
if (angular.isObject(chosen)) {
return defaultText = chosen.default_text;
}
}
};
updateMessage = function() {
if (empty) {
element.attr('data-placeholder', chosen.results_none_found).attr('disabled', true);
} else {
element.removeAttr('data-placeholder');
}
return element.trigger('chosen:updated');
};
if (ngModel) {
origRender = ngModel.$render;
ngModel.$render = function() {
origRender();
return initOrUpdate();
};
element.on('chosen:hiding_dropdown', function() {
return scope.$apply(function() {
return ngModel.$setTouched();
});
});
if (attr.multiple) {
viewWatch = function() {
return ngModel.$viewValue;
};
scope.$watch(viewWatch, ngModel.$render, true);
}
} else {
initOrUpdate();
}
attr.$observe('disabled', function() {
return element.trigger('chosen:updated');
});
if (attr.ngOptions && ngModel) {
match = attr.ngOptions.match(NG_OPTIONS_REGEXP);
valuesExpr = match[7];
scope.$watchCollection(valuesExpr, function(newVal, oldVal) {
var timer;
return timer = $timeout(function() {
if (angular.isUndefined(newVal)) {
return startLoading();
} else {
empty = isEmpty(newVal);
stopLoading();
return updateMessage();
}
});
});
return scope.$on('$destroy', function(event) {
if (typeof timer !== "undefined" && timer !== null) {
return $timeout.cancel(timer);
}
});
}
}
};
}
]);
}).call(this);
}).apply(root, arguments);
});
}(this));
/*
# tools/directives/draggableDirective.js Copyright(c) 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
define(
'app/directives/draggableDirective',[
"angular",
],
function(angular) {
"use strict";
// Retrieve the current application
var app;
try {
app = angular.module("App"); // For runtime
} catch (e) {
app = angular.module("App", []); // Fall-back for unit testing
}
/**
* Directive that adds HTML5 draggable functionality to DOM objects
*/
app.directive("draggable", [ function() {
return {
restrict: "A",
scope: {
drag: "&",
dragEnd: "&",
},
link: function(scope, element) {
var dragElement = element[0];
dragElement.draggable = true;
dragElement.addEventListener("dragstart", function(e) {
e.dataTransfer.effectAllowed = "move";
e.dataTransfer.setData("text", this.id);
angular.element(this).addClass("drag");
var element = this;
scope.$apply(function(scope) {
var action = scope.drag();
if ( angular.isDefined(action) ) {
action(element.id);
}
});
return false;
}, false);
dragElement.addEventListener("dragend", function() {
angular.element(this).removeClass("drag");
var element = this;
scope.$apply(function(scope) {
var action = scope.dragEnd();
if ( angular.isDefined(action) ) {
action(element.id);
}
});
return false;
}, false);
},
};
}]);
}
);
/*
# tools/directives/dropDirective.js Copyright(c) 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
define(
'app/directives/dropDirective',[
"angular",
],
function(angular) {
"use strict";
// Retrieve the current application
var app;
try {
app = angular.module("App"); // For runtime
} catch (e) {
app = angular.module("App", []); // Fall-back for unit testing
}
/**
* Directive that adds HTML5 drop functionality to DOM objects
*/
app.directive("dropArea", [ function() {
return {
scope: {
drop: "&",
},
link: function(scope, element) {
var dropAreaElement = element[0];
dropAreaElement.addEventListener("dragover", function(e) {
e.dataTransfer.dropEffect = "move";
if (e.preventDefault) {
e.preventDefault();
}
angular.element(this).addClass("drag-over");
return false;
}, false);
dropAreaElement.addEventListener("dragenter", function() {
angular.element(this).addClass("drag-over");
return false;
}, false);
dropAreaElement.addEventListener("dragleave", function() {
angular.element(this).removeClass("drag-over");
return false;
}, false);
dropAreaElement.addEventListener("drop", function(e) {
if (e.stopPropagation) {
e.stopPropagation();
}
if (e.preventDefault) {
e.preventDefault();
}
angular.element(this).removeClass("drag-over");
var dropTarget = this,
element = document.getElementById(e.dataTransfer.getData("text"));
scope.$apply(function(scope) {
var action = scope.drop();
if ( angular.isDefined(action) ) {
action(element, dropTarget);
}
});
return false;
}, false);
},
};
}]);
}
);
// Copyright 2023 cPanel, L.L.C. - All rights reserved.
// copyright@cpanel.net
// https://cpanel.net
// This code is subject to the cPanel license. Unauthorized copying is prohibited
define(
'app/views/applicationListController',[
"angular",
"lodash",
"cjt/util/locale",
"cjt/services/cpanel/nvDataService",
// application related
"app/directives/draggableDirective",
"app/directives/dropDirective",
],
function(angular, _, LOCALE) {
"use strict";
// Retrieve the current application
var app = angular.module("App");
var controller = app.controller(
"applicationListController", ["$scope", "nvDataService",
function($scope, nvDataService) {
var applicationList = PAGE.appGroups;
var collapsedGroupsList = PAGE.collapsedGroups.split("|");
// Binding it to the scope so that
$scope.collapsedGroups = PAGE.collapsedGroups;
/* Updating the searchText model with the value in
* search Field if typed before angular bootstrap.
* Hack to ensure delayed search is preformed on the
* text in the search box, if user types in before angular
* bootstrap completes
*/
var searchBox = document.querySelector("#quickjump");
if (searchBox && $scope.searchText !== searchBox.value) {
$scope.searchText = searchBox.value;
}
init();
function init() {
trackAppLinkClicks();
}
function trackAppLinkClicks() {
var querySelForAppLinks = "#boxes [id*='-container'] > [id*='-group'] > [id*='-body'] > .icon-container-body > a";
var appLinkEls = document.querySelectorAll(querySelForAppLinks);
if (appLinkEls && appLinkEls.length && window["mixpanel"]) {
window["mixpanel"].track_links(appLinkEls, "cPanel-Tools-Nav-Link", (linkEl) => {
return { "nav-link-id": linkEl.id };
});
}
}
/**
* Clears search on Esc
*
* @method clearSearch
* @param {Event} event Event
*/
$scope.clearSearch = function(event) {
// clear the search when pressing the Esc key
if (event.keyCode === 27) {
$scope.searchText = "";
}
};
var searchCache = {};
/**
* Search Groups
*
* @method searchGroup
* @param {Object} group Group
* @return {Boolean} If the group needs to be displayed
*/
$scope.searchGroup = function(group) {
if (!$scope.searchText) {
return 1;
}
if (!searchCache[$scope.searchText]) {
searchCache[$scope.searchText] = new RegExp($scope.searchText, "i");
}
var regex = searchCache[$scope.searchText];
var found = false;
var groupInfo = _.find(applicationList, function(app) {
return app.group === group;
});
var items = groupInfo.length ? groupInfo.items : [];
for (var i = 0, len = items.length; i < len; i++) {
found = regex.test(items[i].searchtext);
if (found) {
return found;
}
}
};
/**
* Search Item
*
* @method searchItem
* @param {Object} Item Item
* @return {Boolean} If the item searchtext matches the searchtext
*/
$scope.searchItem = function(item) {
if (!$scope.searchText) {
return 1;
}
if (!searchCache[$scope.searchText]) {
searchCache[$scope.searchText] = new RegExp($scope.searchText, "i");
}
var regex = searchCache[$scope.searchText];
return regex.test(item.searchtext);
};
/**
* Sends the ordered list of application groups to the server to retain
* user preferences in the page's NVData object
* @param {String} groups - The | delimited list of group order
*/
var setGroupsOrder = function(groups) {
nvDataService.setObject(
{
xmaingroupsorder: groups,
})
.catch(function(error) {
console.error(error);
});
};
/**
* Sends the list of collapsed menu groups to the server to retain
* user preferences in the page's NVData object
* @param {String} groups - The | delimited list of collapsed menu groups
*/
var setCollapsedGroupsList = function(groups) {
nvDataService.setObject(
{
xmainrollstatus: groups,
})
.catch(function(error) {
console.error(error);
});
};
/**
* Toggles group and saves state in NvData
*
* @method toggleGroup
* @param {Object} group Group
*/
$scope.toggleGroup = function(group) {
var groupBody = angular.element(document.querySelector("#" + group + "-body"));
var groupCollapseIndicator = angular.element(document.querySelector("#" + group + "-collapsed-indicator"));
group = group + "=0";
var index = collapsedGroupsList.indexOf(group);
if (index === -1) {
groupBody.removeClass("maximize");
collapsedGroupsList.push(group);
groupBody.addClass("minimized ng-hide");
groupCollapseIndicator.removeClass("fa-minus");
groupCollapseIndicator.addClass("fa-plus");
} else {
groupBody.removeClass("minimized ng-hide");
collapsedGroupsList.splice(index, 1);
groupBody.addClass("maximize");
groupCollapseIndicator.removeClass("fa-plus");
groupCollapseIndicator.addClass("fa-minus");
}
var groupList = collapsedGroupsList.join("|");
// updating the collapseGroups model with new changes
$scope.collapsedGroups = groupList;
// Save the changes to NvData
setCollapsedGroupsList(groupList);
};
/**
* Handles drag event
*
* @method handleDrag
* @param {String} itemID ID of the item thats being dragged.
*/
$scope.handleDrag = function(itemID) {
var groupName = itemID.replace("-group", ""),
groupBody = angular.element(document.querySelector("#" + groupName + "-body"));
groupBody.removeClass("minimize maximize");
var startingPosition = _.findIndex(applicationList, function(group) {
return group.group === groupName;
});
var previousDropAreaId = "#top-drop-area";
if (startingPosition > 0) {
previousDropAreaId = "#" + applicationList[startingPosition - 1].group + "-drop-area";
}
// Hidding the DropArea of the group right above the item being moved. We dont want to
// drop the group in the same place
var hiddenDropArea = angular.element(document.querySelector(previousDropAreaId));
hiddenDropArea.addClass("drag-hidden");
};
/**
* Handles the case when a drag event is started but the item is never dropped into a dropArea
*
* @method handleDragEnd
*/
$scope.handleDragEnd = function() {
var hiddenDropArea = angular.element(document.querySelectorAll(".drag-hidden"));
// On DragEnd ensures none of the dragAreas are hidden
hiddenDropArea.removeClass("drag-hidden");
};
/**
* Handles the drop of group in dropArea
*
* @method handleDrop
* @param {Object} item The item thats being moved
* @param {Object} dropArea The area where the item is dropped
*/
$scope.handleDrop = function(item, dropArea) {
var groupToMove = item.getAttribute("data-group-name");
var moveAfter = dropArea.getAttribute("data-group-name");
var boxes = document.querySelector("#boxes");
var groupToMoveContainer, moveAfterContainer;
if (moveAfter) {
groupToMoveContainer = document.querySelector("#" + groupToMove + "-container");
moveAfterContainer = document.querySelector("#" + moveAfter + "-container");
} else {
groupToMoveContainer = document.querySelector("#" + groupToMove + "-container");
moveAfterContainer = document.querySelector("#top-drop-area");
}
// Moving DOM elements
if (boxes && groupToMoveContainer && moveAfterContainer) {
boxes.insertBefore(groupToMoveContainer, moveAfterContainer.nextSibling);
}
var oldPosition = _.findIndex(applicationList, function(group) {
return group.group === item.id.replace("-group", "");
});
var movedGroup = applicationList[oldPosition];
var newPosition = _.findIndex(applicationList, function(group) {
return group.group === dropArea.id.replace("-drop-area", "");
});
if (oldPosition > newPosition) {
newPosition += 1;
}
applicationList.splice(oldPosition, 1);
applicationList.splice(newPosition, 0, movedGroup);
var newOrder = _.map(applicationList, "group").join("|");
setGroupsOrder(newOrder);
};
},
]);
return controller;
}
);
/*
* tools/services/statisticsService.js Copyright(c) 2022 cPanel, L.L.C.
* All rights reserved.
* copyright@cpanel.net http://cpanel.net
* This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
define(
'app/services/statisticsService',[
// Libraries
"lodash",
"angular",
"cjt/io/uapi-request",
"cjt/services/APICatcher",
],
function(_, angular, APIREQUEST) {
"use strict";
// Fetch the current application
var app = angular.module("App");
/**
* Setup the account list model's API service
*/
app.factory("statisticsService", ["APICatcher",
function(api) {
var idsToShowWarningsInGlass = ["disk_usage", "cachedmysqldiskusage", "bandwidth"];
function _mungeData(data) {
for (var i = 0; i < data.length; i++) {
var item = data[i];
item.maximum = item.maximum && parseInt( item.maximum, 10 );
var isLimited = (item.maximum !== null);
var percent = isLimited ? parseFloat((100 * item.usage / item.maximum).toFixed(2)) : 0;
var isWarningShown = false;
var isActionButtonShown = false;
if (percent >= 80) {
isActionButtonShown = true;
if (idsToShowWarningsInGlass.includes(item.id)) {
isWarningShown = true;
}
}
_.assign(
item,
{
isLimited: isLimited,
percent: percent,
needFix: percent >= 60,
showWarning: isWarningShown,
showActionButton: isActionButtonShown,
}
);
}
return data;
}
// return the factory interface
return {
/**
* Get extended stats.
* @return {Promise} - Promise that will fulfill the request.
*/
fetchExtendedStats: function() {
var apicall = new APIREQUEST.Class().initialize("ResourceUsage", "get_usages");
return api.promise(apicall).then( function(resp) {
_mungeData(resp.data);
return resp.data;
} );
},
};
},
]);
}
);
/*
* tools/views/statisticsController.js Copyright(c) 2022 cPanel, L.L.C.
* All rights reserved.
* copyright@cpanel.net http://cpanel.net
* This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
define(
'app/views/statisticsController',[
"lodash",
"angular",
"cjt/util/locale",
"app/services/statisticsService",
"cjt/directives/spinnerDirective",
"cjt/decorators/growlDecorator",
"cjt/decorators/growlAPIReporter",
],
function(_, angular, LOCALE) {
"use strict";
var USE_BYTES = {
format_bytes: true,
format_bytes_per_second: true, // for CloudLinux
};
function _massageStatsDataForDisplay(data) {
for (var i = 0; i < data.length; i++) {
var item = data[i];
var isBytes = !!USE_BYTES[item.formatter];
var formattedUsage = isBytes ? LOCALE.format_bytes(item.usage) : LOCALE.numf(item.usage);
var formattedMax = null;
if (item.formatter === "format_bytes_per_second") {
formattedUsage += "/s";
// Leave formattedMax null for the unlimited per-second items.
if (item.isLimited) {
formattedMax = LOCALE.format_bytes(item.maximum) + "/s";
}
} else {
formattedMax = !item.isLimited ? "∞" : isBytes ? LOCALE.format_bytes(item.maximum) : LOCALE.numf(item.maximum);
}
var warningMessage = null;
if (item.showWarning) {
if (item.percent >= 100) {
warningMessage = LOCALE.maketext("[_1] limit exceeded.", item.description);
} else {
warningMessage = LOCALE.maketext("[_1] is nearing its limit.", item.description);
}
}
_.assign(
item,
{
showPercent: !!(item.isLimited && item.maximum),
formattedPercent: LOCALE.numf(item.percent),
formattedMaximum: formattedMax,
formattedUsage: formattedUsage,
warningTooltip: warningMessage,
}
);
}
return data;
}
// Retrieve the current application
var app = angular.module("App");
var controller = app.controller(
"statisticsController", [
"$scope",
"spinnerAPI",
"statisticsService",
"growl",
"$timeout",
function(
$scope,
spinnerAPI,
statisticsService,
growl,
$timeout) {
spinnerAPI.start("loadingStatsSpinner");
/** We are running into browser limits on the number of
* concurrent HTTP connections. We want these AJAX
* calls to be low priority so that CSS/sprites/etc.
* will load first; otherwise, the UI takes longer to
* be usable.
*
* We need to reduce the number of concurrent
* HTTP calls, but for now this stop-gap will
* ensure that AJAX post-back calls don’t delay the
* loading of critical UI resources.
*/
$timeout(function() {
statisticsService.fetchExtendedStats().then(function(response) {
$scope.statistics = _massageStatsDataForDisplay(response);
}).finally(function() {
spinnerAPI.stop("loadingStatsSpinner");
});
});
$scope.appUpgradeUrl = PAGE.appUpgradeUrl && ((PAGE.dprefix || "") + PAGE.appUpgradeUrl);
$scope.getStatStatus = function(percentage, error) {
if (error) {
return "warning";
}
if (percentage >= 80) {
return "danger";
}
if (percentage >= 60) {
return "warning";
}
if (percentage >= 40) {
return "info";
}
if (percentage >= 0) {
return "success";
}
};
/**
* Used to determine the class of an element based on the percentage of quota usage.
* @param {number} percentage - amount of quota used.
* @returns {string} bootstrap class to style an element.
*/
$scope.glassGetStatStatus = function(percentage) {
if (percentage >= 100) {
return "danger";
}
if (percentage >= 80) {
return "warning";
}
};
},
]);
return controller;
}
);
/*
* tools/services/themesService.js Copyright(c) 2022 cPanel, L.L.C.
* All rights reserved.
* copyright@cpanel.net http://cpanel.net
* This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
define(
'app/services/themesService',[
// Libraries
"angular",
// CJT
"cjt/io/api",
"cjt/io/uapi-request",
"cjt/io/uapi", // IMPORTANT: Load the driver so its ready
],
function(angular, API, APIREQUEST, APIDRIVER) {
// Fetch the current application
var app = angular.module("App");
/**
* Setup the account list model's API service
*/
app.factory("themesService", ["$q",
function($q) {
// return the factory interface
return {
/**
* Get available themes list
* @return {Promise} - Promise that will fulfill the request.
*/
getAvailableThemes: function() {
// make a promise
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("Themes", "list", {
show_mail_themes: 0,
});
API.promise(apiCall.getRunArguments())
.done(function(response) {
// Create items from the response
response = response.parsedResponse;
if (response.status) {
// Keep the promise
deferred.resolve(response.data);
} else {
// Pass the error along
deferred.reject(response.error);
}
});
// Pass the promise back to the controller
return deferred.promise;
},
/**
* Set theme
* @param {String} theme - Theme Name
* @return {Promise} - Promise that will fulfill the request
**/
setTheme: function(themeName) {
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("Themes", "update", {
theme: themeName,
});
API.promise(apiCall.getRunArguments())
.done(function(response) {
// Create items from the response
response = response.parsedResponse;
if (response.status) {
// Keep the promise
deferred.resolve(response.data);
} else {
// Pass the error along
deferred.reject(response.error);
}
});
// pass the promise back to the controller
return deferred.promise;
},
};
},
]);
}
);
/*
* tools/views/themesController.js Copyright(c) 2022 cPanel, L.L.C.
* All rights reserved.
* copyright@cpanel.net http://cpanel.net
* This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false, PAGE: true */
define(
'app/views/themesController',[
"angular",
"jquery",
"app/services/themesService",
"cjt/decorators/growlDecorator",
"jquery-chosen",
"angular-chosen",
],
function(angular) {
"use strict";
// Retrieve the current application
var app = angular.module("App");
var controller = app.controller(
"themesController", [
"$scope",
"$window",
"themesService",
"growl",
"$timeout",
function(
$scope,
$window,
themesService,
growl,
$timeout) {
$scope.isRTL = PAGE.isRTL || false;
$scope.updated = true;
/** We are running into browser limits on the number of
* concurrent HTTP connections. We want these AJAX
* calls to be low priority so that CSS/sprites/etc.
* will load first; otherwise, the UI takes longer to
* be usable.
*
* We need to reduce the number of concurrent
* HTTP calls, but for now this stop-gap will
* ensure that AJAX post-back calls don’t delay the
* loading of critical UI resources.
*/
$timeout(function() {
themesService.getAvailableThemes().then(function(response) {
if (response && response.length > 0) {
$scope.themes = response;
// selects current theme
if (PAGE.currentTheme) {
$scope.selectedTheme = PAGE.currentTheme;
}
}
}, function(error) {
growl.error(error);
}).finally(function() {
$scope.updated = true;
});
});
/**
* Set theme of the account
* Note: Transfers the page
*/
$scope.themeChanged = function() {
if ($scope.selectedTheme !== "") {
themesService.setTheme($scope.selectedTheme).then(function() {
if (PAGE && PAGE.securityToken && PAGE.userName) {
$window.location.href = PAGE.securityToken + "/xfercpanel/" + PAGE.userName + "?theme=" + $scope.selectedTheme;
}
}).catch(function(err) {
growl.error(err);
});
}
};
},
]);
return controller;
}
);
/*
# cpanel - base/frontend/jupiter/tools/services/nginxService.js
# Copyright 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
define(
'app/services/nginxService',[
// Libraries
"angular",
// CJT
"cjt/io/api",
"cjt/io/uapi-request",
"cjt/io/uapi", // IMPORTANT: Load the driver so its ready
"cjt/services/APICatcher",
],
function(angular, API, APIREQUEST, APIDRIVER) {
"use strict";
// Fetch the current application
var app = angular.module("cpanel.tools.service.nginxService", []);
/**
* Setup the account list model's API service
*/
app.factory("nginxService", ["$q", "APICatcher",
function($q, apiCatcher) {
// return the factory interface
return {
/**
* Clear NGINX caching for the cPanel user.
* @return {Promise} - Promise that will fulfill the request.
*/
clearCache: function() {
var apiCall = new APIREQUEST.Class();
apiCall.initialize("NginxCaching", "clear_cache", {});
return apiCatcher.promise(apiCall);
},
/**
* Enable NGINX caching for the cPanel user.
* @return {Promise} - Promise that will fulfill the request.
*/
enableCaching: function() {
var apiCall = new APIREQUEST.Class();
apiCall.initialize("NginxCaching", "enable_cache", {});
return apiCatcher.promise(apiCall);
},
/**
* Disable NGINX caching for the cPanel user.
* @return {Promise} - Promise that will fulfill the request.
*/
disableCaching: function() {
var apiCall = new APIREQUEST.Class();
apiCall.initialize("NginxCaching", "disable_cache", {});
return apiCatcher.promise(apiCall);
},
};
},
]);
}
);
/*
# cpanel - base/frontend/jupiter/tools/views/nginxController.js
# Copyright 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
define(
'app/views/nginxController',[
"angular",
"cjt/util/locale",
"jquery",
// CJT
"cjt/services/alertService",
"cjt/directives/alert",
"cjt/directives/alertList",
"app/services/nginxService",
],
function(angular, LOCALE) {
"use strict";
// Retrieve the current application
var app = angular.module("App");
var controller = app.controller(
"nginxController", [
"$scope",
"alertService",
"nginxService",
function(
$scope,
alertService,
nginxService) {
$scope.isRTL = PAGE.isRTL || false;
$scope.nginxCachingIsEnabled = PAGE.isNginxCachingEnabled || false;
$scope.nginxClearCache = function() {
return nginxService.clearCache().then(function() {
alertService.add({
type: "success",
message: LOCALE.maketext("NGINX cache cleared."),
closeable: true,
replace: true,
autoClose: 10000,
});
});
};
$scope.toggleNginxCachingStatus = function() {
if ($scope.nginxCachingIsEnabled) {
return nginxService.disableCaching().then(function() {
$scope.nginxCachingIsEnabled = false;
alertService.add({
type: "success",
message: LOCALE.maketext("[asis,NGINX] cache is inactive."),
closeable: true,
replace: true,
autoClose: 10000,
});
});
} else {
return nginxService.enableCaching().then(function() {
$scope.nginxCachingIsEnabled = true;
alertService.add({
type: "success",
message: LOCALE.maketext("[asis,NGINX] cache is active."),
closeable: true,
replace: true,
autoClose: 10000,
});
});
}
};
$scope.showClearCacheButton = function() {
if ($scope.nginxCachingIsEnabled) {
return "ng-show";
} else {
return "ng-hide";
}
};
},
]);
return controller;
}
);
/*
* tools/services/accountsService.js Copyright(c) 2022 cPanel, L.L.C.
* All rights reserved.
* copyright@cpanel.net http://cpanel.net
* This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false */
define(
'app/services/accountsService',[
// Libraries
"angular",
// CJT
"cjt/io/api",
"cjt/io/uapi-request",
"cjt/io/uapi", // IMPORTANT: Load the driver so its ready
],
function(angular, API, APIREQUEST, APIDRIVER) {
// Fetch the current application
var app = angular.module("App");
/**
* Setup the account list model's API service
*/
app.factory("accountsService", ["$q",
function($q) {
// return the factory interface
return {
/**
* Get available accounts list
* @param {Boolean} [isRTL] - Optional flag denoting that the interface is in RTL
* @return {Promise} - Promise that will fulfill the request.
*/
getAvailableAccounts: function(isRTL) {
// make a promise
var deferred = $q.defer();
var apiCall = new APIREQUEST.Class();
apiCall.initialize("Resellers", "list_accounts");
API.promise(apiCall.getRunArguments())
.done(function(response) {
// Create items from the response
response = response.parsedResponse;
if (response.status) {
// set RTL friendly account label
isRTL = isRTL || false;
var currentAccount;
for (var i = 0, length = response.data.length; i < length; i++) {
currentAccount = response.data[i];
if ( isRTL ) {
currentAccount.accountLabel = "\u200e(" + currentAccount.domain + ") " + currentAccount.user;
} else {
currentAccount.accountLabel = currentAccount.user + " (" + currentAccount.domain + ")";
}
}
// Keep the promise
deferred.resolve(response.data);
} else {
// Pass the error along
deferred.reject(response.error);
}
});
// Pass the promise back to the controller
return deferred.promise;
},
};
},
]);
}
);
/*
* tools/views/accountsController.js Copyright(c) 2022 cPanel, L.L.C.
* All rights reserved.
* copyright@cpanel.net http://cpanel.net
* This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
/* global define: false, PAGE: true */
define(
'app/views/accountsController',[
"angular",
"lodash",
"jquery",
"app/services/accountsService",
"cjt/decorators/growlDecorator",
"jquery-chosen",
"angular-chosen",
],
function(angular, _) {
"use strict";
// Retrieve the current application
var app = angular.module("App");
var controller = app.controller(
"accountsController", [
"$scope",
"$window",
"accountsService",
"growl",
"$timeout",
function(
$scope,
$window,
accountsService,
growl,
$timeout) {
$scope.isRTL = PAGE.isRTL || false;
$scope.updated = true;
/** We are running into browser limits on the number of
* concurrent HTTP connections. We want these AJAX
* calls to be low priority so that CSS/sprites/etc.
* will load first; otherwise, the UI takes longer to
* be usable.
*
* We need to reduce the number of concurrent
* HTTP calls, but for now this stop-gap will
* ensure that AJAX post-back calls don’t delay the
* loading of critical UI resources.
*/
$timeout(function() {
accountsService.getAvailableAccounts($scope.isRTL).then(function(response) {
if (response && response.length >= 1) {
$scope.accounts = response;
// helps select current user
if (PAGE.userName) {
$scope.selectedAccount = _.find(response, ["user", PAGE.userName]);
}
}
}, function(error) {
growl.error(error);
}).finally(function() {
$scope.updated = true;
});
});
/**
* Switches Account
* Note: Transfers the page
*/
$scope.accountChanged = function() {
if ($scope.selectedAccount && PAGE && PAGE.securityToken) {
$window.location.href = PAGE.securityToken + "/xfercpanel/" + $scope.selectedAccount.user;
}
};
},
]);
return controller;
}
);
/*
# cpanel - base/frontend/jupiter/tools/services/wordPressService.js
# Copyright 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/
define(
'app/services/wordPressService',[
// Libraries
"angular",
// CJT
"cjt/io/api",
"cjt/io/uapi-request",
"cjt/io/uapi", // IMPORTANT: Load the driver so its ready
"cjt/services/APICatcher",
],
function(angular, API, APIREQUEST) {
"use strict";
// Fetch the current application
var app = angular.module("cpanel.tools.service.wordPressService", []);
/**
* Setup the WordPress polling service.
*/
app.factory("wordPressService", ["$q", "APICatcher",
function($q, apiCatcher) {
// return the factory interface
return {
startPolling: function() {
var apiCall = new APIREQUEST.Class();
apiCall.initialize("WordPressSite", "retrieve", {});
return apiCatcher.promise(apiCall);
},
};
},
]);
}
);
/*
# Copyright 2025 WebPros International, LLC
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited.
*/
define(
'app/index',[
"angular",
"cjt/core",
"cjt/modules",
"ngSanitize",
"cjt/modules",
"app/views/sslStatus",
"uiBootstrap",
"angular-chosen",
"cjt/services/alertService",
],
function(angular, CJT) {
"use strict";
return function() {
// First create the application
angular.module("App", ["ngSanitize", "ui.bootstrap", "cjt2.cpanel", "angular-growl", "localytics.directives", "cpanel.tools.views.sslStatus", "cpanel.tools.service.nginxService", "cpanel.tools.service.wordPressService"]);
// Then load the application dependencies
var app = require(
[
// Application Modules
"cjt/bootstrap",
"cjt/util/locale",
"app/views/applicationListController",
"app/views/statisticsController",
"app/views/themesController",
"app/views/nginxController",
"app/views/accountsController",
"app/services/wordPressService",
], function(BOOTSTRAP, LOCALE) {
var app = angular.module("App");
app.value("PAGE", PAGE);
app.config(["$httpProvider", function($httpProvider) {
$httpProvider.useApplyAsync(true);
}]);
app.run(["wordPressService", "alertService", "PAGE", "$rootScope", function(wordPressService, alertService, PAGE, $rootScope) {
// This event comes from the welcome modal web component.
document.addEventListener("wordPressInstallPoll", function() {
$rootScope.$apply(function() {
alertService.add({
type: "info",
message: LOCALE.maketext("Your WordPress site is being created."),
closeable: true,
replace: true,
});
pollForWordPressInstall();
});
});
function pollForWordPressInstall() {
// Let the users know the install is continuing
var pollingIntervalId;
pollingIntervalId = setInterval(function() {
wordPressService.startPolling().then(function(uapiResponse) {
if (uapiResponse.data.install_status === "success") {
clearInterval(pollingIntervalId);
pollingIntervalId = null;
alertService.add({
type: "success",
message: LOCALE.maketext("Your website is ready. Start adding content and personalizing “[output,strong,_1]” using [output,url,_2,WP Toolkit,title,WP Toolkit interface].", PAGE.domain, PAGE.wpToolkitUrl),
closeable: true,
replace: true,
autoClose: 10000,
});
}
})
.catch(function(errors) {
clearInterval(pollingIntervalId);
pollingIntervalId = null;
alertService.add({
type: "danger",
message: LOCALE.maketext("Something went wrong. Your website failed to create. Try creating your website manually using [output,url,_1,WP Toolkit,title,WP Toolkit interface].", PAGE.wpToolkitUrl),
closeable: true,
replace: true,
});
});
}, 5000);
}
// Account UUID copy event handler.
var copyUuidLinkEl = document.getElementById("linkCopyUuid");
var copyUuidIconEl = document.getElementById("iconCopyUuid");
if (copyUuidLinkEl && copyUuidIconEl) {
copyUuidLinkEl.addEventListener("click", copyUuidHandler);
copyUuidIconEl.addEventListener("click", copyUuidHandler);
}
function copyUuidHandler() {
var uuidTxtEl = document.getElementById("txtAcctUuid");
var copyMsgEl = document.getElementById("copyMsgContainer");
const copyText = uuidTxtEl.textContent;
navigator.clipboard
.writeText(copyText)
.then(() => {
copyMsgEl.classList.add("show-copy-success");
window.setTimeout(function() {
copyMsgEl.classList.remove("show-copy-success");
}, 3000);
},
(err) => {
console.error(err);
});
}
}]);
BOOTSTRAP("#content", "App");
});
return app;
};
}
);
Back to Directory
File Manager