?? sortedlist.js
字號:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.collections.SortedList");dojo.require("dojo.collections.Collections");dojo.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 dojo.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 dojo.collections.SortedList(this); // dojo.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]; // dojo.collections.DictionaryEntry }; this.forEach=function(/* function */ fn, /* object? */ scope){ // summary // functional iterator, following the mozilla spec. var s=scope||dj_global; if(Array.forEach){ Array.forEach(q, fn, s); }else{ for(var i=0; i<q.length; i++){ fn.call(s, q[i], i, q); } } }; 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 dojo.collections.DictionaryIterator(items); // dojo.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 dojo.collections.DictionaryEntry(k,v); q.sort(sorter); 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 dojo.collections.DictionaryEntry(item.key,item.value); } q.sort(sorter); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -