diff options
author | Patrick Simianer <p@simianer.de> | 2016-05-19 13:25:32 +0200 |
---|---|---|
committer | Patrick Simianer <p@simianer.de> | 2016-05-19 13:25:32 +0200 |
commit | c5750c63c6005ae022c11166ba40f62a11df487f (patch) | |
tree | eff3a8687866b6c1528b46f6d6f1296f7e1640a1 | |
parent | 8a5c0adf5ccd818d2924364358d8d9b45e84260b (diff) |
fixes, check align, better isOnScreen, count *
-rw-r--r-- | derivation-editor.js | 98 | ||||
-rw-r--r-- | raphael.inline_text_editing.js | 7 |
2 files changed, 80 insertions, 25 deletions
diff --git a/derivation-editor.js b/derivation-editor.js index e5c6f44..4472d13 100644 --- a/derivation-editor.js +++ b/derivation-editor.js @@ -49,11 +49,12 @@ var DE_paper, DE_undo_stack = [], // Data DE_target_done = [], - DE_source_done = [], DE_data_source = null, DE_data_source_raw = null, DE_data_target = null, - DE_data_align = null; + DE_data_align = null, + DE_count_click = 0, + DE_count_kbd = 0; /////////////////////////////////////////////////////////////////////////////// @@ -462,6 +463,7 @@ var DE_item_click_target = function (e, item) if (DE_ui_lock) return; if (DE_target_done.indexOf(item)>-1) return; if (DE_connect_mode) { + DE_count_click += 1; if (DE_connections[DE_conn_str(DE_connect_mode_shape,item)]) { DE_undo_stack.push(["rm_conn", DE_connect_mode_shape["id_"], item["id_"]]); @@ -497,6 +499,7 @@ var DE_item_click_target = function (e, item) var DE_item_click_source = function (e, item) { if (DE_ui_lock) return; + DE_count_click += 1; if (DE_connect_mode) { if (item != DE_connect_mode_shape) return; @@ -505,6 +508,8 @@ var DE_item_click_source = function (e, item) DE_connect_mode = false; DE_color_source_phrases(); DE_connect_mode_shape = null; + DE_ui_style_normal(item); + item.attr({"stroke-width":"3px"}); } else { DE_ui_style_mark(item); DE_connect_mode = true; @@ -562,9 +567,11 @@ var DE_make_obj = function (x, text, type, grid_pos=null, id=null) // inline text editing DE_paper.inlineTextEditing(tx); sh.dblclick(function(){ + DE_count_click += 1; DE_enter_edit_mode(this); }); tx.dblclick(function(){ + DE_count_click += 1; DE_enter_edit_mode(this.pair); }) } else if (type == "source") { @@ -795,6 +802,11 @@ var DE_extract_data = function () } // image d["svg"] = DE_get_raw_svg_data(); + + // meta + d["count_click"] = DE_count_click; + d["count_kbd"] = DE_count_kbd; + // output s = JSON.stringify(d); el.innerHTML = s; @@ -841,6 +853,8 @@ var DE_reset = function() DE_kbd_select_mode = false; DE_target_done = []; DE_undo_stack = []; + DE_count_click = 0; + DE_count_kbd = 0; document.getElementById("holder").parentElement.removeChild( document.getElementById("holder") @@ -900,6 +914,7 @@ var DE_init = function () document.onkeypress = function (e) { if (DE_ui_lock) return; if (DE_edit_mode) return; + DE_count_kbd += 1; e = e || window.event; var char_code = e.which || e.keyCode; @@ -1068,7 +1083,8 @@ var DE_kbd_get_next_to = function(dir, shape) return obj; } -isOnScreen = function(obj){ +var isOnScreen = function(obj) +{ var win = $("#holder"); @@ -1089,21 +1105,25 @@ isOnScreen = function(obj){ return 2; }; +var check_isOnScreen = function (obj) +{ + var x = isOnScreen(obj) + while (x < 2) { + if (x == 0) { + $("#holder").scrollTo($("#holder").scrollLeft()+1.5*obj.getBBox().width); + } else if (x == 1) { + $("#holder").scrollTo($("#holder").scrollLeft()-1.5*obj.getBBox().width); + } + x = isOnScreen(obj); + } +} + var DE_kbd_jump_to_phrase = function(obj) { if (obj == DE_kbd_focused_phrase) return; if (obj) { DE_kbd_focus_shape(obj, DE_kbd_focused_phrase); - - var x = isOnScreen(obj) - while (x < 2) { - if (x == 0) { - $("#holder").scrollTo($("#holder").scrollLeft()+3*obj.getBBox().width); - } else if (x == 1) { - $("#holder").scrollTo($("#holder").scrollLeft()-3*obj.getBBox().width); - } - x = isOnScreen(obj); - } + check_isOnScreen(obj); } } @@ -1113,16 +1133,7 @@ var DE_kbd_select_phrase = function(dir="right", shape) if (obj) { DE_kbd_focus_shape(obj, DE_kbd_focused_phrase); - - var x = isOnScreen(obj) - while (x < 2) { - if (x == 0) { - $("#holder").scrollTo($("#holder").scrollLeft()+3*obj.getBBox().width); - } else if (x == 1) { - $("#holder").scrollTo($("#holder").scrollLeft()-3*obj.getBBox().width); - } - x = isOnScreen(obj); - } + check_isOnScreen(obj); } } @@ -1163,6 +1174,8 @@ var DE_kbd_focus_shape = function(obj, obj2=null) } if (obj2) DE_ui_style_normal(obj2); + + check_isOnScreen(obj); } var DE_kbd_swap = function(dir="right", shape) @@ -1242,6 +1255,8 @@ var DE_kbd_swap = function(dir="right", shape) for (key in DE_connections) { DE_paper.connection(DE_connections[key]); } + + check_isOnScreen(shape); } var DE_kbd_start_interface = function () @@ -1368,3 +1383,40 @@ var DE_color_source_phrases = function () } } +var DE_check_align = function () +{ + var aligned_source = {}; + var aligned_target = {}; + for (key in DE_connections) { + var a = key.split("-"); + aligned_source[Number(a[0])] = true; + aligned_target[Number(a[1])] = true; + } + + var all_aligned = true; + for (var i = 0; i < DE_shapes.length; i++) { + var t = DE_shapes[i]["type_"]; + var id = DE_shapes[i]["id_"]; + if (t == "target") { + if (!aligned_target[id]) { + all_aligned = false; + break; + } + } else if (t == "source") { + if (!aligned_source[id]) { + all_aligned = false; + break; + } + } + } + + return all_aligned; +} + +$(document).mouseup(function (e) { + if ($(e.target).attr("id") == "holder") + //alert(e.pageY); + DE_count_click += 1; +}); + + diff --git a/raphael.inline_text_editing.js b/raphael.inline_text_editing.js index db5df1e..e0a6953 100644 --- a/raphael.inline_text_editing.js +++ b/raphael.inline_text_editing.js @@ -75,7 +75,8 @@ var originalBbox = subject._getBBox(); var width = originalBbox.width; var height = originalBbox.height; - var x = container.offsetLeft + subject.attrs.x + translateX; + var x = container.offsetLeft + originalBbox.x + translateX; + x -= $("#holder").scrollLeft(); var y = container.offsetTop + subject.attrs.y - height / 2 + translateY; var sTransform = ''; var sOrigin = 'center center'; @@ -95,7 +96,6 @@ // Re-apply stored transformation to the element and hide it subject.node.setAttribute("transform", matrix); subject.hide(); - // Prepare input styles var oStyles = { position: 'absolute', @@ -144,6 +144,9 @@ this.input = document.createElement("textarea"); this.input.value = subject.attrs.text ? subject.attrs.text.replace(/\'/g,"\\\'") : ''; this.input.setAttribute("style", sStyles); + this.input.addEventListener('keypress', function () { + DE_count_kbd += 1; + }); this.input.addEventListener('keyup', this._handleKeyDown.bind(this)); |