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.