PageRenderTime 48ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/old/backbone_uml_ui_clean.html

https://bitbucket.org/jdpalmer/bluepy
HTML | 220 lines | 203 code | 17 blank | 0 comment | 0 complexity | dc145c1b7da33f84c88f733c75adc7ba MD5 | raw file
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="js/jquery.js" type="text/javascript"></script>
  5. <script src="js/jquery-ui.js" type="text/javascript"></script>
  6. <script src="js/jsrender.js" type="text/javascript"></script>
  7. <script src="js/underscore.js" type="text/javascript"></script>
  8. <script src="js/backbone.js" type="text/javascript"></script>
  9. <link href="css/uml.css" rel="stylesheet" type="text/css" />
  10. </head>
  11. <body>
  12. <h3>Backbone Render</h3>
  13. <div id="classList"></div>
  14. <script id="classTemplate" type="text/x-jquery-tmpl">
  15. <div class="class" id={{=name}}>
  16. <div class="class_name">
  17. {{=name}}
  18. <span class="delete_hover"></span>
  19. <span class="delete"></span>
  20. </div>
  21. <div class="var_list">
  22. {{#each variables}}
  23. <div class="variable" id={{=permission}}_{{=name}}_{{=type}}>
  24. {{=permission}} {{=name}} : {{=type}}
  25. <span class="delete_hover"></span>
  26. <span class="delete"></span>
  27. </div>
  28. {{/each}}
  29. </div>
  30. <div class="func_list">
  31. {{#each functions}}
  32. <div class="function" id={{=permission}}_{{=name}}_{{=rtype}}>
  33. {{=permission}} {{=name}}(
  34. {{#each params}}
  35. {{=type}} {{=name}},
  36. {{/each}}
  37. ) :
  38. {{#if rtype}}
  39. {{=rtype}}
  40. {{else}}
  41. void
  42. {{/if}}
  43. <span class="delete_hover"></span>
  44. <span class="delete"></span>
  45. </div>
  46. {{/each}}
  47. </div>
  48. </div>
  49. </script> <!-- end classTemplate -->
  50. <script id="classTemplateWrapper" type="text/x-jquery-tmpl">
  51. <div class="class" id={{=name}}
  52. <div class="class_name">
  53. {{=name}}
  54. <span class="delete_hover"></span>
  55. <span class="delete"></span>
  56. </div>
  57. {{tmpl "#classTemplate"}}
  58. </div>
  59. </script>
  60. <script type="text/javascript">
  61. //********************
  62. //***START BACKBONE***
  63. //********************
  64. //Class model
  65. Class = Backbone.Model.extend({
  66. defaults: function() {
  67. return {
  68. name: "New Class",
  69. variables : new Array(),
  70. functions : new Array(),
  71. inheritances: new Array()
  72. }
  73. },
  74. initialize: function() {
  75. },
  76. addVariable: function(permission, type, name) {
  77. var variables = this.get("variables");
  78. variables.push({permission: permission, type : type, name : name});
  79. this.set({variables : variables});
  80. },
  81. addFunction: function(permission, rtype, name, params) {
  82. var functions = this.get("functions");
  83. functions.push({permission: permission, rtype : rtype, name : name, params: params});
  84. this.set({functions : functions});
  85. },
  86. addInheritance: function(name) {
  87. var inheritances = this.get("inheritances");
  88. inheritances.push({name: name});
  89. this.set({inheritances : inheritances});
  90. },
  91. removeVariable: function(permission, type, name) {
  92. var variables = _.flatten(this.get("variables"));
  93. var tempVar = {permission: permission, type : type, name : name};
  94. var j;
  95. for(i=0;i<variables.length;i++) {
  96. if(_.isEqual(variables[i], tempVar)) {
  97. j = i;
  98. }
  99. }
  100. variables = _.difference(variables, variables[j]);
  101. this.set({variables : variables});
  102. },
  103. removeFunction: function(permission, rtype, name, params) {
  104. var functions = this.get("functions");
  105. var tempFunc = {permission: permission, rtype : rtype, name : name, params: params};
  106. var j;
  107. for(i=0;i<functions.length;i++) {
  108. if(_.isEqual(functions[i], tempFunc)) {
  109. j = i;
  110. }
  111. }
  112. functions = _.difference(functions, functions[j]);
  113. this.set({functions : functions});
  114. },
  115. removeInheritance: function(name) {
  116. var inheritances = this.get("inheritances");
  117. var tempInheritance = {name: name};
  118. var j;
  119. for(i=0;i<inheritances.length;i++) {
  120. if(_.isEqual(inheritances[i], tempInheritance)) {
  121. j = i;
  122. }
  123. }
  124. inheritances = _.difference(inheritances, inheritances[j]);
  125. this.set({inheritances : inheritances});
  126. }
  127. });
  128. //Classes collection
  129. Classes = Backbone.Collection.extend({
  130. model : Class,
  131. removeClass : function(name) {
  132. var j;
  133. for(i = 0; i < this.length; i++) {
  134. var aClass = this.at(i);
  135. if(name == aClass.get("name")) {
  136. j = i;
  137. }
  138. }
  139. this.remove(j);
  140. }
  141. });
  142. //******************
  143. //***END BACKBONE***
  144. //******************
  145. //Class array
  146. var classes = new Classes();
  147. var classes2 = new Array();
  148. //Sample data
  149. var person = new Class({name: "Person"});
  150. person.cid = "person";
  151. person.addVariable("+", "int", "age");
  152. person.addVariable("-", "float", "annualIncome");
  153. person.addFunction("+", "int", "getAge");
  154. person.addFunction("-", "float", "getAnnualIncome");
  155. person.addFunction("-", "", "setName", [{type : "String", name: "name"}]);
  156. person.addFunction("-", "", "doSomething", []);
  157. classes.add(person);
  158. var student = new Class({name: "Student"});
  159. student.cid = "student";
  160. student.addVariable("-", "float", "GPA");
  161. student.addFunction("+", "", "addGrade", [{type : "String", name: "className"}, {type : "int", name : "Grade"}]);
  162. student.addFunction("-", "float", "getGPA");
  163. student.addInheritance("person");
  164. classes.add(student);
  165. //The render function
  166. //* Make each class draggable, contain to the #classList, change cursor while
  167. // moving, "snap" to the #classList
  168. //* Allow users to delete things, re-render when they do
  169. function render() {
  170. $("#classList").html( $.render( classes.toJSON(), "#classTemplate" ));
  171. $("div.class").draggable( {
  172. containment: '#classList',
  173. cursor: 'move',
  174. handle: 'div.class_name',
  175. stack: 'div.class'
  176. });
  177. $("span.delete").click(function() {
  178. var toDelete = $(this).parent().text().trim();
  179. var parent_class = $(this).parent().attr('class');
  180. var parent_id = $(this ).parent().parent().parent().attr('id').toLowerCase();
  181. if(parent_class == "variable") {
  182. toDelete = toDelete.replace(": ", "");
  183. var split = toDelete.split(" ");
  184. console.log(split);
  185. var classToDeleteFrom = classes.getByCid(parent_id);
  186. classToDeleteFrom.removeVariable(split[0], split[2], split[1]);
  187. console.log(classToDeleteFrom);
  188. }
  189. else if(parent_class == "function") {
  190. }
  191. else if(parent_class == "class_name") {
  192. toDelete = toDelete.toLowerCase();
  193. classes = classes.remove(classes.getByCid(toDelete));
  194. console.log(classes);
  195. }
  196. render();
  197. });
  198. }
  199. //Call it for initial rendering
  200. render();
  201. </script>
  202. </body>
  203. </html>