View difference between Paste ID: iTEUz5zK and
SHOW:
|
|
- or go back to the newest paste.
1 | - | |
1 | + | (function($,sr){ |
2 | ||
3 | // debouncing function from John Hann | |
4 | // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ | |
5 | ||
6 | var debounce = function (func, threshold, execAsap) { | |
7 | var timeout; | |
8 | ||
9 | return function debounced () { | |
10 | var obj = this, args = arguments; | |
11 | function delayed () { | |
12 | if (!execAsap) | |
13 | func.apply(obj, args); | |
14 | timeout = null; | |
15 | }; | |
16 | ||
17 | if (timeout) | |
18 | clearTimeout(timeout); | |
19 | else if (execAsap) | |
20 | func.apply(obj, args); | |
21 | ||
22 | timeout = setTimeout(delayed, threshold || 25); | |
23 | }; | |
24 | } | |
25 | // smartresize | |
26 | jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); }; | |
27 | ||
28 | })(jQuery,'smartresize'); | |
29 | ||
30 | // errors | |
31 | var log = console.log, warn = console.warn; | |
32 | var error = { | |
33 | console: function(error){ | |
34 | warn('error: ' + error.type); | |
35 | }, | |
36 | ui: function(){ | |
37 | return false; | |
38 | } | |
39 | } | |
40 | ||
41 | // events | |
42 | var _event = { | |
43 | _resizes: [], | |
44 | register: function(type,exec,cb){ | |
45 | switch(type){ | |
46 | case 'resize': | |
47 | this._resizes.push(exec); if(cb)cb(); | |
48 | break; | |
49 | default: | |
50 | return false; | |
51 | break; | |
52 | } | |
53 | }, | |
54 | fire: function(type){ | |
55 | switch(type){ | |
56 | case "resize": | |
57 | for(var i in this._resizes){ | |
58 | this._resizes[i](); | |
59 | } | |
60 | break; | |
61 | default: | |
62 | return false; | |
63 | break; | |
64 | } | |
65 | } | |
66 | } | |
67 | ||
68 | // globals | |
69 | var _var = { | |
70 | window: { h: 0, w: 0 } | |
71 | } | |
72 | ||
73 | // main app | |
74 | var _main = { | |
75 | init: function(){ | |
76 | log('main init'); | |
77 | _event.register('resize',function(){ | |
78 | log('I fired'); | |
79 | }); | |
80 | _event.register('resize',function(){ | |
81 | log('I fired too'); | |
82 | }); | |
83 | } | |
84 | } | |
85 | ||
86 | $(function() { | |
87 | // dfd for init | |
88 | function initResize(){ | |
89 | return $.Deferred(function( dfd ){ | |
90 | $(window).smartresize(function(e) { | |
91 | _var.window.h = e.target.innerHeight; _var.window.w = e.target.innerWidth; | |
92 | _event.fire('resize'); | |
93 | }).trigger('resize'); | |
94 | log('resize init'); | |
95 | }).promise(); | |
96 | } | |
97 | ||
98 | $.when( initResize() ).then(_main.init()); | |
99 | ||
100 | }); |