Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/cpanel_customization/views/jupiter/linksController.js

/*
# cpanel - whostmgr/docroot/templates/cpanel_customization/views/jupiter/linksController.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
*/

/* jshint -W100 */

define([
    "lodash",
    "angular",
    "cjt/util/locale",
    "cjt/directives/autoFocus",
    "cjt/decorators/growlDecorator",
    "app/services/customizeService",
    "app/services/savedService",
], function(_, angular, LOCALE) {
    "use strict";

    var module = angular.module("customize.views.linksController", [
        "customize.services.customizeService",
        "customize.services.savedService",
    ]);

    var controller = module.controller("linksController", [
        "$scope",
        "customizeService",
        "savedService",
        "growl",
        "growlMessages",
        "PAGE",
        function(
            $scope,
            customizeService,
            savedService,
            growl,
            growlMessages,
            PAGE
        ) {
            $scope.saving = false;

            $scope.urlRegex =
                /^(https?):\/\/(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\\d:]+])(?::\\d+)?(?:\/[^?#]*)?(?:\\?[^#]*)?(?:#.*)?$/i;

            // Preload links
            $scope.model = {
                help: PAGE.data.jupiter.help
                    ? angular.copy(PAGE.data.jupiter.help)
                    : { url: "" },
                documentation: PAGE.data.jupiter.documentation
                    ? angular.copy(PAGE.data.jupiter.documentation)
                    : { url: "" },
            };

            // Save initial values
            $scope.initialHelpLink = $scope.model.help["url"];
            $scope.initialDocumentationLink = $scope.model.documentation["url"];

            // Watch for changes
            $scope.$watchGroup(["model.help.url", "model.documentation.url"], function(newValues) {
                var helpLinkChanged = newValues[0] !== $scope.initialHelpLink;
                var documentationLinkChanged = newValues[1] !== $scope.initialDocumentationLink;

                // If the links match their original state, make the form pristine again
                if (!helpLinkChanged && !documentationLinkChanged) {
                    growlMessages.destroyAllMessages();
                    savedService.update("links", false);
                    $scope.customization.$setPristine();
                } else {
                    savedService.update("links", $scope.customization.$dirty);
                }

            }, false);

            /**
             * Saves changes to branding customization
             * Persist the customization form if it is valid
             * @method save
             * @param {Object} $formCtrl Form control
             */
            $scope.save = function($formCtrl) {
                growlMessages.destroyAllMessages();

                if (!$formCtrl.$valid) {
                    growl.error(
                        LOCALE.maketext("The current customization is invalid.")
                    );
                    return;
                }

                if ($scope.saving) {
                    growl.warning(
                        LOCALE.maketext(
                            "The system is busy. Try again once the current operation is complete."
                        )
                    );
                    return;
                }

                $scope.saving = true;
                customizeService
                    .update({
                        documentation: {
                            url: $scope.model.documentation.url,
                        },
                        help: {
                            url: $scope.model.help.url,
                        },
                    })
                    .then(function(response) {

                        // For subsequent loads of links tab, we need to update PAGE to reflect changes
                        PAGE.data.jupiter.documentation.url =
                            $scope.model.documentation.url;
                        PAGE.data.jupiter.help.url = $scope.model.help.url;

                        $formCtrl.$setPristine();
                        savedService.update("links", false);

                        growl.success(
                            LOCALE.maketext(
                                "The system successfully updated your links."
                            )
                        );
                    })
                    .catch(function(error) {
                        growl.error(
                            LOCALE.maketext(
                                "The system failed to update your links."
                            )
                        );
                    })
                    .finally(function() {
                        $scope.saving = false;
                    });
            };
        },
    ]);

    return controller;
});
Back to Directory File Manager