void WMLTimerElement::timerFired(Timer<WMLTimerElement>*) { if (!m_card) return; WMLPageState* pageState = wmlPageStateForDocument(document()); if (!pageState) return; String value = this->value(); // When the timer expires, set the name varialbe of timer to '0' if (!m_name.isEmpty()) { value = "0"; pageState->storeVariable(m_name, value); } WMLIntrinsicEventType eventType = WMLIntrinsicEventOnTimer; WMLIntrinsicEventHandler* eventHandler = m_card->eventHandler(); bool hasIntrinsicEvent = false; if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; else if (m_card->templateElement()) { eventHandler = m_card->templateElement()->eventHandler(); if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; } if (hasIntrinsicEvent) eventHandler->triggerIntrinsicEvent(eventType); }
void WMLOptionElement::handleIntrinsicEventIfNeeded() { WMLSelectElement* select = ownerSelectElement(this); if (!select || !select->initialized()) return; WMLIntrinsicEventHandler* eventHandler = this->eventHandler(); if (!eventHandler) return; if (eventHandler->hasIntrinsicEvent(WMLIntrinsicEventOnPick)) eventHandler->triggerIntrinsicEvent(WMLIntrinsicEventOnPick); }
void WMLCardElement::handleIntrinsicEventIfNeeded() { WMLPageState* pageState = wmlPageStateForDocument(document()); if (!pageState) return; Frame* frame = document()->frame(); if (!frame) return; FrameLoader* loader = frame->loader(); if (!loader) return; // Calculate the entry method of current card WMLIntrinsicEventType eventType = WMLIntrinsicEventUnknown; switch (loader->policyChecker()->loadType()) { case FrameLoadTypeReload: break; case FrameLoadTypeBack: eventType = WMLIntrinsicEventOnEnterBackward; break; case FrameLoadTypeBackWMLDeckNotAccessible: reportWMLError(document(), WMLErrorDeckNotAccessible); return; default: eventType = WMLIntrinsicEventOnEnterForward; break; } // Figure out target event handler WMLIntrinsicEventHandler* eventHandler = this->eventHandler(); bool hasIntrinsicEvent = false; if (eventType != WMLIntrinsicEventUnknown) { if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; else if (m_template) { eventHandler = m_template->eventHandler(); if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; } } if (hasIntrinsicEvent) eventHandler->triggerIntrinsicEvent(eventType); // Start the timer if it exists in current card if (m_eventTimer && eventType != WMLIntrinsicEventOnEnterBackward) m_eventTimer->start(); /*guoxiaolei 20120827 end>*/ for (Node* node = traverseNextNode(); node != 0; node = node->traverseNextNode()) { if (!node->isElementNode()) continue; if (node->hasTagName(inputTag)) static_cast<WMLInputElement*>(node)->initialize(); else if (node->hasTagName(selectTag)) static_cast<WMLSelectElement*>(node)->selectInitialOptions(); } }
void WMLCardElement::handleIntrinsicEventIfNeeded() { WMLPageState* pageState = wmlPageStateForDocument(document()); if (!pageState) return; Frame* frame = document()->frame(); if (!frame) return; FrameLoader* loader = frame->loader(); if (!loader) return; // Calculate the entry method of current card WMLIntrinsicEventType eventType = WMLIntrinsicEventUnknown; switch (loader->policyChecker()->loadType()) { case FrameLoadTypeReload: break; case FrameLoadTypeBack: eventType = WMLIntrinsicEventOnEnterBackward; break; case FrameLoadTypeBackWMLDeckNotAccessible: reportWMLError(document(), WMLErrorDeckNotAccessible); return; default: eventType = WMLIntrinsicEventOnEnterForward; break; } // Figure out target event handler WMLIntrinsicEventHandler* eventHandler = this->eventHandler(); bool hasIntrinsicEvent = false; if (eventType != WMLIntrinsicEventUnknown) { if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; else if (m_template) { eventHandler = m_template->eventHandler(); if (eventHandler && eventHandler->hasIntrinsicEvent(eventType)) hasIntrinsicEvent = true; } } // SAMSUNG_WML_FIXES+ // http://spe.mobilephone.net/wit/wmlv2/structemp.wml if (hasIntrinsicEvent) { RefPtr<NodeList> children = childNodes(); if (children) { unsigned length = children->length(); for (unsigned i = 0; i < length; ++i) { Node* child = children->item(i); if (!child->isElementNode()) continue; if (child->hasTagName(oneventTag)) { WMLOnEventElement* onEventElement = static_cast<WMLOnEventElement*>(child); if (onEventElement->eventType() == eventType && onEventElement->isNoop()) { hasIntrinsicEvent = false; break; } } } } } // SAMSUNG_WML_FIXES- if (hasIntrinsicEvent) eventHandler->triggerIntrinsicEvent(eventType); // Start the timer if it exists in current card if (m_eventTimer) m_eventTimer->start(); for (Node* node = traverseNextNode(); node != 0; node = node->traverseNextNode()) { if (!node->isElementNode()) continue; if (node->hasTagName(inputTag)) static_cast<WMLInputElement*>(node)->initialize(); else if (node->hasTagName(selectTag)) static_cast<WMLSelectElement*>(node)->selectInitialOptions(); } }