active_designer 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/bin/active_designer +8 -0
  3. data/lib/active_designer/file_converter.rb +27 -0
  4. data/lib/active_designer/public/css/bootstrap.min.css +7 -0
  5. data/lib/active_designer/public/css/cards.css +107 -0
  6. data/lib/active_designer/public/css/font-awesome-4.7.0/css/font-awesome.min.css +4 -0
  7. data/lib/active_designer/public/css/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
  8. data/lib/active_designer/public/css/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
  9. data/lib/active_designer/public/css/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +2671 -0
  10. data/lib/active_designer/public/css/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  11. data/lib/active_designer/public/css/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
  12. data/lib/active_designer/public/css/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  13. data/lib/active_designer/public/css/main.css +199 -0
  14. data/lib/active_designer/public/js/bootstrap.min.js +7 -0
  15. data/lib/active_designer/public/js/jquery-3.1.1.js +10220 -0
  16. data/lib/active_designer/public/js/jsPlumb-2.2.8.js +13836 -0
  17. data/lib/active_designer/public/js/schema/add-column.js +82 -0
  18. data/lib/active_designer/public/js/schema/edit-checker.js +14 -0
  19. data/lib/active_designer/public/js/schema/edit-table-name.js +77 -0
  20. data/lib/active_designer/public/js/schema/jsPlumb.js +70 -0
  21. data/lib/active_designer/public/js/schema/listeners.js +265 -0
  22. data/lib/active_designer/public/js/schema/main.js +72 -0
  23. data/lib/active_designer/public/js/schema/mouse-controls.js +15 -0
  24. data/lib/active_designer/public/js/schema/table-html.js +24 -0
  25. data/lib/active_designer/public/js/tether.min.js +1 -0
  26. data/lib/active_designer/schema_creator.rb +86 -0
  27. data/lib/active_designer/template.html.erb +121 -0
  28. data/lib/active_designer.rb +69 -0
  29. metadata +76 -0
