1(function ($) { 2 3 'use strict'; 4 function _tryInit() 5 { 6 var $el = $(this); 7 if (!$el.data('DmLookupObject')) 8 { 9 // ÐÐµÑ ÐµÑе обÑекÑа - пÑобÑем иниÑиализиÑоваÑÑ.... 10 if ($el.data('NoDmLookup2')) return false; // Уже пÑобовали :( 11 12 if ($el.data('url') || $el.data('json-url')) // ÐÑли еÑÑÑ data-url, знаÑÐ¸Ñ ÑкоÑее вÑего оно, однако TODO: пÑибÑмаÑÑ Ð±Ð¾Ð»ÐµÐµ надежнÑй ÑпоÑоб деÑекÑа 13 { 14 // Ok, Ñоздаем 15 $el.data('DmLookupObject', new DmLookup2(this)); 16 } else 17 { 18 // Создадим "ÐаглÑÑкÑ" Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¾Ð¿ÐµÑаÑий 19 $el.data('DmLookupObject', new DmNoLookup2(this)); 20 } 21 } 22 return true; 23 } 24 25 $.fn.extend( // jQuery plugin 26 { 27 DmLookup2: function (param) 28 { 29 if(param===undefined) 30 return this.each(_tryInit); 31 32 this.each(function() 33 { 34 if (_tryInit.apply(this)) 35 { 36 var lo = $(this).data('DmLookupObject'); 37 if (!lo) { console.warn('DmLookupObject is null for ', this); return; } 38 for (var p in param) 39 { 40 lo[p](param[p]); 41 } 42 } 43 }); 44 }, 45 // TODO: Obsolete? 46 lookuptext: function (val) 47 { 48 // вÑÑавлÑем даннÑе в input/span (в завиÑимоÑÑи Ð¾Ñ Ñипа lookup'а) и в attr('title') 49 if($(this).is("div")) 50 return this.attr('title', val); 51 if($(this).is("input")) 52 return this.val(val).attr('title', val); 53 else 54 return this.text(val).attr('title', val); 55 } 56 }); 57 58 var _shared = { // ТÑÑ Ð´Ð°Ð½Ð½Ñе, обÑие Ð´Ð»Ñ Ð²ÑÐµÑ lookupов 59 active : null, // ÐкÑÐ¸Ð²Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»Ñ Ñ Ð¿Ð¾Ð´Ñказками 60 }; 61 62 function _closeActive(newActive) 63 { 64 if (_shared.active===newActive) return; 65 66 if (_shared.active) _shared.active(); 67 68 _shared.active = newActive; 69 } 70 71 $(document).click(function () { _closeActive(null); }); // Ðдин обÑабоÑÑик на вÑе лÑÐºÐ°Ð¿Ñ 72 73 // ÐаглÑÑка пÑи оÑÑÑÑÑÑвии лÑкапа 74 function DmNoLookup2(container) 75 { 76 var root = $(container); // ÐлавнÑй конÑÑол 77 var _link; 78 79 //#region === Public === 80 81 this.isLookup = false; 82 83 this.clear = 84 this.enable = 85 this.readonly = 86 this.addTargets = 87 this.setUrl = 88 this.insertData = 89 this.val = function(){}; 90 91 this.setLink = function (url) 92 { 93 if (!_link) 94 { 95 _link = $('<a class="link" title="ÐÑкÑÑÑÑ Ð² новом окне" target="_blank"><span class="icon c-info"></span></a>'); 96 _link.appendTo(root); 97 } 98 99 if (url) _link.attr('href', url).show(); else _link.hide(); 100 }; 101 102 //#endregion 103 } 104 105 // ÐлаÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑолов Ñ lookup 106 function DmLookup2(input) 107 { 108 //#region === Private === 109 110 var field = $(input); // ÐлавнÑй конÑÑол, коÑоÑÑй бÑÐ´ÐµÑ Ð²ÑÑÑÑпаÑÑ Ð² каÑеÑÑве ÑÑÑоки поиÑка 111 var targets = field.data('targets'); // ÐабиÑаем каÑÑÑ ÑаÑкладки из аÑÑибÑÑа data-targets='...' 112 var prepModel = field.data('prepare-model'); // ФÑнкÑÐ¸Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñовки модели Ð´Ð»Ñ ÑаÑкладки полей TODO: пÑовеÑиÑÑ Ð°ÐºÑÑалÑноÑÑÑ 113 var popupUrl = field.data('url'); // URL Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° popup Ñ Ð²Ð°ÑианÑами 114 var jsonUrl = field.data('json-url'); // URL Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° подÑказок ваÑианÑов 115 var freeValue = field.data('free-value'); // ÐÑли допÑÑÑимо ÑказаÑÑ Ð¿ÑоизволÑное знаÑение в поле ввода, Ñо ÑÑо ÑвойÑÑво должно ÑодеÑжаÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸, кÑда положиÑÑ Ð·Ð½Ð°Ñение 116 var uitrigger = field.data('uitrigger'); // ÐÐ¼Ñ ÑобÑÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ jQuery обÑабоÑÑиков 117 var event = field.data('event'); // ÐÐ¼Ñ ÑобÑÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ native обÑабоÑÑиков, вклÑÑÐ°Ñ Vuejs 118 119 var clearbutton = $('.lookup_clear', field); // Ðнопка оÑиÑÑки полей 120 var lookupButton = $('span.lookup_popup',field); // Ðнопка оÑкÑÑÑÐ¸Ñ popup 121 122 var container = field.closest('form'); 123 124 var editvaluebox = field.find("input.lookup_value,textarea.lookup_value"); // РедакÑиÑÑемое знаÑение (ÑÑÑеÑÑвÑÐµÑ ÑолÑко пÑи ÑедакÑиÑÑемом lookup'е) 125 var valuebox = editvaluebox; // поле Ñо знаÑением, коÑоÑÐ¾Ð¼Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÑÑÑавиÑÑ disabled = true 126 if (valuebox.length==0) 127 { 128 freeValue = null; // У Ð½Ð°Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑоизволÑного знаÑÐµÐ½Ð¸Ñ 129 // неÑедакÑиÑÑемÑй лÑкап - пÑÑаемÑÑ Ð½Ð°Ð¹Ñи поле Ñо знаÑением 130 var fid = field.attr('id'); 131 if (fid) 132 valuebox = field.find('#'+fid.replace(/_lookup$/, '')); 133 } 134 135 var setter = $.ETC.SetterBuilder(targets, container, prepModel); // ФÑнкÑÐ¸Ñ ÑаÑкладки даннÑÑ 136 var _cancel = function () {}; 137 var _isDisabled; 138 var _setData; 139 var _inPopup = field.closest('.dmlookup2popup').length===1; 140 var _link; 141 142 function _fire(val) 143 { 144 if(uitrigger) 145 field.trigger(uitrigger, val); 146 147 if (event) 148 field[0].dispatchEvent(new CustomEvent(event, { bubbles: true, detail : val })); 149 } 150 151 //#endregion 152 153 //#region === Public === 154 155 this.isLookup = true; 156 157 // ÐÑиÑÑиÑÑ ÑодеÑжимое 158 this.clear = function() { _setData(); }; 159 160 // ÐкÑивиÑоваÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ 161 this.enable = function(en) { field[en?'removeClass':'addClass']('disable'); }; 162 163 // readonly 164 this.readonly = function(en) { field[en?'addClass':'removeClass']('readonly'); }; 165 166 // ÐобавиÑÑ Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ ÑаÑкладки 167 this.addTargets = function(ntargets) 168 { 169 var t = targets; 170 for(var nt in ntargets) 171 { 172 if(t[nt]==null) 173 { 174 t[nt] = ntargets[nt]; 175 } else 176 { 177 var v = ntargets[nt]; 178 if(!$.isArray(t[nt])) 179 t[nt] = [t[nt]]; 180 if($.isArray(v)) 181 t[nt] = t[nt].concat(v); 182 else 183 t[nt].push(v); 184 } 185 } 186 setter = $.ETC.SetterBuilder(t, container, prepModel); 187 }; 188 189 // ÐзмениÑÑ url Ð´Ð»Ñ lookup 190 this.setUrl = function (url) { popupUrl = url; }; 191 192 this.setLink = function (url) 193 { 194 if (!_link) 195 { 196 _link = $('<a class="link" title="ÐÑкÑÑÑÑ Ð² новом окне" target="_blank"><span class="icon c-info"></span></a>'); 197 _link.prependTo(field); 198 } 199 200 if (url) _link.attr('href', url).show(); else _link.hide(); 201 }; 202 203 // ÐÑÑавиÑÑ ÐºÐ°ÑÑомнÑе даннÑе в lookup 204 // Example: $('#Model_ItemRegion').DmLookup2({'insertData':{'Dis
204playText':'testtext'}}); 205 // ÐедоÑÑаÑÑие даннÑе (Key, Version, DisplayText etc.) оÑÑанÑÑÑÑ Ð½ÐµÑÑонÑÑÑми 206 this.insertData = function(val) 207 { 208 if (_isDisabled()) return; 209 setter(val, false); //заменÑем ÑолÑко Ñе знаÑениÑ, коÑоÑÑе пеÑедали 210 lastValue = editvaluebox.val(); 211 _fire(val); 212 }; 213 214 this.val = function (nv) 215 { 216 if (nv == undefined) 217 return lastvalue; 218 _setData(nv); 219 return this; 220 }; 221 222 //#endregion 223 224 //#region === Shared part === 225 226 var lastValue = editvaluebox.val(); // ÐÑбÑанное знаÑение в ÑÑÑоке поиÑка 227 228 _setData = function(val) 229 { 230 setter(val, true); 231 lastValue = editvaluebox.val(); 232 _fire(val); 233 }; 234 235 // ÑÑнкÑÐ¸Ñ Ð¿ÑовеÑки на запÑÐµÑ ÑедакÑиÑование (клаÑÑÑ 'disable' или 'readonly') 236 _isDisabled = function() 237 { 238 // пÑовеÑÑем, акÑивен ди lookup2 239 return field.hasClass('disable') || field.hasClass('readonly') || valuebox.prop('disabled'); 240 }; 241 242 clearbutton.click(function(e) 243 { 244 $.ETC.FormModel.inPlaceEdit.freeze(clearbutton, true); 245 if (!_isDisabled()) 246 { 247 _setData(); 248 _cancel(); 249 } 250 setTimeout(function() 251 { 252 field.focus(); 253 editvaluebox.focus(); 254 $.ETC.FormModel.inPlaceEdit.freeze(clearbutton, false); 255 }, 10); 256 257 return stop(e); 258 }); 259 260 //#endregion 261 262 //#region === Popup part === 263 264 // Ðоказ ваÑианÑов в Popupе 265 editvaluebox.click(function () { return false; }); 266 lookupButton.click(_popup); 267 268 if (editvaluebox.length==0) 269 { 270 field.keydown(function(event) // обÑабоÑка нажаÑий клавиаÑÑÑÑ 271 { 272 if (field.is(":focus")) 273 { 274 switch(event.keyCode) 275 { 276 case 13: // Enter - оÑкÑÑÑÑ lookup 277 case 32: // Space - оÑкÑÑÑÑ lookup 278 _popup(); 279 break; 280 case 46: // Delete - оÑиÑÑиÑÑ lookup 281 clearbutton.trigger('click'); 282 break; 283 } 284 } 285 }); 286 } 287 288 // ÐÑкÑÑÑÑ lookup 289 function _popup() 290 { 291 if (_isDisabled()) 292 return; 293 294 $.ETC.FormModel.inPlaceEdit.freeze(field, true); 295 296 field.addClass('retrive'); 297 298 // пеÑедаем ÑпÑавление обÑабоÑÑÐ¸ÐºÑ popup 299 $.ETC.Popup({ url: popupUrl, callback: _popupCallback, nested: _inPopup }); 300 } 301 302 // обÑабаÑÑÑваем клик по popup - забиÑаем даннÑе в lookup 303 function _popupCallback(val) 304 { 305 if (val) 306 _setData(val); // ÑаÑкладÑваем даннÑе в Ð¿Ð¾Ð»Ñ 307 308 field.removeClass('retrive'); 309 field.focus(); 310 editvaluebox.focus(); 311 312 $.ETC.FormModel.inPlaceEdit.freeze(field, false); 313 } 314 315 //#endregion 316 317 //#region === Hints part === 318 319 if (jsonUrl && editvaluebox.length!=0) // У Ð½Ð°Ñ ÐµÑÑÑ Ð²Ñе нÑжное Ð´Ð»Ñ hintов 320 { 321 (function() 322 { 323 var TYPETIMEOUT = 500; // ÐадеÑжка (мÑ) поиÑка поÑле оконÑÐ°Ð½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð° полÑзоваÑелем. 324 var MAXHINTSHEIGHT = 300; // ÐакÑималÑÐ½Ð°Ñ Ð²ÑÑоÑа pupup блока, пÑи пÑивÑÑении коÑоÑого вклÑÑаеÑÑÑ Ð²ÐµÑÑикалÑнÑй ÑкÑоллинг. 325 var MINHINTSWIDTH = 100; 326 327 var findvalue = lastValue; // ТекÑÑее знаÑение ÑÑÑоки поиÑка 328 var waiting = false; // ÐндикаÑÐ¾Ñ Ñежима Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпиÑка 329 var requestid = 0; // ÐденÑиÑикаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑа 330 var tid = null; // ID ÑаймеÑа показа подÑказок, иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑбÑоÑа пÑи непÑеÑÑвном набоÑе ÑекÑÑа 331 var list = null; // ÐолÑÑеннÑй ÑпиÑок 332 var current = -1; // ÐÐ½Ð´ÐµÐºÑ Ð°ÐºÑивного ÑлеменÑа в ÑпиÑке list, нÑжен Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ ÐºÐ»Ð°Ð²Ð¸Ð°ÑÑÑÑ 333 334 // Hints ÑÐ»ÐµÐ¼ÐµÐ½Ñ 335 var hintsvisible = false; 336 var hintsdiv = $('<div class="hints" tabindex="0">'); 337 var itemsdiv = $('<div>'); 338 hintsdiv.append(itemsdiv); 339 editvaluebox.after(hintsdiv); 340 hintsdiv.on('focusin', function() { editvaluebox.focus(); }); 341 342 function _tryGetList() 343 { 344 clearTimeout(tid); 345 346 if (findvalue != editvaluebox.val()) 347 { 348 // ÐÑли знаÑение в поле поменÑлоÑÑ - запÑÑкаем поиÑк 349 findvalue = editvaluebox.val(); 350 editvaluebox.attr('class', 'noselected search'); 351 hintsdiv.addClass('retrive') 352 itemsdiv.html('ÐагÑÑжаÑ...'); 353 354 requestid++; 355 trace('Start retrive by "', findvalue, '", RID=', requestid, '...'); 356 waiting = true; // УÑÑанавливаем пÑизнак поиÑка 357 _setCurrent(-1); // СбÑаÑÑваем Ð¸Ð½Ð´ÐµÐºÑ Ð²Ñделенного ÑлеменÑа 358 list = null; 359 if (_loadData(jsonUrl, requestid, findvalue, _onretrive)) // ÐапÑÑкаем поиÑк и пеÑедаем ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка + ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑабоÑки полÑÑенного ÑпиÑка 360 _showHints();
361 } else if (list != null) 362 { 363 editvaluebox.attr('class', 'noselected'); 364 _showHints(); 365 } 366 } 367 368 // ФÑнкÑÐ¸Ñ Ð·Ð°Ð³ÑÑзки даннÑÑ ÑпиÑка по ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ URL 369 function _loadData(url, rid, v, onretrive) 370 { 371 $.ajax({ 372 url: url.replace(/(%7B|%7b|{)findvalue(%7D|%7d|})/g, encodeURIComponent(v)), 373 type: 'POST', 374 dataType: 'json', 375 cache: false, 376 async: true 377 }).done(function (json) 378 { 379 onretrive(rid, json); 380 }).fail(function (msg) 381 { 382 onretrive(rid, null, msg.responseText); 383 }); 384 385 return true; 386 } 387 388 // ÐоказаÑÑ Ð¿Ð¾Ð´Ñказки 389 function _showHints() 390 { 391 if (hintsvisible) return; 392 393 _closeActive(_cancel); 394 395 hintsvisible = true; 396 var w = field.outerWidth(); 397 w = w < MINHINTSWIDTH ? MINHINTSWIDTH : w; 398 hintsdiv 399 .css('width', w) 400 .slideDown('fast'); 401 } 402 403 // ÐбÑабоÑка полÑÑенного ÑпиÑка 404 function _onretrive(reqid, arr, error) 405 { 406 trace('onretrive(', reqid, '?=', requestid, ', arr, error)'); 407 if (!waiting) return; // ÐÑли внезапно оказалоÑÑ, ÑÑо ниÑего не ждем, Ñо валим оÑÑÑда 408 if (requestid != reqid) return; // ÐÑли пÑиÑел оÑÐ²ÐµÑ Ð½Ð° ÑÑÑаÑевÑий запÑÐ¾Ñ - валим оÑÑÑда 409 waiting = false; // ÑбÑаÑÑваем пÑизнак поиÑка 410 411 if (arr == null || arr.length == 0) // ÐÑиÑла пÑÑÑоÑа или бÑла оÑибка :( 412 { 413 list = null; 414 hintsdiv.attr('class', error ? 'hints error' : 'hints empty'); 415 itemsdiv.html($.Dm.Form.clearHtml(error || 'ÐиÑего не найдено')); // TODO: ÐÑжно оÑвÑзаÑÑ Ð¾Ñ $.Dm.Form 416 trace('Result is ', error || null); 417 } else // ÐÑиÑли даннÑе :) 418 { 419 list = arr; 420 hintsdiv.attr('class', 'hints scrolled'); 421 422 // Создаем HTML ÑпиÑка 423 var el, item, html = []; 424 for (var i = 0; i < list.length; i++) 425 { 426 item = list[i]; 427 if (item.text == null && item.DisplayText != null) 428 item.text = item.DisplayText; 429 430 html.push('<div data-index="', i, '" class="hint">', item.html || item.text, '</div>'); 431 } 432 433 // ÐоказÑваем HTML 434 itemsdiv.html(html.join('')); 435 436 // ÐоказÑваем подÑказки, инаÑе не ÑаÑÑÑиÑаеÑÑÑ Ð²ÑÑоÑа 437 _showHints(); 438 // СмоÑÑим на ÑÐ°Ð·Ð¼ÐµÑ ÑпиÑка и еÑли он огÑомнÑй, Ñо вклÑÑаем ÑкÑолл 439 var h = itemsdiv.outerHeight(); 440 trace('Founded ', list.length, ' elements, h = ', h, ' <= ', MAXHINTSHEIGHT); 441 if (h <= MAXHINTSHEIGHT) 442 hintsdiv.removeClass('scrolled'); 443 } 444 445 editvaluebox.attr('class', 'noselected'); // СÑÐ¸Ð»Ñ - не вÑбÑано знаÑение 446 _setCurrent(findvalue && !freeValue ? 0 : -1); // ÐÑÑаем на пеÑвÑй ÑлеменÑ, еÑли ÑÑо-Ñо иÑкали 447 if (findvalue != editvaluebox.val()) // ÐÑли пока Ð¼Ñ Ð¿Ð¾Ð»ÑÑали даннÑе Ñ Ð½Ð°Ñ ÑÑо-Ñо ввели, Ñо запÑÑкаем пÑоÑеÑÑ Ñ Ð½Ð°Ñала 448 { 449 trace('schedule hints by onretrive...'); 450 clearTimeout(tid); 451 tid = setTimeout(_tryGetList, TYPETIMEOUT); 452 } 453 } 454 455 // УÑÑановиÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð° ÑказаннÑй 456 function _setCurrent(c) 457 { 458 var kids = itemsdiv.children(); 459 var nc = (list ? (c < kids.length ? c : -1) : -1); 460 if (nc == current) 461 return; 462 463 if (0 <= current && current < kids.length) 464 $(kids[current]).attr('class', 'hint'); 465 466 current = nc; 467 if (0 <= current && current < kids.length) 468 { 469 var cur = $(kids[current]); 470 cur.attr('class', 'hint selected'); 471 if (hintsdiv.hasClass('scrolled')) 472 { 473 var curscr = hintsdiv.scrollTop(); 474 var pos = (cur.position().top + curscr); 475 hintsdiv.scrollTop(pos); 476 } 477 } 478 } 479 480 function _newFreeValue() 481 { 482 var res = {}; 483 res[freeValue] = editvaluebox.val(); 484 return res; 485 } 486 487 _cancel = function(closeonly) 488 { 489 if (!hintsvisible) return; 490 491 hintsvisible = false; 492 hintsdiv.fadeOut('fast'); 493 waiting = false; 494 clearTimeout(tid); 495 496 editvaluebox.attr('class', 'selected'); 497 498 if (closeonly!==true) 499 { 500 if (freeValue) 501 { 502 _setData(_newFreeValue()); 503 } else 504 { 505 editvaluebox.val(lastValue); 506 findvalue = lastValue; 507 } 508 } 509 _setCurrent(-1); 510 }; 511 512 // ÐбÑабоÑÑик клика на ÑлеменÑе в ÑпиÑке 513 hintsdiv.click(function (e) 514 { 515 e.preventDefault(); 516 e.stopPropagation(); 517 var el = $(e.target); 518 var item = el.closest('.hint'); 519 var index = item.data('index'); 520 trace('Index = ', index); 521 if (index != null) 522 { 523 _setData(list[index]); 524 _cancel(true); 525 } 526 return false; 527 }); 528 529 // ÐбÑабоÑÑики кнопок 530 editvaluebox 531 .keyup(function(e) 532 { 533 clearTimeout(tid); 534 535 switch (e.keyCode) 536 { 537 case 9: // Tab - ÐÑÑ Ð¾Ð´Ð¸Ð¼ из Ð¿Ð¾Ð»Ñ Ð¸ Ñ Ð½Ð°Ñ Ð»Ð¸Ð±Ð¾ не законÑили ввод, либо законÑили и поÑли далÑÑе 538 if (list != null && current >= 0 && current < list.length) 539 _setData(list[current]); 540 else if (editvaluebox.val()=='') 541 _setData(); 542 else if (freeValue) 543 _setData(_newFreeValue()); 544 545 _cancel(); 546 break; 547 case 27: // Esc - веÑнÑÑÑ Ð¿ÑедÑдÑÑее введенное знаÑение 548 _cancel(); 549 return false; 550 case 38: // ввеÑÑ 551 if (list != null && current > 0) 552 _setCurrent(current - 1); 553 554 return false; 555 case 40: // вниз 556 if (list != null && current < list.length - 1) 557 _setCurrent(current + 1); 558 559 return false; 560 case 13: // Enter - ÑекÑÑий акÑивнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑÑановиÑÑÑ Ð·Ð½Ð°Ñением 561 if (list != null && current >= 0 && current < list.length) 562 { 563 _setData(list[current]); 564 editvaluebox.focus(); 565 } else if (editvaluebox.val()=='') 566 _setData(); 567 else if (freeValue) 568 _setData(_newFreeValue()); 569 570 if (hintsvisible) 571 { 572 e.stopPropagation(); 573 _cancel(); 574 return false; 575 } else 576 return true; 577 default: 578 trace('schedule hints by keyup...'); 579 clearTimeout(tid); 580 tid = setTimeout(_tryGetList, TYPETIMEOUT); 581 } 582 }) 583 .attr('class', 'selected'); 584 585 trace('DmLookup2.hints for ', field[0].outerHTML, ' created'); 586 })(); 587 } 588 589 //#endregion 590 591 // УÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ Ð² url 592 // ТÐÐЬÐÐ ÐÐЯ СÐÐÐÐСТÐÐÐСТР- УÐÐÐÐТЬ Ð ÐСÐÐÐЬÐÐÐÐТЬ ÐТÐÐÐЬÐЫРÐÐЪÐÐТ ÐÐЯ URL 593 this.setUrlParam = function(param) 594 { 595 popupUrl = _setParam(popupUrl, param); 596 field.data('url', popupUrl); 597 }; 598 599 this.setJsonUrlParam = function (param) 600 { 601 jsonUrl = _setParam(jsonUrl, param); 602 field.data('json-url', jsonUrl); 603 }; 604 605 function _setParam(url, param) 606 { 607 url = url.split('?'); 608 var params = url.length > 1 ? url[1].split('&') : []; 609 var n = param.n + '='; 610 var nl = n.length; 611 612 //поиÑк по паÑамеÑÑам наÑего 613 for (var i = 0; i < params.length; i++) 614 { 615 if (params[i].substr(0, nl)===n) 616 { 617 params[i] = n + encodeURIComponent(param.v); 618 i = -1; 619 break; 620 } 621 } 622 623 // еÑли ÑÑо Ñаки новÑй паÑамеÑÑ, Ñо добавлÑем его в ÐºÐ¾Ð½ÐµÑ 624 if (i!==-1) 625 params.push(n + encodeURIComponent(param.v)); 626 627 //ÑобиÑаем опÑÑÑ url 628 return url[0]+'?'+params.join('&'); 629 } 630 } 631})(jQuery); 632 633// ТÐÐЬÐÐ ÐÐЯ СÐÐÐÐСТÐÐÐСТР- УÐÐÐÐТЬ Ð ÐСÐÐÐЬÐÐÐÐТЬ $(...).DmLookup2({ clear: null, enable: true|false ... }) 634var Lookup = function(prefix) 635{ 636 var el = $('#' + prefix); 637 this.key = $("#" + prefix + "_Key");//TODO вÑеменное Ð´Ð»Ñ ÑовмеÑÑимоÑÑи 638 639 // ÐÑиÑÑиÑÑ ÑодеÑжимое 640 this.clear = function() { el.DmLookup2({ clear: null }); }; 641 642 // ÐкÑивиÑоваÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ 643 this.enable = function(en) { el.DmLookup2({ enable: en }); }; 644 645 // readonly 646 this.readonly = function(en) { el.DmLookup2({ readonly: en }); }; 647 648 // ÐзмениÑÑ url Ð´Ð»Ñ lookup 649 this.changeLookupUrl = function(url) { el.DmLookup2({ setUrl: url }); }; 650 651 // ÐобавиÑÑ Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ ÑаÑкладки 652 this.addLookupTarget = function(key, id) { var t = {}; t[key] = id; el.DmLookup2({ addTargets: t }); }; 653 654 // УÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ Ð² url 655 this.setUrlQueryParam = function(pn, pv) { el.DmLookup2({ setUrlParam: { n: pn, v: pv } }); }; 656}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.