Server IP : 23.254.227.96 / Your IP : 216.73.216.7 Web Server : Apache/2.4.62 (Unix) OpenSSL/1.1.1k System : Linux hwsrv-1277026.hostwindsdns.com 4.18.0-477.13.1.el8_8.x86_64 #1 SMP Tue May 30 14:53:41 EDT 2023 x86_64 User : viralblo ( 1001) PHP Version : 8.1.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/local/cwpsrv/var/services/users/cwp_theme/original/js/modules/ |
Upload File : |
console.log(); let uchip = null; let apps_table = null; let app_list = JSON.parse('{{mod.app_list|json_encode|raw}}'); let domain_list = JSON.parse('{{mod.domain_list|json_encode|raw}}'); let version_list = JSON.parse('{{mod.version_list|json_encode|raw}}'); $(document).ready(function () { {% if mod.isie == 1 %} uchip = new $.Uchip(); {% else %} uchip = new Uchip(); {% endif %} renderDomainSelect(); renderNodeJSAppList(); renderNodeJSList(); // emptyEnvVarsAppRender(); }); // function emptyEnvVarsAppRender() { // $('#_nodejs_envars_list_header').slideUp('fast'); // $('#_nodejs_envars_list_container').html(''); // } function addInitialEnvVar() { uchip.slideToggle('#_filled_envars_nodejs_form', '#_nofilled_envars_nodejs_form', function () { $('#_nodejs_envars_list_container').html(''); newEnvVarApp(); }); } function newEnvVarApp() { $('#_nodejs_envars_list_header').slideDown('fast'); let index = $('#_nodejs_envars_list_container .row-app-form').length + 1; let html_vars = envVarTemplateHTML(index); $('#_nodejs_envars_list_container').append(html_vars); } function envVarTemplateHTML(index, key, val) { return '<div class="row row-app-form app-env-var-item" id="_nodejs_apps_envar_' + index + '">' + '<div class="col-md-5">' + '<input type="text" value="' + (key === undefined ? '' : key) + '" class="form-control env-var-key">' + '</div>' + '<div class="col-md-5">' + '<input type="text" value="' + (val === undefined ? '' : val) + '" class="form-control env-var-value"">' + '</div>' + '<div class="col-md-2 env-vars-btn-container">' + '<button class="btn btn-danger" onclick="deleteEnvVarApp(this)"><i class="fa fa-trash"></i></button>' + '<button class="btn btn-primary" onclick="newEnvVarApp(this)"><i class="fa fa-plus"></i></button>' + '</div>' + '</div>'; } function renderNodeJSList() { if (version_list.length > 0) { let html_select = ''; version_list.forEach(function (version) { html_select += '<option value="' + version.ver + '"' + (version.default === true ? ' selected' : '') + '>' + version.ver + '</option>'; }); $('#_nodejs_app_form_node').html('<select id="_nodejs_app_form_node_select" data-required="true" class="form-control nodejs-req">' + html_select + '</select>'); } else { let html_install_ver_first = '<span class="nodejs-select-user-empty" onclick="installNodeJSVerFromAppForm()" id="_apps_form_install_nodejs">' + '<span>First install a NodeJS version</span>' + '<input type="hidden" class="required-data" data-error-place="#_apps_form_install_nodejs" value="">' + '</span>'; $('#_nodejs_app_form_node').html(html_install_ver_first); } } function renderNodeJSAppList() { let html_list = ''; console.log('app_list',app_list); if (app_list.length > 0) { let html_content = ''; index = 1; app_list.forEach(function (app) { let status_btn = '<button id="_nodejs_apps_status_btn_' + index + '" title="Stop application" data-status="running" onclick="nodeJSAppStatus(this, ' + index + ')" data-toggle="tooltip" data-placement="top" class="btn btn-danger btn-xs btn-status_main"><i class="fa fa-stop"></i></button>'; let status_class = 'text-running'; let btn_restart = ''; if (app.status != 'running') { status_class = 'text-danger'; btn_restart = 'style="display:none"'; status_btn = '<button id="_nodejs_apps_status_btn_' + index + '" title="Start application" data-status="stoped" onclick="nodeJSAppStatus(this, ' + index + ')" data-toggle="tooltip" data-placement="top" class="btn btn-primary btn-xs btn-status_main"><i class="fa fa-play"></i></button>'; } html_content += '<tr class="app-tr-' + app.key + '" id="_nodejs_apps_item_' + index + '" data-key="' + app.key + '" data-cwpkey="' + app.cwp_key + '">' + '<td>' + app.name + '</td>' + '<td>' + app.version + '</td>' + '<td>/home/{{users}}' + app.path + '</td>' + '<td>' + app.extra_info.port + 'x</td>' + '<td class="status-app-container">' + '<i class="fa fa-circle ' + status_class + '" aria-hidden="true"></i> ' + '<span>' + app.status + '</span>' + '</td>' + '<td>' + app.mode + '</td>' + '<td>' + '<div class="nodejs-apps-actions">' + '<button title="{{langmod.LABNODEJS99}}" data-toggle="tooltip" data-placement="top" onclick="editNodeJSApp(\'' + app.key + '\')" class="btn btn-success btn-xs"><i class="fa fa-cogs"></i></button>' + status_btn + '<button ' + btn_restart + ' id="_nodejs_apps_restart_btn_' + index + '" onclick="restartApplication(this, ' + index + ')" title="Restart application" data-toggle="tooltip" data-placement="top" class="btn btn-default btn-xs btn-restart-app"><i class="fa fa-refresh"></i></button>' + '<button class="btn btn-warning btn-xs" title="Delete application" data-toggle="tooltip" data-key="' + app.key + '" data-placement="top" onclick="confirmAppDeletion(this, \'' + app.name + '\',' + index + ')"><i class="fa fa-trash"></i></button>' + '<button class="btn btn-default btn-xs" title="View application log" data-toggle="tooltip" data-placement="top" onclick="viewNodeJSAppLog(\'' + app.name + '\', ' + app.key + ')"><i class="fa fa-file-text-o"></i></button>' + '</div>' + '</td>' + '</tr>'; index++; }); html_list = '<table style="margin-bottom:" class="table nodejs_apps_table table-striped table-bordered table-hover">' + '<thead>' + '<tr role="row">' + '<th>App name</th>' + '<th style="width:100px">Version</th>' + '<th>Path</th>' + '<th>Port</th>' + '<th style="width:85px">Status</th>' + '<th style="width:85px">Mode</th>' + '<th style="width:160px">Action</th>' + '</tr>' + '</thead>' + '<tbody id="contenttr">' + html_content + '</tbody>' + '</table>'; $('#table_nodejs_apps_container').html(html_list); apps_table = $('.nodejs_apps_table').DataTable(); } else { html_list = '<div class="nodejs-empty-list-version">' + '<h4>{{langmod.LABNODEJS129}}</h4>' + '</div>'; $('#table_nodejs_apps_container').html(html_list); } $('[data-toggle="tooltip"]').tooltip(); } function nodeJSAppStatus(elem, index) { let status = $(elem).data('status'); let action = 'stop'; let curr_ico = 'fa-stop'; let next_ico = 'fa-play'; let curr_btn = 'btn-primary'; let next_btn = 'btn-danger'; let next_status = 'stoped'; let next_title = '{{langmod.LABNODEJS101}}'; let message = 'stoped'; if (status !== 'running') { action = 'start'; next_ico = 'fa-stop'; curr_ico = 'fa-play'; next_btn = 'btn-primary'; curr_btn = 'btn-danger'; next_status = 'running'; next_title = '{{langmod.LABNODEJS102}}'; message = 'started' } let tr_app = $('#_nodejs_apps_item_' + index); tr_app.addClass('deleting_tr'); tr_app.find('.btn').prop('disabled', true); function resetTR() { tr_app.removeClass('deleting_tr'); tr_app.find('.btn').prop('disabled', false); } let app_key = tr_app.data('key'); let cwp_key = tr_app.data('cwpkey'); uchip.handleButton(elem, curr_ico); handleAppStatus(action + '&cwp_key=' + cwp_key + '&key=' + app_key, function (resp_data) { if (action == 'stop' || (action == 'start' && resp_data.app_status === 'running')) { $(elem).addClass(next_btn).removeClass(curr_btn); $(elem).data('status', next_status); $(elem).attr('title', next_title); $(elem).attr('data-original-title', next_title); updateStatusAppTr(app_key, resp_data.app_status); noti_bubble('{{langmod.LABNODEJS83}}', '{{langmod.LABNODEJS103}} ' + message + ' {{langmod.LABNODEJS104}}', 'success', true, false, '5500', true); uchip.handleButton(elem, next_ico, true); } else { noti_bubble('{{langmod.LABNODEJS82}}', '{{langmod.LABNODEJS105}}', 'error', true, false, '3000', true); uchip.handleButton(elem, curr_ico, true); } resetTR(); }, function () { resetTR(); uchip.handleButton(elem, curr_ico, true); }); } function showNodeJSForm() { $('#_nodejs_form_title').text('{{langmod.LABNODEJS95}}'); uchip.slideToggle('#nodejs_form_window', '#nodejs_app_list', function () { $('#_nodejs_app_form_type').val('new'); }); } function cancelNodeJSForm() { if ($('#_nodejs_envars_list_container').is(':visible')) { $('#_nodejs_envvars_collapse').trigger('click'); } uchip.slideToggle('#nodejs_app_list', '#nodejs_form_window', function () { $('#nodejs_url_selector_domain').val(''); uchip.validator('.nodejs-req', true); $('#nodejs_url_selector_domain').trigger('change'); $('#_nodejs_form_domain_selected_').val(''); $('#_filled_envars_nodejs_form').hide(); $('#_nodejs_envars_list_container').html(''); $('#_nofilled_envars_nodejs_form').show(); // LEGACY $('#_nodejs_app_desc_name').val(''); $('#_nodejs_app_mode').val('development'); $('#_nodejs_app_start_file').val(''); $('#_nodejs_app_uri').val(''); $('#nodejs_app_quick_actions_container').hide(); let def_ver = version_list.find(function (version) { return version.default === true; }); $('#dirsel').text('/'); $('#nodejs_app_quick_actions_container').removeClass('is-running'); $('#_nodejs_envars_list_container').html(''); if (def_ver !== undefined) { $('#_nodejs_app_form_node_select').val(def_ver.ver); } }); } function deleteEnvVarApp(elem) { if ($('.app-env-var-item').length == 1) { uchip.slideToggle('#_nofilled_envars_nodejs_form', '#_filled_envars_nodejs_form', function () { $(elem).closest('.row-app-form').remove(); $('#_nodejs_envars_list_container').html(''); }); } else { $(elem).closest('.row-app-form').slideUp('fast', function () { $(this).remove(); }); } } function renderDomainSelect() { let html_select = '<select class="nodejs-req" data-required="true" id="nodejs_url_selector_domain">' + '<option value="">{{langmod.LABNODEJS119}}</option>'; // let found = false; domain_list.forEach(function (dom) { html_select += '<option value="' + dom.domain_label + '">' + dom.domain_label + '</option>'; }); html_select += '</select>'; $('#nodejs_url_selector_select').html(html_select); $("#nodejs_url_selector_domain").select2({ placeholder: "{{langmod.LABNODEJS119}}", allowClear: true }).on('select2:select', function (e) { let data = e.params.data; $('#_nodejs_form_domain_selected_').val(data.text); }); } function editNodeJsAppWindow(app_data) { // renderDomainForApps(app_data.user); $('#_nodejs_form_domain_selected_').val(app_data.url); $('#nodejs_url_selector_domain').val(app_data.url); $('#nodejs_url_selector_domain').trigger('change'); $('#dirsel').text(app_data.path); $('#_nodejs_path_wrapper .nodejs-select-user-empty').fadeOut('fast', function () { $('#_nodejs_path_selector_wrapper').fadeIn('fast'); }); $('#_nodejs_app_desc_name').val(app_data.name); $('#_nodejs_app_mode').val(app_data.mode); // $('#_nodejs_app_uri').val(app_data.extra_info.uri === undefined ? '' : app_data.extra_info.uri); // $('#_nodejs_app_port').val(app_data.extra_info.port); if (app_data.status === 'running') { $('#nodejs_app_quick_actions_container').addClass('is-running'); } if (app_data.npm_install_running === true) { uchip.handleButton('#_npm_install_btn_form', 'fa-angle-right'); // resetNPMInstallModal(); // $('#modal_npm_install_log').modal('show'); // npmInstallLogger(app_data.key); } $('#nodejs_app_quick_actions_container').data('key', app_data.key); $('#nodejs_app_quick_actions_container').data('name', app_data.name); $('#nodejs_app_quick_actions_container').data('cwp-key', app_data.cwp_key); $('#nodejs_app_quick_actions_container').show(); $('#_nodejs_app_form_node_select').val(app_data.version); $('#_nodejs_app_start_file').val(app_data.extra_info.startup_file); renderEnvVars(app_data.extra_info.env_vars); uchip.slideToggle('#nodejs_form_window', '#nodejs_loader_window'); } function saveNewNodeJSApp() { if (!uchip.validator('.required-data')) { noti_bubble('{{langmod.LABNODEJS92}}', '{{langmod.LABNODEJS93}}', 'error', true, false, '3000', true); } else { let data_app = getAppDataFromForm(); let type_val = $('#_nodejs_app_form_type').val(); let data_request = 'type=' + (type_val !== 'new' ? 'editing&key_id=' + type_val : 'new') + '&app=' + JSON.stringify(data_app); $('#_nodejs_apps_loader_title').text('{{langmod.LABNODEJS94}}...'); slideToggle('#_nodejs_apps_loader', '#_nodejs_apps_newform_window', function () { sendRequestSaveApp(data_request, function (resp_data) { app_list = resp_data.list; renderNodeJSAppList(); cancelFormNodeJSApp(); }, function () { slideToggle('#_nodejs_apps_newform_window', '#_nodejs_apps_loader'); }); }); } } function getAppDataFromForm() { let env_variables = []; $('#_nodejs_envars_list_container .app-env-var-item').each(function () { let key = $(this).find('.env-var-key').val(); if (key !== '') { env_variables.push({ key: key, value: $(this).find('.env-var-value').val(), }); } }); return { type: 'node', version: $('#_nodejs_app_form_node_select').val(), name: $('#_nodejs_app_desc_name').val(), mode: $('#_nodejs_app_mode').val(), path: $('#dirsel').text(), user: $("#nodejs_user_selector_").val(), url: $('#nodejs_url_selector_domain').val(), extra_info: { startup_file: $('#_nodejs_app_start_file').val(), uri: $('#_nodejs_app_uri').val(), port: $('#_nodejs_app_port').val(), env_vars: env_variables } } } function renderEnvVars(env_vars) { let html_vars = ''; if (env_vars === undefined || env_vars.length < 1) { $('#_filled_envars_nodejs_form').hide(); $('#_nofilled_envars_nodejs_form').show(); $('#_nodejs_envars_list_container').html(''); } else { $('#_nodejs_envvars_collapse').trigger('click'); let index = 1; env_vars.forEach(function (env_var) { // console.log(`${property}: ${env_vars[property]}`); html_vars += envVarTemplateHTML(index, env_var.key, env_var.value); index++; }); $('#_nodejs_envars_list_container').html(html_vars); $('#_nofilled_envars_nodejs_form').hide(); $('#_filled_envars_nodejs_form').show(); // if(!$('#_nodejs_envars_list_container').is(':visible')){ // $('#_nodejs_envvars_collapse').trigger('click'); // } } } function editNodeJSApp(app_key) { $('#_nodejs_apps_loader_title').text('Loading application info, please wait...'); $('#_nodejs_app_form_type').val(app_key); uchip.slideToggle('#nodejs_loader_window', '#nodejs_app_list', function () { loadNodeJSAppInfo(app_key, function (resp_data) { $('#_nodejs_form_title').text('{{langmod.LABNODEJS99}}'); editNodeJsAppWindow(resp_data.info); }, function () { slideToggle('#_nodejs_apps_list_container', '#_nodejs_apps_loader'); }); }); } function nodeJSAppViewLogInForm() { let key = $('#nodejs_app_quick_actions_container').data('key'); let name = $('#nodejs_app_quick_actions_container').data('name'); viewNodeJSAppLog(name, key); } function viewNodeJSAppLog(name, key) { $('#_nodejs_app_logger_lines_qty').val(20); $('#_nodejs_app_logger_refresh_btn').data('key', key); $('#modal_nodejs_app_log_title').text(name + ' log'); $('#nodejs_app_log_loader').show(); $('#nodejs_app_log_wrapper').hide(); $('#modal_nodejs_app_log').modal('show'); requestAppLog(key, 20, function (resp) { $('#nodejs_app_log_container').html(resp.log.map(function (log_line) { return '<p>' + log_line + '</p>'; }).join('')); $('#nodejs_app_log_loader').fadeOut('fast', function () { $('#nodejs_app_log_wrapper').fadeIn('fast', function () { $("#nodejs_app_log_container p").last().attr("tabindex", -1).focus(); }); }); }, function () { $('#modal_nodejs_app_log').modal('hide'); }); } function refeshNodeJSAppLog(elem) { $('#nodejs_app_log_wrapper').fadeOut('fast', function () { $('#nodejs_app_log_loader').fadeIn('fast'); let key = $(elem).data('key'); let lines = $('#_nodejs_app_logger_lines_qty').val(); requestAppLog(key, lines, function (resp) { $('#nodejs_app_log_container').html(resp.log.map(function (log_line) { return '<p>' + log_line + '</p>'; }).join('')); $('#nodejs_app_log_loader').fadeOut('fast', function () { $('#nodejs_app_log_wrapper').fadeIn('fast'); }); }, function () { $('#modal_nodejs_app_log').modal('hide'); }); }); } function confirmAppDeletion(elem, app_name, index) { $('#confirm_app_delete_name').text(app_name) $('#_nodejs_app_confirm_del_btn').unbind('click').click(function () { let tr_delete = $('#_nodejs_apps_item_' + index); tr_delete.addClass('deleting_tr'); tr_delete.find('.btn').prop('disabled', true); function resetTR() { tr_delete.removeClass('deleting_tr'); tr_delete.find('.btn').prop('disabled', false); } uchip.handleButton(elem, 'fa-trash'); $('#modal_app_delete_confirm').modal('hide'); let key = $(elem).data('key'); sendDeleteApplication(key, function () { tr_delete.slideUp('fast', function () { apps_table.row(this).remove().draw(); }); app_list.splice(index - 1, 1); calculateQuota(); resetTR(); }, function () { resetTR(); uchip.handleButton(elem, 'fa-trash', true); }); }); $('#modal_app_delete_confirm').modal('show'); } function sendDeleteApplication(app_key, success, cleaner) { uchip.call('module=nodejs_manager&acc=delete_app', { data: 'key_id=' + app_key, callback: function (response) { if (response.result == 'success') { success(response); } else { let message_error = '{{langmod.LABNODEJS81}}'; noti_bubble('{{langmod.LABNODEJS82}}', message_error, 'error', true, false, '3000', true); cleaner(); } } }); } function loadNodeJSAppInfo(app_key, success, cleaner) { uchip.call('module=nodejs_manager&acc=nodejs_app_info', { data: 'key_id=' + app_key, callback: function (response) { if (response.result == 'success') { success(response); } else { let message_error = '{{langmod.LABNODEJS81}}'; noti_bubble('{{langmod.LABNODEJS82}}', message_error, 'error', true, false, '3000', true); cleaner(); } } }); } function requestAppLog(key, lines, success, cleaner) { uchip.call('module=nodejs_manager&acc=get_app_log', { data: 'key=' + key + '&lines=' + lines, callback: function (response) { if (response.result == 'success') { success(response); } else { let message_error = '{{langmod.LABNODEJS81}}'; if (response.hasOwnProperty('code')) { if (response.code == 1) { message_error = '{{langmod.LABNODEJS116}}'; } } noti_bubble('{{langmod.LABNODEJS82}}', message_error, 'error', true, false, '3000', true); cleaner(); } } }); } {% include("/js/modules/nodejs_manager/file_explorer.js.twig") %} {% include("/js/modules/nodejs_manager/npm_engine.js.twig") %} {% include("/js/modules/nodejs_manager/apps_status.js.twig") %} {% include("/js/modules/nodejs_manager/apps_save_update.js.twig") %}