- /**
- * MessageWindow Procedure
- * author: stash (for agroimpuls/openway way4-wb2 frontend-workaround)
- * created: 14 april 2009 16:00 - 17:00
- **/
- function /*queue element*/TAG_MESSAGE_QUEUE_ITEM(/* link to executable function */func_body,/* [delay]x[multiplier]=[delay] in ms before exec action */timeMultiplier,/* name of trigger to find him by string id and kill*/trig_name,/* number of execs before kill this trigger, can be undefined/null or zero if you don't want kill him */whenToDelete) {
- this.func = func_body;
- this.multiplier = timeMultiplier;
- this.counter = 0;
- this.trigger_name = trig_name;
- this.delAfterCountExecs = whenToDelete;
- this.nExecs = 0;
- this.exec = function() { // executing action
- if (++this.counter == this.multiplier) {
- this.counter = 0;
- this.func();
- this.nExecs++;
- if (typeof(this.delAfterCountExecs)!='undefined' &&
- this.delAfterCountExecs!=null &&
- this.nExecs == this.delAfterCountExecs)
- this.canDel = true;
- }
- }
- this.canDel = false;
- this.needRemove = function() {
- return this.canDel;
- }
- }
- WINDOW_PROC_MESSAGES /*message procedure wrapper*/ = {
- /*minimal interval unit*/delay: 100/*ms*/,
- processException: function(execption_object) {
- if (typeof(report)!='undefined')
- report(execption_object.message,C_EXCEPTION)
- else
- alert(execption_object.message);
- },
- window_proc: function() { // processing message queue
- for (var i=0; i<WINDOW_PROC_MESSAGES.triggers.length; i++)
- WINDOW_PROC_MESSAGES.exec(i);
- setTimeout(WINDOW_PROC_MESSAGES.window_proc, 100); // self call
- },
- WINDOW_PROC:/* alias for window_proc*/ function() { WINDOW_PROC_MESSAGES.window_proc(); },
- runned: false,
- add: function(func, multiplier, t_name, del_after_exec_counts) {
- WINDOW_PROC_MESSAGES.triggers[this.triggers.length] = new TAG_MESSAGE_QUEUE_ITEM(func, multiplier, t_name, del_after_exec_counts);
- if (!WINDOW_PROC_MESSAGES.runned) {
- WINDOW_PROC_MESSAGES.runned = true;
- WINDOW_PROC_MESSAGES.window_proc();
- }
- },
- remove: function(trigger_num_or_val) {
- if (typeof(trigger_num_or_val)=='number')
- WINDOW_PROC_MESSAGES.triggers.splice(trigger_num_or_val,1);
- else {
- for (var j=0; j<WINDOW_PROC_MESSAGES.triggers.length; j++) {
- if (typeof(WINDOW_PROC_MESSAGES.triggers[j].trigger_name)!='undefined' &&
- WINDOW_PROC_MESSAGES.triggers[j].trigger_name!=null &&
- WINDOW_PROC_MESSAGES.triggers[j].trigger_name == trigger_num_or_val)
- WINDOW_PROC_MESSAGES.triggers.splice(j,1);
- }
- }
- },
- exec: function(nTrigger) {
- try { WINDOW_PROC_MESSAGES.triggers[nTrigger].exec(); }
- catch(e_obj) { WINDOW_PROC_MESSAGES.processException(e_obj); }
- if (WINDOW_PROC_MESSAGES.triggers[nTrigger].needRemove())
- WINDOW_PROC_MESSAGES.triggers.splice(nTrigger,1);
- },
- triggers: new Array()
- }
- //var wpm/* just alias*/=/*link to */WINDOW_PROC_MESSAGES;
- /** Window Message Procedure. **
- * I don't use there "this" pointer/link cause sometimes we have troubles
- * with visibility scope of variables (for examplr when method called from ajax-response procedure)
- ************************************************************************************************/
* This source code was highlighted with Source Code Highlighter.
суббота, 16 мая 2009 г.
javascript: "оконная" процедура обработки очереди сообщений (действий)
Сегодня, по-быстрому, написал объект, схожий с "оконной процедурой" на JavaScript, в частности для валидации формы в процессе набора текста. Я прекрасно знаю о различных фреймворках (frameworks) наподобие JQuery с кучей плагинов для решения подобного рода задач. Но в данном случае мне просто нужен был аналог setTimeout(checkFields, 900), но таким образом, чтобы выполнялась очередь подобных вызовов (схоже с оконной процедурой при программировании на WinApi). Собст-на единственной проблемой оказалось как раскрасить javscript-код:
Подписаться на:
Комментарии к сообщению (Atom)

0 коммент.:
Отправить комментарий