@@ -0,0 +1,82 @@
1
+ function editColumnName(){
2
+ $('body').unbind('click')
3
+ $('.column-title').click(function() {
4
+ if (openEditChecker()) { return }
5
+ $(this).popover('hide');
6
+ this.outerHTML = "<form><input class='column-form' type='text' name='tableName' value='" + this.innerText + "'></form>";
7
+ enterKeypressColumn()
8
+ clickOutsideColumnKeypress()
9
+ });
10
+ }
11
+
12
+ function enterKeypressColumn() {
13
+ $('.column-form').keypress(function (e) {
14
+ var key = e.which;
15
+ if(key == 13) {
16
+ updateColumnName()
17
+ return false;
18
+ }
19
+ });
20
+ }
21
+
22
+ function updateColumnName() {
23
+ let columnName = $('.column-form')[0].value;
24
+ $('.column-form')[0].parentElement.outerHTML =
25
+ "<span class='column-title' data-toggle='popover' data-trigger='hover' data-content='Edit column name'>" + columnName.toLowerCase() + "</span>"
26
+ $('[data-toggle="popover"]').popover()
27
+ editColumnName()
28
+ }
29
+
30
+ function clickOutsideColumnKeypress() {
31
+ $('body').click(function() {
32
+ if($(event.target).is('span.column-title')) { return }
33
+ if(!$(event.target).is('.column-form')) {
34
+ updateColumnName()
35
+ }
36
+ });
37
+ }
38
+
39
+ function editTypeName(columnType){
40
+ $('.tag-pill').click(function() {
41
+ if ($('input').length === 0) {
42
+ $(this).popover('hide');
43
+ $('body').append(
44
+ "<form><input class='type-form' type='hidden' value='placeholder'></form>"
45
+ )
46
+ this.outerHTML =
47
+ "<div class='dropdown open float-xs-left'>" +
48
+ "<div class='btn btn-default btn-xs dropdown-toggle' id='dropdownMenuButton' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>" +
49
+ columnType +
50
+ "</div>" +
51
+ "<div class='dropdown-menu' aria-labelledby='dropdownMenuButton'>" +
52
+ "<div class='dropdown-item'>integer</div>" +
53
+ "<div class='dropdown-item'>decimal</div>" +
54
+ "<div class='dropdown-item'>text</div>" +
55
+ "<div class='dropdown-item'>ref</div>" +
56
+ "</div>" +
57
+ "</div>"
58
+ setTimeout(cont,10)
59
+ function cont() {
60
+ $("#dropdownMenuButton").dropdown("toggle")
61
+ }
62
+ $('.dropdown-item').click(function() {
63
+ let typeName = this.innerText;
64
+ this.parentElement.parentElement.outerHTML =
65
+ "<span class='tag tag-default tag-pill float-xs-left' data-toggle='popover' data-trigger='hover' data-content='Edit type'>" + typeName + "</span>"
66
+ $('[data-toggle="popover"]').popover()
67
+ $('input')[0].outerHTML = ""
68
+ editTypeName(columnType)
69
+ });
70
+ }
71
+ });
72
+ }
73
+
74
+ function columnHTML(columnObj,deleteClass) {
75
+ return `<li class='list-group-item' id='${columnObj.id}'>` +
76
+ `<span class='tag tag-default float-xs-left type-span' >${columnObj.type}</span>` +
77
+ "<div class='column-title-outer' >" +
78
+ `<span class='column-title'>${columnObj.name}</span>` +
79
+ "</div>" +
80
+ `<i class='fa fa-trash ${deleteClass}' data-toggle='popover' data-trigger='hover' data-content='Destroy column'></i>` +
81
+ "</li>"
82
+ }
@@ -0,0 +1,14 @@
1
+ function getSchema() {
2
+ return JSON.parse(localStorage.getItem('schema'));
3
+ }
4
+
5
+ function setSchema(schema) {
6
+ localStorage.setItem("schema",JSON.stringify(schema));
7
+ }
8
+
9
+ let newTableID = 301;
10
+
11
+ function openEditChecker() {
12
+ if ($('input').length > 0) { return true };
13
+ return false;
14
+ }
@@ -0,0 +1,77 @@
1
+ function editTableName(){
2
+ $('body').unbind('click');
3
+ $('.table-title').on('dblclick',null,null,setupTableNameForm);
4
+ }
5
+
6
+ function setupTableNameForm(event) {
7
+ if (openEditChecker()) { return };
8
+ let originalTitle = this.innerText;
9
+ $(this).popover('hide');
10
+ let cardID = $(this).parents('.card')[0].id;
11
+ this.outerHTML = tableTitleFormHTML(this.innerText);
12
+ addEditTableNameListeners(originalTitle, cardID);
13
+ }
14
+
15
+ function addEditTableNameListeners(originalTitle, cardID) {
16
+ $('.table-form').on('keypress', null, { originalTitle: originalTitle,
17
+ cardID: cardID
18
+ }, titleKeypressListener);
19
+ $('body').on('click', null, { originalTitle: originalTitle,
20
+ cardID: cardID,
21
+ count: 0
22
+ }, titleBodyClickListener);
23
+ }
24
+
25
+ function titleKeypressListener(e) {
26
+ var key = e.which;
27
+ if(key == 13) {
28
+ titleUpdate(e)
29
+ return false;
30
+ }
31
+ }
32
+
33
+ function titleBodyClickListener(e) {
34
+ if(!$(event.target).is('.table-form') && e.data.count >= 1 ) {
35
+ titleUpdate(e);
36
+ }
37
+ e.data.count++;
38
+ }
39
+
40
+ function titleUpdate(e) {
41
+ let schema = getSchema();
42
+ let tableName = $('.table-form')[0].value;
43
+ $('.table-form')[0].parentElement.outerHTML = tableTitleHTML(tableName);
44
+ $('[data-toggle="popover"]').popover();
45
+ if (e.data.originalTitle !== tableName) {
46
+ let cardID = e.data.cardID;
47
+ schema[cardID].name = tableName;
48
+ checkTitleStatus(cardID,schema);
49
+ }
50
+ editTableName();
51
+ setSchema(schema);
52
+ }
53
+
54
+ function tableTitleHTML(tableName) {
55
+ return "<h4 class='card-title table-title' data-toggle='popover' data-trigger='hover' data-content='Edit table name'>" +
56
+ tableName +
57
+ "</h4>";
58
+ }
59
+
60
+ function tableTitleFormHTML(priorText) {
61
+ return `<form><input class='table-form' type='text' name='tableName' value='${priorText}'></form>`;
62
+ }
63
+
64
+ function checkTitleStatus(cardID,schema) {
65
+
66
+ if (schema[cardID].status.new === false) {
67
+ updateTitleStatus(cardID,schema);
68
+ }
69
+ }
70
+
71
+ function updateTitleStatus(cardID,schema) {
72
+ if (schema[cardID].name === schema[cardID].original_name) {
73
+ schema[cardID].status.modified = false;
74
+ } else {
75
+ schema[cardID].status.modified = true;
76
+ }
77
+ }
@@ -0,0 +1,70 @@
1
+ let zoom = .7;
2
+
3
+ let connections = {}
4
+
5
+ let j = jsPlumb.getInstance({
6
+ Container:"foo"
7
+ });
8
+
9
+ jsPlumb.ready(function() {
10
+ let canvasLeft = 0
11
+ let canvasTop = 0
12
+
13
+ window.setZoom = function(zoom, instance, transformOrigin, el) {
14
+ transformOrigin = transformOrigin || [ 0.5, 0.5 ];
15
+ instance = instance || jsPlumb;
16
+ el = el || instance.getContainer();
17
+ var p = [ "webkit", "moz", "ms", "o" ],
18
+ s = "scale(" + zoom + ")",
19
+ oString = (transformOrigin[0] * 100) + "% " + (transformOrigin[1] * 100) + "%";
20
+
21
+ for (var i = 0; i < p.length; i++) {
22
+ el.style[p[i] + "Transform"] = s;
23
+ el.style[p[i] + "TransformOrigin"] = oString;
24
+ }
25
+
26
+ el.style["transform"] = s;
27
+ el.style["transformOrigin"] = oString;
28
+
29
+ instance.setZoom(zoom);
30
+ };
31
+
32
+ $('#zoom-in').click(function() {
33
+ if (zoom > .4) {
34
+ let position = $('.slider').position().left + 10
35
+ $('.slider').css({left: position})
36
+ zoom = zoom - .05
37
+ window.setZoom(zoom,null,null,$('#foo')[0])
38
+ }
39
+ })
40
+
41
+ $('#zoom-out').click(function() {
42
+ if (zoom < 1) {
43
+ let position = $('.slider').position().left - 10;
44
+ $('.slider').css({left: position});
45
+ zoom = zoom + .05;
46
+ window.setZoom(zoom,null,null,$('#foo')[0]);
47
+ }
48
+ })
49
+ });
50
+
51
+ function setCardDraggable(card) {
52
+ jsPlumb.draggable(card, {filter:':not(.fa-arrows)'});
53
+ }
54
+
55
+ function createConnector(source,target,tableID) {
56
+ let conn = jsPlumb.connect({
57
+ source:source,
58
+ target:target,
59
+ anchors:[["Continuous", { faces: ["left", "right"] }],["Continuous", { faces: ["left", "right"] }]],
60
+ endpoint:["Dot", { radius: 2}],
61
+ paintStyle: { strokeWidth:5, stroke:'#D9D9DA' },
62
+ detachable: false,
63
+ maxConnections:-1
64
+ });
65
+ if (connections[tableID]) {
66
+ connections[tableID].push(conn)
67
+ } else {
68
+ connections[tableID] = [conn]
69
+ }
70
+ }
@@ -0,0 +1,265 @@
1
+
2
+ function destroyTable(){
3
+ if (openEditChecker()) { return };
4
+ $('.delete-table').unbind('click');
5
+ $('.delete-table').click(function() {
6
+ $(this).popover('dispose');
7
+ let card = $(this).parents('.card');
8
+ let listItems = card.find('.list-group-item');
9
+ for(let i = 0; i < listItems.length; i++) {
10
+ jsPlumb.remove(listItems[i]);
11
+ };
12
+ card[0].outerHTML = "";
13
+ });
14
+ }
15
+
16
+ function destroyColumn() {
17
+ let schema = getSchema();
18
+ if (openEditChecker()) { return }
19
+ $('.delete-column').unbind('click')
20
+ $('.delete-column').click(function() {
21
+ $(this).popover('dispose');
22
+ let column = $(this).parents('.list-group-item')[0];
23
+ let columnID = column.id;
24
+ column.outerHTML = "";
25
+ let tableID = `tbl-${columnID.split('-')[1]}`;
26
+ let conns = connections[tableID];
27
+ if (typeof(conns) !== "undefined") {
28
+ for(let i = 0; i < conns.length; i++) {
29
+ jsPlumb.repaintEverything()
30
+ jsPlumb.repaint(conns[i].source)
31
+ }
32
+ }
33
+ let columns = schema[tableID].columns
34
+ let status = columns[columnID].status;
35
+ if (status.new) {
36
+ columns[columnID] = undefined;
37
+ } else {
38
+ status.deleted = true
39
+ }
40
+ });
41
+ setSchema(schema);
42
+ }
43
+
44
+ function destroyReference() {
45
+ if (openEditChecker()) { return };
46
+ let schema = getSchema();
47
+ $('.delete-ref').unbind('click')
48
+ $('.delete-ref').click(function() {
49
+ $(this).popover('dispose');
50
+ let reference = $(this).parents('.list-group-item')[0];
51
+ let referenceID = reference.id;
52
+ let tableID = `tbl-${referenceID.split('-')[1]}`;
53
+ jsPlumb.remove(reference);
54
+ let conns = connections[tableID];
55
+ for(let i = 0; i < conns.length; i++) {
56
+ if (conns[i].source) {
57
+ jsPlumb.repaintEverything()
58
+ jsPlumb.repaint(conns[i].source)
59
+ }
60
+ }
61
+ let references = schema[tableID].references
62
+ let status = references[referenceID].status;
63
+ if (status.new) {
64
+ references[referenceID] = undefined;
65
+ } else {
66
+ status.deleted = true
67
+ }
68
+ });
69
+ setSchema(schema);
70
+ }
71
+
72
+ function newColumnObj(tableID, columnName, columnType, schema) {
73
+ let tableNum = tableID.split('-')[1];
74
+ let prevID = 100;
75
+ let columnIDs = Object.keys(schema[`tbl-${tableNum}`].columns);
76
+ if (columnIDs.length !== 0) {
77
+ prevID = parseInt(columnIDs[columnIDs.length -1].split('-')[2]);
78
+ }
79
+ let columnID = `col-${tableNum}-${prevID + 1}`;
80
+ return schema[tableID].columns[columnID] = {
81
+ name: columnName,
82
+ original_name: null,
83
+ type: columnType,
84
+ original_type: null,
85
+ id: columnID,
86
+ status: { original: false, modified: false, new: true }
87
+ }
88
+ }
89
+
90
+ function newRefObj(tableID,foreignTableName,foreignTableID, schema) {
91
+ let tableNum = tableID.split('-')[1];
92
+ let prevID = 100;
93
+ let columnIDs = Object.keys(schema[`tbl-${tableNum}`].references);
94
+ if (columnIDs.length !== 0) {
95
+ prevID = parseInt(columnIDs[columnIDs.length -1].split('-')[2]);
96
+ }
97
+ let columnID = `col-${tableNum}-${prevID + 1}`;
98
+ return schema[tableID].references[columnID] = {
99
+ id: columnID,
100
+ table_id: tableID,
101
+ foreign_table_name: foreignTableName,
102
+ foreign_table_id: foreignTableID,
103
+ status: { original: false, new: true, deleted: false}
104
+ }
105
+ }
106
+
107
+ function addColumn() {
108
+ if (openEditChecker()) { return };
109
+ $('.fa-plus-square').unbind('click');
110
+ $('.fa-plus-square').on('click', null, {}, displayColumnJumbo);
111
+ }
112
+
113
+ function displayColumnJumbo() {
114
+ $('body').append(addColumnCardHTML());
115
+ let card = $(this).parents('.card');
116
+ $('#column-reference').change(function(){
117
+ if (this.checked) {
118
+ $('.add-column-card').find('.column-html').addClass('hidden')
119
+ $('.add-column-card').find('.reference-html').removeClass('hidden')
120
+ } else if (!this.checked) {
121
+ $('.add-column-card').find('.reference-html').addClass('hidden')
122
+ $('.add-column-card').find('.column-html').removeClass('hidden')
123
+ }
124
+ });
125
+
126
+ $('.add-column-card .fa-times').click(function() {
127
+ $('.add-column-card')[0].outerHTML = ""
128
+ });
129
+
130
+ $('form button').click(function() {
131
+ let schema = getSchema();
132
+ let referenceChecked = $('form input#column-reference')[0].checked
133
+ if (referenceChecked) {
134
+ let foreignTableName = $('form input#foreign-table-name').val()
135
+ let cardIDs = Object.keys(schema)
136
+ for(let i = 0; i < cardIDs.length; i++) {
137
+ if (schema[cardIDs[i]].name === foreignTableName) {
138
+ let referenceRelationship = $('input[name="ref-rel"]:checked').val()
139
+ let foreignTableHTML = $(`#${cardIDs[i]}`);
140
+
141
+ let prevRefs = schema[card[0].id].references
142
+ let prevRefKeys = Object.keys(prevRefs)
143
+ let prevStatus = false
144
+ for(let i = 0; i < prevRefKeys.length; i++) {
145
+ if (prevRefs[prevRefKeys[i]].foreign_table_name === foreignTableName) {
146
+ prevStatus = true
147
+ }
148
+ }
149
+ if (!prevStatus) {
150
+ let foreignKeyHTML = foreignTableHTML.find(`#${foreignTableHTML[0].id}-id-column`);
151
+ let listGroup = card.find('.list-group');
152
+ let refObj = newRefObj(card[0].id, foreignTableName, foreignTableHTML[0].id, schema);
153
+ listGroup.append(columnHTML({id: refObj.id, type: "integer", name: `${foreignTableName}_id`},"delete-ref"));
154
+ let newColumnHTML = $(`#${refObj.id}`)[0]
155
+ createConnector(newColumnHTML,foreignKeyHTML);
156
+ }
157
+ else {
158
+ console.log("already happend")
159
+ }
160
+ }
161
+ }
162
+ } else {
163
+ let columnName = $('form input#column-name').val()
164
+ let columnType = $('form select#column-type-select').val()
165
+ let listGroup = card.find('.list-group');
166
+ let columnObj = newColumnObj(card[0].id, columnName, columnType, schema)
167
+ listGroup.append(columnHTML(columnObj, "delete-column"));
168
+ }
169
+ setSchema(schema);
170
+ $('.add-column-card')[0].outerHTML = ""
171
+ destroyColumn()
172
+ destroyReference()
173
+ return false
174
+ })
175
+
176
+ $('[data-toggle="popover"]').popover();
177
+ }
178
+
179
+ function addColumnCardHTML() {
180
+ return "<div class='card add-column-card'>" +
181
+ "<div class='card-header'>" +
182
+ "<h4 class='card-title'>Enter Column Information</h4>" +
183
+ "<i class='fa fa-times' aria-hidden='true'></i>" +
184
+ "</div>" +
185
+ "<div class='card-block'>" +
186
+ "<form>" +
187
+ "<div class='ref-check'>" +
188
+ "<label class='ref-check-label'>" +
189
+ "<input class='ref-check-input' type='checkbox' id='column-reference' value='reference' > reference" +
190
+ "</label>" +
191
+ "</div>" +
192
+ datatypeSelectoHTML() +
193
+ foreignTableRadioButtonHTML() +
194
+ "<div class='form-group'>" +
195
+ "<button type='submit' class='btn btn-primary'>Submit</button>" +
196
+ "</div>" +
197
+ "</form>" +
198
+ "</div>" +
199
+ "</div>"
200
+ }
201
+
202
+
203
+ function foreignTableRadioButtonHTML() {
204
+ return "<div class='reference-html hidden'>" +
205
+ "<div class='form-group'>" +
206
+ "<input type='text' class='form-control' id='foreign-table-name' placeholder='foreign table name'>" +
207
+ "</div>" +
208
+ "<div class='form-check'>" +
209
+ "<label class='form-check-label'>" +
210
+ "<input class='form-check-input' type='radio' name='ref-rel' id='ref-rel-mto' value='mto'>" +
211
+ " Many to one reference" +
212
+ "</label>" +
213
+ "</div>" +
214
+ "<div class='form-check'>" +
215
+ "<label class='form-check-label'>" +
216
+ "<input class='form-check-input' type='radio' name='ref-rel' id='ref-rel-mto' value='mtm'>" +
217
+ " Many to many reference" +
218
+ "</label>" +
219
+ "</div>" +
220
+ "</div>"
221
+ }
222
+
223
+ function datatypeSelectoHTML() {
224
+ return "<div class='column-html'>" +
225
+ "<div class='form-group'>" +
226
+ "<input type='text' class='form-control' id='column-name' placeholder='column name'>" +
227
+ "</div>" +
228
+ "<div class='form-group'>" +
229
+ "<label for='column-type-select'>Column Type</label>" +
230
+ "<select id='column-type-select'>" +
231
+ "<option selected>select</option>" +
232
+ "<option value='character'>CHARACTER(n)</option>" +
233
+ "<option value='varchar'>VARCHAR(n)</option>" +
234
+ "<option value='binary'>BINARY(n)</option>" +
235
+ "<option value='boolean'>BOOLEAN</option>" +
236
+ "<option value='varbinary'>VARBINARY(n)</option>" +
237
+ "<option value='integer-precision'>INTEGER(p)</option>" +
238
+ "<option value='smallint'>SMALLINT</option>" +
239
+ "<option value='integer'>INTEGER</option>" +
240
+ "<option value='bigint'>BIGINT</option>" +
241
+ "<option value='decimal'>DECIMAL(p,s)</option>" +
242
+ "<option value='numeric'>NUMERIC(p,s)</option>" +
243
+ "<option value='float'>FLOAT(p)</option>" +
244
+ "<option value='real'>REAL</option>" +
245
+ "<option value='float'>FLOAT</option>" +
246
+ "<option value='date'>DATE</option>" +
247
+ "<option value='time'>TIME</option>" +
248
+ "<option value='timestamp'>TIMESTAMP</option>" +
249
+ "<option value='interval'>INTERVAL</option>" +
250
+ "<option value='array'>ARRAY</option>" +
251
+ "<option value='multiset'>MULTISET</option>" +
252
+ "<option value='xml'>XML</option>" +
253
+ "</select>" +
254
+ "</div>" +
255
+ "</div>"
256
+ }
257
+
258
+ function addListeners(){
259
+ destroyTable()
260
+ editTableName()
261
+ addColumn()
262
+ destroyColumn()
263
+ destroyReference()
264
+ $('[data-toggle="popover"]').popover()
265
+ }
@@ -0,0 +1,72 @@
1
+ $(document).ready(function() {
2
+
3
+ function createSchemaFromParams() {
4
+ setCardDraggable($('.card'));
5
+ window.setZoom(zoom,null,null,$('#foo')[0]);
6
+ addReferences();
7
+ addListeners();
8
+ }
9
+
10
+ function addReferences() {
11
+ let schema = getSchema();
12
+ let refs = $("li[id^='ref-']");
13
+ for(let i = 0; i < refs.length; i++) {
14
+ let referenceID = refs[i].id;
15
+ let tableIDNum = referenceID.split('-')[1];
16
+ let tableID = `tbl-${tableIDNum}`;
17
+ let tableObj = schema[tableID];
18
+ let refObj = tableObj.references[referenceID];
19
+ let foreignTableID = refObj.foreign_table_id;
20
+ let foreignTableIDEl = $(`#${foreignTableID}-id-column`)[0];
21
+ let refEl = refs[i];
22
+ createConnector(refEl,foreignTableIDEl,tableID);
23
+ }
24
+ setSchema(schema);
25
+ }
26
+
27
+ function addTableByClick(tableName) {
28
+ zoom = 1;
29
+ window.setZoom(zoom,null,null,$('#foo')[0]);
30
+ $('.slider').css({left: 5});
31
+ $('.canvasBorder').click(function(event) {
32
+ $('.canvasBorder').unbind('click');
33
+ let coords = findTargetCoord();
34
+ $('.jsPlumbBoundary').append(tableHTML(tableName,coords.x,coords.y));
35
+ setCursorAfterBoundaryClick();
36
+ setCardDraggable($(`#tbl-${newTableID}`));
37
+ addListeners();
38
+ addEmptyTableToSchema();
39
+ newTableID += 1;
40
+ });
41
+ }
42
+
43
+ function findTargetCoord() {
44
+ let target = $(event.target)
45
+ let offset = target.position()
46
+ return { x: event.clientX - offset.left,
47
+ y: event.clientY - offset.top}
48
+ }
49
+
50
+ $('.fa-plus-square-o').click(function(){
51
+ if (openEditChecker()) { return }
52
+ setCursorBeforeBoundaryClick()
53
+ addTableByClick("table_name")
54
+ })
55
+
56
+ function addEmptyTableToSchema() {
57
+ tableID = `tbl-${newTableID}`;
58
+ let schema = getSchema();
59
+ schema[tableID] = {
60
+ name: "table_name",
61
+ original_name: null,
62
+ columns: {},
63
+ references: {},
64
+ status: { original: false, modified: false, new: true, deleted: false },
65
+ id: tableID
66
+ };
67
+ setSchema(schema);
68
+ }
69
+
70
+ createSchemaFromParams()
71
+
72
+ });
@@ -0,0 +1,15 @@
1
+ function setCursorBeforeBoundaryClick() {
2
+ $('.navbar').css({cursor: 'not-allowed'})
3
+ $('body').css({cursor: 'not-allowed'})
4
+ $('.btn').css({cursor: 'not-allowed'})
5
+ $('.fa').css({cursor: 'not-allowed'})
6
+ $('.jsPlumbBoundary').css({cursor: 'crosshair'})
7
+ }
8
+
9
+ function setCursorAfterBoundaryClick() {
10
+ $('.navbar').css({cursor: 'auto'})
11
+ $('body').css({cursor: 'auto'})
12
+ $('.btn').css({cursor: 'auto'})
13
+ $('.fa').css({cursor: 'auto'})
14
+ $('.jsPlumbBoundary').css({cursor: 'auto'})
15
+ }
@@ -0,0 +1,24 @@
1
+ function tableHTML(tableName,tableX,tableY) {
2
+ return `<div class='card' id='tbl-${newTableID}' style='top:${tableY}px;left:${tableX}px;'>` +
3
+ "<div class='card-header'>" +
4
+ '<i class="fa fa-arrows" aria-hidden="true"></i>' +
5
+ "<h4 class='card-title table-title' data-toggle='popover' data-trigger='hover' data-content='Edit table name'>" +
6
+ `${tableName}` +
7
+ "</h4>" +
8
+ "<div class='table-nav-buttons'>" +
9
+ "<i class='fa fa-plus-square' data-toggle='popover' data-trigger='hover' data-content='Add column'></i>" +
10
+ "<i class='fa fa-trash' data-toggle='popover' data-trigger='hover' data-content='Destroy table'></i>" +
11
+ "</div>" +
12
+ "</div>" +
13
+ "<div class='card-block'>" +
14
+ "<ul class='list-group'>" +
15
+ "<li class='list-group-item' >" +
16
+ "<span class='tag tag-default float-xs-left type-span'>integer</span>" +
17
+ "<div class='column-title-outer' >" +
18
+ "<span class='column-title' >id</span>" +
19
+ "</div>" +
20
+ "</li>" +
21
+ "</ul>" +
22
+ "</div>" +
23
+ "</div>"
24
+ };