backbone.js - JointJS Element with ports and tool items (delete, settings etc.) -
i managed enhance svg-shape ports via:
joint.shapes.devs.element = joint.shapes.basic.generic.extend(_.extend({}, joint.shapes.basic.portsmodelinterface, { // svg markup ports });
with output:
i want enhance shape delete button. have:
joint.shapes.devs.toolelement = joint.shapes.basic.generic.extend({ // markup delete button });
based on mike goodwin´s solution in how give jointjs elements remove tool?
my question: how can combine portmodelinterface delete tool? solution should this:
thanks helping me out.
solution
the key this plugin. author extended portsmodelinterface own code move-, resize- , ports-tool. extended further implementing delete functionality. way devs-model open extension in case of functionality.
how it´s done
in tooledviewplugin.js
there joint.plugins.tooledmodelinterface = {}
. in there added:
deletetoolmarkup: '<circle fill="red" r="11"/><path transform="scale(.8) translate(-16, -16)" d="m24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z"/><title>remove element model</title>',
below in joint.plugins.tooledviewinterface = {}
wrote
renderdeletetool: function () { var deletecontainer = this.$('.deletetool').empty(); var markup = v(this.model.deletetoolmarkup); for(var id in markup) deletecontainer.append(markup[id].node); }
an example shape special svg markup other simple rectangle. note <g class="deletetool"/>
in markup:
joint.shapes.devs.unspecifiedprocess = joint.shapes.devs.model.extend(_.extend({}, joint.plugins.tooledmodelinterface, { markup: ['<g class="rotatable">', '<g class="scalable">', '<rect class="body"/>', '<g xmlns="http://www.w3.org/2000/svg" transform="translate(-549.49953,-824.87393)" id="layer1">', '<g transform="matrix(0.933025,0,0,-0.2986125,549.49953,846.37362)" id="g3553">', '<g transform="scale(0.98976,3.0047)" id="g3555">', '<g clip-path="url(#clippath3559)" id="g3557">', '<path d="m 57.805,0.90155 -57.805,0 0,23.06045 57.805,0 l 72.244,12.432 57.805,0.90155 z" id="path3563" style="fill:#b8cde8;fill-opacity:1;fill-rule:evenodd;stroke:none"/>', '</g>', '</g>', '</g>', '</g>', '</g>', '<g class="inports"/>', '<g class="outports"/>', '<g class="movetool"/>', '<g class="resizetool"/>', '<g class="portstool"/>', '<g class="deletetool"/>', '<title class="tooltip"/>', '</g>'].join(''), defaults: joint.util.deepsupplement({ type: 'devs.unspecifiedprocess', inports: [''], outports: [''], movetool: true, resizetool: true, size: { width: 100, height: 31}, attrs: { '.inports circle': { fill: '#fff' }, '.outports circle': { fill: '#fff' }, '.body': { width: 67, height: 21, stroke: 'none' }, } }, joint.shapes.devs.model.prototype.defaults), })); joint.shapes.devs.unspecifiedprocessview = joint.shapes.devs.modelview.extend(joint.plugins.tooledviewinterface);
the final part instantiating element new joint.shapes.devs.unspecifiedprocess
. present drag , drop logic might useful too:
//drag , drop shapes if (modernizr.draganddrop) { // mouse position var posx = 0, posy = 0; // selected element start of dragging var selectedel = ""; var selectedobj = null; var oldobj = null; // $(".draggable-svg").on("dragstart", function(e) { selectedel = this.id; console.log(selectedel); }); $("#drawing-area").on("dragover", function(e) { e.preventdefault(); posx = e.originalevent.pagex - sidebarw; posy = e.originalevent.pagey - topbarh; }); $("#drawing-area").on("drop", function(e) { e.preventdefault(); var element = new joint.shapes.devs[selectedel]({ position: { x: posx, y: posy } }); graph.addcell(element); selectedel = ""; oldobj = selectedobj; selectedobj = element; }); } else { alert("your browser old. please update."); }
Comments
Post a Comment