GdePosylka_PackageRadar_Advanced

Advanced Check my track number packageradar | Раширенные возможности для отслеживания трек-кода на сайт gdeposylka

目前为 2019-06-01 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name GdePosylka_PackageRadar_Advanced
  3. // @namespace https://github.com/AlekPet/
  4. // @version 1.6.3
  5. // @description Advanced Check my track number packageradar | Раширенные возможности для отслеживания трек-кода на сайт gdeposylka
  6. // @author AlekPet 2017 (alexepetrof@gmail.com)
  7. // @license MIT; https://raw.githubusercontent.com/AlekPet/GdePosylka_PackageRadar_Advanced/master/LICENSE
  8. // @match https://gdeposylka.ru/tracks*
  9. // @match https://packageradar.com/tracks*
  10. // @match https://gdeposylka.ru/form*
  11. // @match https://packageradar.com/form*
  12. // @icon https://raw.githubusercontent.com/AlekPet/GdePosylka_PackageRadar_Advanced/master/assets/images/icon.png
  13. // @run-at document-end
  14. // @noframes
  15. // @grant GM_setValue
  16. // @grant GM_getValue
  17. // @grant GM_addStyle
  18. // @grant GM_addValueChangeListener
  19. // @require https://code.jquery.com/jquery-3.1.0.min.js
  20. // ==/UserScript==
  21.  
  22. // Вспомогательные функции
  23. function hex(r,g,b){
  24. var hexv="0123456789ABCDEF";
  25. var valhex="";
  26. var ff=[r,g,b];
  27. for(var i=0;i<3;i++){
  28. var del= ff[i] % 16;
  29. var di=Math.floor(ff[i]/16);
  30. if(ff[i]>=255){
  31. valhex+="FF";
  32. } else if(ff[i]<=0){
  33. valhex+="00";
  34. } else {
  35. valhex+=hexv.charAt(di)+hexv.charAt(del);
  36. }
  37. }
  38. return valhex;
  39. }
  40. function getColorRND(){
  41. return (arguments.length ===0)?"#"+hex(Math.floor(Math.random()*255),Math.floor(Math.random()*255),Math.floor(Math.random()*255))+", #"+ hex(Math.floor(Math.random()*255),Math.floor(Math.random()*255),Math.floor(Math.random()*255)):"#"+hex(Math.floor(Math.random()*255),Math.floor(Math.random()*255),Math.floor(Math.random()*255));
  42. }
  43.  
  44. // Вспомогательные функции
  45. var colors_style=getColorRND();
  46. // Styles
  47. GM_addStyle("\
  48. .track_service{border: 1px solid; margin: 5px 5px; padding: 2px; color: #e7dcdc; text-shadow: 1px 1px 0px black; cursor: pointer; display: inline;}\
  49. .track_service:hover{color:yellow;} \
  50. li.li_style {float: left;}\
  51. .li_style:hover>ul {display: block;}\
  52. .li_style ul{-webkit-transition: all 0.3s ease-in; -moz-transition: all 0.3s ease-in; -o-transition: all 0.3s ease-in;}\
  53. .ul_menu{position:absolute;z-index:99999999999999;border:1px solid;width:250px;top:23px;display:none;padding: 0;background-color: #1d2125;}\
  54. .li_menu{list-style: none; padding: 0 10px; min-width: 200px; float: none; background-color: rgba(46,73,89,.5); font-family: Roboto,Helvetica,Arial,sans-serif;}\
  55. .li_menu:hover{background-color: rgba(46,73,89,.5);}\
  56. .a_menu{text-decoration: none; color: #77def7; display: inline-block; font-size: 16px; line-height: 33px; padding-left: 5px; width: 100%;}\
  57. .a_menu:hover{text-decoration: none;color: #ffffff;}\
  58. .li_menu:hover {background: #01ffc2;}\
  59. .ul_menu li{-webkit-transition: all 0.3s ease-in; -moz-transition: all 0.3s ease-in; -o-transition: all 0.3s ease-in;}\
  60. \
  61. #abs_div{position:fixed;top:30%;left:30px;border:1px solid;border-style: dashed;padding: 5px;overflow:auto;background-color: white;transform: translateY(-50%);}\
  62. .ab_style:hover{background: linear-gradient("+colors_style+");color:white !important;} \
  63. .ab_style_complete{background: linear-gradient(white,#12ff45);} \
  64. .ab_styles:hover{background: linear-gradient("+colors_style+");color:white !important;} \
  65. .ab_styles:after{ content: \" Получил\"; color: white; background: linear-gradient(#ff8100,#ffb714); margin-left: 10px; padding: 0 2px 0 2px; font-size: 10px; line-height: 1.5;}\
  66. .pop_options{border:1px solid;background: linear-gradient(silver,black);color:white;cursor:pointer;}\
  67. .pop_options:hover{color:yellow;}\
  68. .abs_div_cat{border: 1px solid;padding: 5px;margin-bottom:10px;}\
  69. .abs_punkti{text-align:center; color: white; user-select: none; padding: 3px;}\
  70. \
  71. .all_box_scroll{ max-height: 500px;overflow-y: auto;}\
  72. .all_box_scroll::-webkit-scrollbar { width: 12px;margin-left:20px; float: left;}\
  73. .all_box_scroll::-webkit-scrollbar-track {background-color: #eaeaea; border-left: 1px solid #ccc;}\
  74. .all_box_scroll::-webkit-scrollbar-thumb {background-color: #c7587c;background-clip: padding-box;}\
  75. .all_box_scroll::-webkit-scrollbar-thumb:hover { background-color: #823b69;}\
  76. \
  77. .checkbox_div{position: relative; left: 400px; top: -45px; width: 500px; }\
  78. .checkbox{ vertical-align: top; margin: 0 3px 0 0; width: 17px; height: 17px;}\
  79. .checkbox + label { cursor: pointer;}\
  80. .checkbox:not(checked) { position: absolute; opacity: 0;}\
  81. .checkbox:not(checked) + label { position: relative; padding: 0 0 0 60px; }\
  82. .checkbox:not(checked) + label:before { content: ''; position: absolute; top: -4px; left: 0; width: 50px; height: 26px; border-radius: 13px; background: #CDD1DA; box-shadow: inset 0 2px 3px rgba(0,0,0,.2);}\
  83. .checkbox:not(checked) + label:after { content: ''; position: absolute; top: -2px; left: 2px; width: 22px; height: 22px; border-radius: 10px; background: #FFF; box-shadow: 0 2px 5px rgba(0,0,0,.3); transition: all .2s;}\
  84. .checkbox:checked + label:before {background: #9FD468;}\
  85. .checkbox:checked + label:after {left: 26px;}\
  86. .checkbox:focus + label:before { box-shadow: 0 0 0 3px rgba(255,255,0,.5);}\
  87. \
  88. .i_setting {position: relative; top: 15px; cursor: pointer;font: normal normal normal 35px FontAwesome; display: inline-block; }\
  89. .i_setting-set:before{content:\"\\f013\"; color: #ff8f00;}\
  90. .i_setting:hover{animation:my 2s infinite;}\
  91. .i_setting_div,.user_codesBox{position: fixed; border: 1px solid silver; width: 500px; top: 20%; left: 50%; margin-left: -250px; display: none;background: linear-gradient(#ffffff,silver);z-index:9999999;box-shadow: 5px 5px 5px rgba(192, 192, 192, 0.26);}\
  92. .i_setting_div input, select, .user_codesBox input { background: linear-gradient(#eeffee,#9bfffa); font: 8pt monospace; width: 100%;text-align: right; border-radius: 4px;}\
  93. .i_setting_el_zoom{ position: absolute; width: 300px !important; font-size: 16px !important; border: 4px solid yellow; padding: 10px;transition: 1s all;}\
  94. .i_setting_div_caption,.user_codesBoxTitle{background: linear-gradient(silver,#efebeb); width: 100%; height: 30px; text-align: center;padding:5px;}\
  95. .i_setting_div_caption span, .user_codesBoxTitle span{user-select: none; cursor: default; color: grey; font: bold 12pt/10pt monospace;}\
  96. .i_setting_div_body,.user_codesList{overflow-y: scroll; width: 100%; max-height: 400px; clear: both; }\
  97. \
  98. .PoleElTable, .UserTable {display:table;text-align:center;}\
  99. .PoleElTableCapt,.UserTableCapt {font-weight: bold;}\
  100. .PoleElTableCapt > div, .UserTableCapt div {background: linear-gradient(#107bf9,#57d5fb);color: white;vertical-align: middle;font: 10pt monospace; font-weight: bold;}\
  101. .PoleElTable > div:not([class='PoleElTableLoad']), .UserTable > div {display:table-row;}\
  102. .PoleElTable > div > div, .UserTable > div > div {display:table-cell; padding: 2px; vertical-align: middle;}\
  103. .UserTable > div > div {font-size: 0.7em;}\
  104. \
  105. .user_codesBox input[type='checkbox']{width: 20px;height: 20px;vertical-align: middle;}\
  106. \
  107. .i_setting_div_foot, .user_codesButtons{width: 100%; height: 50px; background: linear-gradient(silver,white); padding: 10px;text-align: center;}\
  108. .i_setting_div_button{user-select: none;width: 105px; height: 25px; margin: 0 auto; text-align: center; border: 1px solid white; color: white; line-height: 20px; cursor: pointer;transition:1s all;display: inline-block; margin: 0 2px;}\
  109. .i_setting_div_save_button, .i_setting_div_add_button,.user_codesButtons_save,.user_codesButtons_add{background: linear-gradient(#8d8d92,#888a8a);}\
  110. .i_setting_div_del_button,.user_codesButtons_del{display:none;background: -webkit-linear-gradient(top,#e02b34 0,#94044d 100%) ; opacity: 0;}\
  111. .i_setting_div_del_button:hover,.user_codesButtons_del:hover{background: -webkit-linear-gradient(top,#b9030c 0,#ff51a9 100%) !important;}\
  112. .i_setting_div_button:hover{background: linear-gradient(#8d8d92,#c3c7c7); font-size: 10pt;}\
  113. \
  114. .i_input_focus_close, .utrack_input_focus_close{position: absolute; display:none; cursor:pointer; transition: 1s all; border: 2px solid white; padding: 3px; width: 20px; height: 20px; text-align: center; background: linear-gradient(silver,red); color: white; border-radius: 8px; font: 10px bold monospace;}\
  115. .i_input_focus_close:hover, .utrack_input_focus_close:hover{background: linear-gradient(#fd9b9b,orange); transform: rotateZ(359deg);}\
  116. @keyframes my{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}\
  117. .i_smoke_div_fog{position: fixed; display: none; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); z-index: 9999999;}\
  118. #i_pop_menu p{text-align: left; margin-left: 40px;}\
  119. .error_icon_input:after{content:\"\\f057\"; color: orange;}\
  120. .error_span_input{font-family:FontAwesome;font-size: 1.9em; vertical-align: middle; padding: 3px;display: none;}\
  121. \
  122. .user_buttonShow{padding: 5px 10px;border-radius: 8px;position: relative;left: 35px;top: 10px;user-select: none;cursor: pointer;background: linear-gradient(#9FD468, #49ad1f);color: white;box-shadow: 2px 2px 5px silver;}\
  123. .user_buttonShow.modify{top:0px;}\
  124. .user_buttonShow:hover{background: linear-gradient(#9FD468, #4ff30a);}\
  125. .user_codeListItem{padding: 5px;border: 1px solid green;border-radius: 8px;margin: 5px;background: linear-gradient(#70f7ca,#0a714b);color: white;}\
  126. ");
  127. // Styles
  128.  
  129. (function() {
  130. var gp_value = GM_getValue('gp_set'),
  131. gp_set = (gp_value)?JSON.parse(gp_value):{},
  132.  
  133. debug = false;
  134.  
  135. function saveStorage(){
  136. try{
  137. var save_data = JSON.stringify(gp_set);
  138.  
  139. GM_setValue('gp_set', save_data);
  140.  
  141. if(false) GM_setValue('gp_set_bak', save_data);
  142.  
  143. if(debug) console.log("Сохраненный объект gp_set: ", GM_getValue('gp_set'));
  144.  
  145. } catch(e){
  146. console.log(e);
  147. }
  148. }
  149.  
  150. /* Описание элементов
  151. 0 - Ссылка отслеживания,
  152. 1 - Название службы,
  153. 2 - Значение по умолчанию,
  154. 3 - Добавить кнопку отслеживания под трек-кодом,
  155. 4 - Тип отслеживания у кнопок в шапке:
  156. [0] Поддержка отслеживание нескольких кодов;
  157. [1] Одного кода и сайт;
  158. [2] Только перейти на сайт
  159. */
  160. var elem = [
  161. ["17track","http://www.17track.net/ru/track?nums=",1,0],
  162. ["Cainiao","https://global.cainiao.com/detail.htm?mailNoList=",1,0],
  163. ["ESTAR65","http://221.206.157.212/cgi-bin/GInfo.dll?EmmisTrack?w=xiangfeng56&cmodel=cmodel:estar56&cno=",1,0],
  164. ["СДЭК","http://www.edostavka.ru/track.html?order_id=",1,1],
  165. ["TRACK24","https://track24.ru/?code=", 1,1],
  166. ["POST-Track","http://post-tracker.ru/track/",1,1],
  167. ["Почта России","https://www.pochta.ru/tracking#",1,0],
  168. ["Post2go","https://post2go.ru",0,2],
  169. ["Postal.ninja","http://postal.ninja/ru/tracks",0,2],
  170. ["Flytexpress","http://flytexpress.com/En/Home/LogisticsTracking#orderIds=",1,1],
  171. ["Gsconto","http://www.gsconto.com/ru/tracker/show/",1,1],
  172. ["DHL Global Mail","https://webtrack.dhlglobalmail.com/?trackingnumber=",1,0]
  173. ],
  174. all_color = ["black", "navy", "darkblue", "mediumblue", "blue", "darkgreen", "green", "teal", "darkcyan", "deepskyblue",
  175. "darkturquoise", "mediumspringgreen", "lime", "springgreen", "aqua", "cyan", "midnightblue", "dodgerblue", "lightseagreen", "forestgreen",
  176. "seagreen", "darkslategray", "darkslategrey", "limegreen", "mediumseagreen", "turquoise", "royalblue", "steelblue", "darkslateblue", "mediumturquoise",
  177. "indigo ", "darkolivegreen", "cadetblue", "cornflowerblue", "rebeccapurple", "mediumaquamarine", "dimgray", "dimgrey", "slateblue", "olivedrab",
  178. "slategray", "slategrey", "lightslategray", "lightslategrey", "mediumslateblue", "lawngreen", "chartreuse", "aquamarine", "maroon", "purple",
  179. "olive", "gray", "grey", "skyblue", "lightskyblue", "blueviolet", "darkred", "darkmagenta", "saddlebrown", "darkseagreen",
  180. "lightgreen", "mediumpurple", "darkviolet", "palegreen", "darkorchid", "yellowgreen", "sienna", "brown", "darkgray", "darkgrey",
  181. "lightblue", "greenyellow", "paleturquoise", "lightsteelblue", "powderblue", "firebrick", "darkgoldenrod", "mediumorchid", "rosybrown", "darkkhaki",
  182. "silver", "mediumvioletred", "indianred ", "peru", "chocolate", "tan", "lightgray", "lightgrey", "thistle", "orchid",
  183. "goldenrod", "palevioletred", "crimson", "gainsboro", "plum", "burlywood", "lightcyan", "lavender", "darksalmon", "violet",
  184. "palegoldenrod", "lightcoral", "khaki", "aliceblue", "honeydew", "azure", "sandybrown", "wheat", "beige", "whitesmoke",
  185. "mintcream", "ghostwhite", "salmon", "antiquewhite", "linen", "lightgoldenrodyellow", "oldlace", "red", "fuchsia", "magenta",
  186. "deeppink", "orangered", "tomato", "hotpink", "coral", "darkorange", "lightsalmon", "orange", "lightpink", "pink",
  187. "gold", "peachpuff", "navajowhite", "moccasin", "bisque", "mistyrose", "blanchedalmond", "papayawhip", "lavenderblush", "seashell",
  188. "cornsilk", "lemonchiffon", "floralwhite", "snow", "yellow", "lightyellow", "ivory", "white"
  189. ];
  190.  
  191. function resetDefaultServices(){
  192. gp_set.services = [];
  193.  
  194. for(var slu in elem){
  195. gp_set.services.push(elem[slu]);
  196. }
  197. saveStorage();
  198. upperPanel("clear");
  199. updateDataNaprotivKashdogo();
  200. update_setting_val("clear");
  201. alert("Службы восстановленны!");
  202. }
  203. if(gp_set.services === undefined || !gp_set.services){
  204. gp_set.services = [];
  205.  
  206. for(var slu in elem){
  207. gp_set.services.push(elem[slu]);
  208. }
  209. //elem = gp_set.services = ;
  210. saveStorage();
  211. }
  212. var lang_str = {
  213. ru:{
  214. gosite:"Перейти на сайт",
  215. otsl_one:"Отследить один код",
  216. otsl_nesk:"Отследить несколько кодов",
  217. otsl_na:"Отследить на: ",
  218. tolko_ne_poluch:"Только не полученные: ",
  219. enter_code_dlya:"Введите код для ",
  220. polucheno:"Получено",
  221. poluchil:"Получил",
  222. ostalos:"Осталось",
  223. iz:"из",
  224. vse_codi:"Все коды:",
  225. ne_poluch:"Не получено",
  226. vsego_posil:"Всего посылок",
  227. box_poluch_posilki: "Полученные посылки",
  228. box_pribuli_na_pochtu:"Прибыли на почту",
  229. box_otsleshivautsa:"Отслеживаются",
  230. box_ne_otsleshivautsa:"Не отслеживаются",
  231. generirovat_code:"Генерировать код",
  232. gen_no_code: "Нет треков для генерации для данной категории!",
  233. chem_razdelit_code:"Чем разделить коды?",
  234. kod_gotov:"Код готов!",
  235. // Проверка статуса
  236. check_posil_dost: "Посылка доставлена",
  237. check_prib_v_pubkt: "Прибыла в пункт назначения",
  238. check_ustan_srok_hran: "Хранение - Установленный срок хранения",
  239. check_info_poka_net: "Информации о посылке пока нет",
  240. // Правка и добавление служб
  241. setting: "Настройки",
  242. serv_name: "Название",
  243. serv_link: "Ссылка",
  244. otobr_niz: "Отобр. снизу",
  245. raz_perex: "Переходы",
  246. serv_del: "Удалить",
  247. add_serv: "Создать",
  248. save_serv: "Сохранить",
  249. reser_serv: "Сброс",
  250. q_reset_serv: "Восстановить службы по умолчанию?",
  251. type_per: ["Все","Один код и сайт","Только сайт"],
  252. bClose: "Закрыть",
  253. // add serv
  254. menu_add: "Меню добавления службы",
  255. button_add: "Добавить службу",
  256. q_del: "Вы хотите удалить эту(и) службу(ы)?",
  257. danie_edit : "Данные отредактированны!",
  258. q_save: "Сохранить изменения?",
  259. error_serv_name: "Ошибка в названии службы!\nНазвание службы отслеживания, не задано, в строке №",
  260. error_serv_link: "Ошибка ссылки!\nСсылка службы отслеживания, задана неверно, в строке №",
  261. return_prev_val: "Вернуть прежнее значение?",
  262. error_update_danix: "Ошибка обновления данных...",
  263. services_del_comp: "Служба(ы) успешно удалена(ы)!",
  264. error_create_buttons: "Ошибка создания кнопок напротив каждого трека!",
  265. service_add_comp: "Служба для отслеживания, была успешно добавлена!",
  266. textfield_empty_name: "Введенное название пустое!",
  267. textfield_empty_link: "Введенная ссылка пуста!",
  268. textfield_invalid_link: "Ссылка введена неккоректно!",
  269. textfield_invalid_trackcode: "Трэк-код введен неккоректно!",
  270. text_Error: "Ошибка!",
  271.  
  272. //USER TRACK TRANSALTION
  273. month : ["Январь", "Февраль", "Март", "Апрель", "Май", " Июнь",
  274. "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", " Декабрь"
  275. ],
  276. addtrackcode: "Добавить трэк-код",
  277. userTrackcodes: "Пользовательские трек-коды",
  278. userTrackcodesDeleted:"Трэк-код(ы) был(и) удален(ы)!",
  279. deleteselectedTrackcodes:"Удалить выбранный(е) трэк-код(ы)?",
  280. canvTest:"ТЕСТ",
  281. usertrackalreadyAddRewrite: "Такой трэк-код уже был добавлен!\nПерезаписать?",
  282. nameTovarEmptyNoName: "Названме товара не указано, будет использ. \"Без названия\"",
  283. nonameTovar: "Без названия",
  284. listUserTrackEmptyAddTrack: "Список пуст! Нажмите кнопку Создать, чтобы добавить свой код!",
  285. // Form add user track
  286. u_nameServ: 'Название службы',
  287. u_linkServ: 'Ссылка службы',
  288. u_enterLink: 'Введите ссылку',
  289. u_nameTovar: 'Название товара',
  290. u_trackcode: 'Трэк-код',
  291. u_iconfon: 'Цвет фона',
  292. u_iconText:'Цвет текста',
  293. u_iconContur:'Цвет контура',
  294. u_icon:'Иконка',
  295. u_viewOnMain:'Отображать на странице',
  296. // User track error message
  297. u_error_trackcode: "Ошибка:\nПоле трэк-кода заполненно неверно, оно либо пустое, либо содержит неверные символы ",
  298. u_error_trackcodeFull: ["Ошибка:\nПоле трэк-кода, содержит неверные символы ",", в столбце ",", строка №"],
  299. u_error_trackcodeChangeFull: ["Внимание:\nПоле трэк-кода, было изменено на новое значение, в столбце ",", строка №",", вы действительно хотите изменить значание?"],
  300. u_error_fieldEmptyFull: ["Ошибка:\nПустое поле в столбце ",", строка №"],
  301. u_error_FullError: ["Ошибка:\n"," указана неверно, в строке №"],
  302. u_error_colorFull: ["Ошибка:\nЦвет указан неверно, в столбце ",", строка №"]
  303. },
  304. en:{
  305. gosite:"Go to Site",
  306. otsl_one:"Track one code",
  307. otsl_nesk:"Track multiple codes",
  308. otsl_na:"Track on: ",
  309. tolko_ne_poluch:"Just do not received: ",
  310. enter_code_dlya: "Enter the code for ",
  311. polucheno: "Received",
  312.       poluchil: "Got",
  313.       ostalos: "Remaining",
  314.       iz: "from",
  315.       vse_codi: "All codes:",
  316.       ne_poluch: "Not received",
  317.       vsego_posil: "Total Package",
  318.  
  319. box_poluch_posilki: "Received",
  320. box_pribuli_na_pochtu:"Arrived in the mail",
  321. box_otsleshivautsa:"Tracked",
  322. box_ne_otsleshivautsa:"Not tracked",
  323. generirovat_code:"Generate code",
  324. gen_no_code: "No tracks to generate for this category!",
  325. chem_razdelit_code:"To share the codes?",
  326. kod_gotov:"Code complete!",
  327. // Check status ! not edit !
  328. check_posil_dost: "Package delivered",
  329. check_prib_v_pubkt: "Arrived at the office of destination",
  330. check_ustan_srok_hran: "Storage - Fixed storage time",
  331. check_info_poka_net: "No information about the package yet",
  332. // Add service
  333. setting: "Settings",
  334. serv_name: "Name",
  335. serv_link: "Link",
  336. otobr_niz: "Services bottom track",
  337. raz_perex: "Transitions",
  338. serv_del: "Delete",
  339. add_serv: "New",
  340. save_serv: "Save",
  341. reser_serv: "Reset",
  342. q_reset_serv: "Do you want to restore the default services?",
  343. type_per: ["All","One code and website","Site"],
  344. bClose: "Close",
  345. // add serv
  346. menu_add: "Menu add service",
  347. button_add: "Add service",
  348. q_del: "You want to remove this(and) service(s)?",
  349. danie_edit : "Data is modified!",
  350. q_save: "Save changes?",
  351. error_serv_name: "Error in service name!\nazvanie tracking service, is not set in line#",
  352. error_serv_link: "reference Error!\psylla tracking service, is incorrect, in line#",
  353. return_prev_val: "restore the previous value?",
  354. error_update_danix: "Error updating data...",
  355. services_del_comp: "Service(s) Delete(s)!",
  356. error_create_buttons: "Error creating buttons opposite each track!",
  357. service_add_comp: "The tracking service has been successfully added!",
  358.       textfield_empty_name: "The entered name is empty!",
  359.       textfield_empty_link: "The entered link is empty!",
  360. textfield_invalid_trackcode: "The entered trackcode is empty!",
  361.       textfield_invalid_link: "The link is entered incorrectly!",
  362.       text_Error: "Error!",
  363.  
  364. //USER TRACK TRANSALTION
  365. month : ["January", "February", "March", "April", "May", "June",
  366. "July", "August", "September", "October", "November", "December"
  367. ],
  368. addtrackcode: "Add a track code",
  369. userTrackcodes: "Custom Track Codes",
  370. userTrackcodesDeleted: "Track-code(s) has been (and) deleted(s)!",
  371. deleteselectedTrackcodes: "Do you want to delete the selected tracker(s)?",
  372. canvTest: "TEST",
  373. usertrackalreadyAddRewrite: "Such a track code has already been added!\nRewrite?",
  374. nameTovarEmptyNoName: "The product name is not specified, will be used \"Untitled \"",
  375. nonameTovar: "Untitled",
  376. listUserTrackEmptyAddTrack: "The list is empty! Click the Create button to add your code!",
  377. // Form add user track
  378. u_nameServ: 'Service Name',
  379. u_linkServ: 'Service reference',
  380. u_enterLink: 'Enter a link',
  381. u_nameTovar: 'Product Name',
  382. u_trackcode: 'Track Code',
  383. u_iconfon: 'Background color',
  384. u_iconText: 'Text color',
  385. u_iconContur: 'Contour color',
  386. u_icon: 'Icon',
  387. u_viewOnMain: 'Display on page',
  388. // User track error message
  389. u_error_trackcode: "Error:\nThe track code field is invalid, it is either empty or contains invalid characters ",
  390. u_error_trackcodeFull: ["Error:\nTracing code field, contains invalid characters ", ", in column ", ", line No."],
  391. u_error_trackcodeChangeFull: ["Warning:\nThe track code field has been changed to a new value, in the column ", ", line No.", "do you really want to change the value?"],
  392. u_error_fieldEmptyFull: ["Error:\nPush field in column ", ", line No."],
  393. u_error_FullError: ["Error:\n", "invalid in line No."],
  394. u_error_colorFull: ["Error:\nThe color is incorrect, in the column ", ", line No."]
  395. }
  396. };
  397.  
  398. var sel_lang = lang_str.ru;
  399. if(window.location.hostname.search("gdeposylka.ru")<0){
  400. sel_lang = lang_str.en;
  401. } else {
  402. sel_lang = lang_str.ru;
  403. }
  404.  
  405. function Objcount(obj){
  406. var keys=0;
  407. for (var propvalue in obj) {
  408. if (obj.hasOwnProperty(propvalue)) {
  409. keys++;
  410. }
  411. }
  412. return keys;
  413. }
  414.  
  415. function searchinObj(obj, reqex){
  416. var keys=[];
  417. for (var propvalue in obj) {
  418. if (obj.hasOwnProperty(propvalue) && reqex.test(propvalue)) {
  419. keys.push(propvalue);
  420. }
  421. }
  422. return keys;
  423. }
  424. // Проверить только не полученные
  425. function only_ne_poluch_button(){
  426. var cur_el=arguments[0].target;
  427. if(!gp_set.hasOwnProperty('setting')){
  428. gp_set.setting={};
  429. }
  430. gp_set.setting.tolko_ne_poluch = !cur_el.parentElement.children[1].checked;
  431. saveStorage();
  432. }
  433.  
  434. // start abs menu function
  435. function make_abs(){
  436. codes_names = [dannie_o_trekax[0].split(","),dannie_o_trekax[1].split("|"),dannie_o_trekax[3].split("|")];
  437.  
  438. if(gp_set.markers === undefined || gp_set.markers === null){
  439. gp_set.markers = {};
  440. }
  441. var abs_div=document.getElementById("abs_div");
  442. if(abs_div){
  443. abs_div.innerHTML="";
  444. }else{
  445. abs_div=document.createElement("div");
  446. abs_div.id="abs_div";
  447. }
  448. var rn_el=document.getElementsByClassName("track-container");
  449. var all_box_scroll = document.createElement("div");
  450. all_box_scroll.className="all_box_scroll";
  451. var abs_div_normal=document.createElement("div");
  452. abs_div_normal.id="normal_abs_div";
  453.  
  454. var abs_div_prishla=document.createElement("div");
  455. abs_div_prishla.id="prishla_abs_div";
  456. var abs_div_poluch=document.createElement("div");
  457. abs_div_poluch.id="poluch_abs_div";
  458. var abs_div_nenormal=document.createElement("div");
  459. abs_div_nenormal.id="nenormal_abs_div";
  460. var checkbox_input = document.getElementById("checkbox");
  461. abs_div_normal.innerHTML="<div class=\"abs_punkti\" style=\"background: linear-gradient(#0790c5,#1be0ff);\">"+sel_lang.box_otsleshivautsa+" </div>";
  462. abs_div_nenormal.innerHTML="<div class=\"abs_punkti\" style=\"background: linear-gradient(#ff07d5,#921313);\">"+sel_lang.box_ne_otsleshivautsa+" </div>";
  463. abs_div_prishla.innerHTML="<div class=\"abs_punkti\" style=\"background: linear-gradient(#0037ff,#1099af);\">"+sel_lang.box_pribuli_na_pochtu+" </div>";
  464. abs_div_poluch.innerHTML="<div class=\"abs_punkti\" style=\"background: linear-gradient(#ff6f08,orange);\">"+sel_lang.box_poluch_posilki+" </div>";
  465. var gen_div=document.createElement("div");
  466. abs_div_normal.className = "abs_div_cat";
  467. abs_div_prishla.className = "abs_div_cat";
  468. abs_div_poluch.className = "abs_div_cat";
  469. abs_div_nenormal.className = "abs_div_cat";
  470. gen_div.setAttribute("style","text-align:center;cursor:pointer;background:blue;color:white;margin-top:10px;padding:3px;");
  471. gen_div.innerText=sel_lang.generirovat_code;
  472. gen_div.addEventListener("click", function(){
  473. if((checkbox_input.checked && dannie_o_trekax[4].length<=0) || (!checkbox_input.checked && dannie_o_trekax[0].length<=0)){
  474. alert(sel_lang.gen_no_code+"\n"+sel_lang.tolko_ne_poluch+checkbox_input.checked);
  475. return;
  476. }
  477. var t = prompt(sel_lang.kod_gotov,",");
  478. var check_ok=((checkbox_input.checked)?dannie_o_trekax[4]:dannie_o_trekax[0]);
  479. if(t)prompt(sel_lang.kod_gotov,check_ok.replace(/,/g,t));
  480.  
  481. });
  482. var text_abs = ["","","",""];
  483. var otsl = [0,0,0,0];
  484. for(var g=0;g<dannie_o_trekax[0].split(",").length;g++){
  485. var other_mag ="";
  486. if(/^A.*$/i.test(codes_names[0][g]) || /\[BG\]/i.test(codes_names[1][g])){
  487. other_mag = "style=\"background: linear-gradient(#22a79a, #00ffdc)\"";
  488. } else {
  489. other_mag ="";
  490. }
  491. var code_vis_tag = ["<div pos=\""+g+"\" name=\"my_opt\" class=\"ab_style\""+other_mag+"\" title=\""+codes_names[1][g]+
  492. "\" onmouseover=\"var c=this.getAttribute('pos');document.getElementsByClassName('track')[c].style['background']='linear-gradient(",")';document.body.scrollTop=document.getElementsByClassName('track')[c].offsetTop-300\" onmouseout=\"var c=this.getAttribute('pos');document.getElementsByClassName('track')[c].style['background']=''\">"+codes_names[0][g]+"</div>"];
  493. var vis_menu = {
  494. dost : code_vis_tag[0]+"white,orange"+code_vis_tag[1],
  495. priv_v_puntk_i_xran : code_vis_tag[0]+"white,#1099af"+code_vis_tag[1],
  496. no_info : code_vis_tag[0]+"white,#ff07d5"+code_vis_tag[1],
  497. otsleshiv : code_vis_tag[0]+"white,cyan"+code_vis_tag[1]
  498. };
  499. if(codes_names[2][g].search(sel_lang.check_posil_dost)===0 ||gp_set.markers[codes_names[0][g]] === true){
  500. text_abs[0] += vis_menu.dost;
  501. otsl[0]+=rn_el.length>0 ? 1 : 0;
  502. } else if(codes_names[2][g].search(sel_lang.check_prib_v_pubkt)===0 || codes_names[2][g].search("Хранение - Установленный срок хранения")===0){
  503. text_abs[1] += vis_menu.priv_v_puntk_i_xran;
  504. otsl[1]+=rn_el.length>0 ? 1 : 0;
  505. dannie_o_trekax[4]+=codes_names[0][g]+((g< rn_el.length-1)?",":"");
  506. } else if(codes_names[2][g].search(sel_lang.check_info_poka_net)===0){
  507. text_abs[3] += vis_menu.no_info;
  508. otsl[3]+=rn_el.length>0 ? 1 : 0;
  509. dannie_o_trekax[4]+=codes_names[0][g]+((g< rn_el.length-1)?",":"");
  510. } else {
  511. text_abs[2] += vis_menu.otsleshiv;
  512. otsl[2]+=rn_el.length>0 ? 1 : 0;
  513. dannie_o_trekax[4]+=codes_names[0][g]+((g< rn_el.length-1)?",":"");
  514. }
  515. }
  516. abs_div.innerHTML="<div style=\"text-align:center;background: linear-gradient(#6D3263,#DF6283);color: white;font-weight: bold;\">"+sel_lang.vse_codi+"</div>";
  517. abs_div_poluch.innerHTML+= text_abs[0];
  518. abs_div_prishla.innerHTML+= text_abs[1];
  519. abs_div_normal.innerHTML+= text_abs[2];
  520. abs_div_nenormal.innerHTML+= text_abs[3];
  521.  
  522. abs_div.appendChild(all_box_scroll);
  523. all_box_scroll.appendChild(abs_div_poluch);
  524. all_box_scroll.appendChild(abs_div_prishla);
  525. all_box_scroll.appendChild(abs_div_normal);
  526. all_box_scroll.appendChild(abs_div_nenormal);
  527. abs_div.appendChild(gen_div);
  528. document.body.appendChild(abs_div);
  529.  
  530. abs_div_poluch.firstChild.innerHTML+= "("+otsl[0]+"):";
  531. abs_div_prishla.firstChild.innerHTML+= "("+otsl[1]+"):";
  532. abs_div_normal.firstChild.innerHTML+="("+otsl[2]+"):";
  533. abs_div_nenormal.firstChild.innerHTML+= "("+otsl[3]+"):";
  534. // Markers
  535. var c_ab = document.getElementsByName("my_opt");
  536. var count_pol=0;
  537. for(var z=0;z<c_ab.length;z++){
  538. // Event
  539. c_ab[z].addEventListener("click", clickabs);
  540. // Marker load
  541. var tek_z = z;
  542. for(var k in gp_set.markers){
  543. if (gp_set.markers.hasOwnProperty(k)){
  544. if(c_ab[tek_z].innerText === k){
  545. if(gp_set.markers[k]) {
  546. gp_set.markers[k] = true;
  547. c_ab[z].setAttribute("class", "ab_styles");
  548. count_pol++;
  549. } else {
  550. gp_set.markers[k] = false;
  551. c_ab[z].setAttribute("class", "ab_style");
  552. }
  553. }
  554. // Main pole visible
  555. if(codes_names[0][tek_z] === k && gp_set.markers[codes_names[0][tek_z]] || codes_names[2][tek_z].search(sel_lang.check_posil_dost)===0){ // add> codes_names[2][tek_z].search(sel_lang.check_posil_dost)===0
  556. if(rn_el.length>0) rn_el[tek_z].children[0].className="track ab_style_complete";
  557. } else if(!gp_set.markers[codes_names[0][tek_z]]){
  558. if(rn_el.length>0) rn_el[tek_z].children[0].className=rn_el[tek_z].children[0].className.replace(/\s+ab_style_complete/i,"");
  559. }
  560. //
  561. }
  562. }
  563. // Marker load end
  564. }
  565. abs_div.children[0].innerHTML+="<p style=\"margin: 0;font-size: 10px;font-weight: bold;\"><span style=\"color:lime;\" title=\""+sel_lang.polucheno+"!\">"+
  566. sel_lang.polucheno+": "+count_pol+"</span><span style=\"color:orange;\" title=\""+sel_lang.vsego_posil+"\"> "+sel_lang.iz+" "+((rn_el.length>0) ? dannie_o_trekax[0].split(",").length:0)+
  567. "</span></p><p style=\"font-size: 10px;margin: 0;font-weight: bold;\"><span style=\"color:cyan;\" title=\""+sel_lang.ne_poluch+"!\"> "+sel_lang.ostalos+": "+((rn_el.length>0) ? (dannie_o_trekax[0].split(",").length-count_pol):0)+"</span></p>";
  568. // Markers end
  569. }
  570. // end abs menu function
  571. function clickabs(){
  572. var el = arguments[0].target;
  573. var el_name = el.getAttribute("pos")*1;
  574. var el_value = codes_names[0][el_name];
  575. if(gp_set.markers[el_value]){
  576. //gp_set.markers[el_value] = false;
  577. gp_set.markers[el_value]=false;
  578. el.setAttribute("class", "ab_style");
  579. // snimaem marker
  580. } else {
  581. // stavim marker
  582. gp_set.markers[el_value]=true;
  583. el.setAttribute("class", "ab_styles");
  584. }
  585. saveStorage();
  586. make_abs();
  587. }
  588.  
  589. // Pop up menu
  590. var options = [sel_lang.otsl_one,sel_lang.otsl_nesk,sel_lang.gosite];
  591. function pop_menu_click(){
  592. var tek_el=this.parentElement.parentElement.parentElement.getAttribute("elem")*1;
  593. var checkbox_input = document.getElementById("checkbox");
  594. if(this.innerText.search(options[2]) === 0) {
  595. var site = gp_set.services[tek_el][1];
  596. site = site.match(/^https?:\/\/[a-zA-z0-9.-]+/i)[0];
  597. if(debug) console.log("URL сайта: ",site);
  598. window.open(site);
  599. } else if(this.innerText.search(options[0]) === 0){
  600. var req=prompt(sel_lang.enter_code_dlya+gp_set.services[tek_el][0]+":","");
  601. if(req.length>0 && !/^\s*$/.test(req)){
  602. window.open(gp_set.services[tek_el][1]+req);
  603. } else {
  604. alert("Поле пустое!");
  605. return;
  606. }
  607. } else if(this.innerText.search(options[1]) === 0){
  608. if((checkbox_input.checked && dannie_o_trekax[4].length<=0) || (!checkbox_input.checked && dannie_o_trekax[0].length<=0)){
  609. alert(sel_lang.gen_no_code+"\n"+sel_lang.tolko_ne_poluch+checkbox_input.checked);
  610. return;
  611. }
  612. var past_codes_all_ili_net = ((checkbox_input.checked)?dannie_o_trekax[4]:dannie_o_trekax[0]);
  613. window.open(gp_set.services[tek_el][1]+past_codes_all_ili_net);
  614. }
  615. }
  616. function pop_v2(my_i){
  617. var my_el = gp_set.services[my_i];
  618. let ul = document.createElement("ul");
  619. ul.className="ul_menu";
  620. for(var i=0;i<options.length;i++){
  621. if(my_el[3] === 2){
  622. if(i<2) continue;
  623. } else if(my_el[3] === 1){
  624. if(i===1) continue;
  625. }
  626. let li = document.createElement("li");
  627. li.className="li_menu";
  628. let a = document.createElement("a");
  629. a.className="a_menu";
  630. a.href="#";
  631. a.innerText=options[i];
  632. a.addEventListener("click", pop_menu_click);
  633.  
  634. li.appendChild(a);
  635. ul.appendChild(li);
  636. }
  637. return ul;
  638. }
  639. // Pop up menu end
  640. // Start - Верхняя панель со службами отслеживания
  641. function upperPanel(){
  642. let liel= document.getElementsByClassName("nav navbar-center")[0] || null;
  643. if(liel){
  644.  
  645. if(arguments[0] === "clear") $(liel).empty();
  646. for(var i=0;i<gp_set.services.length;i++){
  647.  
  648. let li = document.createElement("li");
  649. li.innerHTML=((gp_set.services[i][0].search("17track")<0)?"<div>"+gp_set.services[i][0]+
  650. "</div>":'<img src="https://res.17track.net/global-v2/imgs/logo/svg/fullen_obt_128x32.svg?v=95abf356d0" style="width: 80px;"/>')// '+/*'background: linear-gradient('+getColorRND()+*/');">');
  651. //
  652. let pop_div_menu = pop_v2(i);
  653. li.appendChild(pop_div_menu);
  654. //
  655. let rcol = getColorRND();
  656. li.setAttribute("style",((gp_set.services[i][0].search("17track")<0))?"border: 1px solid; margin: 5px 5px; padding: 2px;background: linear-gradient("+rcol+");"+
  657. "color: #e7dcdc; text-shadow: 1px 1px 0px black; cursor: pointer;":"margin: 5px 5px; padding: 2px;cursor: pointer;");
  658. li.className="li_style";
  659. li.title=sel_lang.otsl_na+gp_set.services[i][0];
  660. li.setAttribute("elem",i);
  661. liel.appendChild(li);
  662. }
  663. }
  664. }// End - Верхняя панель со службами отслеживания
  665. // Update naprotiv kashdogo start
  666. function updateDataNaprotivKashdogo(){
  667. var title_wrapper = document.getElementsByClassName("title-wrapper"),
  668. naprotivKBody = document.getElementsByClassName("li_body_naprotiv_kashdogo"),
  669. rn_el=document.getElementsByClassName("track-container");
  670.  
  671. if(rn_el.length > naprotivKBody.length){
  672. for(let i=0; i<rn_el.length; i++){
  673. if(rn_el[i].nextElementSibling === null){
  674. var li_body = document.createElement("div");
  675. var li_body1 = document.createElement("div");
  676. li_body.setAttribute("style", "margin-bottom: 25px;background: #f9f9f9;");
  677. li_body1.setAttribute("style", "position:absolute;");
  678. li_body1.className = "li_body_naprotiv_kashdogo";
  679. document.getElementsByClassName("track-list")[0].insertBefore(li_body,rn_el[i].nextSibling);
  680. document.getElementsByClassName("track-list")[0].insertBefore(li_body1,rn_el[i].nextSibling);
  681.  
  682. for(var j=0;j<gp_set.services.length;j++){
  683. if(gp_set.services[j][2]){
  684. var li = document.createElement("div");
  685. li.innerHTML='<span onclick="window.open(&quot;'+gp_set.services[j][1]+el_a+'&quot;);">'+gp_set.services[j][0]+'</span>';
  686. let rcol = getColorRND();
  687. li.setAttribute("style","background: linear-gradient("+rcol+");");
  688. li.className="track_service";
  689. li.title=sel_lang.otsl_na+gp_set.services[j][0];
  690. li_body1.appendChild(li);
  691. }
  692. }
  693. }
  694. }
  695. naprotivKBody = document.getElementsByClassName("li_body_naprotiv_kashdogo");
  696. }
  697.  
  698. if(title_wrapper && naprotivKBody){
  699. let li;
  700. for(var i = 0; i < naprotivKBody.length; i++){
  701. var el_a=title_wrapper[i].getElementsByClassName("tracking-number")[0].innerText;
  702. if(arguments[0] !== "one"){
  703. naprotivKBody[i].innerHTML="";
  704. for(let j=0;j<gp_set.services.length;j++){
  705. if(gp_set.services[j][2]){
  706. li = document.createElement("div");
  707. li.innerHTML='<span onclick="window.open(&quot;'+gp_set.services[j][1]+el_a+'&quot;);">'+gp_set.services[j][0]+'</span>';
  708. let rcol = getColorRND();
  709. li.setAttribute("style","background: linear-gradient("+rcol+");");
  710. li.className="track_service";
  711. li.title=sel_lang.otsl_na+gp_set.services[j][0];
  712. naprotivKBody[i].appendChild(li);
  713. }
  714. }
  715. } else if(arguments[0] === "one" && gp_set.services[gp_set.services.length-1][2]){
  716. var tek_service = gp_set.services[gp_set.services.length-1];
  717. li = document.createElement("div");
  718. li.innerHTML='<span onclick="window.open(&quot;'+tek_service[1]+el_a+'&quot;);">'+tek_service[0]+'</span>';
  719. let rcol = getColorRND();
  720. li.setAttribute("style","background: linear-gradient("+rcol+");");
  721. li.className="track_service";
  722. li.title=sel_lang.otsl_na+tek_service[0];
  723. naprotivKBody[i].appendChild(li);
  724. } else {break;}
  725. }
  726. } else {
  727. alert(sel_lang.error_update_danix);
  728. }
  729. }
  730. // Update naprotiv kashdogo end
  731. // --- Start Setting edit, add, delete services
  732. function update_setting_val(){
  733. if(arguments[0] === "clear")$(".i_setting_div_body").empty();
  734. var PoleElTable = document.createElement("div");
  735. PoleElTable.className = "PoleElTable";
  736.  
  737. var PoleElTableCapt = document.createElement("div");
  738. PoleElTableCapt.className ="PoleElTableCapt";
  739.  
  740. $(PoleElTableCapt).html("<div>№</div><div>"+sel_lang.serv_name+"</div><div>"+sel_lang.serv_link+"</div><div>"+sel_lang.otobr_niz+"</div><div>"+sel_lang.raz_perex+"</div><div>"+sel_lang.serv_del+"</div>");
  741. PoleElTable.append(PoleElTableCapt);
  742. /*var PoleElTableLoad= document.createElement("div");
  743. PoleElTableLoad.className = "PoleElTableLoad";
  744. PoleElTableLoad.setAttribute("style","border: 10px solid #ded9d9; border-radius: 60px; width: 100px; height: 100px; border-bottom-color: #99ff53; animation: my 1s infinite; position: relative; left: 160px;");
  745. PoleElTable.append(PoleElTableLoad);*/
  746. for(var i=0;i<gp_set.services.length;i++){ // array 0
  747. var PoleEl = document.createElement("div");
  748. for(var j=0;j<gp_set.services[i].length;j++){
  749. var input_el_cel = document.createElement("div");
  750. var input_el = "";
  751. if(j === 2){
  752. input_el = document.createElement("select");
  753. input_el.innerHTML = "<option value='0'>false</option><option value='1'>true</option>";
  754. input_el.value = gp_set.services[i][j];
  755. if(JSON.parse(gp_set.services[i][j])){input_el.setAttribute("style","background: linear-gradient(#d9ff5a,#16ff73)");} else{ input_el.setAttribute("style","background: linear-gradient(#eeffee,#ff9bb7)");}
  756. input_el.addEventListener("change", function(){
  757. if(JSON.parse(this.value)){this.setAttribute("style","background: linear-gradient(#d9ff5a,#16ff73)");} else{ this.setAttribute("style","background: linear-gradient(#eeffee,#ff9bb7)");}
  758. });
  759. } else {
  760. input_el = document.createElement("input");
  761. input_el.id = (j === 0)?"name_services_otsl":"link_services_otsl";
  762. input_el.addEventListener("focus",function(event){focusInp(event);});
  763. input_el.addEventListener("blur",function(event){blurInp(event);});
  764. if(j === 3){
  765. input_el = document.createElement("select");
  766. input_el.innerHTML = "<option value='0'>"+sel_lang.type_per[0]+"</option><option value='1'>"+sel_lang.type_per[1]+"</option><option value='2'>"+sel_lang.type_per[2]+"</option>";
  767. input_el.value = gp_set.services[i][j];
  768. }else{
  769. input_el.type = "text";
  770. }
  771. input_el.value = gp_set.services[i][j];
  772. }
  773. input_el_cel.append(input_el);
  774. if(j === 0) $(PoleEl).append("<div><div style='text-align: center;'><div style='font: bold 0.8em sans-serif; border: 1px solid lime; border-radius: 16px; background: white; line-height: 1.7; width:20px;height:20px;'>"+(i+1)+"</div></div></div>");
  775. PoleEl.append(input_el_cel);
  776. if(j === 3) $(PoleEl).append("<div><div style='text-align: center;'><input style='width: 20px;height: 20px;vertical-align: middle;' type='checkbox'></div></div>");
  777. }
  778. PoleElTable.append(PoleEl);
  779. $(".i_setting_div_body").append(PoleElTable);
  780. }
  781. // CheckBox checked
  782. $(".i_setting_div_body").find("input[type=checkbox]").each(function(index,eleme){
  783. $(eleme).on("click",function(){
  784. if($(this).is(':checked')) $(".i_setting_div_del_button").css({"display":"inline-block"}).animate({opacity:"+=1.0"});
  785.  
  786. $(".i_setting_div_del_button").text(sel_lang.serv_del+" ("+$(".i_setting_div_body").find("input:checked").length+")");
  787.  
  788. if($(".i_setting_div_body").find("input:checked").length <= 0){
  789. $(".i_setting_div_del_button").text(sel_lang.serv_del);
  790. $(".i_setting_div_del_button").fadeOut(1000,function(){$(this).css("opacity","0");});
  791. }
  792. });
  793. });
  794.  
  795. if($(".i_setting_div_body").find("input:checked").length <= 0){
  796. $(".i_setting_div_del_button").text(sel_lang.serv_del);
  797. $(".i_setting_div_del_button").fadeOut(1000,function(){$(this).css("opacity","0");});
  798. }
  799.  
  800. // CLose button
  801. var i_input_focus_close = document.createElement("div");
  802. i_input_focus_close.innerText = "X";
  803. i_input_focus_close.className = "i_input_focus_close";
  804. i_input_focus_close.title = sel_lang.bClose;
  805. $(".i_setting_div_body").append(i_input_focus_close);
  806. }
  807. function setting_save_value(){
  808. $(".i_input_focus_close").fadeOut(500);
  809. var temp_zapis = [];
  810. var temp_zapis1 = [];
  811. var save_value = true;
  812. var z =0;
  813. $(".PoleElTable").find("input[type!=checkbox], select").each(function(index, eleme){
  814. var self = $(this).val();
  815.  
  816. if($(this).get(0).tagName.toLowerCase() === "input"){
  817. var stroke_error = $(this).parent().parent().index();
  818. if($(this).val().length < 1 || /^\s*$/.test($(this).val())){
  819. alert(sel_lang.error_serv_name+stroke_error);
  820. $(this).val(gp_set.services[stroke_error-1][0]);
  821. save_value = false;
  822. return;
  823. }
  824. if($(this).attr("id") === "link_services_otsl" && !/^https?\:\/\/.*/i.test($(this).val())){
  825. alert(sel_lang.error_serv_link+stroke_error);
  826. if(confirm(sel_lang.return_prev_val))$(this).val(gp_set.services[stroke_error-1][1]);
  827. save_value = false;
  828. return;
  829. }
  830. }
  831. z++;
  832. if(z>2) temp_zapis1.push($(this).val()*1);
  833. else temp_zapis1.push($(this).val());
  834.  
  835. if(z > 3){
  836. temp_zapis.push(temp_zapis1);
  837. temp_zapis1 = [];
  838. z=0;
  839. }
  840.  
  841.  
  842. });
  843. if(confirm(sel_lang.q_save)){
  844. if(temp_zapis.length > 0 && save_value){
  845. gp_set.services = temp_zapis;
  846. saveStorage();
  847. alert(sel_lang.danie_edit);
  848. upperPanel("clear");
  849. updateDataNaprotivKashdogo();
  850. }
  851. }
  852. }
  853.  
  854. function setting_add_value(){
  855. $(".i_smoke_div_fog").fadeIn(1000, function(){
  856. if(!$("#i_pop_menu").length){
  857. var $pop_meuni = $("<div id='i_pop_menu' style='display:none;position: fixed;width: 300px;height: 200px;left: 50%;top: 50%;border: 1px solid silver;background: linear-gradient(#c1c1c1,white);z-index: 9999999;margin-left: -150px;margin-top: -100px;border-radius: 8px;'>\
  858. \<div style='width: 100%;background: linear-gradient(silver,#808686);text-align: center;border-radius: 8px 8px 0 0;color: white;padding: 3px;border-bottom: 2px dotted white;'><div style='float:right;float: right;cursor: pointer; margin-right: 5px; font-size: 10pt;' id='i_pop_menu_close_b'>X</div>"+sel_lang.menu_add+"</div>\
  859. \<div style='padding: 5px; color: #5f5d5d; font: normal 12px/14px monospace;text-align:center;'>\
  860. \<p>"+sel_lang.serv_name+": <input id='i_pop_menu_input_name' type='text' value /><span title='"+sel_lang.text_Error+"'></span></p>\
  861. \<p>"+sel_lang.serv_link+": <input id='i_pop_menu_input_link' type='text' value='http://' /><span title='"+sel_lang.text_Error+"'></span></p>\
  862. \<p>"+sel_lang.otobr_niz+": <select id='i_pop_menu_select' style='width:81px;'><option value='0'>false</option><option value='1'>true</option></select></p>\
  863. \<p>"+sel_lang.raz_perex+": <select id='i_pop_menu_typeview' style='width:115px;'><option value='0'>"+sel_lang.type_per[0]+"</option><option value='1'>"+sel_lang.type_per[1]+"</option><option value='2'>"+sel_lang.type_per[2]+"</option></select></p>\
  864. \<div disabled id='i_pop_menu_button_add' style='width: 150px;margin: 0 auto;height: 30px;line-height: 30px;background: linear-gradient(#75f575,#16bf02);color: white;border-radius: 8px;box-shadow: 2px 2px 5px silver;cursor:pointer;'>"+sel_lang.button_add+"</div></div></div>");
  865. $("body").append($pop_meuni);
  866. // Close button
  867. $("#i_pop_menu_close_b").click(function(){
  868. $pop_meuni.fadeOut(1000,function(){
  869. $(".i_smoke_div_fog").fadeOut(1000,function(){
  870. $("#i_pop_menu_input_link, #i_pop_menu_input_name").parent().find("span").removeClass("error_icon_input");
  871. $("#i_pop_menu_input_link, #i_pop_menu_input_name").css("border-color","");
  872. $("#i_pop_menu_input_name").val("");
  873. $("#i_pop_menu_input_link").val("http://");
  874. $("#i_pop_menu_typeview,#i_pop_menu_select").val("0");
  875. });
  876. });
  877. });
  878. // Close button end
  879. // Add service button
  880. $("#i_pop_menu_button_add").hover(function(e){
  881. $(this).css("background",e.type === "mouseenter" ? "linear-gradient(rgb(26, 107, 26), rgb(48, 253, 21))":"linear-gradient(#75f575,#16bf02)");
  882. });
  883. $("#i_pop_menu_button_add").click(function(){
  884. var newServicesArrayInput = [];
  885. var i_pop_menu_input_link = $("#i_pop_menu_input_link").val();
  886. var i_pop_menu_input_name = $("#i_pop_menu_input_name").val();
  887. var i_pop_menu_select = $("#i_pop_menu_select").val();
  888. var i_pop_menu_typeview = $("#i_pop_menu_typeview").val();
  889.  
  890. // Text empty!
  891. if(i_pop_menu_input_name.length < 1 || /^\s*$/.test(i_pop_menu_input_name)){
  892. alert(sel_lang.textfield_empty_name);
  893. $("#i_pop_menu_input_name").parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  894. $("#i_pop_menu_input_name").css("border-color","red");
  895. return;
  896. }
  897. if(i_pop_menu_input_link.length < 1 || /^\s*$/.test(i_pop_menu_input_link)){
  898. alert(sel_lang.textfield_empty_link);
  899. $("#i_pop_menu_input_link").parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  900. $("#i_pop_menu_input_link").css("border-color","red");
  901. return;
  902. }
  903. // Link text invalid!
  904. if(!/^https?\:\/\/.*/i.test(i_pop_menu_input_link)){
  905. alert(sel_lang.textfield_invalid_link);
  906. $("#i_pop_menu_input_link").parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  907. $("#i_pop_menu_input_link").css("border-color","red");
  908. return;
  909. }
  910. $("#i_pop_menu_input_link, #i_pop_menu_input_name").parent().find("span").fadeOut(1000,function(){$(this).removeClass("error_icon_input");});
  911. $("#i_pop_menu_input_link, #i_pop_menu_input_name").css("border-color","");
  912. if(gp_set.services === undefined){return;}
  913. newServicesArrayInput = [i_pop_menu_input_name,i_pop_menu_input_link,parseInt(i_pop_menu_select),parseInt(i_pop_menu_typeview)];
  914. if(debug) console.log("Массив параметров нового сервиса:", newServicesArrayInput);
  915. /*
  916. for(var ser in gp_set.services){
  917. if(ser.toLowerCase() === newServicesArrayInput[0].toLowerCase()){
  918. return;
  919. }
  920. }*/
  921. gp_set.services.push(newServicesArrayInput);
  922. saveStorage();
  923. alert(sel_lang.service_add_comp);
  924. $("#i_pop_menu").fadeOut(500,function(){
  925. $(".i_smoke_div_fog").fadeOut(1000,function(){
  926. $("#i_pop_menu_input_link, #i_pop_menu_input_name").parent().find("span").removeClass("error_icon_input");
  927. $("#i_pop_menu_input_link, #i_pop_menu_input_name").css("border-color","");
  928. $("#i_pop_menu_input_name").val("");
  929. $("#i_pop_menu_input_link").val("http://");
  930. $("#i_pop_menu_typeview,#i_pop_menu_select").val("0");
  931. update_setting_val("clear");
  932. upperPanel("clear");
  933. updateDataNaprotivKashdogo("one");
  934. });
  935. });
  936. });
  937. // Add service button end
  938. $("#i_pop_menu").children(":nth-child(2)").find("input").each(function(index, eleme){
  939. $(eleme).on("input", function(){
  940. var minlengt = /^\s*$/.test($(this).val());
  941. var empty_input = $(this).val().length < 1;
  942. var link_check = ($(this).attr("id")==="i_pop_menu_input_link" && !/https?\:\/\/.*/i.test($(this).val()));
  943.  
  944. if(minlengt || empty_input || link_check){
  945. $(this).parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  946. $(this).css("border-color","red");
  947. } else {
  948. $(this).parent().find("span").fadeOut(1000,function(){$(this).removeClass("error_icon_input");});
  949. $(this).css("border-color","");
  950. }
  951. });
  952. });
  953. $pop_meuni.fadeIn(1000);
  954. } else {
  955. $("#i_pop_menu").fadeIn(1000);
  956. }
  957. });
  958. }
  959. function setting_del_value(){
  960. if(confirm(sel_lang.q_del)){
  961. var arr_del = [];
  962. $(".i_setting_div_body").find("input[type=checkbox]").each(function(index,eleme){
  963. if($(this).is(':checked')){
  964. arr_del.push(index);
  965. }
  966. });
  967. arr_del = arr_del.reverse();
  968. for(var k in arr_del){
  969. gp_set.services.splice(arr_del[k],1);
  970. }
  971. saveStorage();
  972. alert(sel_lang.services_del_comp);
  973.  
  974. upperPanel("clear");
  975. updateDataNaprotivKashdogo();
  976. update_setting_val("clear");
  977. }
  978. }
  979. function focusInp(event){
  980. var ev = event,
  981. elementClick = ev.target,
  982. objSet = {"left": elementClick.offsetLeft+350+"px", "top":(elementClick.offsetTop-25)+"px", "display": "block"};
  983.  
  984. if(elementClick.offsetParent.className !== "user_codesBox"){
  985.  
  986. $(".i_input_focus_close").css(objSet).click(function() {
  987. $(this).css({"display": "none"});
  988. });
  989.  
  990. } else {
  991.  
  992. $(".utrack_input_focus_close").css(objSet).click(function() {
  993. $(this).css({"display": "none"});
  994. });
  995.  
  996. }
  997. elementClick.className = "i_setting_el_zoom";
  998. elementClick.focus();
  999. }
  1000.  
  1001. function blurInp(event){
  1002. var el = event.target;
  1003. $(".i_input_focus_close").add($(".utrack_input_focus_close")).css({"display": "none"});
  1004. el.removeAttribute("class");
  1005. }
  1006.  
  1007. // Show window setting services
  1008. function setting_window(){
  1009. if($(".user_codesBox").is(":visible")){
  1010.  
  1011. if(parseFloat($(".user_codesBox").css("left")) > parseFloat($("body").css("width"))/2){
  1012. $(".user_codesBox").css("left","50%");
  1013. }
  1014.  
  1015. let leftOf = parseFloat($(".user_codesBox").css("left"))+parseFloat($(".user_codesBox").css("width"))+20;
  1016.  
  1017. $(".i_setting_div").css("left",leftOf);
  1018. } else {
  1019. $(".i_setting_div").css("left","50%");
  1020. }
  1021.  
  1022. $(".i_setting_div").fadeToggle(1000, function(){
  1023. if(!document.getElementsByClassName("PoleElTable")[0]){
  1024. update_setting_val();
  1025. }
  1026.  
  1027. });
  1028.  
  1029. } // show setting end
  1030. //--- End Setting edit, add, delete services
  1031.  
  1032. // Start - Проверка трека напротив каждого трека
  1033. var dannie_o_trekax=["","","","",""];
  1034. var codes_names = [];
  1035. function NaprotuvKashdogo(){
  1036. var rn_el=document.getElementsByClassName("track-container");
  1037. var title_wrapper = document.getElementsByClassName("title-wrapper");
  1038. var tek_pol=document.getElementsByClassName("checkpoint-status");
  1039.  
  1040. if(rn_el && title_wrapper && tek_pol){
  1041. for(let i=0;i< rn_el.length;i++){
  1042. var el_a=title_wrapper[i].getElementsByClassName("tracking-number")[0].innerText;
  1043. //var el_a=rn_el[i].getElementsByTagName("a")[0].innerText;
  1044. //var el_div=(rn_el.className !="tracking-number")?rn_el[i].getElementsByTagName("a")[1].innerText:rn_el[i].getElementsByTagName("div")[0].innerText;
  1045. //
  1046. dannie_o_trekax[0]+=el_a+((i<rn_el.length-1)?",":""); // Track Number
  1047. dannie_o_trekax[1]+=(title_wrapper[i].firstChild.data).replace(/\s+(.*)/i,"$1")+((i< rn_el.length-1)?"|":""); // Name order
  1048. dannie_o_trekax[2]+= el_a+" - "+(title_wrapper[i].firstChild.data).replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')+((i< rn_el.length-1)?",":""); // Track Number + Name order
  1049. dannie_o_trekax[3]+=(tek_pol[i].firstChild.data).replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')+((i< rn_el.length-1)?"|":""); // Status order
  1050. title_wrapper[i].setAttribute("title", (title_wrapper[i].firstChild.data).replace(/\s+(.*)/i,"$1")+((i< rn_el.length-1)?"|":""));
  1051. //
  1052. var li_body = document.createElement("div");
  1053. var li_body1 = document.createElement("div");
  1054. li_body.setAttribute("style", "margin-bottom: 25px;background: #f9f9f9;");
  1055. li_body1.setAttribute("style", "position:absolute;");
  1056. li_body1.className = "li_body_naprotiv_kashdogo";
  1057. document.getElementsByClassName("track-list")[0].insertBefore(li_body,rn_el[i].nextSibling);
  1058. document.getElementsByClassName("track-list")[0].insertBefore(li_body1,rn_el[i].nextSibling);
  1059. for(let j=0;j<gp_set.services.length;j++){
  1060. if(gp_set.services[j][2]){
  1061. let li = document.createElement("div");
  1062. li.innerHTML='<span onclick="window.open(&quot;'+gp_set.services[j][1]+el_a+'&quot;);">'+gp_set.services[j][0]+'</span>';
  1063. let rcol = getColorRND();
  1064. li.setAttribute("style","background: linear-gradient("+rcol+");");
  1065. li.className="track_service";
  1066. li.title=sel_lang.otsl_na+gp_set.services[j][0];
  1067. li_body1.appendChild(li);
  1068. }
  1069. }
  1070. }
  1071. } else {
  1072. alert(sel_lang.error_create_buttons);
  1073. }
  1074. }
  1075. // End - Проверка трека напротив каждого трека
  1076.  
  1077. // ====================================== Пользовательские коды - Start ======================================
  1078.  
  1079. $.fn.CanvasDraw = function(param){
  1080. var canv = this,
  1081. bgcolor = param.bgcolor,
  1082. text_color = param.text_color,
  1083. bord_color = param.bord_color,
  1084.  
  1085. servname = param.servname,
  1086. size = param.size,
  1087.  
  1088. w = canv[0].width = size+6,
  1089. h = canv[0].height = size+6,
  1090. ctx;
  1091.  
  1092. if(ctx = canv[0].getContext('2d')){
  1093. ctx.fillStyle = bgcolor;
  1094. ctx.fillRect(0,0,w,h);
  1095.  
  1096. let textW_Pos = w/2,
  1097. textH_Pos = h/2
  1098.  
  1099. ctx.font="10px Georgia";
  1100. ctx.textAlign="center";
  1101. ctx.fillStyle = text_color;
  1102. ctx.fillText(servname,textW_Pos,textH_Pos);
  1103. // Stroke
  1104. ctx.strokeStyle = bord_color;
  1105. ctx.lineWidth = 6;
  1106. ctx.strokeRect(0,0,w,h);
  1107. return canv;
  1108.  
  1109. } else {
  1110. throw new Error("Canvas not supported!");
  1111. }
  1112. };
  1113.  
  1114. function addMyTrack(param, w){
  1115. var name_tov = param.name_tov,
  1116. link = param.link,
  1117. track_code = param.track_code,
  1118.  
  1119. bgcol = param.bgcol || "yellow",
  1120. texcol = param.texcol || "red",
  1121. borcol = param.borcol || "#97b6d1",
  1122.  
  1123. name_serv = param.name_serv,
  1124. nubTrack = param.id,
  1125. date_time = new Date(param.date),
  1126. vidimost = param.visible;
  1127.  
  1128. if(vidimost){
  1129.  
  1130. var month = sel_lang.month,
  1131.  
  1132. canv = $('<canvas style="border-radius: 5px;"></canvas>').CanvasDraw({size:38, servname:name_serv, bgcolor:bgcol, text_color:texcol, bord_color: borcol}),
  1133.  
  1134. div = $('<div class="track-container track-'+nubTrack+'" data-utid="'+nubTrack+'"><div class="track "><div class="icon" id="canv"></div>'+
  1135. '<div class="title"><div class="title-wrapper" title="'+name_tov+'">'+name_tov+'<br><a class="tracking-number" href="'+link+track_code+'">'+track_code+'</a></div></div>'+
  1136. '<div class="time">'+date_time.getDate()+' '+month[date_time.getMonth()].toLowerCase()+'<span class="muted">'+date_time.getHours()+":"+(date_time.getMinutes()<10?'0'+date_time.getMinutes():date_time.getMinutes())+'</span></div>'+
  1137. '<div class="checkpoint"><div class="checkpoint-body "><div class="checkpoint-status">Информации о посылке пока нет</div></div></div>'+
  1138. '<div class="info">'+
  1139. '<div class="next-check">***</div>'+
  1140. '<div class="last-check">***</div>'+
  1141. '<div class="next-check">***</div>'+
  1142. '</div>'+
  1143. '<div class="actions">'+
  1144. /*'<span class="actions-split"></span>'+
  1145. '<a href="javascript:void(0);" class="btn btn-default btn-xs btn-modal-ajax" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="40 дней до напоминания"><i class="fa fa-hourglass-start"></i>40</a>'+
  1146. '<div class="btn-group btn-group-xs actions-grouped">'+
  1147. '<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>'+
  1148. '<ul class="dropdown-menu">'+
  1149. '<li><a href="javascript:void(0);" class="btn-modal-ajax"><i class="fa fa-fw fa-folder-o"></i> в архив</a></li>'+
  1150. '<li><a href="javascript:void(0);" class="btn-modal-ajax"><i class="fa fa-fw fa-times"></i> удалить</a></li>'+
  1151. '</ul>'+
  1152. '</div>'+*/
  1153. '<div class="actions-split">'+
  1154. //'<a href="/ajax/track/33708807/archive" class="btn btn-xs btn-default btn-modal-ajax">В архив</a>'+
  1155. '<a href="/ajax/track/33708807/delete" class="btn btn-xs btn-default btn-modal-ajax btn-delete" title="Удалить"><i class="fa fa-times"></i></a>'+
  1156. '</div></div></div></div>');
  1157.  
  1158. div.find(".icon").append(canv);
  1159.  
  1160. div.find(".fa-times").click(function(){
  1161. setting_del_userTrack(track_code);
  1162. });
  1163.  
  1164. if(w === "n"){
  1165. $(".track-list").append(div);
  1166. } else if(w === "c") {
  1167. if($(".track-"+nubTrack).length>0) $(".track-"+nubTrack).replaceWith(div);
  1168. else $(".track-list").append(div);
  1169. }
  1170. } else {
  1171. $(".track-"+nubTrack).add($(".track-"+nubTrack).nextAll()).remove();
  1172. }
  1173. }
  1174.  
  1175. // Функция Получения пользовательских кодов из localStorage
  1176. function userTracksItems(divEl){
  1177. let listItemsHTML = "";
  1178.  
  1179. if(gp_set.hasOwnProperty("my_tracks") && Object.keys(gp_set.my_tracks).length > 0){
  1180. $(".user_codesButtons_save").fadeIn('slow');
  1181.  
  1182. listItemsHTML = $("<div class='UserTable'>"+
  1183. "<div class='UserTableCapt'>"+
  1184. "<div>№</div>"+
  1185. "<div>"+sel_lang.u_trackcode+"</div>"+
  1186. "<div>"+sel_lang.u_nameTovar+"</div>"+
  1187. "<div>"+sel_lang.u_nameServ+"</div>"+
  1188. "<div>"+sel_lang.serv_link+"</div>"+
  1189. "<div>"+sel_lang.u_iconfon+"</div>"+
  1190. "<div>"+sel_lang.u_iconText+"</div>"+
  1191. "<div>"+sel_lang.u_iconContur+"</div>"+
  1192. "<div>"+sel_lang.u_viewOnMain+"</div>"+
  1193. "<div>"+sel_lang.serv_del+"</div>"+
  1194. "</div></div>");
  1195.  
  1196. let numInd = 1;
  1197.  
  1198. for(let user_tracks in gp_set.my_tracks){
  1199. let u_tracks = gp_set.my_tracks[user_tracks];
  1200. let listItems = $("<div class='UserTableRow'>"+
  1201. "<div><div style='font: bold 0.8em sans-serif;border: 2px solid #ffad00;border-radius: 16px;background: white;color: #bf7f0a;line-height: 1.7;width: 20px;height: 20px;font-size: 1em;'>"+numInd+"</div></div>"+
  1202. "<div><input type='text' value='"+u_tracks.track_code+"' id='user_track_code' style='text-transform: uppercase;'></div>"+
  1203. "<div><input type='text' value='"+u_tracks.name_tov+"' id='user_track_tovarname'></div>"+
  1204. "<div><input type='text' value='"+u_tracks.name_serv+"' id='user_track_servname'></div>"+
  1205. "<div><input type='text' value='"+u_tracks.link+"' id='user_track_link'></div>"+
  1206. "<div><input list='all_colors' type='text' value='"+u_tracks.bgcol+"' id='user_track_bgcol'></div>"+
  1207. "<div><input list='all_colors' type='text' value='"+u_tracks.texcol+"' id='user_track_texcol'></div>"+
  1208. "<div><input list='all_colors' type='text' value='"+u_tracks.borcol+"' id='user_track_borcol'></div>"+
  1209. "<div><input type='checkbox' "+(u_tracks.visible?"checked ":"" )+" id='user_track_visible'></div>"+
  1210. "<div><input type='checkbox' id='user_track_delete'></div></div>").data({"track_code":u_tracks.track_code});
  1211. listItemsHTML.append(listItems);
  1212. numInd++;
  1213. }
  1214. $(listItemsHTML).find("input[type!='checkbox']").each(function(index, elem){
  1215. //input_el.id = (j === 0)?"name_services_otsl":"link_services_otsl";
  1216. elem.addEventListener("focus",function(event){focusInp(event);});
  1217. elem.addEventListener("blur",function(event){blurInp(event);});
  1218. });
  1219. //listItemsHTML+='</div>';
  1220.  
  1221. } else {
  1222. $(".user_codesButtons_save").fadeOut('slow');
  1223. listItemsHTML = $('<div style="text-align: center;font-size: 0.8em;background: white;border: 3px double red;border-radius: 5px;margin: 10px;padding: 5px;">'+sel_lang.listUserTrackEmptyAddTrack+'</div>');
  1224. }
  1225. $(divEl).find(".user_codesList").empty().html(listItemsHTML);
  1226.  
  1227. checkUserDelElemet($(divEl).find("div.UserTable"));
  1228. }
  1229.  
  1230. // ============================================================
  1231. function checkUserDelElemet(el){
  1232. // CheckBox checked user tracks delete
  1233. $(el).find("#user_track_delete[type=checkbox]").each(function(index,eleme){
  1234. $(eleme).on("click",function(){
  1235.  
  1236. if($(this).is(':checked')) $(".user_codesButtons_del").css({"display":"inline-block"}).animate({opacity:"+=1.0"});
  1237.  
  1238. $(".user_codesButtons_del").text(sel_lang.serv_del+" ("+$(".UserTable").find("#user_track_delete:checked").length+")");
  1239.  
  1240. if($(".UserTable").find("#user_track_delete:checked").length <= 0){
  1241. $(".user_codesButtons_del").text(sel_lang.serv_del);
  1242. $(".user_codesButtons_del").fadeOut(1000,function(){$(this).css("opacity","0");});
  1243. }
  1244. });
  1245. });
  1246.  
  1247. if($(".UserTable").find("#user_track_delete:checked").length <= 0){
  1248. $(".user_codesButtons_del").text(sel_lang.serv_del);
  1249. $(".user_codesButtons_del").fadeOut(1000,function(){$(this).css("opacity","0");});
  1250. }
  1251. }
  1252.  
  1253. function checkColor(param){
  1254. let def_col = param.def_col,
  1255. new_col = param.new_col,
  1256. palitra = param.palitra;
  1257.  
  1258. if(/^\s?$/.test(new_col) || new_col === "" || palitra.indexOf(new_col.toLowerCase()) === -1 && !/^(#[0-9a-f]{6}|#[0-9a-f]{3})$/i.test(new_col)){
  1259. new_col = def_col;
  1260. }
  1261.  
  1262. return new_col;
  1263. }
  1264.  
  1265. function validColor(param){
  1266. let new_col = param.new_col,
  1267. palitra = param.palitra,
  1268. result = true;
  1269.  
  1270. if(/^\s?$/.test(new_col) || new_col === "" || palitra.indexOf(new_col.toLowerCase()) === -1 && !/^(#[0-9a-f]{6}|#[0-9a-f]{3})$/i.test(new_col)){
  1271. result = false
  1272. }
  1273.  
  1274. return result;
  1275. }
  1276.  
  1277. function userTracksAdd(){
  1278. $(".i_smoke_div_fog").fadeIn(1000, function(){
  1279. if(!$("#i_pop_menu_track").length){
  1280. //Введите данные трека:\nПример:\nИмя службы, Ссылка службы, Название товара, трэк-код, цвет фона иконки (необяз. парам.), цвет текста иконки (необяз. парам.)
  1281. var $pop_meuni = $("<div id='i_pop_menu_track' style='display:none;position: fixed;width: 330px;left: 50%;top: 50%;border: 1px solid silver;background: linear-gradient(#c1c1c1,white);z-index: 9999999;margin-left: -150px;margin-top: -100px;border-radius: 8px;'>\
  1282. \<div style='width: 100%;background: linear-gradient(silver,#808686);text-align: center;border-radius: 8px 8px 0 0;color: white;padding: 3px;border-bottom: 2px dotted white;'><div style='float:right;float: right;cursor: pointer; margin-right: 5px; font-size: 10pt;' id='i_pop_menu_close_b'>X</div>"+sel_lang.addtrackcode+"</div>\
  1283. \<div style='padding: 5px; color: #5f5d5d; font: normal 12px/14px monospace;text-align:right;'>\
  1284. \<p>"+sel_lang.u_nameServ+": <input id='i_pop_menu_track_input_name' type='text' value placeholder='"+sel_lang.u_nameServ+"' /><span title='"+sel_lang.text_Error+"'></span></p>\
  1285. \<p>"+sel_lang.u_linkServ+": <input id='i_pop_menu_track_input_link' type='text' value='http://' placeholder='"+sel_lang.u_enterLink+"' /><span title='"+sel_lang.text_Error+"'></span></p>\
  1286. \<p>"+sel_lang.u_nameTovar+": <input id='i_pop_menu_track_input_namegood' type='text' value='' placeholder='"+sel_lang.u_nameTovar+"' /><span title='"+sel_lang.text_Error+"'></span></p>\
  1287. \<p>"+sel_lang.u_trackcode+": <input id='i_pop_menu_track_input_trackcode' style='text-transform: uppercase;' type='text' value='' placeholder='"+sel_lang.u_trackcode+"' /><span title='"+sel_lang.text_Error+"'></span></p>\
  1288. \<div style='display: table;'>\
  1289. \<div style='display: table-cell;width: 50%;text-align: left;padding: 5px 20px;border-right: 1px dotted silver;vertical-align: middle;'>\
  1290. \<p>"+sel_lang.u_iconfon+": <input list='all_colors' id='i_pop_menu_track_input_bgcanv' type='text' value='' placeholder='"+sel_lang.u_iconfon+"' /></p>\
  1291. \<p>"+sel_lang.u_iconText+": <input list='all_colors' id='i_pop_menu_track_input_colcanv' type='text' value='' placeholder='"+sel_lang.u_iconText+"' /></p>\
  1292. \<p>"+sel_lang.u_iconContur+": <input list='all_colors' id='i_pop_menu_track_input_borcanv' type='text' value='' placeholder='"+sel_lang.u_iconContur+"' /></p>\
  1293. \</div>\
  1294. \<div style='display: table-cell;width: 50%;text-align: center;padding: 5px;vertical-align: middle;'>\
  1295. \<div style='font-weight: bold;margin-bottom: 5px;'>"+sel_lang.u_icon+":</div>\
  1296. \<canvas style='box-shadow: 4px 4px 8px #616060;zoom: 1.5;border-radius: 5px;'>Canvas not support!</canvas></div>\
  1297. \</div>\
  1298. \<p style='text-align: center;margin-bottom: 15px;'>"+sel_lang.u_viewOnMain+": <input id='i_pop_menu_track_input_visible' type='checkbox' checked='true' /></p>\
  1299. \<div disabled id='i_pop_menu_track_button_add' style='width: 150px;margin: 5px auto;height: 30px;line-height: 30px;background: linear-gradient(#75f575,#16bf02);color: white;border-radius: 8px;box-shadow: 2px 2px 5px silver;cursor:pointer; text-align:center;'>"+sel_lang.button_add+"</div>\
  1300. \</div></div>");
  1301.  
  1302. let canv = $pop_meuni.find("canvas").CanvasDraw({size:38,servname: sel_lang.canvTest,bgcolor:"yellow",text_color:"red",bord_color: "#97b6d1"}),
  1303.  
  1304. datalist = $('<datalist id="all_colors"></datalist>');
  1305. $.each(all_color, function( index, value ) {
  1306. let op = $('<option>').val(value);
  1307. datalist.append(op);
  1308. });
  1309. $pop_meuni.append(datalist);
  1310.  
  1311. $("body").append($pop_meuni,);
  1312.  
  1313. $("#i_pop_menu_track_input_name").add($("#i_pop_menu_track_input_bgcanv")).add($("#i_pop_menu_track_input_colcanv")).add($("#i_pop_menu_track_input_borcanv")).on("input", function(){
  1314. let bgcol = $("#i_pop_menu_track_input_bgcanv").val(),
  1315. t_color = $("#i_pop_menu_track_input_colcanv").val(),
  1316. bor_color =$("#i_pop_menu_track_input_borcanv").val(),
  1317. serv_text = $("#i_pop_menu_track_input_name").val();
  1318.  
  1319. bgcol = checkColor({def_col:"yellow", new_col:bgcol, palitra:all_color});
  1320. t_color = checkColor({def_col:"red", new_col:t_color, palitra:all_color});
  1321. bor_color = checkColor({def_col:"#97b6d1", new_col:bor_color, palitra:all_color});
  1322.  
  1323. if(/^\s?$/.test(serv_text) || serv_text === undefined) serv_text = sel_lang.canvTest;
  1324.  
  1325. $(canv).CanvasDraw({size:38,servname:serv_text.slice(0,6),bgcolor:bgcol,text_color:t_color,bord_color: bor_color})
  1326. });
  1327.  
  1328. // Close button
  1329. $("#i_pop_menu_track").find("#i_pop_menu_close_b").click(function(){
  1330. $pop_meuni.fadeOut(1000,function(){
  1331. $(".i_smoke_div_fog").fadeOut(1000,function(){
  1332. $("#i_pop_menu_track_input_link, #i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").parent().find("span").removeClass("error_icon_input");
  1333. $("#i_pop_menu_track_input_link, #i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").css("border-color","");
  1334.  
  1335. $("#i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").val("");
  1336. $("#i_pop_menu_track_input_link").val("http://");
  1337.  
  1338. $("#i_pop_menu_track_input_bgcanv").val("yellow");
  1339. $("#i_pop_menu_track_input_colcanv").val("red");
  1340. $(canv).CanvasDraw({size:58,servname:sel_lang.canvTest,bgcolor:"yellow",text_color:"red",bord_color: "#97b6d1"});
  1341. });
  1342. });
  1343. });
  1344. // Close button end
  1345.  
  1346. // Add user track button
  1347. $("#i_pop_menu_track_button_add").hover(function(e){
  1348. $(this).css("background",e.type === "mouseenter" ? "linear-gradient(rgb(26, 107, 26), rgb(48, 253, 21))":"linear-gradient(#75f575,#16bf02)");
  1349. });
  1350.  
  1351. $("#i_pop_menu_track_button_add").click(function(){
  1352.  
  1353. var newServicesObjInput = [],
  1354. i_pop_menu_input_link = $("#i_pop_menu_track_input_link").val(),
  1355. i_pop_menu_input_name = $("#i_pop_menu_track_input_name").val(),
  1356.  
  1357. i_pop_menu_track_input_namegood = $("#i_pop_menu_track_input_namegood").val(),
  1358. i_pop_menu_track_input_trackcode = $("#i_pop_menu_track_input_trackcode").val(),
  1359.  
  1360. i_pop_menu_track_input_bgcanv = $("#i_pop_menu_track_input_bgcanv").val(),
  1361. i_pop_menu_track_input_colcanv = $("#i_pop_menu_track_input_colcanv").val(),
  1362. i_pop_menu_track_input_borcanv = $("#i_pop_menu_track_input_borcanv").val(),
  1363.  
  1364. i_pop_menu_track_input_visible = $("#i_pop_menu_track_input_visible").prop('checked'),
  1365.  
  1366. old_id = null;
  1367.  
  1368. // UperCase
  1369. i_pop_menu_track_input_trackcode = i_pop_menu_track_input_trackcode.toUpperCase();
  1370.  
  1371. //Check color
  1372. i_pop_menu_track_input_bgcanv = checkColor({def_col:"yellow", new_col:i_pop_menu_track_input_bgcanv, palitra:all_color});
  1373. i_pop_menu_track_input_colcanv = checkColor({def_col:"red", new_col:i_pop_menu_track_input_colcanv, palitra:all_color});
  1374. i_pop_menu_track_input_borcanv = checkColor({def_col:"#97b6d1", new_col:i_pop_menu_track_input_borcanv, palitra:all_color});
  1375.  
  1376. // Text empty!
  1377. if(i_pop_menu_input_name.length < 1 || /^\s*$/.test(i_pop_menu_input_name)){
  1378. alert(sel_lang.textfield_empty_name);
  1379. $("#i_pop_menu_track_input_name").parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  1380. $("#i_pop_menu_track_input_name").css("border-color","red");
  1381. return;
  1382. }
  1383.  
  1384. if(i_pop_menu_input_link.length < 1 || /^\s*$/.test(i_pop_menu_input_link)){
  1385. alert(sel_lang.textfield_empty_link);
  1386. $("#i_pop_menu_track_input_link").parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  1387. $("#i_pop_menu_track_input_link").css("border-color","red");
  1388. return;
  1389. }
  1390.  
  1391. // Link text invalid!
  1392. if(!/^https?\:\/\/.+/i.test(i_pop_menu_input_link)){
  1393. alert(sel_lang.textfield_invalid_link);
  1394. $("#i_pop_menu_track_input_link").parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  1395. $("#i_pop_menu_track_input_link").css("border-color","red");
  1396. return;
  1397. }
  1398. // Tovar name
  1399. if(i_pop_menu_track_input_namegood.length < 1 || /^\s*$/.test(i_pop_menu_track_input_namegood)){
  1400. alert(sel_lang.nameTovarEmptyNoName);
  1401. i_pop_menu_track_input_namegood = sel_lang.nonameTovar;
  1402. $("#i_pop_menu_track_input_namegood").val(i_pop_menu_track_input_namegood);
  1403. }
  1404.  
  1405. // Трэк-код
  1406. if(i_pop_menu_track_input_trackcode.length < 1 || /^\s*$/.test(i_pop_menu_track_input_trackcode) || /\W|_/g.test(i_pop_menu_track_input_trackcode)){
  1407. let matchSpecSymb = i_pop_menu_track_input_trackcode.match(/\W|_/g)
  1408. matchSpecSymb = matchSpecSymb?matchSpecSymb.join(" "):"";
  1409. alert(sel_lang.u_error_trackcode+" "+matchSpecSymb+".");
  1410. $("#i_pop_menu_track_input_trackcode").parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  1411. $("#i_pop_menu_track_input_trackcode").css("border-color","red");
  1412. return;
  1413. }
  1414.  
  1415. $("#i_pop_menu_track_input_link, #i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").parent().find("span").fadeOut(1000,function(){$(this).removeClass("error_icon_input");});
  1416. $("#i_pop_menu_track_input_link, #i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").css("border-color","");
  1417.  
  1418. if(!gp_set.hasOwnProperty("my_tracks")){
  1419. gp_set.my_tracks = {};
  1420. }
  1421.  
  1422. if(gp_set.my_tracks.hasOwnProperty(i_pop_menu_track_input_trackcode)){
  1423. if(confirm(sel_lang.usertrackalreadyAddRewrite)){
  1424. old_id = gp_set.my_tracks[i_pop_menu_track_input_trackcode].id;
  1425. }
  1426. else return;
  1427. }
  1428.  
  1429. newServicesObjInput = {
  1430. name_serv: i_pop_menu_input_name,
  1431. link: i_pop_menu_input_link,
  1432. name_tov: i_pop_menu_track_input_namegood,
  1433. track_code: i_pop_menu_track_input_trackcode,
  1434. bgcol: i_pop_menu_track_input_bgcanv,
  1435. texcol: i_pop_menu_track_input_colcanv,
  1436. borcol: i_pop_menu_track_input_borcanv,
  1437. date: new Date().getFullYear()+"-"+(new Date().getMonth()<10?"0"+(new Date().getMonth()+1):new Date().getMonth()+1)+"-"+new Date().getDate()+" "+new Date().getHours()+":"+new Date().getMinutes(),
  1438. visible: i_pop_menu_track_input_visible,
  1439. id: (old_id)?old_id:"user-"+Math.floor(Math.random()*100000)
  1440. };
  1441.  
  1442. if(debug) console.log("Объект параметров польз. кода", newServicesObjInput);
  1443.  
  1444. gp_set.my_tracks[i_pop_menu_track_input_trackcode] = newServicesObjInput;
  1445.  
  1446. saveStorage();
  1447.  
  1448. if(newServicesObjInput.visible){
  1449. if(old_id) UpdateUserTrackMainWin(newServicesObjInput, 'c');
  1450. else UpdateUserTrackMainWin(newServicesObjInput, 'n');
  1451. }
  1452.  
  1453. $("#i_pop_menu_track").fadeOut(500,function(){
  1454. $(".i_smoke_div_fog").fadeOut(1000,function(){
  1455.  
  1456. $("#i_pop_menu_track_input_link, #i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").parent().find("span").removeClass("error_icon_input");
  1457. $("#i_pop_menu_track_input_link, #i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").css("border-color","");
  1458.  
  1459. $("#i_pop_menu_track_input_name, #i_pop_menu_track_input_namegood, #i_pop_menu_track_input_trackcode").val("");
  1460. $("#i_pop_menu_track_input_link").val("http://");
  1461.  
  1462. $("#i_pop_menu_track_input_bgcanv").val("yellow");
  1463. $("#i_pop_menu_track_input_colcanv").val("red");
  1464. $("#i_pop_menu_track_input_borcanv").val("#97b6d1");
  1465. $(canv).CanvasDraw({size:38,servname:"ТЕСТ",bgcolor:"yellow",text_color:"red",bord_color: "#97b6d1"});
  1466.  
  1467. userTracksItems($(".user_codesBox"));
  1468. });
  1469. });
  1470.  
  1471. });
  1472. // Add user track button end
  1473.  
  1474. $("#i_pop_menu_track").children(":nth-child(2)").find("input").each(function(index, eleme){
  1475. $(eleme).on("input", function(){
  1476. var minlengt = /^\s*$/.test($(this).val());
  1477. var empty_input = $(this).val().length < 1;
  1478. var link_check = ($(this).attr("id")==="i_pop_menu_track_input_link" && !/https?\:\/\/.*/i.test($(this).val()));
  1479.  
  1480. if(minlengt || empty_input || link_check){
  1481. $(this).parent().find("span").addClass("error_span_input error_icon_input").fadeIn(1000);
  1482. $(this).css("border-color","red");
  1483. } else {
  1484. $(this).parent().find("span").fadeOut(1000,function(){$(this).removeClass("error_icon_input");});
  1485. $(this).css("border-color","");
  1486. }
  1487. });
  1488. });
  1489.  
  1490. $pop_meuni.fadeIn(1000);
  1491. } else {
  1492. $("#i_pop_menu_track").fadeIn(1000);
  1493. }
  1494. });
  1495. }
  1496. // ============================================================
  1497.  
  1498. // Функция Сохранить изменения польз. кодов
  1499. function poleDetect(inp, objs, tip){
  1500. let objName = "",
  1501. el = $(inp);
  1502.  
  1503. switch(el.attr("id")){
  1504. case "user_track_servname":
  1505. objs.name_serv = el.val().toUpperCase();
  1506. objName = "name_serv";
  1507. break;
  1508. case "user_track_link":
  1509. objs.link = el.val();
  1510. objName = "link";
  1511. break;
  1512. case "user_track_tovarname":
  1513. objs.name_tov = el.val();
  1514. objName = "name_tov";
  1515. break;
  1516. case "user_track_code":
  1517. objs.track_code = el.val().toUpperCase();
  1518. objName = "track_code";
  1519. break;
  1520. case "user_track_bgcol":
  1521. objs.bgcol = el.val();
  1522. objName = "bgcol";
  1523. break;
  1524. case "user_track_texcol":
  1525. objs.texcol = el.val();
  1526. objName = "texcol";
  1527. break;
  1528. case "user_track_borcol":
  1529. objs.borcol = el.val();
  1530. objName = "borcol";
  1531. break;
  1532. case "user_track_visible":
  1533. objs.visible = el.is(':checked');
  1534. objName = "visible";
  1535. break;
  1536. }
  1537. if(tip === "propName") return objName;
  1538. }
  1539.  
  1540. function userTracksSave(){
  1541. try{
  1542. if(debug) console.log("Сохраняем польз. трэк-код...");
  1543. var temp_zapis = {},
  1544. save_value = true;
  1545.  
  1546. $(".UserTableRow").each(function(indx, elS){
  1547. var stroke_error = indx+1,
  1548. track_code = $(elS).data().track_code;
  1549.  
  1550. temp_zapis[track_code] = {};
  1551.  
  1552. $(elS).find("input[id!='user_track_delete']").each(function(index, eleme){
  1553.  
  1554. let namePoleError = $(".UserTableCapt > div").eq(index+1).text();
  1555.  
  1556. // Если это поле трэк-кода
  1557. if($(this).attr("id") === "user_track_code"){
  1558.  
  1559. if(!/^\s*$/.test($(this).val()) && /\W|_$/g.test($(this).val())){
  1560. let matchSpecSymb = $(this).val().match(/\W|_/g).join(" ");
  1561. //alert(`Ошибка:\nПоле трэк-кода, содержит неверные символы ${matchSpecSymb}, в столбце "${namePoleError}", строка №${stroke_error}`);
  1562. alert(sel_lang.u_error_trackcodeFull[0]+matchSpecSymb+sel_lang.u_error_trackcodeFull[1]+namePoleError+sel_lang.u_error_trackcodeFull[2]+stroke_error);
  1563. save_value = false;
  1564.  
  1565. return false;
  1566. }
  1567.  
  1568. if(!gp_set.my_tracks.hasOwnProperty($(this).val()) &&
  1569. !/^\s*$/.test($(this).val())
  1570. && confirm(sel_lang.u_error_trackcodeChangeFull[0]+namePoleError+sel_lang.u_error_trackcodeChangeFull[1]+stroke_error+sel_lang.u_error_trackcodeChangeFull[2])){// Трэк-код был изменен!
  1571. //confirm(`Внимание:\nПоле трэк-кода, было изменено на новое значение, в столбце "${namePoleError}", строка №${stroke_error}, вы действительно хотите изменить значание?`)
  1572. let newTrackcode = $(this).val().toUpperCase();
  1573.  
  1574. if(gp_set.my_tracks.hasOwnProperty(track_code)){
  1575. gp_set.my_tracks[track_code].track_code = newTrackcode;
  1576. temp_zapis[newTrackcode] = gp_set.my_tracks[newTrackcode] = gp_set.my_tracks[track_code];
  1577.  
  1578. delete temp_zapis[track_code]
  1579. delete gp_set.my_tracks[track_code]
  1580. }
  1581. track_code = newTrackcode;
  1582.  
  1583. $(elS).data().track_code = newTrackcode;
  1584. $(this).val(track_code);
  1585.  
  1586. }
  1587. }
  1588.  
  1589. // Если поле пустое
  1590. if($(this).val().length < 1 || /^\s*$/.test($(this).val())){
  1591. alert(sel_lang.u_error_fieldEmptyFull[0]+namePoleError+sel_lang.u_error_fieldEmptyFull[1]+stroke_error);
  1592. //alert(`Ошибка:\nПустое поле в столбце "${namePoleError}", строка №${stroke_error}`);
  1593. if(gp_set.my_tracks.hasOwnProperty(track_code)){
  1594. let restoreNameProp = poleDetect(this, gp_set.my_tracks, 'propName');
  1595.  
  1596. $(this).val(gp_set.my_tracks[track_code][restoreNameProp]);
  1597. }
  1598.  
  1599. save_value = false;
  1600.  
  1601. return false;
  1602. }
  1603. // Если это поле ссылки, проверяем ее...
  1604. if($(this).attr("id") === "user_track_link" && !/^https?\:\/\/.+/i.test($(this).val())){
  1605. alert(sel_lang.u_error_FullError[0]+namePoleError+sel_lang.u_error_FullError[1]+stroke_error);
  1606. //alert(`Ошибка:\n${namePoleError} указана неверно, в строке №"${stroke_error}`);
  1607.  
  1608. if(confirm(sel_lang.return_prev_val))$(this).val(gp_set.my_tracks[track_code].link);
  1609.  
  1610. save_value = false;
  1611.  
  1612. return false;
  1613. }
  1614.  
  1615. // Проверяем поля фон,текст и бордер (цвета)
  1616. let m_inp_col = ["user_track_bgcol", "user_track_texcol", "user_track_borcol"];
  1617. if(m_inp_col.indexOf($(this).attr("id")) !== -1){
  1618. if(!validColor({new_col:$(this).val(), palitra:all_color})){
  1619. alert(sel_lang.u_error_colorFull[0]+namePoleError+sel_lang.u_error_colorFull[1]+stroke_error);
  1620. //alert(`Ошибка:\nЦвет указан неверно, в столбце "${namePoleError}", строка №${stroke_error}`);
  1621. if(gp_set.my_tracks.hasOwnProperty(track_code)){
  1622. let restoreNameProp = poleDetect(this, gp_set.my_tracks, 'propName');
  1623. $(this).val(checkColor({def_col:gp_set.my_tracks[track_code][restoreNameProp], new_col:$(this).val(), palitra:all_color}));
  1624. save_value = false;
  1625. return false;
  1626. }
  1627. }
  1628. }
  1629.  
  1630. // Если ошибок нет, сохраняем значения в свойства объекта
  1631. if(save_value){
  1632. poleDetect(this, temp_zapis[track_code], 'propSave');
  1633. }
  1634.  
  1635. });
  1636.  
  1637. if(save_value){
  1638. temp_zapis[track_code].date = new Date().getFullYear()+"-"+(new Date().getMonth()<10?"0"+(new Date().getMonth()+1):new Date().getMonth()+1)+"-"+new Date().getDate()+" "+new Date().getHours()+":"+new Date().getMinutes(); // change date
  1639. temp_zapis[track_code].id = gp_set.my_tracks[track_code].id;
  1640. } else{
  1641. temp_zapis = {};
  1642. return false;
  1643. }
  1644. });
  1645.  
  1646. if(debug) console.log("Объект измененных параметров и кол-во элементов:",temp_zapis,Object.keys(temp_zapis).length);
  1647.  
  1648. if(save_value && Object.keys(temp_zapis).length>0 && confirm(sel_lang.q_save)){
  1649. gp_set.my_tracks = temp_zapis;
  1650. saveStorage();
  1651. alert(sel_lang.danie_edit);
  1652. upperPanel("clear");
  1653. for(var i in gp_set.my_tracks) UpdateUserTrackMainWin(gp_set.my_tracks[i], 'c');
  1654. updateDataNaprotivKashdogo();
  1655. }
  1656. } catch(e){
  1657. console.log(e);
  1658. }
  1659. }
  1660.  
  1661. function UpdateUserTrackMainWin(tracks, w){
  1662. if(w === 'd'){ // remove
  1663. $(".track-"+tracks.id).add($(".track-"+tracks.id).nextAll()).remove();
  1664. } else if(w === 'c') { // change
  1665. addMyTrack(tracks, "c");
  1666. } else if(w === 'n' || w === undefined || w === null){ // new
  1667. addMyTrack(tracks, "n");
  1668. }
  1669. updateDataNaprotivKashdogo();
  1670. }
  1671.  
  1672. // Функция удаления польз. кодов
  1673. function setting_del_userTrack(){
  1674. if(confirm(sel_lang.deleteselectedTrackcodes)){
  1675. var arr_del = [];
  1676. $(".user_codesList").find("#user_track_delete:checked").each(function(index,eleme){
  1677. let elUp = eleme.parentElement.parentElement,
  1678. trDel = $(elUp).data().track_code;
  1679.  
  1680. if(trDel.length>0) arr_del.push(gp_set.my_tracks[trDel]);
  1681. });
  1682. if(debug) console.log("Удаляем трэк-коды:",arr_del.join(", "));
  1683.  
  1684. for(var k=0; k < arr_del.length; k++){
  1685. if(gp_set.my_tracks.hasOwnProperty(arr_del[k].track_code)){
  1686. UpdateUserTrackMainWin(arr_del[k], 'd');
  1687. delete gp_set.my_tracks[arr_del[k].track_code];
  1688. }
  1689. }
  1690. saveStorage();
  1691.  
  1692. alert(sel_lang.userTrackcodesDeleted);
  1693.  
  1694. updateDataNaprotivKashdogo();
  1695. userTracksItems($(".user_codesBox"));
  1696. }
  1697. }
  1698.  
  1699. // Функция загрузки польз. кодов при старте
  1700. function onStartViewUserTracks(){
  1701. if(gp_set.hasOwnProperty("my_tracks") && Object.keys(gp_set.my_tracks).length > 0){
  1702. for(let user_tracks in gp_set.my_tracks){
  1703. let u_tracks = gp_set.my_tracks[user_tracks];
  1704. if(u_tracks.visible){
  1705. addMyTrack({
  1706. name_serv: u_tracks.name_serv,
  1707. link: u_tracks.link,
  1708. name_tov: u_tracks.name_tov,
  1709. track_code: u_tracks.track_code,
  1710. bgcol: u_tracks.bgcol,
  1711. texcol: u_tracks.texcol,
  1712. borcol: u_tracks.borcol,
  1713. date: u_tracks.date,
  1714. id: u_tracks.id,
  1715. visible: u_tracks.visible
  1716. }, 'n');
  1717. }
  1718. }
  1719. }
  1720. }
  1721.  
  1722. function myTracks(){
  1723. try{
  1724. if(!gp_set.hasOwnProperty("my_tracks")){
  1725. gp_set.my_tracks={};
  1726. saveStorage();
  1727. }
  1728.  
  1729. let u_codesButton = $('<span class="user_buttonShow" title="'+sel_lang.addtrackcode+'">'+sel_lang.addtrackcode+'</span>');
  1730. if(window.location.pathname.indexOf("/form")>-1) u_codesButton[0].className = "user_buttonShow modify"
  1731.  
  1732. u_codesButton.click(function(){
  1733. if($(".user_codesBox").length === 0){
  1734. let u_codesBox = $('<div class="user_codesBox">'+
  1735. '<div class="user_codesBoxTitle"><span>'+sel_lang.userTrackcodes+'<div style="float:right; cursor:pointer;margin-right: 5px;">X</div></span></div>'+
  1736. '<div class="user_codesList"></div>'+
  1737. '<div class="user_codesButtons">'+
  1738. '<div class="i_setting_div_button user_codesButtons_add">'+sel_lang.add_serv+'</div>'+
  1739. '<div class="i_setting_div_button user_codesButtons_save">'+sel_lang.save_serv+'</div>'+
  1740. '<div class="i_setting_div_button user_codesButtons_del">'+sel_lang.serv_del+'</div>'+
  1741. '</div>'+
  1742. '<div class="utrack_input_focus_close" title="'+sel_lang.bClose+'">X</div>'+
  1743. '</div>'),
  1744.  
  1745. datalist = $('<datalist id="all_colors"></datalist>');
  1746. $.each(all_color, function( index, value ) {
  1747. let op = $('<option>').val(value);
  1748. datalist.append(op);
  1749. });
  1750. // Добавляем итемы в список из localStorage
  1751. userTracksItems(u_codesBox);
  1752. u_codesBox.append(datalist);
  1753.  
  1754. $(".checkbox_div").append(u_codesBox);
  1755.  
  1756. // Обработчики событий
  1757. // Кнопка закрыть
  1758. $(".user_codesBoxTitle").find("span div").click(function(){
  1759. $(".user_codesBox").fadeToggle("slow", function(){
  1760. if(!$(".user_codesBox").is(":visible")){
  1761. $(".i_setting_div").css("left","50%");
  1762. $(u_codesBox).find(".user_codesList").empty();
  1763. }
  1764. });
  1765. });
  1766.  
  1767. // Кнопка Создать
  1768. $(".user_codesBox").find(".user_codesButtons_add").click(userTracksAdd);
  1769. // Кнопка Сохранить
  1770. let saveAll= $(".user_codesBox").find(".user_codesButtons_save").click(userTracksSave);
  1771.  
  1772. if(Object.keys(gp_set.my_tracks).length === 0){
  1773. saveAll.css("display","none");
  1774. }
  1775. // Кнопка Удалить
  1776. $(".user_codesBox").find(".user_codesButtons_del").click(setting_del_userTrack);
  1777. } else {
  1778. $(".user_codesList").empty();
  1779. userTracksItems(".user_codesBox");
  1780. }
  1781.  
  1782. if($(".i_setting_div").is(":visible")){
  1783.  
  1784. if(parseFloat($(".i_setting_div").css("left")) > parseFloat($("body").css("width"))/2){
  1785. $(".i_setting_div").css("left","50%");
  1786. }
  1787.  
  1788. let leftOf = parseFloat($(".i_setting_div").css("left"))+parseFloat($(".i_setting_div").css("width"))+20;
  1789. $(".user_codesBox").css("left",leftOf);
  1790. } else {
  1791. $(".user_codesBox").css("left","50%");
  1792. }
  1793.  
  1794. $(".user_codesBox").fadeToggle("slow");
  1795. });
  1796.  
  1797. if(window.location.pathname.indexOf("/form")>-1){
  1798. $("div.container.tracking-form").find(".help-block li").append(u_codesButton)
  1799. } else {
  1800. $(".checkbox_div").append(u_codesButton);
  1801. }
  1802.  
  1803. onStartViewUserTracks();
  1804.  
  1805. } catch(e){
  1806. console.log(e);
  1807. }
  1808. }
  1809. // Пользовательские коды - End
  1810. function init(){
  1811. try{
  1812. // -------------------------------- Init -----------------------------
  1813. var i_setting_div = document.createElement("div");
  1814. var i_setting_div_caption = document.createElement("div");
  1815. var i_setting_div_body = document.createElement("div");
  1816. var i_setting_div_foot = document.createElement("div");
  1817. var i_setting_div_resetservices = document.createElement("div");
  1818. i_setting_div_resetservices.innerText = sel_lang.reser_serv;
  1819. $(i_setting_div_resetservices).css({"float": "left", "font-size": "0.8em", "margin-top": "20px", "cursor": "pointer"});
  1820. $(i_setting_div_resetservices).click(function(){
  1821. if(confirm(sel_lang.q_reset_serv)) {
  1822. resetDefaultServices();
  1823. }
  1824. });
  1825. var i_setting_div_add_button = document.createElement("div");
  1826. i_setting_div_add_button.innerText = sel_lang.add_serv;
  1827. var i_setting_div_save_button = document.createElement("div");
  1828. i_setting_div_save_button.innerText = sel_lang.save_serv;
  1829. var i_setting_div_del_button = document.createElement("div");
  1830. i_setting_div_del_button.innerText = sel_lang.serv_del;
  1831. i_setting_div.className = "i_setting_div";
  1832. i_setting_div_caption.className = "i_setting_div_caption";
  1833. i_setting_div_caption.innerHTML = "<span>"+sel_lang.setting+"</span>";
  1834. $(i_setting_div_caption).find("span").append("<div style='float:right; cursor:pointer;margin-right: 5px;'>X</div>").click(function(){
  1835. $(".i_setting_div").fadeOut(1000, function(){
  1836. if(!$(".i_setting_div").is(":visible")) $(".user_codesBox").css("left","50%");
  1837. });
  1838. });
  1839. i_setting_div_body.className = "i_setting_div_body";
  1840. i_setting_div_foot.className = "i_setting_div_foot";
  1841. i_setting_div_add_button.className = "i_setting_div_button i_setting_div_save_button";
  1842. i_setting_div_save_button.className = "i_setting_div_button i_setting_div_add_button";
  1843. i_setting_div_del_button.className = "i_setting_div_button i_setting_div_del_button";
  1844. var i_setting = document.createElement("i");
  1845. i_setting.className = "i_setting i_setting-set";
  1846. var i_smoke_div_fog = document.createElement("div");
  1847. i_smoke_div_fog.className = "i_smoke_div_fog";
  1848. document.body.appendChild(i_smoke_div_fog);
  1849. var divli = document.createElement("ul");
  1850. divli.setAttribute('style', `clear: left; padding-top: 20px; width: 90%; margin: 0 auto;`)
  1851. divli.className = "nav navbar-center";
  1852. var liel= document.getElementsByClassName("navbar navbar-inverse")[0].getElementsByClassName("container")[0] || null;
  1853. if(liel){
  1854. liel.insertBefore(divli,document.getElementsByClassName("nav navbar-nav navbar-right")[0]);
  1855. }
  1856. i_setting.addEventListener("click", setting_window);
  1857. i_setting_div_add_button.addEventListener("click", setting_add_value);
  1858. i_setting_div_save_button.addEventListener("click", setting_save_value);
  1859. i_setting_div_del_button.addEventListener("click", setting_del_value);
  1860. var checkbox_div = document.createElement("div");
  1861. var checkbox_input = document.createElement("input");
  1862. var checkbox_label = document.createElement("label");
  1863. checkbox_div.className="checkbox_div";
  1864. checkbox_div.innerHTML="<span style=\"position: relative;top: 10px; padding-right: 10px;\">"+ sel_lang.tolko_ne_poluch +"</span>";
  1865. checkbox_input.type="checkbox";
  1866. checkbox_input.className="checkbox";
  1867. checkbox_input.id="checkbox";
  1868.  
  1869. if(!gp_set.hasOwnProperty('setting')){
  1870. gp_set.setting={'tolko_ne_poluch':false};
  1871. }
  1872. checkbox_input.checked = gp_set.setting.tolko_ne_poluch;
  1873. checkbox_label.setAttribute("for","checkbox");
  1874. checkbox_label.addEventListener("click", only_ne_poluch_button);
  1875. checkbox_div.appendChild(checkbox_input);
  1876. checkbox_div.appendChild(checkbox_label);
  1877. checkbox_div.appendChild(i_setting);
  1878. i_setting_div.appendChild(i_setting_div_caption);
  1879. i_setting_div.appendChild(i_setting_div_body);
  1880. i_setting_div_foot.appendChild(i_setting_div_resetservices);
  1881. i_setting_div_foot.appendChild(i_setting_div_add_button);
  1882. i_setting_div_foot.appendChild(i_setting_div_save_button);
  1883. i_setting_div_foot.appendChild(i_setting_div_del_button);
  1884. i_setting_div.appendChild(i_setting_div_foot);
  1885. checkbox_div.appendChild(i_setting_div);
  1886. //document.getElementsByClassName("container")[1].lastChild.appendChild(checkbox_div);
  1887. document.getElementsByClassName("container")[2].parentNode.insertBefore(checkbox_div, document.getElementsByClassName("container")[2]);
  1888. //--------------------
  1889. myTracks(); // Пользовательские коды
  1890. NaprotuvKashdogo(); // Naprotiv kashdogo treka slushba ontsleshivaniya
  1891. make_abs(); // Make absolute window left
  1892. upperPanel(); // Verxnya panel so slushbami otsleshivaniya
  1893. // checkAll();
  1894.  
  1895. } catch (e){console.log(e);}
  1896. }
  1897.  
  1898. function my(a){
  1899. if(a.length !== $(".tracking-number").length) {
  1900. setTimeout(my.bind("",a),100)
  1901. } else {
  1902. console.log(a)
  1903. let but = document.createElement("button")
  1904. but.innerText = "Go";
  1905. $(but).on('click', function(){
  1906. $.each(a,function(){
  1907. $.ajax(a).done(handleModalResponse);
  1908. })
  1909. });
  1910. document.body.appendChild(but)
  1911. }
  1912. }
  1913. function checkAll(){
  1914. let arr_link=[];
  1915. $.each($(".tracking-number"), function(ind, el){
  1916. $.ajax($(this).attr("href"))
  1917. .done(function(a){
  1918. let html = $(a),
  1919. but = html.find(".btn-modal-ajax:eq(1)")
  1920. arr_link.push(but.attr("href"))
  1921. if(ind == $(".tracking-number").length-1) my(arr_link)
  1922. });
  1923. })
  1924. }
  1925.  
  1926. init();
  1927.  
  1928. })();