diff options
author | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-13 09:49:11 +0000 |
---|---|---|
committer | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-13 09:49:11 +0000 |
commit | e44a7e37b6c7b5961adaffc62b9042b8d442938e (patch) | |
tree | 95b67c356e93163467db2451f2b8cce84ed5d582 /includes/js/dojox/collections/SortedList.js | |
parent | a62b9742ee5e28bcec6872d88f50f25b820914f6 (diff) | |
download | semanticscuttle-e44a7e37b6c7b5961adaffc62b9042b8d442938e.tar.gz semanticscuttle-e44a7e37b6c7b5961adaffc62b9042b8d442938e.tar.bz2 |
New feature: basic Ajax suggestion for tags and implementation of Dojo toolkit
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f
Diffstat (limited to 'includes/js/dojox/collections/SortedList.js')
-rw-r--r-- | includes/js/dojox/collections/SortedList.js | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/includes/js/dojox/collections/SortedList.js b/includes/js/dojox/collections/SortedList.js new file mode 100644 index 0000000..e9f1235 --- /dev/null +++ b/includes/js/dojox/collections/SortedList.js @@ -0,0 +1,198 @@ +if(!dojo._hasResource["dojox.collections.SortedList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.collections.SortedList"] = true; +dojo.provide("dojox.collections.SortedList"); +dojo.require("dojox.collections._base"); + +dojox.collections.SortedList=function(/* object? */ dictionary){ + // summary + // creates a collection that acts like a dictionary but is also internally sorted. + // Note that the act of adding any elements forces an internal resort, making this object potentially slow. + var _this=this; + var items={}; + var q=[]; + var sorter=function(a,b){ + if (a.key > b.key) return 1; + if (a.key < b.key) return -1; + return 0; + }; + var build=function(){ + q=[]; + var e=_this.getIterator(); + while (!e.atEnd()){ + q.push(e.get()); + } + q.sort(sorter); + }; + var testObject={}; + + this.count=q.length; + this.add=function(/* string */ k,/* object */v){ + // summary + // add the passed value to the dictionary at location k + if (!items[k]) { + items[k]=new dojox.collections.DictionaryEntry(k,v); + this.count=q.push(items[k]); + q.sort(sorter); + } + }; + this.clear=function(){ + // summary + // clear the internal collections + items={}; + q=[]; + this.count=q.length; + }; + this.clone=function(){ + // summary + // create a clone of this sorted list + return new dojox.collections.SortedList(this); // dojox.collections.SortedList + }; + this.contains=this.containsKey=function(/* string */ k){ + // summary + // Check to see if the list has a location k + if(testObject[k]){ + return false; // bool + } + return (items[k]!=null); // bool + }; + this.containsValue=function(/* object */ o){ + // summary + // Check to see if this list contains the passed object + var e=this.getIterator(); + while (!e.atEnd()){ + var item=e.get(); + if(item.value==o){ + return true; // bool + } + } + return false; // bool + }; + this.copyTo=function(/* array */ arr, /* int */ i){ + // summary + // copy the contents of the list into array arr at index i + var e=this.getIterator(); + var idx=i; + while(!e.atEnd()){ + arr.splice(idx,0,e.get()); + idx++; + } + }; + this.entry=function(/* string */ k){ + // summary + // return the object at location k + return items[k]; // dojox.collections.DictionaryEntry + }; + this.forEach=function(/* function */ fn, /* object? */ scope){ + // summary + // functional iterator, following the mozilla spec. + dojo.forEach(q, fn, scope); + }; + this.getByIndex=function(/* int */ i){ + // summary + // return the item at index i + return q[i].valueOf(); // object + }; + this.getIterator=function(){ + // summary + // get an iterator for this object + return new dojox.collections.DictionaryIterator(items); // dojox.collections.DictionaryIterator + }; + this.getKey=function(/* int */ i){ + // summary + // return the key of the item at index i + return q[i].key; + }; + this.getKeyList=function(){ + // summary + // return an array of the keys set in this list + var arr=[]; + var e=this.getIterator(); + while (!e.atEnd()){ + arr.push(e.get().key); + } + return arr; // array + }; + this.getValueList=function(){ + // summary + // return an array of values in this list + var arr=[]; + var e=this.getIterator(); + while (!e.atEnd()){ + arr.push(e.get().value); + } + return arr; // array + }; + this.indexOfKey=function(/* string */ k){ + // summary + // return the index of the passed key. + for (var i=0; i<q.length; i++){ + if (q[i].key==k){ + return i; // int + } + } + return -1; // int + }; + this.indexOfValue=function(/* object */ o){ + // summary + // return the first index of object o + for (var i=0; i<q.length; i++){ + if (q[i].value==o){ + return i; // int + } + } + return -1; // int + }; + this.item=function(/* string */ k){ + // summary + // return the value of the object at location k. + if(k in items && !testObject[k]){ + return items[k].valueOf(); // object + } + return undefined; // object + }; + this.remove=function(/* string */k){ + // summary + // remove the item at location k and rebuild the internal collections. + delete items[k]; + build(); + this.count=q.length; + }; + this.removeAt=function(/* int */ i){ + // summary + // remove the item at index i, and rebuild the internal collections. + delete items[q[i].key]; + build(); + this.count=q.length; + }; + this.replace=function(/* string */ k, /* object */ v){ + // summary + // Replace an existing item if it's there, and add a new one if not. + if (!items[k]){ + // we're adding a new object, return false + this.add(k,v); + return false; // bool + }else{ + // we're replacing an object, return true + items[k]=new dojox.collections.DictionaryEntry(k,v); + build(); + return true; // bool + } + }; + this.setByIndex=function(/* int */ i, /* object */ o){ + // summary + // set an item by index + items[q[i].key].value=o; + build(); + this.count=q.length; + }; + if (dictionary){ + var e=dictionary.getIterator(); + while (!e.atEnd()){ + var item=e.get(); + q[q.length]=items[item.key]=new dojox.collections.DictionaryEntry(item.key,item.value); + } + q.sort(sorter); + } +} + +} |