summaryrefslogtreecommitdiffstats
path: root/slick.remotemodel.js
diff options
context:
space:
mode:
Diffstat (limited to 'slick.remotemodel.js')
-rw-r--r--slick.remotemodel.js276
1 files changed, 140 insertions, 136 deletions
diff --git a/slick.remotemodel.js b/slick.remotemodel.js
index 4dce1b8..0ffa555 100644
--- a/slick.remotemodel.js
+++ b/slick.remotemodel.js
@@ -18,166 +18,170 @@ function EventHelper() {
}
-
-/***
- * A sample AJAX data store implementation.
- * Right now, it's hooked up to load all Apple-related Digg stories, but can
- * easily be extended to support and JSONP-compatible backend that accepts paging parameters.
- */
-function RemoteModel() {
- // private
- var PAGESIZE = 50;
- var data = {length:0};
- var searchstr = "apple";
- var sortcol = null;
- var sortdir = 1;
- var h_request = null;
- var req = null; // ajax request
- var req_page;
-
- // events
- var onDataLoading = new EventHelper();
- var onDataLoaded = new EventHelper();
-
-
- function init() {
- }
-
-
- function isDataLoaded(from,to) {
- for (var i=from; i<=to; i++) {
- if (data[i] == undefined || data[i] == null)
- return false;
- }
+(function() {
+ /***
+ * A sample AJAX data store implementation.
+ * Right now, it's hooked up to load all Apple-related Digg stories, but can
+ * easily be extended to support and JSONP-compatible backend that accepts paging parameters.
+ */
+ function RemoteModel() {
+ // private
+ var PAGESIZE = 50;
+ var data = {length:0};
+ var searchstr = "apple";
+ var sortcol = null;
+ var sortdir = 1;
+ var h_request = null;
+ var req = null; // ajax request
+ var req_page;
- return true;
- }
-
-
- function clear() {
- for (var key in data) {
- delete data[key];
+ // events
+ var onDataLoading = new EventHelper();
+ var onDataLoaded = new EventHelper();
+
+
+ function init() {
}
- data.length = 0;
- }
-
-
- function ensureData(from,to) {
- if (from < 0)
- from = 0;
- var fromPage = Math.floor(from / PAGESIZE);
- var toPage = Math.floor(to / PAGESIZE);
- while (data[fromPage * PAGESIZE] !== undefined && fromPage < toPage)
- fromPage++;
+ function isDataLoaded(from,to) {
+ for (var i=from; i<=to; i++) {
+ if (data[i] == undefined || data[i] == null)
+ return false;
+ }
+
+ return true;
+ }
+
- while (data[toPage * PAGESIZE] !== undefined && fromPage < toPage)
- toPage--;
+ function clear() {
+ for (var key in data) {
+ delete data[key];
+ }
+ data.length = 0;
+ }
+
+
+ function ensureData(from,to) {
+ if (from < 0)
+ from = 0;
- if (fromPage > toPage || ((fromPage == toPage) && data[fromPage*PAGESIZE] !== undefined)) {
- // TODO: lookeahead
+ var fromPage = Math.floor(from / PAGESIZE);
+ var toPage = Math.floor(to / PAGESIZE);
- //if ()
+ while (data[fromPage * PAGESIZE] !== undefined && fromPage < toPage)
+ fromPage++;
- return;
- }
+ while (data[toPage * PAGESIZE] !== undefined && fromPage < toPage)
+ toPage--;
+
+ if (fromPage > toPage || ((fromPage == toPage) && data[fromPage*PAGESIZE] !== undefined)) {
+ // TODO: lookeahead
+
+ //if ()
+
+ return;
+ }
+
+
+ var url = "http://services.digg.com/search/stories?query=" + searchstr + "&offset=" + (fromPage * PAGESIZE) + "&count=" + (((toPage-fromPage)*PAGESIZE)+PAGESIZE) + "&appkey=http://slickgrid.googlecode.com&type=javascript"
+
+ switch (sortcol) {
+ case "diggs":
+ url += ("&sort=" + ((sortdir>0)?"digg_count-asc":"digg_count-desc"));
+ break;
+ }
- var url = "http://services.digg.com/search/stories?query=" + searchstr + "&offset=" + (fromPage * PAGESIZE) + "&count=" + (((toPage-fromPage)*PAGESIZE)+PAGESIZE) + "&appkey=http://slickgrid.googlecode.com&type=javascript"
-
-
- switch (sortcol) {
- case "diggs":
- url += ("&sort=" + ((sortdir>0)?"digg_count-asc":"digg_count-desc"));
- break;
+
+ if (req) {
+ req.abort();
+ data[req_page*PAGESIZE] = undefined;
+ }
+
+ if (h_request != null)
+ clearTimeout(h_request);
+
+ h_request = setTimeout(function() {
+ for (var i=fromPage; i<=toPage; i++)
+ data[i*PAGESIZE] = null; // null indicates a 'requested but not available yet'
+
+ req_page = fromPage;
+
+ onDataLoading.notify({from:from, to:to});
+
+ req = $.jsonp({
+ url: url,
+ callbackParameter: "callback",
+ cache: true, // Digg doesn't accept the autogenerated cachebuster param
+ success: onSuccess,
+ error: function(){
+ onError(fromPage, toPage)
+ }
+ });
+ }, 50);
}
- if (req) {
- req.abort();
- data[req_page*PAGESIZE] = undefined;
+ function onError(fromPage,toPage) {
+ alert("error loading pages " + fromPage + " to " + toPage);
}
- if (h_request != null)
- window.clearTimeout(h_request);
-
- h_request = window.setTimeout(function() {
- for (var i=fromPage; i<=toPage; i++)
- data[i*PAGESIZE] = null; // null indicates a 'requested but not available yet'
+ function onSuccess(resp) {
+ var from = resp.offset, to = resp.offset + resp.count;
+ data.length = parseInt(resp.total);
- req_page = fromPage;
+ for (var i = 0; i < resp.stories.length; i++) {
+ data[from + i] = resp.stories[i];
+ data[from + i].index = from + i;
+ }
- onDataLoading.notify({from:from, to:to});
+ req = null;
- req = $.jsonp({
- url: url,
- callbackParameter: "callback",
- cache: true, // Digg doesn't accept the autogenerated cachebuster param
- success: onSuccess,
- error: function(){
- onError(fromPage, toPage)
- }
- });
- }, 50);
- }
-
-
- function onError(fromPage,toPage) {
- alert("error loading pages " + fromPage + " to " + toPage);
- }
-
- function onSuccess(resp) {
- var from = resp.offset, to = resp.offset + resp.count;
- data.length = parseInt(resp.total);
+ onDataLoaded.notify({from:from, to:to});
+ }
- for (var i = 0; i < resp.stories.length; i++) {
- data[from + i] = resp.stories[i];
- data[from + i].index = from + i;
+
+ function reloadData(from,to) {
+ for (var i=from; i<=to; i++)
+ delete data[i];
+
+ ensureData(from,to);
}
- req = null;
- onDataLoaded.notify({from:from, to:to});
- }
+ function setSort(column,dir) {
+ sortcol = column;
+ sortdir = dir;
+ clear();
+ }
+
+ function setSearch(str) {
+ searchstr = str;
+ clear();
+ }
- function reloadData(from,to) {
- for (var i=from; i<=to; i++)
- delete data[i];
+ init();
+
+ return {
+ // properties
+ "data": data,
- ensureData(from,to);
+ // methods
+ "clear": clear,
+ "isDataLoaded": isDataLoaded,
+ "ensureData": ensureData,
+ "reloadData": reloadData,
+ "setSort": setSort,
+ "setSearch": setSearch,
+
+ // events
+ "onDataLoading": onDataLoading,
+ "onDataLoaded": onDataLoaded
+ };
}
-
-
- function setSort(column,dir) {
- sortcol = column;
- sortdir = dir;
- clear();
- }
-
- function setSearch(str) {
- searchstr = str;
- clear();
- }
-
-
- init();
-
- return {
- // properties
- "data": data,
-
- // methods
- "clear": clear,
- "isDataLoaded": isDataLoaded,
- "ensureData": ensureData,
- "reloadData": reloadData,
- "setSort": setSort,
- "setSearch": setSearch,
- // events
- "onDataLoading": onDataLoading,
- "onDataLoaded": onDataLoaded
- };
-}
+ // Slick.Data.RemoteModel
+ $.extend(true, window, { Slick: { Data: { RemoteModel: RemoteModel }}});
+})();