event-resize-debug.js revision c958ce410697e4266caafb3a2784b22eed47d3b4
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('event-resize', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Adds a window resize event that has its behavior normalized to fire at the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * end of the resize rather than constantly during the resize.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule event-resize
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith * Old firefox fires the window resize event once when the resize action
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * finishes, other browsers fire the event periodically during the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * resize. This code uses timeout logic to simulate the Firefox
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * behavior in other browsers.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event windowresize
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @for YUI
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smithvar domEventProxies = Y.Env.evt.dom_wrappers,
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith win = Y.config.win,
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith key = 'event:' + Y.stamp(win) + 'resizenative',
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith config;
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
c958ce410697e4266caafb3a2784b22eed47d3b4Luke SmithY.Event.define('windowresize', {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith on: (Y.UA.gecko && Y.UA.gecko < 1.91) ?
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith function (node, sub, notifier) {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith Y.Event._attach('resize', function (e) {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith notifier.fire(e);
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith });
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith } :
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith function (node, sub, notifier) {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith // interval bumped from 40 to 100ms as of 3.4.1
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith var delay = Y.config.windowResizeDelay || 100;
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith sub._handle = Y.Event._attach(['resize', function (e) {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith if (sub._timer) {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith sub._timer.cancel();
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith }
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith sub._timer = Y.later(delay, Y, function () {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith notifier.fire(
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith new Y.DOMEventFacade(e, win, domEventProxies[key]));
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith });
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith }], { facade: false });
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith },
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith detach: function (node, sub) {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith if (sub._timer) {
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith sub._timer.cancel();
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith }
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith sub._handle.detach();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith // delegate methods not defined because this only works for window
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith // subscriptions, so...yeah.
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{requires:['node-base']});