Artifact 25a3e0bf1556575ca61e4c02d783720f8ea4cc74:
- File Libs/TextChangesWatcher.js — part of check-in [8ae2ced95b] at 2013-07-20 11:10:03 on branch trunk — mdNavigator: добавленна возможность поиска метаданных по первым буквам в верхнем регистре. Например ПКО будет искать ПриходноКассовыйОрдер (user: sosnae size: 3867) [more...]
$engine JScript $uname TextChangesWatcher $dname Класс TextChangesWatcher $addin stdlib $addin vbs //////////////////////////////////////////////////////////////////////////////////////// ////{ TextChangesWatcher (Александр Орефков) //// // Класс для отслеживания изменения текста в поле ввода, для замены // события АвтоПодборТекста. Штатное событие плохо тем, что не возникает // - при установке пустого текста // - при изменении текста путем вставки/вырезания из/в буфера обмена // - при отмене редактирования (Ctrl+Z) // не позволяет регулировать задержку // Параметры конструктора // field - элемент управления поле ввода, чье изменение хотим отслеживать // ticks - величина задержки после ввода текста в десятых секунды (т.е. 3 - 300 мсек) // invoker - функция обратного вызова, вызывается после окончания изменения текста, // новый текст передается параметром функции //// ////} TextChangesWatcher //////////////////////////////////////////////////////////////////////////////////////// TextChangesWatcher = stdlib.Class.extend({ construct: function (field, ticks, invoker, toLowerCase) { this.ticks = ticks this.invoker = invoker this.field = field if (toLowerCase==undefined) toLowerCase = true this.toLowerCase = toLowerCase; }, // Начать отслеживание изменения текста start: function() { this.lastText = this.field.Значение.replace(/^\s*|\s*$/g, '') if (this.toLowerCase){ this.lastText = this.lastText.toLowerCase(); } this.noChangesTicks = this.ticks + 1 this.timerID = createTimer(100, this, "onTimer") }, // Остановить отслеживание изменения текста stop: function() { killTimer(this.timerID) }, // Обработчик события таймера onTimer: function() { // Получим текущий текст из поля ввода vbs.var0 = this.field vbs.DoExecute("var0.GetTextSelectionBounds var1, var2, var3, var4") this.field.УстановитьГраницыВыделения(1, 1, 1, 10000) var newText = this.field.ВыделенныйТекст.replace(/^\s*|\s*$/g, ''); if (this.toLowerCase){ newText = newText.toLowerCase() } this.field.УстановитьГраницыВыделения(vbs.var1, vbs.var2, vbs.var3, vbs.var4) // Проверим, изменился ли текст по сравению с прошлым разом if(newText != this.lastText) { // изменился, запомним его this.lastText = newText this.noChangesTicks = 0 } else { // Текст не изменился. Если мы еще не сигнализировали об этом, то увеличим счетчик тиков if(this.noChangesTicks <= this.ticks) { if(++this.noChangesTicks > this.ticks) // Достигли заданного количества тиков. this.invoker(newText) // Отрапортуем } } } });