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 */
c958ce410697e4266caafb3a2784b22eed47d3b4Luke SmithY.Event.define('windowresize', {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith on: (Y.UA.gecko && Y.UA.gecko < 1.91) ?
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith function (node, sub, notifier) {
897862aa336edf25baa6fa5a590bc6bfddc846bfLuke Smith sub._handle = Y.Event.attach('resize', function (e) {
897862aa336edf25baa6fa5a590bc6bfddc846bfLuke Smith notifier.fire(e);
897862aa336edf25baa6fa5a590bc6bfddc846bfLuke 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
897862aa336edf25baa6fa5a590bc6bfddc846bfLuke 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 () {
897862aa336edf25baa6fa5a590bc6bfddc846bfLuke Smith notifier.fire(e);
c958ce410697e4266caafb3a2784b22eed47d3b4Luke Smith });
897862aa336edf25baa6fa5a590bc6bfddc846bfLuke Smith });
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
9260d3097949fa1cde502ac0ee6143aaade2f079Luke Smith}, '@VERSION@' ,{requires:['event-synthetic']});