From 3d7bc806cd57bd394a62ce97f19a540b8c3d216d Mon Sep 17 00:00:00 2001 From: lior Date: Tue, 22 Jan 2013 10:17:19 +0000 Subject: [PATCH] Initial development of Rosetta Diagrams on the web git-svn-id: https://svn.rosettacommons.org/source/trunk/RosettaDiagrams@53275 6189c7af-7406-0410-a2ce-f22f51069c23 --- js/backbone/app.js | 8 + .../DiagramConnectionCollection.js | 10 + .../collections/DiagramElementCollection.js | 22 + js/backbone/model/Attribute.js | 20 + js/backbone/model/DiagramConnection.js | 27 + js/backbone/model/DiagramElement.js | 36 + js/backbone/model_old.js | 97 + js/backbone/view/AttributeView.js | 45 + js/backbone/view/CodeView.js | 51 + js/backbone/view/DiagramConnectionView.js | 41 + .../view/DiagramElementPropertiesView.js | 59 + js/backbone/view/DiagramElementView.js | 106 + js/backbone/view/XMLMoversView.js | 19 + js/backbone/view/XMLProtocolView.js | 19 + js/backbone/view/appView.js | 114 + js/backbone/view_old.js | 197 + js/lib/backbone.js | 1533 ++++++++ js/lib/erd.js | 50 + js/lib/joint.arrows.js | 116 + js/lib/joint.dia.cdm.js | 307 ++ js/lib/joint.dia.devs.js | 164 + js/lib/joint.dia.erd.js | 172 + js/lib/joint.dia.fsa.js | 158 + js/lib/joint.dia.js | 910 +++++ js/lib/joint.dia.org.js | 81 + js/lib/joint.dia.pn.js | 151 + js/lib/joint.dia.serializer.js | 211 + js/lib/joint.dia.uml.js | 381 ++ js/lib/joint.js | 2320 +++++++++++ js/lib/json2.js | 482 +++ js/lib/prettify/lang-apollo.js | 2 + js/lib/prettify/lang-clj.js | 18 + js/lib/prettify/lang-css.js | 2 + js/lib/prettify/lang-go.js | 1 + js/lib/prettify/lang-hs.js | 2 + js/lib/prettify/lang-lisp.js | 3 + js/lib/prettify/lang-lua.js | 2 + js/lib/prettify/lang-ml.js | 2 + js/lib/prettify/lang-n.js | 4 + js/lib/prettify/lang-proto.js | 1 + js/lib/prettify/lang-scala.js | 2 + js/lib/prettify/lang-sql.js | 2 + js/lib/prettify/lang-tex.js | 1 + js/lib/prettify/lang-vb.js | 2 + js/lib/prettify/lang-vhdl.js | 3 + js/lib/prettify/lang-wiki.js | 2 + js/lib/prettify/lang-xq.js | 3 + js/lib/prettify/lang-yaml.js | 2 + js/lib/prettify/prettify.css | 1 + js/lib/prettify/prettify.js | 28 + js/lib/raphael.js | 3395 +++++++++++++++++ js/lib/vkbeautify.0.99.00.beta.js | 358 ++ mockup.html | 408 ++ 53 files changed, 12151 insertions(+) create mode 100644 js/backbone/app.js create mode 100644 js/backbone/collections/DiagramConnectionCollection.js create mode 100644 js/backbone/collections/DiagramElementCollection.js create mode 100644 js/backbone/model/Attribute.js create mode 100644 js/backbone/model/DiagramConnection.js create mode 100644 js/backbone/model/DiagramElement.js create mode 100644 js/backbone/model_old.js create mode 100644 js/backbone/view/AttributeView.js create mode 100644 js/backbone/view/CodeView.js create mode 100644 js/backbone/view/DiagramConnectionView.js create mode 100644 js/backbone/view/DiagramElementPropertiesView.js create mode 100644 js/backbone/view/DiagramElementView.js create mode 100644 js/backbone/view/XMLMoversView.js create mode 100644 js/backbone/view/XMLProtocolView.js create mode 100644 js/backbone/view/appView.js create mode 100644 js/backbone/view_old.js create mode 100644 js/lib/backbone.js create mode 100644 js/lib/erd.js create mode 100644 js/lib/joint.arrows.js create mode 100644 js/lib/joint.dia.cdm.js create mode 100644 js/lib/joint.dia.devs.js create mode 100644 js/lib/joint.dia.erd.js create mode 100644 js/lib/joint.dia.fsa.js create mode 100644 js/lib/joint.dia.js create mode 100644 js/lib/joint.dia.org.js create mode 100644 js/lib/joint.dia.pn.js create mode 100644 js/lib/joint.dia.serializer.js create mode 100644 js/lib/joint.dia.uml.js create mode 100644 js/lib/joint.js create mode 100644 js/lib/json2.js create mode 100644 js/lib/prettify/lang-apollo.js create mode 100644 js/lib/prettify/lang-clj.js create mode 100644 js/lib/prettify/lang-css.js create mode 100644 js/lib/prettify/lang-go.js create mode 100644 js/lib/prettify/lang-hs.js create mode 100644 js/lib/prettify/lang-lisp.js create mode 100644 js/lib/prettify/lang-lua.js create mode 100644 js/lib/prettify/lang-ml.js create mode 100644 js/lib/prettify/lang-n.js create mode 100644 js/lib/prettify/lang-proto.js create mode 100644 js/lib/prettify/lang-scala.js create mode 100644 js/lib/prettify/lang-sql.js create mode 100644 js/lib/prettify/lang-tex.js create mode 100644 js/lib/prettify/lang-vb.js create mode 100644 js/lib/prettify/lang-vhdl.js create mode 100644 js/lib/prettify/lang-wiki.js create mode 100644 js/lib/prettify/lang-xq.js create mode 100644 js/lib/prettify/lang-yaml.js create mode 100644 js/lib/prettify/prettify.css create mode 100644 js/lib/prettify/prettify.js create mode 100644 js/lib/raphael.js create mode 100644 js/lib/vkbeautify.0.99.00.beta.js create mode 100644 mockup.html diff --git a/js/backbone/app.js b/js/backbone/app.js new file mode 100644 index 0000000..c3cad62 --- /dev/null +++ b/js/backbone/app.js @@ -0,0 +1,8 @@ +app = app || {}; + +$(function() { + + // Kick things off by creating the **App**. + new app.AppView().render(); + +}); diff --git a/js/backbone/collections/DiagramConnectionCollection.js b/js/backbone/collections/DiagramConnectionCollection.js new file mode 100644 index 0000000..9fa74bb --- /dev/null +++ b/js/backbone/collections/DiagramConnectionCollection.js @@ -0,0 +1,10 @@ +var app = app || {}; + +(function() { + + var DiagramConnectionList = Backbone.Collection.extend({ + model: app.DiagramConnection + }); + + app.Connections = new DiagramConnectionList(); +}()); \ No newline at end of file diff --git a/js/backbone/collections/DiagramElementCollection.js b/js/backbone/collections/DiagramElementCollection.js new file mode 100644 index 0000000..2fb28c7 --- /dev/null +++ b/js/backbone/collections/DiagramElementCollection.js @@ -0,0 +1,22 @@ +var app = app || {}; + +(function() { + + var DiagramElementList = Backbone.Collection.extend({ + model: app.DiagramElement, + +// initialize: function() { +// this.listenTo(this,'add',this.addModelListener); +// }, +// +// addModelListener: function(model,attributes) { +// this.listenTo(model,"change",this.invokeChangeEvent); +// }, +// +// invokeChangeEvent: function(model,attributes) { +// console.log("The collection recorded a model change" + model); +// } + }); + + app.Elements = new DiagramElementList(); +}()); \ No newline at end of file diff --git a/js/backbone/model/Attribute.js b/js/backbone/model/Attribute.js new file mode 100644 index 0000000..48649d7 --- /dev/null +++ b/js/backbone/model/Attribute.js @@ -0,0 +1,20 @@ +var app = app || {}; +(function() { + + 'use strict'; + + app.Attribute = Backbone.Model.extend({ + + defaults: { + key: 'key', + value:'val', + } + + }); + + + app.AttributeList = Backbone.Collection.extend({ + model: app.Attribute + }); +} +()); \ No newline at end of file diff --git a/js/backbone/model/DiagramConnection.js b/js/backbone/model/DiagramConnection.js new file mode 100644 index 0000000..241c77a --- /dev/null +++ b/js/backbone/model/DiagramConnection.js @@ -0,0 +1,27 @@ +(function() { + + 'use strict'; + + app.DiagramConnection = Backbone.Model.extend({ + + defaults: { + source: undefined, + target: undefined, + type: undefined, + jointObj: undefined + }, + + }); + + app.pendingConnection = undefined; + + /*Flow of creating a connection: + 1)Click on a 'create connection' button turns on a flag on all DiagramElement models to wait for a connection. + 2)Click on a DiagramElement creates a connection object (temp/adds to a collection?) and assign the source element to it. + 3)Click on another DiagramElement sets the target element: + 3.1)Checks if the source element is already set. If it is , set the target element. + 4)Once the target element is set , the collection listens to this event and adds it to the collection. + 5)The ConnectionView also listens to the target-set event and shows the connection. + */ + +}()); \ No newline at end of file diff --git a/js/backbone/model/DiagramElement.js b/js/backbone/model/DiagramElement.js new file mode 100644 index 0000000..ddad2ec --- /dev/null +++ b/js/backbone/model/DiagramElement.js @@ -0,0 +1,36 @@ +(function() { + + 'use strict'; + + + app.DiagramElement = Backbone.Model.extend({ + + defaults: { + x:0, + y:0, + name:"New_Element", + connectionReady: false, + deleteMode: false, + jointObj: undefined, + attributes: undefined, + typeObj: undefined + }, + + initialize: function() { + var new_attr_list = new app.AttributeList(); + new_attr_list.add(new app.Attribute({key:'name',value:'element_'+app.elementCounter++})); + this.set('attributes', new_attr_list); + + this.listenTo(new_attr_list,"change",this.attributes_changed); + this.listenTo(new_attr_list,"add",this.attributes_changed); + this.listenTo(new_attr_list,"remove",this.attributes_changed); + }, + + attributes_changed: function() { + console.log("Triggering change event"); + this.trigger("change"); + } + + }); + +}()); \ No newline at end of file diff --git a/js/backbone/model_old.js b/js/backbone/model_old.js new file mode 100644 index 0000000..64a95f8 --- /dev/null +++ b/js/backbone/model_old.js @@ -0,0 +1,97 @@ + + +var rdiag = rdiag || {}; + +rdiag.DiagramConnection = Backbone.Model.extend({ + defaults: { + source: undefined, + target: undefined, + type: Joint.dia.uml + } +}); + +rdiag.DiagramConnectionCollection = Backbone.Collection.extend({ + model: rdiag.DiagramConnection +}); + + +rdiag.DiagramElement = Backbone.Model.extend({ + + defaults: { + x:0, + y:0, + name: "NewMover", + canvas: undefined, + elem: undefined, + }, + +}); + +rdiag.MenuItem = Backbone.Model.extend( { + + defaults: { + x: 0, + y: 0, + action: "DDD", + img: undefined, + diagramElement: undefined + }, + +}); + +rdiag.DiagramElementList = Backbone.Collection.extend({ + model: rdiag.DiagramElement +}); + +var MenuItems = Backbone.Collection.extend({ + model: rdiag.MenuItem + +}); + +var elementsInCanvas = new rdiag.DiagramElementList(); + +rdiag.createDiagramElement = function(params) { + var d = new rdiag.DiagramElement(params); + elementsInCanvas.add(d); + return d; +}; + +rdiag.createMenuItem = function(params) { + var m = new rdiag.MenuItem(params); + return m; +} + +rdiag.Canvas = Backbone.Model.extend( { + + defaults: { + elements: new rdiag.DiagramElementList(), + connections: new rdiag.DiagramConnectionCollection(), + menu: rdiag.createMenuItem(), + }, + +}); + +rdiag.App = Backbone.Model.extend({ + defaults:{ + canvas: new rdiag.Canvas(), + sourceElement: undefined, + targetElement: undefined, + connectionMode: false + }, + connectionReady: function() { + var s = this.get('sourceElement'); + return s != undefined; + + }, + + resetElements: function() { + this.set('sourceElement',undefined); + this.set('targetElement',undefined); + }, + isInConnectionMode: function() { + return this.get('connectionMode'); + } +}); + + + diff --git a/js/backbone/view/AttributeView.js b/js/backbone/view/AttributeView.js new file mode 100644 index 0000000..839f64c --- /dev/null +++ b/js/backbone/view/AttributeView.js @@ -0,0 +1,45 @@ +var app = app || {}; +$(function() { + + app.AttributeView = Backbone.View.extend({ + + tagName: 'li', + template: undefined, + + events: { + "focusout #attr_key" : "update_model", + "focusout #attr_value" : "update_model", + "keypress #attr_key": "update_model_keypressed", + "keypress #attr_value": "update_model_keypressed", + "click #deleteBtn": "destroy_attribute" + }, + + initialize: function() { + this.template = _.template( $('#attribute_template').html() ); + }, + + destroy_attribute: function() { + this.model.destroy(); + this.remove(); + }, + + render: function() { + this.$el.html( this.template( this.model.toJSON() ) ); + return this; + }, + + update_model:function() { + var key = this.$('#attr_key').val(); + var value = this.$('#attr_value').val(); + this.model.set('key',key); + this.model.set('value',value); + }, + + update_model_keypressed: function(e) { + if ( e.which == ENTER_KEY ) { + this.update_model(); + } + } + + }); +}); \ No newline at end of file diff --git a/js/backbone/view/CodeView.js b/js/backbone/view/CodeView.js new file mode 100644 index 0000000..d15face --- /dev/null +++ b/js/backbone/view/CodeView.js @@ -0,0 +1,51 @@ +var app = app || {}; +$(function() { + + app.CodeView = Backbone.View.extend({ + el:'#code', + + initialize: function() { + this.listenTo(app.Elements,'change',this.render); + this.listenTo(app.Connections,'change',this.render); + }, + + render: function() { + console.log("rendering code ... "); + this.$('#xml_movers').empty(); + this.$('#xml_filters').empty(); + app.Elements.each( function(element) { + var codeView = new app.XMLMoversView({model: element}); + var htmlCode = codeView.render().el; + var typeObj = element.get('typeObj'); + this.$(typeObj.codeTemplate).append(htmlCode); + }); + this.renderConnections(); + //formatXml is located in the utils.js file. it formats the XML file to have better indentation + var xml = vkbeautify.xml(this.$el.text()); + $('#display_code').text(xml); + prettyPrint(); + }, + + renderConnections: function() { + var order=[]; + this.$('#xml_protocols').empty(); + app.Connections.each(function(con){ + for(var i=0; i or