jointjs - Editable text input on shapes -


how have text area input/text input inside rectangle in joint js?

i have few rectangles. have text input rectangles begin with. have create custom element or can use pre-defined shapes?

here's code:

                var graph = new joint.dia.graph;                 var paper = new joint.dia.paper({                     el: $('#myholder'),                     width: 1000,                     height: 680,                     model: graph,                     gridsize: 1,                     defaultlink: new joint.dia.link({                         attrs: {'.marker-target': {d: 'm 10 0 l 0 5 l 10 10 z'}}                     }),                     validateconnection: function (cellviews, magnets, cellviewt, magnett, end, linkview) {                         // prevent linking input ports.                         if (magnets && magnets.getattribute('type') === 'input')                             return false;                         // prevent linking output ports input ports within 1 element.                         if (cellviews === cellviewt)                             return false;                         // prevent loop linking                         return (magnets !== magnett);                         // prevent linking input ports.                         return magnett && magnett.getattribute('type') === 'input';                     },                     snaplinks: {radius: 75},                     interactive: function (cellview, methodname)                     {                         if (cellview.model.get('isinteractive') === false)                             return false;                         return true;                     }                 });                  joint.shapes.devs.circlemodelview = joint.shapes.devs.modelview;                  var rect = new joint.shapes.basic.rect({                     isinteractive: false,                     position: {x: 10, y: 50},                     size: {width: 51, height: 41},                     attrs: {rect: {fill: '#d6f2fc', stroke: '#7e7e7e'}}                 });                  var rectgroup0 = new joint.shapes.basic.rect({                     isinteractive: false,                     position: {x: 10, y: 170},                     size: {width: 51, height: 41},                     attrs: {rectgroup0: {fill: 'white', stroke: '#7e7e7e'}}                 });                  paper.on('cell:pointerdblclick', function (cellview, evt, x, y)                 {                     var clone = cellview.model.clone();                     if (rect.id === cellview.model.id)                     {                         clone = new joint.shapes.devs.model({                             position: {x: 160, y: 50},                             size: {width: 111, height: 61},                             inports: [''],                             outports: [''],                             attrs: {                                 '.': {magnet: false},                                 '.label': {text: '', 'ref-x': .4, 'ref-y': .2},                                 '.inports circle': {type: 'input'},                                 '.outports circle': {type: 'output'},                                 '.port-body': {r: 3}                             }                         });                         graph.addcell(clone);                     }                     else if (rectgroup0.id === cellview.model.id)                     {                         clone = new joint.shapes.devs.model({                             position: {x: 160, y: 170},                             size: {width: 551, height: 150},                             attrs: {                                 '.label': {text: 'group', 'ref-y': 0.1, 'y-alignment': 'middle'},                                 rectgroup0: {fill: ''},                                 '.': {magnet: true}                             }                         });                         graph.addcell(clone);                     }                 });  //                // first, unembed cell has been grabbed user.                 paper.on('cell:pointerdown', function (cellview, evt, x, y) {                      var cell = cellview.model;                     if (!cell.get('embeds') || cell.get('embeds').length === 0) {                         // show dragged element above other cells (except when                         // element parent).                         cell.tofront();                     }                      if (cell.get('parent')) {                         graph.getcell(cell.get('parent')).unembed(cell);                     }                 });                 // when dragged cell dropped on cell, let become child of                 //element below.                 paper.on('cell:pointerup', function (cellview, evt, x, y) {                      if (cellview.model.islink())                         return;                      var cell = cellview.model;                     var cellviewsbelow = paper.findviewsfrompoint(cell.getbbox().center());                     if (cellviewsbelow.length) {                         // note findviewsfrompoint() returns view `cell` itself.                         var cellviewbelow = _.find(cellviewsbelow, function (c) {                             return c.model.id !== cell.id;                         });                         // prevent recursive embedding.                         if (cellviewbelow && cellviewbelow.model.get('parent') !== cell.id) {                             cellviewbelow.model.embed(cell);                         }                     }                 });                 graph.addcells([rect, rectgroup0]); 

you have create custom html element.

    var graph = new joint.dia.graph;     var paper = new joint.dia.paper({ el: $('#paper-html-elements'), width: 650, height: 400, gridsize: 1, model: graph });  // create custom element. // ------------------------      joint.shapes.html = {};     joint.shapes.html.element = joint.shapes.basic.rect.extend({         defaults: joint.util.deepsupplement({             type: 'html.element',             attrs: {                 rect: { stroke: 'none', 'fill-opacity': 0 }             }         }, joint.shapes.basic.rect.prototype.defaults)     });  // create custom view element displays html div above it. // -------------------------------------------------------------------------      joint.shapes.html.elementview = joint.dia.elementview.extend({          template: [             '<div class="html-element">',             '<button class="delete">x</button>',             '<input type="text" value="i\'m html input" />',             '</div>'         ].join(''),          initialize: function() {             _.bindall(this, 'updatebox');             joint.dia.elementview.prototype.initialize.apply(this, arguments);              this.$box = $(_.template(this.template)());             // prevent paper handling pointerdown.             this.$box.find('input,select').on('mousedown click', function(evt) {                 evt.stoppropagation();             });             // example of reacting on input change , storing input data in cell model.             this.$box.find('input').on('change', _.bind(function(evt) {                 this.model.set('input', $(evt.target).val());             }, this));             this.$box.find('.delete').on('click', _.bind(this.model.remove, this.model));             // update box position whenever underlying model changes.             this.model.on('change', this.updatebox, this);             // remove box when model gets removed graph.             this.model.on('remove', this.removebox, this);              this.updatebox();         },         render: function() {             joint.dia.elementview.prototype.render.apply(this, arguments);             this.paper.$el.prepend(this.$box);             this.updatebox();             return this;         },         updatebox: function() {             // set position , dimension of box covers jointjs element.             var bbox = this.model.getbbox();             // example of updating html data stored in cell model.             this.$box.find('label').text(this.model.get('label'));             this.$box.find('span').text(this.model.get('select'));             this.$box.css({                 width: bbox.width,                 height: bbox.height,                 left: bbox.x,                 top: bbox.y,                 transform: 'rotate(' + (this.model.get('angle') || 0) + 'deg)'             });         },         removebox: function(evt) {             this.$box.remove();         }     });  // create jointjs elements , add them graph usual. // -----------------------------------------------------------      var el1 = new joint.shapes.html.element({         position: { x: 80, y: 80 },         size: { width: 170, height: 100 },         label: 'i html',         select: 'one'     });     var el2 = new joint.shapes.html.element({         position: { x: 370, y: 160 },         size: { width: 170, height: 100 },         label: 'me too',         select: 'two'     });     var l = new joint.dia.link({         source: { id: el1.id },         target: { id: el2.id },         attrs: { '.connection': { 'stroke-width': 5, stroke: '#34495e' } }     });      graph.addcells([el1, el2, l]);  }) 

please check out link http://resources.jointjs.com/tutorial/html-elements


Comments

Popular posts from this blog

node.js - StackOverflow API not returning JSON -

python - Subclassed QStyledItemDelegate ignores Stylesheet -

java - HttpClient 3.1 Connection pooling vs HttpClient 4.3.2 -