From 85a4f3df0a764fa2ca72e30a0d4185c6cdf047c1 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sun, 23 Dec 2018 14:58:00 +0300 Subject: [PATCH] working on a bug related to .order_index... Signed-off-by: Alex A. Naanou --- ui (gen4)/imagegrid/data.js | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/ui (gen4)/imagegrid/data.js b/ui (gen4)/imagegrid/data.js index 98c4447d..93d8d178 100755 --- a/ui (gen4)/imagegrid/data.js +++ b/ui (gen4)/imagegrid/data.js @@ -134,6 +134,13 @@ if(typeof(sha1) != 'undefined'){ /*********************************************************************/ // Data... +var OrderProxy = { + set: function(target, property, value, receiver){ + target[property] = value + return true + } +} + var DataClassPrototype = { // NOTE: we consider the input list sorted... fromArray: function(list){ @@ -241,11 +248,32 @@ var DataPrototype = { this.getRibbon(value) : value }, + // XXX need to figure out how to both reset the .order_index in a safe + // way and keep it to speed things up in consecutive calls that + // do not touch the order... get order(){ return this.__order }, set order(value){ + var that = this delete this.__order_index + + //* this.__order = value + /*/ + // XXX this makes things substantially slower... + this.__order = value.isOrderProxy ? + value + : new Proxy(value, { + get: function(target, name){ + return name == 'isOrderProxy' + || target[name] }, + set: function(target, name, value){ + that.order_index[value] = name + target[name] = value + return true + }, + }) + //*/ }, get order_index(){ return this.__order_index = this.__order_index || this.order.toKeys() }, @@ -351,8 +379,9 @@ var DataPrototype = { : gids target = target == null ? [] : target - order = this.order + var order = this.order //var order_idx = order.toKeys() + // XXX to cache order index we need to update it every time we change order... var order_idx = this.order_index || order.toKeys() var rest = [] @@ -1701,7 +1730,6 @@ var DataPrototype = { lst.length = l lst.reverse() }) - return this }, @@ -1807,6 +1835,7 @@ var DataPrototype = { // horizontal shift -- gather the images horizontally... if(reference != 'keep'){ var ref = this.getImage(reference) + var order = this.order // NOTE: the reference index will not move as nothing will // ever change it's position relative to it... @@ -2408,6 +2437,7 @@ var DataPrototype = { n[set][key] = lst.splice(0, i) }) n.current = n.order.indexOf(tail.current) >= 0 ? tail.current : n.order[0] + n.order_index = n.order.toKeys() res.push(n) }) @@ -2470,6 +2500,7 @@ var DataPrototype = { // merge order... // XXX need to take care of gid conflicts... (???) base.order = base.order.concat(data.order) + base.order_index = base.order.toKeys() // merge .ribbons and .ribbon_order... // NOTE: this is a special case, so we do not handle it in