doStop: function (finish) { var self = this, node = self.node, elStyle = node.style, _propsData = self._propsData, propList = [], clear, propsCss = {}; Event.detach(node, TRANSITION_END_EVENT, self._onTransitionEnd, self); S.each(_propsData, function (propData, prop) { if (!finish) { propsCss[prop] = Dom.css(node, prop); } propList.push(prop); }); // firefox need set transition and need set none clear = S.trim(elStyle[TRANSITION] .replace(new RegExp('(^|,)' + '\\s*(?:' + propList.join('|') + ')\\s+[^,]+', 'gi'), '$1')) .replace(/^,|,,|,$/g, '') || 'none'; elStyle[TRANSITION] = clear; Dom.css(node, propsCss); }
runs(function () { Event.detach('#event-test-data'); ok = 0; Event.on('#event-test-data', 'click', function (e) { expect(e.isDefaultPrevented()).toBe(false); ok = 1; }); jasmine.simulate(Dom.get('#link-g'), 'click'); });
function _onLoad() { var self = this, c = self.io.config, uri = c.uri, hostname = uri.getHostname(), iframeDesc = iframeMap[hostname]; iframeDesc.ready = 1; Event.detach(iframeDesc.iframe, 'load', _onLoad, self); self.send(); }
function _onLoad() { _$jscoverage['/io/sub-domain-transport.js'].functionData[3]++; _$jscoverage['/io/sub-domain-transport.js'].lineData[77]++; var self = this, c = self.io.config, uri = c.uri, hostname = uri.getHostname(), iframeDesc = iframeMap[hostname]; _$jscoverage['/io/sub-domain-transport.js'].lineData[82]++; iframeDesc.ready = 1; _$jscoverage['/io/sub-domain-transport.js'].lineData[83]++; Event.detach(iframeDesc.iframe, 'load', _onLoad, self); _$jscoverage['/io/sub-domain-transport.js'].lineData[84]++; self.send(); }
}, doStop:function(finish) { var self = this, node = self.node, elStyle = node.style, _propsData = self._propsData, propList = [], clear, propsCss = {}; Event.detach(node, TRANSITION_END_EVENT, self._onTransitionEnd, self); S.each(_propsData, function(propData, prop) { if(!finish) { propsCss[prop] = Dom.css(node, prop) } propList.push(prop) }); clear = S.trim(elStyle[TRANSITION].replace(new RegExp("(^|,)" + "\\s*(?:" + propList.join("|") + ")\\s+[^,]+", "gi"), "$1")).replace(/^,|,,|,$/g, "") || "none"; elStyle[TRANSITION] = clear; Dom.css(node, propsCss) }});
}, _callback:function(event) { var self = this, form = self.form, io = self.io, eventType = event.type, iframeDoc, iframe = io.iframe; if(!iframe) { return } if(eventType === "abort" && S.UA.ie === 6) { setTimeout(function() { Dom.attr(form, self.attrs) }, 0) }else { Dom.attr(form, self.attrs) } removeFieldsFromData(this.fields); Event.detach(iframe); setTimeout(function() { Dom.remove(iframe) }, BREATH_INTERVAL); io.iframe = null; if(eventType === "load") { try { iframeDoc = iframe.contentWindow.document; if(iframeDoc && iframeDoc.body) { io.responseText = Dom.html(iframeDoc.body); if(S.startsWith(io.responseText, "<?xml")) { io.responseText = undefined } } if(iframeDoc && iframeDoc.XMLDocument) { io.responseXML = iframeDoc.XMLDocument }else { io.responseXML = iframeDoc } if(iframeDoc) { io._ioReady(OK_CODE, "success") }else { io._ioReady(ERROR_CODE, "parser error") } }catch(e) { io._ioReady(ERROR_CODE, "parser error") } }else { if(eventType === "error") { io._ioReady(ERROR_CODE, "error") } } }, abort:function() {
it('should guarantee separate event adding function keeps separate context with multiple event.', function () { Event.detach(doc); var re = []; Event.on(doc, 'click keydown', handler, {id: FIRST}); Event.on(doc, 'click keydown', handler, {id: SECOND}); function handler() { re.push(this.id); } // click the document twice runs(function () { simulate(doc, 'click'); }); waits(10); runs(function () { simulate(doc, 'keydown'); }); waits(10); runs(function () { expect(re).toEqual([FIRST, SECOND, FIRST, SECOND]); }); });
it('should remove the specified event handler function and context.', function () { var f = Dom.get('#link-f'); Event.detach(f); var result = [], context = {}; function foo() { result = HAPPENED; } Event.on(f, 'click', foo, context); Event.remove(f, 'click', foo, context); // click f result = null; simulate(f, 'click'); waits(0); runs(function () { expect(result).toBeNull(); }); });
doStop: function(finish) { _$jscoverage['/transition.js'].functionData[11]++; _$jscoverage['/transition.js'].lineData[139]++; var self = this, node = self.node, elStyle = node.style, _propsData = self._propsData, propList = [], clear, propsCss = {}; _$jscoverage['/transition.js'].lineData[147]++; Event.detach(node, TRANSITION_END_EVENT, self._onTransitionEnd, self); _$jscoverage['/transition.js'].lineData[148]++; S.each(_propsData, function(propData, prop) { _$jscoverage['/transition.js'].functionData[12]++; _$jscoverage['/transition.js'].lineData[149]++; if (visit12_149_1(!finish)) { _$jscoverage['/transition.js'].lineData[150]++; propsCss[prop] = Dom.css(node, prop); } _$jscoverage['/transition.js'].lineData[152]++; propList.push(prop); }); _$jscoverage['/transition.js'].lineData[156]++; clear = visit13_159_1(S.trim(elStyle[TRANSITION].replace(new RegExp('(^|,)' + '\\s*(?:' + propList.join('|') + ')\\s+[^,]+', 'gi'), '$1')).replace(/^,|,,|,$/g, '') || 'none'); _$jscoverage['/transition.js'].lineData[161]++; elStyle[TRANSITION] = clear; _$jscoverage['/transition.js'].lineData[162]++; Dom.css(node, propsCss); }});
exports.stop = function () { started = false; DomEvent.detach(win, 'hashchange', onHashChange); DomEvent.detach(win, 'popstate', onPopState); };
_callback: function (event) { var self = this, form = self.form, io = self.io, eventType = /** @type String @ignore*/event.type, iframeDoc, iframe = io.iframe; // 防止重复调用 , 成功后 abort if (!iframe) { return; } // ie6 立即设置 action 设置为空导致白屏 if (eventType === 'abort' && UA.ie === 6) { setTimeout(function () { Dom.attr(form, self.attrs); }, 0); } else { Dom.attr(form, self.attrs); } removeFieldsFromData(this.fields); Event.detach(iframe); setTimeout(function () { // firefox will keep loading if not set timeout Dom.remove(iframe); }, BREATH_INTERVAL); // nullify to prevent memory leak? io.iframe = null; if (eventType === 'load') { try { iframeDoc = iframe.contentWindow.document; // ie<9 if (iframeDoc && iframeDoc.body) { // https://github.com/kissyteam/kissy/issues/304 io.responseText = Dom.html(iframeDoc.body); // ie still can retrieve xml 's responseText if (util.startsWith(io.responseText, '<?xml')) { io.responseText = undefined; } } // ie<9 // http://help.dottoro.com/ljbcjfot.php // http://msdn.microsoft.com/en-us/library/windows/desktop/ms766512(v=vs.85).aspx /* In Internet Explorer, XML documents can also be embedded into HTML documents with the xml HTML elements. To get an XMLDocument object that represents the embedded XML data island, use the XMLDocument property of the xml element. Note that the support for the XMLDocument property has been removed in Internet Explorer 9. */ if (iframeDoc && iframeDoc.XMLDocument) { io.responseXML = iframeDoc.XMLDocument; } else { // ie9 firefox chrome io.responseXML = iframeDoc; } if (iframeDoc) { io._ioReady(OK_CODE, 'success'); } else { // chrome does not throw exception: // Unsafe JavaScript attempt to access frame with URL upload.jss from frame with URL test.html. // Domains, protocols and ports must match. // chrome will get iframeDoc to null // so this error is parser error to normalize all browsers io._ioReady(ERROR_CODE, 'parser error'); } } catch (e) { // #245 submit to a cross domain page except chrome io._ioReady(ERROR_CODE, 'parser error'); } } else if (eventType === 'error') { io._ioReady(ERROR_CODE, 'error'); } },
exports.stop = function() { started = false; DomEvent.detach(win, "popstate hashchange", dispatch) }
_callback: function(event) { _$jscoverage['/io/iframe-transport.js'].functionData[11]++; _$jscoverage['/io/iframe-transport.js'].lineData[159]++; var self = this, form = self.form, io = self.io, eventType = event.type, iframeDoc, iframe = io.iframe; _$jscoverage['/io/iframe-transport.js'].lineData[169]++; if (visit55_169_1(!iframe)) { _$jscoverage['/io/iframe-transport.js'].lineData[170]++; return; } _$jscoverage['/io/iframe-transport.js'].lineData[174]++; if (visit56_174_1(visit57_174_2(eventType === 'abort') && visit58_174_3(UA.ie === 6))) { _$jscoverage['/io/iframe-transport.js'].lineData[175]++; setTimeout(function() { _$jscoverage['/io/iframe-transport.js'].functionData[12]++; _$jscoverage['/io/iframe-transport.js'].lineData[176]++; Dom.attr(form, self.attrs); }, 0); } else { _$jscoverage['/io/iframe-transport.js'].lineData[179]++; Dom.attr(form, self.attrs); } _$jscoverage['/io/iframe-transport.js'].lineData[182]++; removeFieldsFromData(this.fields); _$jscoverage['/io/iframe-transport.js'].lineData[184]++; Event.detach(iframe); _$jscoverage['/io/iframe-transport.js'].lineData[186]++; setTimeout(function() { _$jscoverage['/io/iframe-transport.js'].functionData[13]++; _$jscoverage['/io/iframe-transport.js'].lineData[188]++; Dom.remove(iframe); }, BREATH_INTERVAL); _$jscoverage['/io/iframe-transport.js'].lineData[192]++; io.iframe = null; _$jscoverage['/io/iframe-transport.js'].lineData[194]++; if (visit59_194_1(eventType === 'load')) { _$jscoverage['/io/iframe-transport.js'].lineData[196]++; try { _$jscoverage['/io/iframe-transport.js'].lineData[197]++; iframeDoc = iframe.contentWindow.document; _$jscoverage['/io/iframe-transport.js'].lineData[199]++; if (visit60_199_1(iframeDoc && iframeDoc.body)) { _$jscoverage['/io/iframe-transport.js'].lineData[201]++; io.responseText = Dom.html(iframeDoc.body); _$jscoverage['/io/iframe-transport.js'].lineData[203]++; if (visit61_203_1(util.startsWith(io.responseText, '<?xml'))) { _$jscoverage['/io/iframe-transport.js'].lineData[204]++; io.responseText = undefined; } } _$jscoverage['/io/iframe-transport.js'].lineData[216]++; if (visit62_216_1(iframeDoc && iframeDoc.XMLDocument)) { _$jscoverage['/io/iframe-transport.js'].lineData[217]++; io.responseXML = iframeDoc.XMLDocument; } else { _$jscoverage['/io/iframe-transport.js'].lineData[220]++; io.responseXML = iframeDoc; } _$jscoverage['/io/iframe-transport.js'].lineData[222]++; if (visit63_222_1(iframeDoc)) { _$jscoverage['/io/iframe-transport.js'].lineData[223]++; io._ioReady(OK_CODE, 'success'); } else { _$jscoverage['/io/iframe-transport.js'].lineData[230]++; io._ioReady(ERROR_CODE, 'parser error'); } } catch (e) { _$jscoverage['/io/iframe-transport.js'].lineData[234]++; io._ioReady(ERROR_CODE, 'parser error'); } } else { _$jscoverage['/io/iframe-transport.js'].lineData[236]++; if (visit64_236_1(eventType === 'error')) { _$jscoverage['/io/iframe-transport.js'].lineData[237]++; io._ioReady(ERROR_CODE, 'error'); } } },
it('call remove event from descendants', function () { var bar = Dom.get('#bar'), foo = Dom.get('#foo'), bard = 0, bard1 = 0, food = 0, food1 = 0; Event.on(bar, { 'o': { fn: function () { bard = 1; } }, 'o1': { fn: function () { bard1 = 1; } } }); Event.on(foo, { 'w': { fn: function () { food = 1; } }, 'w1': { fn: function () { food1 = 1; } } }); Event.fire(bar, 'o'); Event.fire(foo, 'w'); Event.fire(bar, 'o1'); Event.fire(foo, 'w1'); expect(bard).toBe(1); expect(food).toBe(1); expect(bard1).toBe(1); expect(food1).toBe(1); bard = 0; food = 0; bard1 = 0; food1 = 0; Event.detach(foo, { 'o': { deep: true }, 'w': { deep: true } }); Event.fire(bar, 'o'); Event.fire(foo, 'w'); Event.fire(bar, 'o1'); Event.fire(foo, 'w1'); expect(bard).toBe(0); expect(food).toBe(0); expect(bard1).toBe(1); expect(food1).toBe(1); bard = 0; food = 0; bard1 = 0; food1 = 0; Event.detach(foo, { '': { deep: true } }); Event.fire(bar, 'o'); Event.fire(foo, 'w'); Event.fire(bar, 'o1'); Event.fire(foo, 'w1'); expect(bard).toBe(0); expect(food).toBe(0); expect(bard1).toBe(0); expect(food1).toBe(0); });