Lines Matching full:this

15 // that's independent of the data source for autocompletion. This
21 // the text inside the monitored textbox changes. This method
23 // invoking this.getToken(), NOT by directly accessing
24 // this.element.value. This is to allow incremental tokenized
35 // enables autocompletion on multiple tokens. This is most
46 this.element = element;
47 this.update = $(update);
48 this.hasFocus = false;
49 this.changed = false;
50 this.active = false;
51 this.index = 0;
52 this.entryCount = 0;
53 this.oldElementValue = this.element.value;
55 if(this.setOptions)
56 this.setOptions(options);
58 this.options = options || { };
60 this.options.paramName = this.options.paramName || this.element.name;
61 this.options.tokens = this.options.tokens || [];
62 this.options.frequency = this.options.frequency || 0.4;
63 this.options.minChars = this.options.minChars || 1;
64 this.options.onShow = this.options.onShow ||
75 this.options.onHide = this.options.onHide ||
78 if(typeof(this.options.tokens) == 'string')
79 this.options.tokens = new Array(this.options.tokens);
81 if (!this.options.tokens.include('\n'))
82 this.options.tokens.push('\n');
84 this.observer = null;
86 this.element.setAttribute('autocomplete','off');
88 Element.hide(this.update);
90 Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
91 Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
95 …if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update…
96 if(!this.iefix &&
98 (Element.getStyle(this.update, 'position')=='absolute')) {
99 new Insertion.After(this.update,
100 '<iframe id="' + this.update.id + '_iefix" '+
103 this.iefix = $(this.update.id+'_iefix');
105 if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
109 Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
110 this.iefix.style.zIndex = 1;
111 this.update.style.zIndex = 2;
112 Element.show(this.iefix);
116 this.stopIndicator();
117 …if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update…
118 if(this.iefix) Element.hide(this.iefix);
122 if(this.options.indicator) Element.show(this.options.indicator);
126 if(this.options.indicator) Element.hide(this.options.indicator);
130 if(this.active)
134 this.selectEntry();
137 this.hide();
138 this.active = false;
145 this.markPrevious();
146 this.render();
150 this.markNext();
151 this.render();
159 this.changed = true;
160 this.hasFocus = true;
162 if(this.observer) clearTimeout(this.observer);
163 this.observer =
164 setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
168 this.changed = false;
169 this.hasFocus = true;
170 this.getUpdatedChoices();
175 if(this.index != element.autocompleteIndex)
177 this.index = element.autocompleteIndex;
178 this.render();
185 this.index = element.autocompleteIndex;
186 this.selectEntry();
187 this.hide();
192 setTimeout(this.hide.bind(this), 250);
193 this.hasFocus = false;
194 this.active = false;
198 if(this.entryCount > 0) {
199 for (var i = 0; i < this.entryCount; i++)
200 this.index==i ?
201 Element.addClassName(this.getEntry(i),"selected") :
202 Element.removeClassName(this.getEntry(i),"selected");
203 if(this.hasFocus) {
204 this.show();
205 this.active = true;
208 this.active = false;
209 this.hide();
214 if(this.index > 0) this.index--;
215 else this.index = this.entryCount-1;
216 this.getEntry(this.index).scrollIntoView(true);
220 if(this.index < this.entryCount-1) this.index++;
221 else this.index = 0;
222 this.getEntry(this.index).scrollIntoView(false);
226 return this.update.firstChild.childNodes[index];
230 return this.getEntry(this.index);
234 this.active = false;
235 this.updateElement(this.getCurrentEntry());
239 if (this.options.updateElement) {
240 this.options.updateElement(selectedElement);
244 if (this.options.select) {
245 var nodes = $(selectedElement).select('.' + this.options.select) || [];
246 if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
250 var bounds = this.getTokenBounds();
252 var newValue = this.element.value.substr(0, bounds[0]);
253 var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
256 this.element.value = newValue + value + this.element.value.substr(bounds[1]);
258 this.element.value = value;
260 this.oldElementValue = this.element.value;
261 this.element.focus();
263 if (this.options.afterUpdateElement)
264 this.options.afterUpdateElement(this.element, selectedElement);
268 if(!this.changed && this.hasFocus) {
269 this.update.innerHTML = choices;
270 Element.cleanWhitespace(this.update);
271 Element.cleanWhitespace(this.update.down());
273 if(this.update.firstChild && this.update.down().childNodes) {
274 this.entryCount =
275 this.update.down().childNodes.length;
276 for (var i = 0; i < this.entryCount; i++) {
277 var entry = this.getEntry(i);
279 this.addObservers(entry);
282 this.entryCount = 0;
285 this.stopIndicator();
286 this.index = 0;
288 if(this.entryCount==1 && this.options.autoSelect) {
289 this.selectEntry();
290 this.hide();
292 this.render();
298 Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
299 Event.observe(element, "click", this.onClick.bindAsEventListener(this));
303 this.changed = false;
304 this.tokenBounds = null;
305 if(this.getToken().length>=this.options.minChars) {
306 this.getUpdatedChoices();
308 this.active = false;
309 this.hide();
311 this.oldElementValue = this.element.value;
315 var bounds = this.getTokenBounds();
316 return this.element.value.substring(bounds[0], bounds[1]).strip();
320 if (null != this.tokenBounds) return this.tokenBounds;
321 var value = this.element.value;
323 var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
324 var offset = (diff == this.oldElementValue.length ? 1 : 0);
327 for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
328 tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
330 tp = value.indexOf(this.options.tokens[index], diff + offset);
333 return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
347 this.baseInitialize(element, update, options);
348 this.options.asynchronous = true;
349 this.options.onComplete = this.onComplete.bind(this);
350 this.options.defaultParams = this.options.parameters || null;
351 this.url = url;
355 this.startIndicator();
357 var entry = encodeURIComponent(this.options.paramName) + '=' +
358 encodeURIComponent(this.getToken());
360 this.options.parameters = this.options.callback ?
361 this.options.callback(this.element, entry) : entry;
363 if(this.options.defaultParams)
364 this.options.parameters += '&' + this.options.defaultParams;
366 new Ajax.Request(this.url, this.options);
370 this.updateChoices(request.responseText);
411 this.baseInitialize(element, update, options);
412 this.options.array = array;
416 this.updateChoices(this.options.selector(this));
420 this.options = Object.extend({
472 // Use this if you notice weird scrolling problems on some browsers,
473 // the DOM might be a bit confused when this gets called so do this
483 this.url = url;
484 this.element = element = $(element);
485 this.prepareOptions();
486 this._controls = { };
488 Object.extend(this.options, options || { });
489 if (!this.options.formId && this.element.id) {
490 this.options.formId = this.element.id + '-inplaceeditor';
491 if ($(this.options.formId))
492 this.options.formId = '';
494 if (this.options.externalControl)
495 this.options.externalControl = $(this.options.externalControl);
496 if (!this.options.externalControl)
497 this.options.externalControlOnly = false;
498 this._originalBackground = this.element.getStyle('background-color') || 'transparent';
499 this.element.title = this.options.clickToEditText;
500 this._boundCancelHandler = this.handleFormCancellation.bind(this);
501 this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
502 this._boundFailureHandler = this.handleAJAXFailure.bind(this);
503 this._boundSubmitHandler = this.handleFormSubmission.bind(this);
504 this._boundWrapperHandler = this.wrapUp.bind(this);
505 this.registerListeners();
508 if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
510 this.handleFormCancellation(e);
512 this.handleFormSubmission(e);
515 var control = this.options[mode + 'Control'];
516 var text = this.options[mode + 'Text'];
523 btn.onclick = this._boundCancelHandler;
524 this._form.appendChild(btn);
525 this._controls[mode] = btn;
530 link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
534 this._form.appendChild(link);
535 this._controls[mode] = link;
539 var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
541 if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
544 var size = this.options.size || this.options.cols || 0;
548 fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
549 fld.cols = this.options.cols || 40;
551 fld.name = this.options.paramName;
554 if (this.options.submitOnBlur)
555 fld.onblur = this._boundSubmitHandler;
556 this._controls.editor = fld;
557 if (this.options.loadTextURL)
558 this.loadExternalText();
559 this._form.appendChild(this._controls.editor);
562 var ipe = this;
568 this._form = $(document.createElement('form'));
569 this._form.id = this.options.formId;
570 this._form.addClassName(this.options.formClassName);
571 this._form.onsubmit = this._boundSubmitHandler;
572 this.createEditField();
573 if ('textarea' == this._controls.editor.tagName.toLowerCase())
574 this._form.appendChild(document.createElement('br'));
575 if (this.options.onFormCustomization)
576 this.options.onFormCustomization(this, this._form);
577 addText('Before', this.options.okControl || this.options.cancelControl);
578 this.createControl('ok', this._boundSubmitHandler);
579 addText('Between', this.options.okControl && this.options.cancelControl);
580 this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
581 addText('After', this.options.okControl || this.options.cancelControl);
584 if (this._oldInnerHTML)
585 this.element.innerHTML = this._oldInnerHTML;
586 this.leaveEditMode();
587 this.unregisterListeners();
590 if (this._saving || this._editing) return;
591 this._editing = true;
592 this.triggerCallback('onEnterEditMode');
593 if (this.options.externalControl)
594 this.options.externalControl.hide();
595 this.element.hide();
596 this.createForm();
597 this.element.parentNode.insertBefore(this._form, this.element);
598 if (!this.options.loadTextURL)
599 this.postProcessEditField();
603 if (this.options.hoverClassName)
604 this.element.addClassName(this.options.hoverClassName);
605 if (this._saving) return;
606 this.triggerCallback('onEnterHover');
609 return this.element.innerHTML.unescapeHTML();
612 this.triggerCallback('onFailure', transport);
613 if (this._oldInnerHTML) {
614 this.element.innerHTML = this._oldInnerHTML;
615 this._oldInnerHTML = null;
619 this.wrapUp();
623 var form = this._form;
624 var value = $F(this._controls.editor);
625 this.prepareSubmission();
626 var params = this.options.callback(form, value) || '';
629 params.editorId = this.element.id;
630 if (this.options.htmlResponse) {
631 var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
634 onComplete: this._boundWrapperHandler,
635 onFailure: this._boundFailureHandler
637 new Ajax.Updater({ success: this.element }, this.url, options);
639 var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
642 onComplete: this._boundWrapperHandler,
643 onFailure: this._boundFailureHandler
645 new Ajax.Request(this.url, options);
650 this.element.removeClassName(this.options.savingClassName);
651 this.removeForm();
652 this.leaveHover();
653 this.element.style.backgroundColor = this._originalBackground;
654 this.element.show();
655 if (this.options.externalControl)
656 this.options.externalControl.show();
657 this._saving = false;
658 this._editing = false;
659 this._oldInnerHTML = null;
660 this.triggerCallback('onLeaveEditMode');
663 if (this.options.hoverClassName)
664 this.element.removeClassName(this.options.hoverClassName);
665 if (this._saving) return;
666 this.triggerCallback('onLeaveHover');
669 this._form.addClassName(this.options.loadingClassName);
670 this._controls.editor.disabled = true;
671 var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
673 parameters: 'editorId=' + encodeURIComponent(this.element.id),
676 this._form.removeClassName(this.options.loadingClassName);
678 if (this.options.stripLoadedTextTags)
680 this._controls.editor.value = text;
681 this._controls.editor.disabled = false;
682 this.postProcessEditField();
683 }.bind(this),
684 onFailure: this._boundFailureHandler
686 new Ajax.Request(this.options.loadTextURL, options);
689 var fpc = this.options.fieldPostCreation;
691 $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
694 this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
695 Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
696 [this._extraDefaultOptions].flatten().compact().each(function(defs) {
697 Object.extend(this.options, defs);
698 }.bind(this));
701 this._saving = true;
702 this.removeForm();
703 this.leaveHover();
704 this.showSaving();
707 this._listeners = { };
710 listener = this[pair.value].bind(this);
711 this._listeners[pair.key] = listener;
712 if (!this.options.externalControlOnly)
713 this.element.observe(pair.key, listener);
714 if (this.options.externalControl)
715 this.options.externalControl.observe(pair.key, listener);
716 }.bind(this));
719 if (!this._form) return;
720 this._form.remove();
721 this._form = null;
722 this._controls = { };
725 this._oldInnerHTML = this.element.innerHTML;
726 this.element.innerHTML = this.options.savingText;
727 this.element.addClassName(this.options.savingClassName);
728 this.element.style.backgroundColor = this._originalBackground;
729 this.element.show();
732 if ('function' == typeof this.options[cbName]) {
733 this.options[cbName](this, arg);
737 $H(this._listeners).each(function(pair) {
738 if (!this.options.externalControlOnly)
739 this.element.stopObserving(pair.key, pair.value);
740 if (this.options.externalControl)
741 this.options.externalControl.stopObserving(pair.key, pair.value);
742 }.bind(this));
745 this.leaveEditMode();
748 this._boundComplete(transport, this.element);
758 this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
764 list.name = this.options.paramName;
766 this._controls.editor = list;
767 this._collection = this.options.collection || [];
768 if (this.options.loadCollectionURL)
769 this.loadCollection();
771 this.checkForExternalText();
772 this._form.appendChild(this._controls.editor);
776 this._form.addClassName(this.options.loadingClassName);
777 this.showLoadingText(this.options.loadingCollectionText);
778 var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
780 parameters: 'editorId=' + encodeURIComponent(this.element.id),
786 this._collection = eval(js);
787 this.checkForExternalText();
788 }.bind(this),
789 onFailure: this.onFailure
791 new Ajax.Request(this.options.loadCollectionURL, options);
795 this._controls.editor.disabled = true;
796 var tempOption = this._controls.editor.firstChild;
800 this._controls.editor.appendChild(tempOption);
807 this._text = this.getText();
808 if (this.options.loadTextURL)
809 this.loadExternalText();
811 this.buildOptionList();
815 this.showLoadingText(this.options.loadingText);
816 var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
818 parameters: 'editorId=' + encodeURIComponent(this.element.id),
821 this._text = transport.responseText.strip();
822 this.buildOptionList();
823 }.bind(this),
824 onFailure: this.onFailure
826 new Ajax.Request(this.options.loadTextURL, options);
830 this._form.removeClassName(this.options.loadingClassName);
831 this._collection = this._collection.map(function(entry) {
834 var marker = ('value' in this.options) ? this.options.value : this._text;
835 var textFound = this._collection.any(function(entry) {
837 }.bind(this));
838 this._controls.editor.update('');
840 this._collection.each(function(entry, index) {
845 this._controls.editor.appendChild(option);
846 }.bind(this));
847 this._controls.editor.disabled = false;
848 Field.scrollFreeActivate(this._controls.editor);
853 //**** This only exists for a while, in order to let ****
907 // For backward compatibility, this one is bound to the IPE, and passes
910 startcolor: this.options.highlightColor, keepBackgroundImage: true });
948 this.delay = delay || 0.5;
949 this.element = $(element);
950 this.callback = callback;
951 this.timer = null;
952 this.lastValue = $F(this.element);
953 Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
956 if(this.lastValue == $F(this.element)) return;
957 if(this.timer) clearTimeout(this.timer);
958 this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
959 this.lastValue = $F(this.element);
962 this.timer = null;
963 this.callback(this.element, $F(this.element));