summaryrefslogtreecommitdiffstats
path: root/slick.remotemodel.js
diff options
context:
space:
mode:
Diffstat (limited to 'slick.remotemodel.js')
-rw-r--r--slick.remotemodel.js281
1 files changed, 142 insertions, 139 deletions
diff --git a/slick.remotemodel.js b/slick.remotemodel.js
index dc41b64..aba7688 100644
--- a/slick.remotemodel.js
+++ b/slick.remotemodel.js
@@ -1,161 +1,164 @@
-(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
-
- // events
- var onDataLoading = new Slick.Event();
- var onDataLoaded = new Slick.Event();
-
-
- function init() {
- }
-
+(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
+
+ // events
+ var onDataLoading = new Slick.Event();
+ var onDataLoaded = new Slick.Event();
+
+
+ function init() {
+ }
+
+
+ function isDataLoaded(from, to) {
+ for (var i = from; i <= to; i++) {
+ if (data[i] == undefined || data[i] == null) {
+ return false;
+ }
+ }
+
+ return true;
+ }
- function isDataLoaded(from,to) {
- for (var i=from; i<=to; i++) {
- if (data[i] == undefined || data[i] == null)
- return false;
- }
- return true;
- }
+ function clear() {
+ for (var key in data) {
+ delete data[key];
+ }
+ data.length = 0;
+ }
+
+ function ensureData(from, to) {
+ if (req) {
+ req.abort();
+ for (var i = req.fromPage; i <= req.toPage; i++)
+ data[i * PAGESIZE] = undefined;
+ }
- function clear() {
- for (var key in data) {
- delete data[key];
- }
- data.length = 0;
- }
+ 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++;
+
+ while (data[toPage * PAGESIZE] !== undefined && fromPage < toPage)
+ toPage--;
+
+ if (fromPage > toPage || ((fromPage == toPage) && data[fromPage * PAGESIZE] !== undefined)) {
+ // TODO: look-ahead
+ 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;
+ }
+
+ 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'
+
+ 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)
+ }
+ });
+ req.fromPage = fromPage;
+ req.toPage = toPage;
+ }, 50);
+ }
+
+
+ function onError(fromPage, toPage) {
+ alert("error loading pages " + fromPage + " to " + toPage);
+ }
- function ensureData(from,to) {
- if (req) {
- req.abort();
- for (var i=req.fromPage; i<=req.toPage; i++)
- data[i*PAGESIZE] = undefined;
- }
+ function onSuccess(resp) {
+ var from = this.fromPage * PAGESIZE, to = from + resp.count;
+ data.length = parseInt(resp.total);
- if (from < 0)
- from = 0;
+ for (var i = 0; i < resp.stories.length; i++) {
+ data[from + i] = resp.stories[i];
+ data[from + i].index = from + i;
+ }
- var fromPage = Math.floor(from / PAGESIZE);
- var toPage = Math.floor(to / PAGESIZE);
-
- while (data[fromPage * PAGESIZE] !== undefined && fromPage < toPage)
- fromPage++;
+ req = null;
- while (data[toPage * PAGESIZE] !== undefined && fromPage < toPage)
- toPage--;
-
- if (fromPage > toPage || ((fromPage == toPage) && data[fromPage*PAGESIZE] !== undefined)) {
- // TODO: look-ahead
- 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;
- }
-
- 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'
-
- 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)
- }
- });
- req.fromPage = fromPage;
- req.toPage = toPage;
- }, 50);
- }
-
-
- function onError(fromPage,toPage) {
- alert("error loading pages " + fromPage + " to " + toPage);
- }
+ onDataLoaded.notify({from:from, to:to});
+ }
- function onSuccess(resp) {
- var from = this.fromPage*PAGESIZE, to = from + resp.count;
- data.length = parseInt(resp.total);
- 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];
- req = null;
+ ensureData(from, to);
+ }
- onDataLoaded.notify({from:from, to:to});
- }
+ function setSort(column, dir) {
+ sortcol = column;
+ sortdir = dir;
+ clear();
+ }
- function reloadData(from,to) {
- for (var i=from; i<=to; i++)
- delete data[i];
+ function setSearch(str) {
+ searchstr = str;
+ clear();
+ }
- ensureData(from,to);
- }
+ init();
- function setSort(column,dir) {
- sortcol = column;
- sortdir = dir;
- clear();
- }
+ return {
+ // properties
+ "data":data,
- function setSearch(str) {
- searchstr = str;
- clear();
- }
+ // methods
+ "clear":clear,
+ "isDataLoaded":isDataLoaded,
+ "ensureData":ensureData,
+ "reloadData":reloadData,
+ "setSort":setSort,
+ "setSearch":setSearch,
+ // events
+ "onDataLoading":onDataLoading,
+ "onDataLoaded":onDataLoaded
+ };
+ }
- 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 }}});
+ // Slick.Data.RemoteModel
+ $.extend(true, window, { Slick:{ Data:{ RemoteModel:RemoteModel }}});
})(jQuery); \ No newline at end of file