001: /*
002: ItsNat Java Web Application Framework
003: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
004: Author: Jose Maria Arranz Santamaria
005:
006: This program is free software: you can redistribute it and/or modify
007: it under the terms of the GNU Affero General Public License as published by
008: the Free Software Foundation, either version 3 of the License, or
009: (at your option) any later version. See the GNU Affero General Public
010: License for more details. See the copy of the GNU Affero General Public License
011: included in this program. If not, see <http://www.gnu.org/licenses/>.
012: */
013:
014: package org.itsnat.impl.core.js.listener;
015:
016: import org.itsnat.core.ItsNatDOMException;
017: import org.itsnat.impl.core.ItsNatDocumentImpl;
018: import org.itsnat.impl.core.NodeLocation;
019: import org.itsnat.impl.core.listener.EventListenerWrapperImpl;
020: import org.itsnat.impl.core.listener.dom.DOMEventListenerWrapperImpl;
021: import org.itsnat.impl.core.event.client2serv.dom.DOMEventTypeInfo;
022: import org.itsnat.impl.core.domutil.ItsNatDOMUtilInternal;
023: import org.w3c.dom.Node;
024: import org.w3c.dom.events.EventTarget;
025:
026: /**
027: *
028: * @author jmarranz
029: */
030: public class DOMEventListenerJSRenderImpl extends
031: DOMBasedEventListenerJSRenderImpl {
032: public static final DOMEventListenerJSRenderImpl SINGLETON = new DOMEventListenerJSRenderImpl();
033:
034: /** Creates a new instance of DOMEventListenerJSRenderImpl */
035: public DOMEventListenerJSRenderImpl() {
036: }
037:
038: private static void addDOMEventListenerCode(
039: DOMEventListenerWrapperImpl itsNatListener) {
040: ItsNatDocumentImpl itsNatDoc = itsNatListener
041: .getItsNatDocument();
042:
043: String listenerId = itsNatListener.getId();
044: EventTarget nodeTarget = itsNatListener.getEventTarget();
045: NodeLocation nodeLoc = itsNatDoc
046: .getNodeLocation((Node) nodeTarget);
047:
048: String type = itsNatListener.getType();
049: int eventTypeCode = DOMEventTypeInfo.getEventTypeCode(type);
050: boolean useCapture = itsNatListener.getUseCapture();
051: int syncMode = itsNatListener.getSyncMode();
052: long ajaxTimeout = itsNatListener.getAJAXTimeout();
053:
054: StringBuffer code = new StringBuffer();
055:
056: String preSendCode = getPreSendCode(itsNatListener);
057:
058: code.append("\n");
059: code.append("var listener = \n");
060: code.append("function (evt) \n");
061: code.append("{ \n");
062:
063: if (needInheritance(preSendCode)) {
064: code.append(" function ItsNatEvtExec() \n");
065: code.append(" { \n");
066: code.append(" this.DOMEvent = itsnat.DOMEvent; \n");
067: code.append(" this.DOMEvent(evt," + eventTypeCode
068: + ",\"" + listenerId + "\",itsNatDoc); \n");
069: code.append(preSendCode);
070: code.append(" } \n");
071: code.append(" new ItsNatEvtExec().sendEvent(); \n");
072: } else {
073: code.append(" var exec = new itsnat.DOMEvent(evt,"
074: + eventTypeCode + ",\"" + listenerId
075: + "\",itsNatDoc); \n");
076: code.append(" exec.sendEvent(); \n");
077: }
078:
079: code.append("} \n");
080: code.append("\n");
081: code.append("itsNatDoc.addDOMEventListener("
082: + nodeLoc.getParentIdJS() + "," + nodeLoc.getIdJS()
083: + "," + nodeLoc.getPathJS() + ",\"" + type + "\",\""
084: + listenerId + "\",listener," + useCapture + ","
085: + syncMode + "," + ajaxTimeout + "); \n");
086:
087: addCodeToSend(code.toString(), nodeLoc, itsNatDoc);
088: }
089:
090: private static void removeDOMEventListenerCode(
091: DOMEventListenerWrapperImpl itsNatListener) {
092: ItsNatDocumentImpl itsNatDoc = itsNatListener
093: .getItsNatDocument();
094:
095: String listenerId = itsNatListener.getId();
096:
097: StringBuffer code = new StringBuffer();
098: code.append("\n");
099: code.append("itsNatDoc.removeDOMEventListener(\"" + listenerId
100: + "\"); \n");
101:
102: addCodeToSend(code.toString(), null, itsNatDoc);
103: }
104:
105: protected void addEventListenerCodeInherit(
106: EventListenerWrapperImpl itsNatListener) {
107: addDOMEventListenerCode((DOMEventListenerWrapperImpl) itsNatListener);
108: }
109:
110: protected void removeEventListenerCodeInherit(
111: EventListenerWrapperImpl itsNatListener) {
112: removeDOMEventListenerCode((DOMEventListenerWrapperImpl) itsNatListener);
113: }
114: }
|