--- a/svghmi/svghmi.js Thu Mar 26 14:21:52 2020 +0100
+++ b/svghmi/svghmi.js Fri Mar 27 14:25:24 2020 +0100
@@ -3,6 +3,7 @@
var cache = hmitree_types.map(_ignored => undefined);
var updates = {};
var need_cache_apply = [];
+var jumps_need_update = false;
var jump_history = [[default_page, undefined]];
function dispatch_value_to_widget(widget, index, value, oldval) {
@@ -93,6 +94,8 @@
widget.apply_cache();
}
+ if(jumps_need_update) update_jumps();
+
apply_updates();
requestAnimationFrameID = null;
}
@@ -260,6 +263,7 @@
var current_visible_page;
var current_subscribed_page;
+var current_page_index;
function prepare_svg() {
for(let eltid in detachable_elements){
@@ -278,7 +282,39 @@
if(page_name == undefined)
page_name = current_subscribed_page;
- return switch_subscribed_page(page_name, page_index);
+
+ let old_desc = page_desc[current_subscribed_page];
+ let new_desc = page_desc[page_name];
+
+ if(new_desc == undefined){
+ /* TODO LOG ERROR */
+ return false;
+ }
+
+ if(page_index == undefined){
+ page_index = new_desc.page_index;
+ }
+
+ if(old_desc){
+ old_desc.absolute_widgets.map(w=>w.unsub());
+ old_desc.relative_widgets.map(w=>w.unsub());
+ }
+ new_desc.absolute_widgets.map(w=>w.sub());
+ var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
+ new_desc.relative_widgets.map(w=>w.sub(new_offset));
+
+ update_subscriptions();
+
+ current_subscribed_page = page_name;
+ current_page_index = page_index;
+
+ jumps_need_update = true;
+
+ requestHMIAnimation();
+
+ jump_history.push([page_name, page_index]);
+
+ return true;
};
function* chain(a,b){
@@ -364,41 +400,11 @@
foreach_subscribe.call(this,off);
update_subscriptions();
need_cache_apply.push(this);
+ jumps_need_update = true;
requestHMIAnimation();
console.log(opstr, new_item_offset);
}
-function switch_subscribed_page(page_name, page_index) {
- let old_desc = page_desc[current_subscribed_page];
- let new_desc = page_desc[page_name];
-
- if(new_desc == undefined){
- /* TODO LOG ERROR */
- return false;
- }
-
- if(page_index == undefined){
- page_index = new_desc.page_index;
- }
-
- if(old_desc){
- old_desc.absolute_widgets.map(w=>w.unsub());
- old_desc.relative_widgets.map(w=>w.unsub());
- }
- new_desc.absolute_widgets.map(w=>w.sub());
- var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
- new_desc.relative_widgets.map(w=>w.sub(new_offset));
-
- update_subscriptions();
-
- current_subscribed_page = page_name;
-
- requestHMIAnimation();
-
- jump_history.push([page_name, page_index]);
-
- return true;
-}
function switch_visible_page(page_name) {
@@ -429,6 +435,12 @@
current_visible_page = page_name;
};
+function update_jumps() {
+ page_desc[current_visible_page].jumps.map(w=>w.notify_page_change(current_visible_page,current_page_index));
+ jumps_need_update = false;
+};
+
+
// Once connection established
ws.onopen = function (evt) {
init_widgets();