mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 02:10:08 +00:00
added basic cache management + some tweaking and cleanup...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
3794fbb048
commit
556533ae7a
@ -619,16 +619,34 @@ var BaseBrowserPrototype = {
|
|||||||
|
|
||||||
// Clear cached data...
|
// Clear cached data...
|
||||||
//
|
//
|
||||||
|
// Clear all cache data...
|
||||||
|
// .clearCache()
|
||||||
|
// -> this
|
||||||
|
//
|
||||||
|
// Clear specific cache data...
|
||||||
|
// .clearCache(title)
|
||||||
|
// .clearCache(title, ..)
|
||||||
|
// .clearCache([title, ..])
|
||||||
|
// -> this
|
||||||
|
//
|
||||||
|
//
|
||||||
// This will delete all attributes of the format:
|
// This will delete all attributes of the format:
|
||||||
// .__<title>_cache
|
// .__<title>_cache
|
||||||
//
|
//
|
||||||
clearCache: function(){
|
clearCache: function(title){
|
||||||
Object.keys(this)
|
if(title == null){
|
||||||
.forEach(function(key){
|
Object.keys(this)
|
||||||
if(key.startsWith('__') && key.endsWith('_cache')){
|
.forEach(function(key){
|
||||||
delete this[key]
|
if(key.startsWith('__') && key.endsWith('_cache')){
|
||||||
}
|
delete this[key]
|
||||||
}.bind(this))
|
}
|
||||||
|
}.bind(this))
|
||||||
|
} else {
|
||||||
|
[...arguments].flat()
|
||||||
|
.forEach(function(title){
|
||||||
|
delete this[`__${title}_cache`]
|
||||||
|
}.bind(this))
|
||||||
|
}
|
||||||
return this },
|
return this },
|
||||||
|
|
||||||
|
|
||||||
@ -643,6 +661,10 @@ var BaseBrowserPrototype = {
|
|||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// NOTE: this will get overwritten each time .make(..) is called.
|
// NOTE: this will get overwritten each time .make(..) is called.
|
||||||
|
// NOTE: .make(..) will also set item's .id where this will add a
|
||||||
|
// count to the path...
|
||||||
|
// This will also make re-generating the indexes and searching
|
||||||
|
// stable...
|
||||||
__item_index_cache: null,
|
__item_index_cache: null,
|
||||||
get index(){
|
get index(){
|
||||||
return (this.__item_index_cache =
|
return (this.__item_index_cache =
|
||||||
@ -1803,13 +1825,22 @@ var BaseBrowserPrototype = {
|
|||||||
// calls for such items...
|
// calls for such items...
|
||||||
//
|
//
|
||||||
// XXX revise options handling for .__list__(..)
|
// XXX revise options handling for .__list__(..)
|
||||||
// XXX might be a good idea to enable the used to merge the state
|
// XXX might be a good idea to enable the user to merge the state
|
||||||
// manually...
|
// manually...
|
||||||
// one way to do:
|
// one way to do:
|
||||||
// - get the previous item via an index,
|
// - get the previous item via an index,
|
||||||
// - update it
|
// - update it
|
||||||
// - pass it to make(..)
|
// - pass it to make(..)
|
||||||
|
// Example:
|
||||||
|
// // just a rough example in .__list__(..)...
|
||||||
|
// make(value,
|
||||||
|
// value in this.index ?
|
||||||
|
// Object.assign(
|
||||||
|
// this.index[value],
|
||||||
|
// opts)
|
||||||
|
// : opts)
|
||||||
make: function(options){
|
make: function(options){
|
||||||
|
var that = this
|
||||||
options = Object.assign(Object.create(this.options || {}), options || {})
|
options = Object.assign(Object.create(this.options || {}), options || {})
|
||||||
|
|
||||||
var items = this.items = []
|
var items = this.items = []
|
||||||
@ -1919,6 +1950,10 @@ var BaseBrowserPrototype = {
|
|||||||
Object.create(this.options || {}),
|
Object.create(this.options || {}),
|
||||||
options || {})
|
options || {})
|
||||||
: null)
|
: null)
|
||||||
|
// if make was not called use the .__list__(..) return value...
|
||||||
|
this.items = make_called ?
|
||||||
|
this.items
|
||||||
|
: res
|
||||||
|
|
||||||
// reset the index/cache...
|
// reset the index/cache...
|
||||||
var old_index = this.__item_index_cache || {}
|
var old_index = this.__item_index_cache || {}
|
||||||
@ -1930,20 +1965,18 @@ var BaseBrowserPrototype = {
|
|||||||
// thus avoiding odd duplicate index numbering...
|
// thus avoiding odd duplicate index numbering...
|
||||||
var index = this.__item_index_cache = this.index
|
var index = this.__item_index_cache = this.index
|
||||||
|
|
||||||
// merge old item state...
|
// post process the items...
|
||||||
Object.entries(index)
|
Object.entries(index)
|
||||||
.forEach(function([id, e]){
|
.forEach(function([id, e]){
|
||||||
|
// update item.id of items with duplicate keys...
|
||||||
|
!id.endsWith(that.__key__(e))
|
||||||
|
&& (e.id = id.split(/[\/]/g).pop())
|
||||||
|
// merge old item state...
|
||||||
id in old_index
|
id in old_index
|
||||||
// XXX this is not very elegant(???), revise...
|
// XXX this is not very elegant(???), revise...
|
||||||
&& Object.assign(e,
|
&& Object.assign(e,
|
||||||
old_index[id],
|
old_index[id],
|
||||||
e) })
|
e) })
|
||||||
|
|
||||||
// if make was not called use the .__list__(..) return value...
|
|
||||||
this.items = make_called ?
|
|
||||||
this.items
|
|
||||||
: res
|
|
||||||
|
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1958,6 +1991,9 @@ var BaseBrowserPrototype = {
|
|||||||
// .renderGroup(items, context)
|
// .renderGroup(items, context)
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
// NOTE: there are not to be used directly...
|
||||||
|
// XXX might be a good idea to move these into a separate renderer
|
||||||
|
// object (mixin or encapsulated)...
|
||||||
renderFinalize: function(items, context){
|
renderFinalize: function(items, context){
|
||||||
return this.renderList(items, context) },
|
return this.renderList(items, context) },
|
||||||
renderList: function(items, context){
|
renderList: function(items, context){
|
||||||
@ -2313,10 +2349,8 @@ var BaseBrowserPrototype = {
|
|||||||
items.forEach(function(item){
|
items.forEach(function(item){
|
||||||
delete item.selected }) },
|
delete item.selected }) },
|
||||||
function(){ return this.focused }),
|
function(){ return this.focused }),
|
||||||
|
// XXX use a real toggler here??? (i.e. finish makeItemEventToggler2(..))
|
||||||
toggleSelect: makeItemEventToggler('selected', 'select', 'deselect', 'focused'),
|
toggleSelect: makeItemEventToggler('selected', 'select', 'deselect', 'focused'),
|
||||||
// XXX use a real toggler or just emulate toggler API???
|
|
||||||
// ...meke these two the same and select the simpler version...
|
|
||||||
//toggleSelect2: makeItemEventToggler2('selected', 'select', 'deselect', 'focused'),
|
|
||||||
|
|
||||||
// NOTE: .expand(..) / .collapse(..) / .toggleCollapse(..) ignore
|
// NOTE: .expand(..) / .collapse(..) / .toggleCollapse(..) ignore
|
||||||
// item.collapsed state....
|
// item.collapsed state....
|
||||||
@ -2343,11 +2377,15 @@ var BaseBrowserPrototype = {
|
|||||||
function(elem){ return elem.value && elem.children },
|
function(elem){ return elem.value && elem.children },
|
||||||
{iterateCollapsed: true}),
|
{iterateCollapsed: true}),
|
||||||
|
|
||||||
// XXX need to make primary/secondary item actions more obvious...
|
// primary/secondary item actions...
|
||||||
open: makeItemEventMethod('open',
|
open: makeItemEventMethod('open',
|
||||||
|
// XXX if no open handlers defined trigger .launch(..)...
|
||||||
|
// ...the logic still needs refining...
|
||||||
|
// a different way of doing this is to trigger .launch(..)
|
||||||
|
// right away unless .preventDefault() was called...
|
||||||
function(evt, item){},
|
function(evt, item){},
|
||||||
function(){ return this.focused }),
|
function(){ return this.focused }),
|
||||||
enter: makeItemEventMethod('enter',
|
launch: makeItemEventMethod('launch',
|
||||||
function(evt, item){},
|
function(evt, item){},
|
||||||
function(){ return this.focused }),
|
function(){ return this.focused }),
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user