Viewing File: /usr/local/cpanel/base/sharedjs/email_deliverability/directives/suggestedRecordSet.js

//                                      Copyright 2024 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(
    [
        "angular",
        "lodash",
        "cjt/directives/copyField",
        "shared/js/email_deliverability/filters/htmlSafeString",
        "cjt/util/locale",
        "cjt/core",
        "cjt/directives/callout",
        "cjt/modules",
    ],
    function(angular, _, CopyField, HTMLSafeString, LOCALE, CJT) {

        "use strict";


        var RELATIVE_PATH = "shared/js/email_deliverability/directives/suggestedRecordSet.ptt";
        var TEMPLATE_PATH = CJT.config.debug ? CJT.buildFullPath(RELATIVE_PATH) : CJT.buildPath(RELATIVE_PATH);
        var MODULE_NAMESPACE = "shared.emailDeliverability.suggestedRecordSet.directive";
        var MODULE_REQUIREMENTS = [ CopyField.namespace, HTMLSafeString.namespace ];

        var SPLIT_REGEX = new RegExp("(.{1,255})", "g");

        var CONTROLLER_INJECTABLES = [ "$scope" ];
        var CONTROLLER = function SuggestedRecordSetController($scope) {

            $scope.domainName = $scope.domain.domain;

            $scope._suggestionMode = function() {
                $scope.label = LOCALE.maketext("Suggested “[_1]” ([_2]) Record", $scope.recordType.toUpperCase(), $scope.recordZoneType );
                $scope.record = $scope.domain.getSuggestedRecord($scope.recordType);
                $scope.noRecordMessage = LOCALE.maketext("Suggested “[_1]” does not exist.", $scope.recordType.toUpperCase());
                $scope.nameText = $scope.record.name;

                $scope.originalValueText = $scope.valueText = $scope.record.value;
            };

            $scope._currentMode = function() {
                $scope.label = LOCALE.maketext("Current “[_1]” ([_2]) Record", $scope.recordType.toUpperCase(), $scope.recordZoneType );
                $scope.record = $scope.domain.getCurrentRecord($scope.recordType);
                $scope.noRecordMessage = LOCALE.maketext("Current “[_1]” does not exist.", $scope.recordType.toUpperCase());
                $scope.nameText = $scope.record.name;
                $scope.originalValueText = $scope.valueText = $scope.record.value;
            };

            $scope._recordsReady = function() {
                if (!$scope.domain.recordsLoaded) {
                    return;
                }

                $scope.recordValid = $scope.domain.isRecordValid($scope.recordType);
                $scope.recordsLoaded = true;

                if ($scope.alwaysCurrent) {
                    $scope._currentMode();
                } else if ($scope.alwaysSuggested) {
                    $scope._suggestionMode();
                } else if ($scope.recordValid) {
                    $scope._currentMode();
                } else {
                    $scope._suggestionMode();
                }

                if (Object.keys($scope.record).length === 0) {
                    $scope.record = false;
                }
            };

            $scope._checkRecordsReady = function() {
                return $scope.domain.recordsLoaded;
            };

            $scope.splitMode = "full";

            $scope.toggleSplitMode = function() {
                $scope.splitMode = $scope.splitMode === "full" ? "split" : "full";

                if ( $scope.splitMode === "split" ) {

                    if ( !$scope.splitText ) {
                        var split = $scope.originalValueText.match(SPLIT_REGEX);
                        $scope.splitText = _.join( _.map(split, function(e) {
                            return "\"" + e + "\"";
                        }), " " );
                    }

                    $scope.valueText = $scope.splitText;
                } else {
                    $scope.valueText = $scope.originalValueText;
                }
            };

            $scope.$watch($scope._checkRecordsReady, $scope._recordsReady);

            $scope.label = LOCALE.maketext("Loading “[_1]” Record", $scope.recordType.toUpperCase() );

        };

        var module = angular.module(MODULE_NAMESPACE, MODULE_REQUIREMENTS);

        var DIRECTIVE_LINK = function($scope, $element, $attrs) {
            if (_.isUndefined($attrs["hideExtras"]) === false) {
                $scope.hideExtras = true;
            }
            if (_.isUndefined($attrs["alwaysSuggested"]) === false) {
                $scope.alwaysSuggested = true;
            }
            if (_.isUndefined($attrs["alwaysCurrent"]) === false) {
                $scope.alwaysCurrent = true;
            }
        };

        module.directive("suggestedRecordSet", function suggestedRecordSetDirectiveFactory() {

            return {
                templateUrl: TEMPLATE_PATH,
                scope: {
                    parentID: "@id",
                    domain: "=",
                    recordType: "@",
                    recordZoneType: "@",
                    splitable: "=",
                },
                restrict: "E",
                replace: true,
                transclude: true,
                link: DIRECTIVE_LINK,
                controller: CONTROLLER_INJECTABLES.concat(CONTROLLER),
            };

        });

        return {
            "class": CONTROLLER,
            "namespace": MODULE_NAMESPACE,
            "template": TEMPLATE_PATH,
        };
    }
);
Back to Directory File Manager