PageSourceSearch

https://fsinzak-money.ru/cache/resource/min_js/4114219998.js?t1680018134

js fsinzak-money.ru collected 2026-10-08 07:17:53 UTC 8,828 bytes, 238 lines download raw bytes

1/**
2* Функции для работы с интернационализацией строк ReadyScript в JavaScript
3*
4* @author ReadyScript lab.
5*/
6var lang = 
7{
8    baseLang: (global.baseLang) ? global.baseLang : null, //Язык по умолчанию
9    lang: (global.lang) ? global.lang : null, //Текущий язык
10    messages: {}, //Список фраз
11    plugins: {},    
12    /**
13    * Возвращает перевод фразы на текущем языке
14    * 
15    * @param string phrase - фраза для перевода
16    * @param object params - объект для подстановки значений
17    * @param alias - короткий идентификатор фразы
18    * @example 
19    * lang.t('У вас %msg сообщений', {msg: 35})
20    * lang.t('У вас %msg сообщений. Далее большой текст', {msg: 35}, 'короткий_идентификатор_фразы')
21    */
22    t: function(phrase, params, alias) {
23        var self = this;
24        var to_translate = (typeof(alias) == 'undefined') ? phrase : alias;
25        var translated = this.messages[to_translate];
26        if (translated) {
27            phrase = translated;
28        }
29
30        phrase = phrase.replace(/\[(.*?):%(.*?):(.*?)\]/g, function(whole, plugin, param_name, plugin_param) {
31            if (self.plugins[plugin]) {
32                var param_value = (params[param_name]) ? params[param_name] : null;
33                var phrase_lang = (translated) ? self.lang : self.baseLang;
34                return self.plugins[plugin].call(self, param_value, plugin_param, params, phrase_lang);
35            }
36            return '';
37        })
38        
39        for(var key in params) {
40            phrase = this.str_replace('%'+key, params[key], phrase);
41        }
42        
43        phrase = phrase.split('^')[0];
44        return phrase;
45    },
46    /**
47    * Replaces all occurrences of search in haystack with replace  
48    * version: 1109.2015
49    * discuss at: http://phpjs.org/functions/str_replace    
50    * 
51    * @param search
52    * @param replace
53    * @param subject
54    * @param count
55    */
56    str_replace: function(search, replace, subject, count) {
57        
58            j = 0,
59            temp = '',
60            repl = '',
61            sl = 0,        fl = 0,
62            f = [].concat(search),
63            r = [].concat(replace),
64            s = subject,
65            ra = Object.prototype.toString.call(r) === '[object Array]',        
66            sa = Object.prototype.toString.call(s) === '[object Array]';
67        s = [].concat(s);
68        if (count) {
69            this.window[count] = 0;
70        } 
71        for (i = 0, sl = s.length; i < sl; i++) {
72            if (s[i] === '') {
73                continue;
74            }        for (j = 0, fl = f.length; j < fl; j++) {
75                temp = s[i] + '';
76                repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
77                s[i] = (temp).split(f[j]).join(repl);
78                if (count && s[i] !== temp) {
79                    this.window[count] += (temp.length - s[i].length) / f[j].length;
80                }
81            }
82        }
83        return sa ? s : s[0];
84    }
85};
86
87/**
88* Плагин plural - подставляет слово во множественном числе с учетом словоформы.
89* Пример испльзования во фразе: 
90* lang.t("У вас %msg [plural:%msg:сообщение|сообщения|сообщений]", {msg: 1}); 
91* lang.t("У вас %msg [plural:%msg:сообщение|сообщения|сообщений]", {msg: 2});
92* lang.t("У вас %msg [plural:%msg:сообщение|сообщения|сообщений]", {msg: 5});
93* lang.t("You have %msg [plural:%msg:message|messages]", {msg: 1}); //Если текущий язык английский
94* lang.t("You have %msg [plural:%msg:message|messages]", {msg: 2}); //Если текущий язык английский
95* 
96* вывод:
97* У Вас 1 сообщение
98* У Вас 2 сообщения
99* У Вас 5 сообщений
100* You have 1 message
101* You have 2 messages
102* 
103* @type Object
104*/
105lang.plugins.plural = function(param_value, plugin_param, params, phrase_lang) {
106    var values = plugin_param.split('|');
107    if (phrase_lang == 'ru') {
108        var result;
109        var first = values[0];
110        var second = values[1];
111        var five = values[2];
112        
113        var prepare = Math.abs( parseInt( param_value ) );
114        if( prepare != 0 ) 
115        {
116            if( ( prepare - prepare % 10 ) / 10 == 1 ) {
117                result = five;
118            } else {
119                prepare = prepare % 10;
120                if( prepare == 1 ) {
121                    result = first;
122                } else if( prepare > 1 && prepare < 5 ) {
123                    result = second;
124                } else {
125                    result = five;
126                }
127            }
128        }
129        else {
130            result = five;
131        }
132    } else if (lang == 'en') {
133        result = (param_value == 1) ? $values[0] : $values[1];
134    } else {
135        result = values[0];
136    }
137    return result;
138};
139(function() {
140    /**
141     * Успешно разрешает Promise, если браузер поддерживает формат webP,
142     * в противном случает отклоняет его
143     *
144     * @return Promise
145     */
146    function supportsWebp() {
147        return new Promise(function(resolve, reject) {
148            if (!self.createImageBitmap) {
149                reject();
150            } else {
151                var webpData = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';
152
153                fetch(webpData)
154                    .then(function(response) {
155                        return response.blob();
156                    })
157                    .then(function(blobData) {
158                        return createImageBitmap(blobData).then(function() {
159                            resolve();
160                        }, function() {
161                            reject();
162                        });
163                    }, function() {
164                            reject();
165                });
166            }
167        });
168    }
169
170    /**
171     * Загружает скрипт и вызывает callback, по окончании загрузки
172     *
173     * @param url
174     * @param callback
175     * @return void
176     */
177    function loadScript(url, callback)
178    {
179        // Добавляем тег сценария в head
180        var head = document.getElementsByTagName('head')[0];
181        var script = document.createElement('script');
182        script.type = 'text/javascript';
183        script.src = url;
184
185        // Затем связываем событие и функцию обратного вызова.
186        // Для поддержки большинства обозревателей используется несколько событий.
187        script.onreadystatechange = callback;
188        script.onload = callback;
189
190        // Начинаем загрузку
191        head.appendChild(script);
192    }
193
194    /**
195     * Проверяет поддержку webP и в случае необходимости начинает загрузку polyfills для webP
196     *
197     * @return void
198     */
199    function start()
200    {
201        supportsWebp().catch(function() {
202
203            var script = document.createElement('script');
204            script.src = global.folder + '/resource/js/webpjs/polyfills.js';
205            document.head.appendChild(script);
206
207            var loadWebpJS = function() {
208                document.addEventListener('DOMContentLoaded', function(){
209                    var script = document.createElement('script');
210                    script.src = global.folder + '/resource/js/webpjs/webp-init.js';
211                    script.defer = true;
212                    document.body.appendChild(script);
213                });
214            };
215            loadScript(global.folder + "/resource/js/webpjs/webp-hero.bundle.js", loadWebpJS
215);
216        });
217    }
218
219    /**
220     * Проверяет, поддерживаются ли Promise в браузере, если нет, то загружает
221     * сперва Polyfill для Promise и только потом запускает этап проверки webP
222     *
223     * @return void
224     */
225    function init()
226    {
227        if(/MSIE \d|Trident.*rv:/.test(navigator.userAgent)) {
228            //Если это IE, то загружаем polyfill для Promise
229            loadScript(global.folder + "/resource/js/webpjs/bluebird.core.min.js", function() {
230                start();
231            });
232        } else {
233            start();
234        }
235    }
236
237    init(); //Запускаем процесс
238})();

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.