/[Frey]/trunk/static/Frey/View/NoPager.js
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/static/Frey/View/NoPager.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 957 - (hide annotations)
Wed Jan 7 17:50:03 2009 UTC (15 years, 4 months ago) by dpavlin
File MIME type: application/javascript
File size: 5289 byte(s)
port a bit more of no-pager (next page still doesn't work)
1 dpavlin 957 /*
2     no pager, as seen at
3     http://www.humanized.com/weblog/2006/04/28/reading_humanized/
4     but using jquery
5    
6     2006-08-16 Dobrica Pavlinusic <dpavlin@rot13.org>
7     */
8    
9     var preloadDistance = 1000;
10     var isUpdating = false;
11     var isMouseDown = false;
12     var checker;
13     var v;
14     var cookie = 'no_pager';
15    
16     function load_page() {
17     setCookie(cookie+"_height", getScrollHeight() );
18     setCookie(cookie+"_scroll", getScrollHeight() - _getWindowHeight() );
19    
20     if ( isUpdating == true
21     || isMouseDown == true
22     || getPageHeight() - getScrollHeight() > preloadDistance
23     || v.page >= v.max_page
24     ) return;
25    
26     v.page++;
27    
28     $.log.info(
29     'get page: ' + v.page,
30     'search: ' + v.search,
31     'PageHeight:' + getPageHeight(),
32     'ScrollHeight:' + getScrollHeight()
33     );
34    
35     setCookie( cookie+'_page', v.page );
36     isUpdating = true;
37    
38     $('#status').html(
39     'Loading page '+ v.page + '...'
40     );
41    
42     $.get(
43     "/Frey::View::NoPager/results_as_markup",
44     {
45     page: v.page,
46     search: v.search
47     },
48     function ( response ) {
49    
50     $('#next_page').html( response );
51    
52     eval( 'v=' + $('#json').val() );
53    
54     isUpdating = false;
55     $('#status').html( v.status );
56     }
57     );
58    
59    
60     }
61    
62     /*
63     bind events and init no_pager
64     */
65    
66     $(document).ready( function() {
67    
68     $.log.info('no_page binding events');
69    
70     eval( 'v=' + $('#json').val() );
71    
72     var cookie_id = getCookie(cookie+'_id') || 0;
73    
74     $.log.debug("Page ID:" + v.id);
75     $.log.debug("Page Cookie:" + cookie_id);
76    
77     var fromBackButton = false;
78     if ( cookie_id == v.id ) {
79     fromBackButton = true;
80     } else {
81     setCookie(cookie+'_id', v.id);
82     }
83    
84     $.log.debug("from Back button? " + fromBackButton);
85     if ( fromBackButton ) {
86     $.log.info( 'Load ' + getCookie(cookie+'_page') + ' pages');
87     $.log.debug( 'Scroll to:' + getCookie(cookie+'_scroll') );
88     $('#spacer').height( getCookie(cookie+'_height')+"px" );
89     scroll( 0, getCookie(cookie+'_scroll') );
90     }
91    
92     $(window).mousedown( function () {
93     isMouseDown = true;
94     });
95     $(window).mouseup( function () {
96     isMouseDown = false;
97     });
98    
99     checker = setInterval(function () {
100     load_page();
101     }, 100);
102    
103    
104     });
105    
106    
107    
108     // These three functions are taken from code displayed on
109     // http://www.netspade.com/articles/2005/11/16/javascript-cookies/
110    
111     /**
112     * Sets a Cookie with the given name and value.
113     *
114     * name Name of the cookie
115     * value Value of the cookie
116     * [expires] Expiration date of the cookie (default: end of current session)
117     * [path] Path where the cookie is valid (default: path of calling document)
118     * [domain] Domain where the cookie is valid
119     * (default: domain of calling document)
120     * [secure] Boolean value indicating if the cookie transmission requires a
121     * secure transmission
122     */
123     function setCookie(name, value, expires, path, domain, secure) {
124     document.cookie= name + "=" + escape(value) +
125     ((expires) ? "; expires=" + expires.toGMTString() : "") +
126     ((path) ? "; path=" + path : "") +
127     ((domain) ? "; domain=" + domain : "") +
128     ((secure) ? "; secure" : "");
129     }
130    
131     /**
132     * Gets the value of the specified cookie.
133     *
134     * name Name of the desired cookie.
135     *
136     * Returns a string containing value of specified cookie,
137     * or null if cookie does not exist.
138     */
139     function getCookie(name) {
140     var dc = document.cookie;
141     var prefix = name + "=";
142     var begin = dc.indexOf("; " + prefix);
143     if (begin == -1) {
144     begin = dc.indexOf(prefix);
145     if (begin != 0) return null;
146     } else {
147     begin += 2;
148     }
149     var end = document.cookie.indexOf(";", begin);
150     if (end == -1) {
151     end = dc.length;
152     }
153     return unescape(dc.substring(begin + prefix.length, end));
154     }
155    
156     /**
157     * Deletes the specified cookie.
158     *
159     * name name of the cookie
160     * [path] path of the cookie (must be same as path used to create cookie)
161     * [domain] domain of the cookie (must be same as domain used to create cookie)
162     */
163     function deleteCookie(name, path, domain) {
164     if (getCookie(name)) {
165     document.cookie = name + "=" +
166     ((path) ? "; path=" + path : "") +
167     ((domain) ? "; domain=" + domain : "") +
168     "; expires=Thu, 01-Jan-70 00:00:01 GMT";
169     }
170     }
171    
172     // These two functions are based on code from
173     // http://www.quirksmode.org/viewport/compatibility.html
174    
175     function getPageHeight(){
176     var y;
177     var test1 = document.body.scrollHeight;
178     var test2 = document.body.offsetHeight
179     if (test1 > test2) // all but Explorer Mac
180     {
181     y = document.body.scrollHeight;
182     }
183     else // Explorer Mac;
184     //would also work in Explorer 6 Strict, Mozilla and Safari
185     {
186     y = document.body.offsetHeight;
187     }
188     return parseInt(y);
189     }
190    
191     function _getWindowHeight(){
192     var frameWidth;
193     var frameHeight;
194     if (self.innerWidth)
195     {
196     frameWidth = self.innerWidth;
197     frameHeight = self.innerHeight;
198     }
199     else if (document.documentElement && document.documentElement.clientWidth)
200     {
201     frameWidth = document.documentElement.clientWidth;
202     frameHeight = document.documentElement.clientHeight;
203     }
204     else if (document.body)
205     {
206     frameWidth = document.body.clientWidth;
207     frameHeight = document.body.clientHeight;
208     }
209     return parseInt(frameHeight);
210     }
211    
212    
213     function getScrollHeight(){
214     var y;
215     // all except Explorer
216     if (self.pageYOffset)
217     {
218     y = self.pageYOffset;
219     }
220     else if (document.documentElement && document.documentElement.scrollTop)
221     {
222     y = document.documentElement.scrollTop;
223     }
224     else if (document.body) // all other Explorers
225     {
226     y = document.body.scrollTop;
227     }
228     return parseInt(y)+_getWindowHeight();
229     }
230    

  ViewVC Help
Powered by ViewVC 1.1.26