/*globals svgEditor, svgCanvas, $*/ /*jslint vars: true, continue: true, eqeq: true, todo: true*/ /* * ext-connector.js * * Licensed under the MIT License * * Copyright(c) 2010 Alexis Deveria * */ svgEditor.addExtension("Connector", function(S) { var svgcontent = S.svgcontent, svgroot = S.svgroot, getNextId = S.getNextId, getElem = S.getElem, addElem = S.addSvgElementFromJson, selManager = S.selectorManager, curConfig = svgEditor.curConfig, started = false, start_x, start_y, cur_line, start_elem, end_elem, connections = [], conn_sel = ".se_connector", se_ns, // connect_str = "-SE_CONNECT-", selElems = [], elData = $.data; var lang_list = { "en":[ {"id": "mode_connect", "title": "Connect two objects" } ], "fr":[ {"id": "mode_connect", "title": "Connecter deux objets"} ] }; function getBBintersect(x, y, bb, offset) { if(offset) { offset -= 0; bb = $.extend({}, bb); bb.width += offset; bb.height += offset; bb.x -= offset/2; bb.y -= offset/2; } var mid_x = bb.x + bb.width/2; var mid_y = bb.y + bb.height/2; var len_x = x - mid_x; var len_y = y - mid_y; var slope = Math.abs(len_y/len_x); var ratio; if(slope < bb.height/bb.width) { ratio = (bb.width/2) / Math.abs(len_x); } else { ratio = (bb.height/2) / Math.abs(len_y); } return { x: mid_x + len_x * ratio, y: mid_y + len_y * ratio }; } function getOffset(side, line) { var give_offset = !!line.getAttribute('marker-' + side); // var give_offset = $(line).data(side+'_off'); // TODO: Make this number (5) be based on marker width/height var size = line.getAttribute('stroke-width') * 5; return give_offset ? size : 0; } function showPanel(on) { var conn_rules = $('#connector_rules'); if(!conn_rules.length) { conn_rules = $('