11( function ( $ ) {
2-
3- module . exports = {
2+ module . exports = {
43 DataView : DataView ,
54 Aggregators : {
65 Avg : AvgAggregator ,
76 Min : MinAggregator ,
87 Max : MaxAggregator ,
98 Sum : SumAggregator
109 }
11- } ;
10+ } ;
1211
1312 $ . extend ( true , window , {
1413 Slick : {
@@ -118,7 +117,7 @@ module.exports = {
118117 for ( var i = startingIndex , l = items . length ; i < l ; i ++ ) {
119118 id = items [ i ] [ idProperty ] ;
120119 if ( id === undefined ) {
121- throw "Each data element must implement a unique 'id' property" ;
120+ throw new Error ( "Each data element must implement a unique 'id' property" ) ;
122121 }
123122 idxById [ id ] = i ;
124123 }
@@ -129,7 +128,7 @@ module.exports = {
129128 for ( var i = 0 , l = items . length ; i < l ; i ++ ) {
130129 id = items [ i ] [ idProperty ] ;
131130 if ( id === undefined || idxById [ id ] !== i ) {
132- throw "Each data element must implement a unique 'id' property" ;
131+ throw new Error ( "Each data element must implement a unique 'id' property" ) ;
133132 }
134133 }
135134 }
@@ -221,6 +220,15 @@ module.exports = {
221220 }
222221 }
223222
223+ function getFilteredItems ( ) {
224+ return filteredItems ;
225+ }
226+
227+
228+ function getFilter ( ) {
229+ return filter ;
230+ }
231+
224232 function setFilter ( filterFn ) {
225233 filter = filterFn ;
226234 if ( options . inlineFilters ) {
@@ -308,6 +316,11 @@ module.exports = {
308316 }
309317 }
310318
319+ function getRowByItem ( item ) {
320+ ensureRowsByIdCache ( ) ;
321+ return rowsById [ item [ idProperty ] ] ;
322+ }
323+
311324 function getRowById ( id ) {
312325 ensureRowsByIdCache ( ) ;
313326 return rowsById [ id ] ;
@@ -317,6 +330,18 @@ module.exports = {
317330 return items [ idxById [ id ] ] ;
318331 }
319332
333+ function mapItemsToRows ( itemArray ) {
334+ var rows = [ ] ;
335+ ensureRowsByIdCache ( ) ;
336+ for ( var i = 0 , l = itemArray . length ; i < l ; i ++ ) {
337+ var row = rowsById [ itemArray [ i ] [ idProperty ] ] ;
338+ if ( row != null ) {
339+ rows [ rows . length ] = row ;
340+ }
341+ }
342+ return rows ;
343+ }
344+
320345 function mapIdsToRows ( idArray ) {
321346 var rows = [ ] ;
322347 ensureRowsByIdCache ( ) ;
@@ -341,7 +366,7 @@ module.exports = {
341366
342367 function updateItem ( id , item ) {
343368 if ( idxById [ id ] === undefined || id !== item [ idProperty ] ) {
344- throw "Invalid or non-matching id" ;
369+ throw new Error ( "Invalid or non-matching id" ) ;
345370 }
346371 items [ idxById [ id ] ] = item ;
347372 if ( ! updated ) {
@@ -357,6 +382,45 @@ module.exports = {
357382 refresh ( ) ;
358383 }
359384
385+ function sortedAddItem ( item ) {
386+ // NOTE: assumes 'items' are sorted!
387+ if ( ! sortComparer ) {
388+ throw new Error ( "sortedAddItem() requires a sort comparer, use sort()" ) ;
389+ }
390+ insertItem ( sortedIndex ( item ) , item ) ;
391+ }
392+
393+ function sortedUpdateItem ( item ) {
394+ // NOTE: assumes 'items' are sorted!
395+ if ( ! sortComparer ) {
396+ throw new Error ( "sortedUpdateItem() requires a sort comparer, use sort()" ) ;
397+ }
398+ var old_item = getItemById ( item . id ) ;
399+ if ( sortComparer ( old_item , item ) !== 0 ) {
400+ // item affects sorting -> must use sorted add
401+ deleteItem ( item . id ) ;
402+ sortedAddItem ( item ) ;
403+ }
404+ else { // update does not affect sorting -> regular update works fine
405+ updateItem ( item . id , item ) ;
406+ }
407+ }
408+
409+ function sortedIndex ( searchItem ) {
410+ var low = 0 , high = items . length ;
411+
412+ while ( low < high ) {
413+ var mid = low + high >>> 1 ;
414+ if ( sortComparer ( items [ mid ] , searchItem ) === - 1 ) {
415+ low = mid + 1 ;
416+ }
417+ else {
418+ high = mid ;
419+ }
420+ }
421+ return low ;
422+ }
423+
360424 function addItem ( item ) {
361425 items . push ( item ) ;
362426 updateIdxById ( items . length - 1 ) ;
@@ -366,7 +430,7 @@ module.exports = {
366430 function deleteItem ( id ) {
367431 var idx = idxById [ id ] ;
368432 if ( idx === undefined ) {
369- throw "Invalid id" ;
433+ throw new Error ( "Invalid id" ) ;
370434 }
371435 delete idxById [ id ] ;
372436 items . splice ( idx , 1 ) ;
@@ -774,11 +838,11 @@ module.exports = {
774838 var paged ;
775839 if ( pagesize ) {
776840 if ( filteredItems . length <= pagenum * pagesize ) {
777- if ( filteredItems . length === 0 ) {
778- pagenum = 0 ;
779- } else {
780- pagenum = Math . floor ( ( filteredItems . length - 1 ) / pagesize ) ;
781- }
841+ if ( filteredItems . length === 0 ) {
842+ pagenum = 0 ;
843+ } else {
844+ pagenum = Math . floor ( ( filteredItems . length - 1 ) / pagesize ) ;
845+ }
782846 }
783847 paged = filteredItems . slice ( pagesize * pagenum , pagesize * pagenum + pagesize ) ;
784848 } else {
@@ -994,6 +1058,10 @@ module.exports = {
9941058 if ( key != args . key ) { return ; }
9951059 if ( args . hash ) {
9961060 storeCellCssStyles ( args . hash ) ;
1061+ } else {
1062+ grid . onCellCssStylesChanged . unsubscribe ( styleChanged ) ;
1063+ self . onRowsChanged . unsubscribe ( update ) ;
1064+ self . onRowCountChanged . unsubscribe ( update ) ;
9971065 }
9981066 } ) ;
9991067
@@ -1011,6 +1079,8 @@ module.exports = {
10111079 "getItems" : getItems ,
10121080 "setItems" : setItems ,
10131081 "setFilter" : setFilter ,
1082+ "getFilter" : getFilter ,
1083+ "getFilteredItems" : getFilteredItems ,
10141084 "sort" : sort ,
10151085 "fastSort" : fastSort ,
10161086 "reSort" : reSort ,
@@ -1024,9 +1094,11 @@ module.exports = {
10241094 "expandGroup" : expandGroup ,
10251095 "getGroups" : getGroups ,
10261096 "getIdxById" : getIdxById ,
1097+ "getRowByItem" : getRowByItem ,
10271098 "getRowById" : getRowById ,
10281099 "getItemById" : getItemById ,
10291100 "getItemByIdx" : getItemByIdx ,
1101+ "mapItemsToRows" : mapItemsToRows ,
10301102 "mapRowsToIds" : mapRowsToIds ,
10311103 "mapIdsToRows" : mapIdsToRows ,
10321104 "setRefreshHints" : setRefreshHints ,
@@ -1035,6 +1107,8 @@ module.exports = {
10351107 "updateItem" : updateItem ,
10361108 "insertItem" : insertItem ,
10371109 "addItem" : addItem ,
1110+ "sortedAddItem" : sortedAddItem ,
1111+ "sortedUpdateItem" : sortedUpdateItem ,
10381112 "deleteItem" : deleteItem ,
10391113 "syncGridSelection" : syncGridSelection ,
10401114 "syncGridCellCssStyles" : syncGridCellCssStyles ,
0 commit comments