PageSourceSearch

https://www.7152.kz/assets/4c4fed9c/js/alertsWidget.js?v=1789825603

js 7152.kz collected 2026-09-26 07:52:20 UTC 6,699 bytes, 161 lines download raw bytes

1/**
2 * @typedef {Object} AlertDefaultOptions
3 * @property {boolean} encodeMessage Признак необходимости кодирования сообщения
4 * @property {string} defaultAlertClass Класс сообщения по умолчанию
5 * @property {string} defaultShowClass  Класс, отвечающий за видимость сообщения по умолчанию
6 * @property {number} alertHideTimeout Таймаут по умолчанию для закрытия сообщения
7 */
8/**
9 * @typedef {Object} AlertOptions
10 * @property {boolean} [encode] Признак необходимости кодирования сообщения
11 * @property {string} [alertClass] Класс сообщения, например, "alert-success"
12 * @property {string} [showClass] Класс, отвечающий за видимость сообщения, например, "in" (Bootstrap 3) или
13 * "show" (Bootstrap 4)
14 * @property {number} [hideTimeout] Таймаут для закрытия сообщения, false для отключения автоматического закрытия
15 */
16(function ($) {
17    /** @type {jQuery} */
18    var $container;
19    var MAX_MESSAGE_LENGTH = 1000;
20
21    /**
22     * Форматирует сообщение message, заменяя шаблоны `{ключ}` на значения из ассоциативного массива replacements.
23     * Если ключ в массиве не найден, то шаблон заменяется на сам ключ.
24     *
25     * @param {string} message
26     * @param {Object.<string, string>} replacements
27     * @return {string}
28     */
29    function formatMessage(message, replacements) {
30        return message.replace(/{([^}]+?)}/g, function (/** {string} */ match, /** {string} */ replaceKey) {
31            return replacements[replaceKey] || replaceKey;
32        });
33    }
34
35  /**
36   * Скрывает заданное сообщение-"алерт" через указанное время.
37   *
38   * @param {jQuery|HTMLElement|string} alert
39   * @param {number} timeout
40   * @return {void}
41   */
42    function hideAlert(alert, timeout) {
43        window.setTimeout(function () {
44            $(alert).alert("close");
45        }, timeout);
46    }
47
48    $.fn.cisAlerts = function () {
49        return this.each(function () {
50            $container = $(this);
51        });
52    };
53
54    var CisAlerts = {};
55    /** @type {AlertDefaultOptions} */
56    CisAlerts.defaults = {
57        encodeMessage: true,
58        defaultAlertClass: "alert-danger",
59        defaultShowClass: "in",
60        alertHideTimeout: 5000 // 5 секунд
61    };
62
63    /**
64     * Конфигурирует опции по умолчанию компонента
65     *
66     * @param {object} options новые опции
67     */
68    CisAlerts.config = function (options) {
69        CisAlerts.defaults = $.extend({}, CisAlerts.defaults, options);
70    };
71
72    /**
73     * Формирует сообщение об ошибке сервера.
74     *
75     * @param {{name?: string, status?: string, message?: string}} json объект, содержащий данные об ошибке, обычно
76     * в формате исключений Yii
77     * @return {string} Сообщение об ошибке сервера
78     */
79    CisAlerts.formatServerResponse = function (json) {
80        var message = json.hasOwnProperty("name") && json.name.length > 0 ? [json.name] : [];
81        if (json.hasOwnProperty("status")) {
82            message.push("(#" + json.status + ")");
83        }
84        if (json.hasOwnProperty("message") && json.message.length > 0) {
85            if (message.length > 0) {
86                message[message.length - 1] = message[message.length - 1] + ":";
87            }
88            message.push(json.message);
89        }
90
91        return message.join(" ");
92    };
93
94    /**
95     * Добавляет сообщение-"алерт" в общий контейнер на странице.
96     *
97     * @param {string} message текст или HTML-содержимое сообщения
98     * @param {Object.<string, string>} [messageData] данные для формирования сообщения в виде
99     * "ключШаблона: подставляемоеЗначение"
100     * @param {AlertOptions|number|boolean} [options] параметры сообщения, таймаут автоматического закрытия сообщения
101     * в миллисекундах или false для его отмены
102     * @return {boolean} Результат выполнения операции
103     */
104    CisAlerts.addAlert = function (message, messageData, options) {
105        if (undefined === $container) {
106            return false;
107        }
108        if ("object" !== typeof options) {
109            options = {hideTimeout: options};
110        }
111        message = formatMessage(message, messageData || {});
112        if (message.length > MAX_MESSAGE_LENGTH) {
113            message = message.substring(0, MAX_MESSAGE_LENGTH) + "...";
114        }
115        var encodeMessage = options.encode || CisAlerts.defaults.encodeMessage,
116            alertClass = options.alertClass || CisAlerts.defaults.defaultAlertClass,
117            hideTimeout = options.hasOwnProperty("hideTimeout") ?
118                options.hideTimeout :
119                CisAlerts.defaults.alertHideTimeout;
120        var $alert = $("<div>", {
121                "class": "alert fade",
122                "role": "alert"
123            }),
124            $message = $("<span>");
125        $alert.addClass(options.showClass || CisAlerts.defaults.defaultShowClass);
126        if (alertClass.length > 0) {
127            $alert.addClass(alertClass);
128        }
129        $("<button>", {
130            "class": "close",
131            "data-dismiss": "alert",
132            "aria-hidden": true,
133            "html": "&times;",
134            "type": "button"
135        }).appendTo($alert);
136        $message[encodeMessage ? "text" : "html"](message);
137        $alert
138            .append($message)
139            .appendTo($container)
140            .alert();
141        if (false !== hideTimeout) {
142            hideAlert($alert, parseInt(hideTimeout, 10));
143        }
144
145        return true;
146    };
147
148    /**
149     * Скрывает все сообщения через заданное время.
150     *
151     * @param {number} timeout Таймаут для закрытия сообщений, в мсек.
152     * @return {void}
153     */
154    CisAlerts.hideAllAlerts = function (timeout) {
155        $container.find(".alert").each(function () {
156            hideAlert(this, timeout);
157        });
158    };
159
160    $.CisAlerts = CisAlerts;
161})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.