mumuki-styles 1.13.1 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d53ec6c296f82ffcbcf5e8b852247f6dc24dde60
4
- data.tar.gz: 4271981b4eeec5a044b995627dee0bbeee4b418c
3
+ metadata.gz: c78a16aab5f73e7228d2913d2a3fc74df693929d
4
+ data.tar.gz: f0b13effa905aec8b6dccb960b1667591e981341
5
5
  SHA512:
6
- metadata.gz: 32f9ca8c080e22d5e7a3f17c6f612e87ec5aa78551aa9feed83bbab3b83a82f428df5cb6f99d4a9e95870bb209c09404e511ff5935daadef041526e005e166a0
7
- data.tar.gz: 545c2203f2fd8a646bca38b36d5a2aa8cc055d2ef023bf114c5d2402e0f4dfbae9177aedc6a506c70b422d4a8e91e6b5433486f88451f6bba59be26e5dc33f73
6
+ metadata.gz: 9d4f6a26f4df6afd1b67bdc29baa5236be69393022906c10ac61e7a15aa42e53bafcff40b4e56c2635c9546d1f8645f8ae74447467deb9a111a0e744b84e14c8
7
+ data.tar.gz: 4c77855b665fb366940a1367b4413159a2808a8d68adde3e18b52746b90eb02ab080d1cac225b3cb75630463cc2c6ace0de38981adb67c2c0ebcab371ae78207
data/README.md CHANGED
@@ -90,6 +90,83 @@
90
90
 
91
91
  With jQuery you can use function `$('.mu-file-browser').renderFileBrowser()`;
92
92
 
93
+ ```html
94
+ <div
95
+ class='mu-erd'
96
+ data-entities='[
97
+ {
98
+ "name": "Entity_1",
99
+ "columns": [
100
+ {
101
+ "name": "ent1_id",
102
+ "type": "Integer",
103
+ "pk": true
104
+ },
105
+ {
106
+ "name": "ent2_id",
107
+ "type": "Integer",
108
+ "pk": true,
109
+ "fk": {
110
+ "to": { "entity": "Entity_2", "column": "ent2_id" },
111
+ "type": "one_to_one"
112
+ }
113
+ },
114
+ {
115
+ "name": "ent1_description",
116
+ "type": "Varchar"
117
+ }
118
+ ]
119
+ },
120
+ {
121
+ "name": "Entity_2",
122
+ "columns": [
123
+ {
124
+ "name": "ent2_id",
125
+ "type": "Integer",
126
+ "pk": true
127
+ }
128
+ ]
129
+ },
130
+ {
131
+ "name": "Entity_3",
132
+ "columns": [
133
+ {
134
+ "name": "ent3_id",
135
+ "type": "Integer",
136
+ "pk": true
137
+ },
138
+ {
139
+ "name": "ent2_id",
140
+ "type": "Integer",
141
+ "pk": true,
142
+ "fk": {
143
+ "to": { "entity": "Entity_2", "column": "ent2_id" },
144
+ "type": "many_to_one"
145
+ }
146
+ },
147
+ {
148
+ "name": "ent1_description",
149
+ "type": "Varchar"
150
+ }
151
+ ]
152
+ }
153
+ ]'>
154
+ </div>
155
+ ```
156
+
157
+ #### mu-erd attributes
158
+ * `data-entities`: (`Array<Object>`) Every entity object of the array should have:
159
+ * `name`: (`String`) Entity name.
160
+ * `columns`: (`Array<Object>`) Every column object of the array should have:
161
+ * `name`: (`String`) Column field,
162
+ * `type`: (`String`) Column type (Char, Number, Integer, Varchar),
163
+ * `pk`: (`Boolean` - Optional) True if column es PK or part of one,
164
+ * `fk`: (`Object` - Optional) with properties:
165
+ * `to`: (`Object`) { entity: (Foreign entity), column: (Foreign column name) }
166
+ * `type`: (`String`) one\_to\_one | one\_to\_many | many\_to\_one | many\_to\_many
167
+
168
+ With jQuery you can use function `$('.mu-erd').renderERD()`;
169
+
93
170
 
94
171
  ## Installing
95
172
 
@@ -12597,7 +12597,6 @@ if (typeof jQuery === 'undefined') {
12597
12597
 
12598
12598
  }(jQuery);
12599
12599
 
12600
-
12601
12600
  (function (window, document) {
12602
12601
  'use strict';
12603
12602
 
@@ -12622,146 +12621,352 @@ if (typeof jQuery === 'undefined') {
12622
12621
  }
12623
12622
  }
12624
12623
 
12625
- mumuki.load(function () {
12624
+ })(window, document);
12625
+
12626
+
12627
+ mumuki.load(function () {
12626
12628
 
12627
- var descriptorType = {
12628
- file: {
12629
- open: function (state, filename) {
12630
- if (state.onFileOpen) {
12631
- var onFileOpen = eval(state.onFileOpen);
12632
- if (typeof onFileOpen === 'function') {
12633
- onFileOpen(filename, lastFolder(state)[filename]);
12634
- } else {
12635
- throw new Error('"data-on-file-open" should be a function');
12636
- }
12629
+ var descriptorType = {
12630
+ file: {
12631
+ open: function (state, filename) {
12632
+ if (state.onFileOpen) {
12633
+ var onFileOpen = eval(state.onFileOpen);
12634
+ if (typeof onFileOpen === 'function') {
12635
+ onFileOpen(filename, lastFolder(state)[filename]);
12636
+ } else {
12637
+ throw new Error('"data-on-file-open" should be a function');
12637
12638
  }
12638
12639
  }
12639
- },
12640
- folder: {
12641
- open: function (state, foldername) {
12642
- if (state.canBrowse) {
12643
- var folder = lastFolder(state)[foldername];
12644
- state.breadcrumb.push({name: foldername, files: folder});
12645
- createExplorerFrom(state, folder);
12646
- }
12640
+ }
12641
+ },
12642
+ folder: {
12643
+ open: function (state, foldername) {
12644
+ if (state.canBrowse) {
12645
+ var folder = lastFolder(state)[foldername];
12646
+ state.breadcrumb.push({name: foldername, files: folder});
12647
+ createExplorerFrom(state, folder);
12647
12648
  }
12648
12649
  }
12649
12650
  }
12651
+ }
12650
12652
 
12651
- function back(state) {
12652
- if (state.breadcrumb.length > 1) {
12653
- state.breadcrumb.pop();
12654
- createExplorerFrom(state, lastFolder(state));
12655
- }
12653
+ function back(state) {
12654
+ if (state.breadcrumb.length > 1) {
12655
+ state.breadcrumb.pop();
12656
+ createExplorerFrom(state, lastFolder(state));
12656
12657
  }
12658
+ }
12657
12659
 
12658
- function getPath(state) {
12659
- return state.breadcrumb
12660
- .map(function (it) {
12661
- return it.name;
12662
- })
12663
- .join('/') || '/';
12664
- }
12660
+ function getPath(state) {
12661
+ return state.breadcrumb
12662
+ .map(function (it) {
12663
+ return it.name;
12664
+ })
12665
+ .join('/') || '/';
12666
+ }
12665
12667
 
12666
- function lastFolder(state) {
12667
- return state.breadcrumb[state.breadcrumb.length - 1].files;
12668
- }
12668
+ function lastFolder(state) {
12669
+ return state.breadcrumb[state.breadcrumb.length - 1].files;
12670
+ }
12669
12671
 
12670
- function sortByTypeAndName(obj, key1, key2) {
12671
- if (typeof obj[key1] === typeof obj[key2]) {
12672
- return key1.localeCompare(key2);
12673
- } else if (obj[key1] instanceof Object && obj[key2] instanceof String) {
12674
- return 1;
12675
- } else {
12676
- return -1;
12677
- }
12672
+ function sortByTypeAndName(obj, key1, key2) {
12673
+ if (typeof obj[key1] === typeof obj[key2]) {
12674
+ return key1.localeCompare(key2);
12675
+ } else if (obj[key1] instanceof Object && obj[key2] instanceof String) {
12676
+ return 1;
12677
+ } else {
12678
+ return -1;
12678
12679
  }
12680
+ }
12679
12681
 
12680
- function sortedFilesKeys(files) {
12681
- return Object.keys(files || {}).sort(function (a, b) {
12682
- return sortByTypeAndName(files, a, b);
12683
- });
12684
- }
12682
+ function sortedFilesKeys(files) {
12683
+ return Object.keys(files || {}).sort(function (a, b) {
12684
+ return sortByTypeAndName(files, a, b);
12685
+ });
12686
+ }
12685
12687
 
12686
- function getListItem(files, key, state) {
12687
- return $([
12688
- '<li>',
12689
- ' <i class="' + fileBrowserClassType(files[key]) + '"></i>',
12690
- ' <span>' + key + '</span>',
12691
- '</li>'].join(''))
12692
- .click(function () {
12693
- descriptorType[fileBrowserClassType(files[key])].open(state, key);
12694
- });
12695
- }
12688
+ function getListItem(files, key, state) {
12689
+ return $([
12690
+ '<li>',
12691
+ ' <i class="' + fileBrowserClassType(files[key]) + '"></i>',
12692
+ ' <span>' + key + '</span>',
12693
+ '</li>'].join(''))
12694
+ .click(function () {
12695
+ descriptorType[fileBrowserClassType(files[key])].open(state, key);
12696
+ });
12697
+ }
12696
12698
 
12697
- function fileBrowserClassType(file) {
12698
- return file instanceof Object ? 'folder' : 'file';
12699
- }
12699
+ function fileBrowserClassType(file) {
12700
+ return file instanceof Object ? 'folder' : 'file';
12701
+ }
12700
12702
 
12701
- function appendFiles($ul, files, state) {
12702
- sortedFilesKeys(files).forEach(function (key) {
12703
- $ul.append(getListItem(files, key, state));
12704
- });
12705
- }
12703
+ function appendFiles($ul, files, state) {
12704
+ sortedFilesKeys(files).forEach(function (key) {
12705
+ $ul.append(getListItem(files, key, state));
12706
+ });
12707
+ }
12706
12708
 
12707
- function createExplorerFrom(state, files) {
12708
- state.container.empty();
12709
- var $ul = $('<ul></ul>');
12710
- appendFiles($ul, files, state);
12711
- state.container.append($ul);
12712
- state.header.find('.mu-file-browser-path').val(getPath(state));
12713
- }
12709
+ function createExplorerFrom(state, files) {
12710
+ state.container.empty();
12711
+ var $ul = $('<ul></ul>');
12712
+ appendFiles($ul, files, state);
12713
+ state.container.append($ul);
12714
+ state.header.find('.mu-file-browser-path').val(getPath(state));
12715
+ }
12714
12716
 
12715
- function getExplorerHeader(canBrowse) {
12716
- return $([
12717
- '<header>',
12718
- canBrowse ? '<i class="fa fa-fw fa-arrow-left"></i>' : '',
12719
- ' <input class="mu-file-browser-path" type="text" readonly>',
12720
- '</header>'
12721
- ].join(''))
12722
- }
12717
+ function getExplorerHeader(canBrowse) {
12718
+ return $([
12719
+ '<header>',
12720
+ canBrowse ? '<i class="fa fa-fw fa-arrow-left"></i>' : '',
12721
+ ' <input class="mu-file-browser-path" type="text" readonly>',
12722
+ '</header>'
12723
+ ].join(''))
12724
+ }
12723
12725
 
12724
- $.fn.renderFileBrowser = function () {
12725
- var self = this;
12726
- self.empty();
12727
- self.each(function (i) {
12728
- var $explorer = $(self[i]);
12729
- var files = $explorer.data('file');
12730
- var canBrowse = $explorer.data('can-browse');
12731
- var onFileOpen = $explorer.data('on-file-open');
12726
+ $.fn.renderFileBrowser = function () {
12727
+ var self = this;
12728
+ self.empty();
12729
+ self.each(function (i) {
12730
+ var $explorer = $(self[i]);
12731
+ var files = $explorer.data('file');
12732
+ var canBrowse = $explorer.data('can-browse');
12733
+ var onFileOpen = $explorer.data('on-file-open');
12732
12734
 
12733
- var $header = getExplorerHeader(canBrowse);
12734
- var $main = $('<main></main>');
12735
+ var $header = getExplorerHeader(canBrowse);
12736
+ var $main = $('<main></main>');
12735
12737
 
12736
- var ROOT_FOLDER_NAME = '/home/mumuki';
12738
+ var ROOT_FOLDER_NAME = '/home/mumuki';
12737
12739
 
12738
12740
 
12739
- if (files instanceof Object) {
12740
- var state = {
12741
- container: $main,
12742
- header: $header,
12743
- canBrowse: !!canBrowse,
12744
- onFileOpen: onFileOpen,
12745
- breadcrumb: [{name: ROOT_FOLDER_NAME, files: files}]
12746
- };
12741
+ if (files instanceof Object) {
12742
+ var state = {
12743
+ container: $main,
12744
+ header: $header,
12745
+ canBrowse: !!canBrowse,
12746
+ onFileOpen: onFileOpen,
12747
+ breadcrumb: [{name: ROOT_FOLDER_NAME, files: files}]
12748
+ };
12747
12749
 
12748
- $explorer.append($header);
12749
- $explorer.append($main);
12750
+ $explorer.append($header);
12751
+ $explorer.append($main);
12750
12752
 
12751
- $header.find('i').click(function () {
12752
- back(state)
12753
- });
12753
+ $header.find('i').click(function () {
12754
+ back(state)
12755
+ });
12754
12756
 
12755
- createExplorerFrom(state, files);
12757
+ createExplorerFrom(state, files);
12756
12758
 
12757
- }
12758
- });
12759
- return self;
12759
+ }
12760
+ });
12761
+ return self;
12762
+ }
12763
+
12764
+ $('.mu-file-browser').renderFileBrowser();
12765
+
12766
+ });
12767
+
12768
+ mumuki.load(function () {
12769
+
12770
+ var C = 10;
12771
+ var BORDER = 4;
12772
+
12773
+ var availableDirections = {
12774
+ up: function ($entity, $column) {
12775
+ var x1 = $entity.from.position().left + $entity.from.width() + BORDER;
12776
+ var y1 = $column.from.position().top + $column.from.height() / 2 + 5;
12777
+ var x2 = $entity.to.position().left + $entity.to.width() + BORDER;
12778
+ var y2 = $column.to.position().top + $column.to.height() / 2 + 5;
12779
+ return { x1: x1, x2: x2, y1: y1, y2: y2, mi: Math.max(x1, x2) + C * 2, dx1: C, dx2: C };
12780
+ },
12781
+ down: function ($entity, $column) {
12782
+ var x1 = $entity.from.position().left + $entity.from.width() + BORDER;
12783
+ var y1 = $column.from.position().top + $column.from.height() / 2 + 5;
12784
+ var x2 = $entity.to.position().left + $entity.to.width() + BORDER;
12785
+ var y2 = $column.to.position().top + $column.to.height() / 2 + 5;
12786
+ return { x1: x1, x2: x2, y1: y1, y2: y2, mi: Math.max(x1, x2) + C * 2, dx1: C, dx2: C };
12787
+ },
12788
+ left: function ($entity, $column) {
12789
+ var x1 = $entity.from.position().left;
12790
+ var y1 = $column.from.position().top + $column.from.height() / 2 + 5;
12791
+ var x2 = $entity.to.position().left + $entity.to.width() + BORDER;
12792
+ var y2 = $column.to.position().top + $column.to.height() / 2 + 5;
12793
+ return { x1: x1, x2: x2, y1: y1, y2: y2, mi: (x1 + x2) / 2, dx1: -C, dx2: C };
12794
+ },
12795
+ right: function ($entity, $column) {
12796
+ var x1 = $entity.from.position().left + $entity.from.width() + BORDER;
12797
+ var y1 = $column.from.position().top + $column.from.height() / 2 + 5;
12798
+ var x2 = $entity.to.position().left;
12799
+ var y2 = $column.to.position().top + $column.to.height() / 2 + 5;
12800
+ return { x1: x1, x2: x2, y1: y1, y2: y2, mi: (x1 + x2) / 2, dx1: C, dx2: -C };
12801
+ },
12802
+ up_left: function ($entity, $column) {
12803
+ var x1 = $entity.from.position().left;
12804
+ var y1 = $column.from.position().top + $column.from.height() / 2 + 5;
12805
+ var x2 = $entity.to.position().left + $entity.to.width() + BORDER;
12806
+ var y2 = $column.to.position().top + $column.to.height() / 2 + 5;
12807
+ return { x1: x1, x2: x2, y1: y1, y2: y2, mi: (x1 + x2) / 2, dx1: -C, dx2: C };
12808
+ },
12809
+ up_right: function ($entity, $column) {
12810
+ return;
12811
+ },
12812
+ down_left: function ($entity, $column) {
12813
+ return;
12814
+ },
12815
+ down_right: function ($entity, $column) {
12816
+ return;
12817
+ },
12818
+ }
12819
+
12820
+ var connectors = {
12821
+ one_to_one: function (points) {
12822
+ return [
12823
+ svgLine(points.x1 + points.dx1, points.x1 + points.dx1, points.y1 - C, points.y1 + C), // | from
12824
+ svgLine(points.x2 + points.dx2, points.x2 + points.dx2, points.y2 - C, points.y2 + C), // | to
12825
+ ].join('');
12826
+ },
12827
+ many_to_one: function (points) {
12828
+ return [
12829
+ svgLine(points.x1, points.x1 + points.dx1, points.y1 - C, points.y1), // \ from many
12830
+ svgLine(points.x1, points.x1 + points.dx1, points.y1 + C, points.y1), // / from many
12831
+ svgLine(points.x2 + points.dx2, points.x2 + points.dx2, points.y2 - C, points.y2 + C), // | to one
12832
+ ].join('');
12833
+ },
12834
+ one_to_many: function (points) {
12835
+ return [
12836
+ svgLine(points.x1 + points.dx1, points.x1 + points.dx1, points.y1 - C, points.y1 + C), // | from one
12837
+ svgLine(points.x2, points.x2 + points.dx2, points.y2 - C, points.y2), // \ to many
12838
+ svgLine(points.x2, points.x2 + points.dx2, points.y2 + C, points.y2), // / to many
12839
+ ].join('');
12840
+ },
12841
+ many_to_many: function (points) {
12842
+ return [
12843
+ svgLine(points.x1, points.x1 + points.dx1, points.y1 - C, points.y1), // \ from many
12844
+ svgLine(points.x1, points.x1 + points.dx1, points.y1 + C, points.y1), // / from many
12845
+ svgLine(points.x2, points.x2 + points.dx2, points.y2 - C, points.y2), // \ to many
12846
+ svgLine(points.x2, points.x2 + points.dx2, points.y2 + C, points.y2), // / to many
12847
+ ].join('');
12760
12848
  }
12849
+ }
12850
+
12851
+ function entityID(entity) {
12852
+ return 'mu-erd-' + entity.toLowerCase().replace(/[_]/g, '-');
12853
+ }
12854
+
12855
+ function columnID(entity, column) {
12856
+ return entityID(entity) + '-' + column.toLowerCase().replace(/[_]/g, '-');
12857
+ }
12761
12858
 
12762
- $('.mu-file-browser').renderFileBrowser();
12859
+ function keyIconFor(column, field) {
12860
+ return !!column[field] ? '<i class="fa fa-fw fa-key mu-erd-' + field + '"></i>' : '';
12861
+ }
12763
12862
 
12863
+ function generateEntityColumns(entity) {
12864
+ var columns = entity.columns || [];
12865
+ var html = '';
12866
+ columns.forEach(function (column) {
12867
+ html += [
12868
+ '<li id="', columnID(entity.name, column.name), '" class="mu-erd-entity-column">',
12869
+ ' <span class="mu-erd-entity-column-name">',
12870
+ keyIconFor(column, 'pk'),
12871
+ keyIconFor(column, 'fk'),
12872
+ '<span>', column.name, '</span>',
12873
+ ' </span>',
12874
+ ' <span class="mu-erd-entity-column-type">', column.type, '</span>',
12875
+ '</li>'
12876
+ ].join('');
12877
+ })
12878
+ return html;
12879
+ }
12880
+
12881
+ function appendEntities($diagram, entities) {
12882
+ entities.forEach(function (entity) {
12883
+ var $entity = $([
12884
+ '<div id="', entityID(entity.name), '" class="mu-erd-entity">',
12885
+ ' <div class="mu-erd-entity-name">',
12886
+ entity.name,
12887
+ ' </div>',
12888
+ ' <ul class="mu-erd-entity-columns">',
12889
+ generateEntityColumns(entity),
12890
+ ' </ul>',
12891
+ '</div>',
12892
+ ].join(''));
12893
+ $diagram.append($entity);
12894
+ });
12895
+ }
12896
+
12897
+ function drawColumnFK(entity, column) {
12898
+ return drawFK(entity, column, column.fk);
12899
+ }
12900
+
12901
+ function getDirection($entityFrom, $entityTo) {
12902
+ var direction = ''
12903
+ direction += $entityFrom.position().top > ($entityTo.position().top + $entityTo.height()) ? 'down' : '';
12904
+ direction += $entityTo.position().top > ($entityFrom.position().top + $entityFrom.height()) ? 'up' : '';
12905
+ direction += ' ';
12906
+ direction += $entityFrom.position().left > ($entityTo.position().left + $entityTo.width()) ? 'left' : '';
12907
+ direction += $entityTo.position().left > ($entityFrom.position().left + $entityFrom.width()) ? 'right' : '';
12908
+ direction = direction.trim();
12909
+ return direction.replace(' ', '_');
12910
+ }
12911
+
12912
+ function drawFK(entity, column, fk) {
12913
+ if (!fk) return '';
12914
+ var $entity = {
12915
+ from: $('#' + entityID(entity.name)),
12916
+ to: $('#' + entityID(fk.to.entity))
12917
+ }
12918
+ var $column = {
12919
+ from: $('#' + columnID(entity.name, column.name)),
12920
+ to: $('#' + columnID(fk.to.entity, fk.to.column))
12921
+ }
12922
+ var direction = getDirection($entity.from, $entity.to);
12923
+ var points = getPointsFrom(direction, $entity, $column);
12924
+ return [
12925
+ svgLine(points.x1, points.mi, points.y1, points.y1),
12926
+ svgLine(points.mi, points.mi, points.y1, points.y2),
12927
+ svgLine(points.mi, points.x2, points.y2, points.y2),
12928
+ ].join('') + connectors[fk.type](points);
12929
+ }
12930
+
12931
+ function getPointsFrom(direction, $entity, $column) {
12932
+ return availableDirections[direction]($entity, $column);
12933
+ }
12934
+
12935
+ function drawConnectorLines(entity) {
12936
+ var columns = entity.columns || [];
12937
+ return columns.map(drawColumnFK.bind(this, entity)).join('');
12938
+ }
12939
+
12940
+ function getSVGFor(entity) {
12941
+ return ['<svg>', drawConnectorLines(entity), '</svg>'].join('');
12942
+ }
12943
+
12944
+ function appendConnectors($diagram, entities) {
12945
+ entities.forEach(function (entity) {
12946
+ var $svg = $(getSVGFor(entity));
12947
+ $diagram.append($svg);
12948
+ });
12949
+ }
12950
+
12951
+ function svgLine(x1, x2, y1 , y2) {
12952
+ return ['<line x1="', x1, '" x2="', x2, '" y1="', y1, '" y2="', y2, '" stroke="black" stroke-width="1"/>'].join('');
12953
+ }
12954
+
12955
+ $.fn.renderERD = function () {
12956
+ var self = this;
12957
+ self.each(function (i) {
12958
+ var $diagram = $(self[i]);
12959
+ var entities = $diagram.data('entities');
12960
+ appendEntities($diagram, entities);
12961
+ appendConnectors($diagram, entities);
12962
+ });
12963
+ return self;
12964
+ }
12965
+
12966
+ window.addEventListener('resize', function () {
12967
+ $('.mu-erd').empty().renderERD();
12764
12968
  });
12765
12969
 
12766
- })(window, document);
12970
+ $('.mu-erd').renderERD();
12767
12971
 
12972
+ });
@@ -0,0 +1,71 @@
1
+ $mu-erd-border: 2px solid $mu-color-dark-separator;
2
+
3
+ .mu-erd {
4
+ position: relative;
5
+ width: 100%;
6
+ padding: 15px;
7
+ display: flex;
8
+ flex-flow: row;
9
+ flex-wrap: wrap;
10
+ justify-content: space-around;
11
+ align-items: center;
12
+ svg {
13
+ z-index: 0;
14
+ width: 100%;
15
+ height: 100%;
16
+ position: absolute;
17
+ }
18
+ }
19
+
20
+ .mu-erd-entity {
21
+ z-index: 1;
22
+ margin: 20px 0;
23
+ width: 250px;
24
+ min-width: 250px;
25
+ border: $mu-erd-border;
26
+ border-top-left-radius: 15px;
27
+ border-top-right-radius: 15px;
28
+ }
29
+
30
+ .mu-erd-entity-name {
31
+ padding: 5px 10px;
32
+ list-style: none;
33
+ text-align: center;
34
+ border-bottom: $mu-erd-border;
35
+ border-top-left-radius: 15px;
36
+ border-top-right-radius: 15px;
37
+ background-color: $mu-color-separator;
38
+ margin: 0;
39
+ }
40
+
41
+ .mu-erd-entity-columns {
42
+ list-style: none;
43
+ padding: 5px 10px;
44
+ margin: 0;
45
+ background-color: white;
46
+ .mu-erd-entity-column {
47
+ display: flex;
48
+ padding: 5px 0;
49
+ flex-flow: row;
50
+ justify-content: space-between;
51
+ border-bottom: 1px dashed $mu-color-dark-separator;
52
+ &:last-child {
53
+ border-bottom: none;
54
+ }
55
+ .mu-erd-entity-column-name {
56
+ text-align: left;
57
+ span {
58
+ margin-left: 5px;
59
+ }
60
+ .mu-erd-pk { color: rgb(196, 173, 44) }
61
+ .mu-erd-fk { color: rgb(184, 184, 184) }
62
+ .mu-erd-pk,
63
+ .mu-erd-fk {
64
+ font-size: 75%;
65
+ };
66
+ }
67
+ .mu-erd-entity-column-type {
68
+ text-align: right;
69
+ }
70
+ }
71
+ }
@@ -9442,6 +9442,67 @@ pre code {
9442
9442
  display: block;
9443
9443
  margin: 2em; }
9444
9444
 
9445
+ .mu-erd {
9446
+ position: relative;
9447
+ width: 100%;
9448
+ padding: 15px;
9449
+ display: flex;
9450
+ flex-flow: row;
9451
+ flex-wrap: wrap;
9452
+ justify-content: space-around;
9453
+ align-items: center; }
9454
+ .mu-erd svg {
9455
+ z-index: 0;
9456
+ width: 100%;
9457
+ height: 100%;
9458
+ position: absolute; }
9459
+
9460
+ .mu-erd-entity {
9461
+ z-index: 1;
9462
+ margin: 20px 0;
9463
+ width: 250px;
9464
+ min-width: 250px;
9465
+ border: 2px solid #cfd9db;
9466
+ border-top-left-radius: 15px;
9467
+ border-top-right-radius: 15px; }
9468
+
9469
+ .mu-erd-entity-name {
9470
+ padding: 5px 10px;
9471
+ list-style: none;
9472
+ text-align: center;
9473
+ border-bottom: 2px solid #cfd9db;
9474
+ border-top-left-radius: 15px;
9475
+ border-top-right-radius: 15px;
9476
+ background-color: #ecf0f1;
9477
+ margin: 0; }
9478
+
9479
+ .mu-erd-entity-columns {
9480
+ list-style: none;
9481
+ padding: 5px 10px;
9482
+ margin: 0;
9483
+ background-color: white; }
9484
+ .mu-erd-entity-columns .mu-erd-entity-column {
9485
+ display: flex;
9486
+ padding: 5px 0;
9487
+ flex-flow: row;
9488
+ justify-content: space-between;
9489
+ border-bottom: 1px dashed #cfd9db; }
9490
+ .mu-erd-entity-columns .mu-erd-entity-column:last-child {
9491
+ border-bottom: none; }
9492
+ .mu-erd-entity-columns .mu-erd-entity-column .mu-erd-entity-column-name {
9493
+ text-align: left; }
9494
+ .mu-erd-entity-columns .mu-erd-entity-column .mu-erd-entity-column-name span {
9495
+ margin-left: 5px; }
9496
+ .mu-erd-entity-columns .mu-erd-entity-column .mu-erd-entity-column-name .mu-erd-pk {
9497
+ color: #c4ad2c; }
9498
+ .mu-erd-entity-columns .mu-erd-entity-column .mu-erd-entity-column-name .mu-erd-fk {
9499
+ color: #b8b8b8; }
9500
+ .mu-erd-entity-columns .mu-erd-entity-column .mu-erd-entity-column-name .mu-erd-pk,
9501
+ .mu-erd-entity-columns .mu-erd-entity-column .mu-erd-entity-column-name .mu-erd-fk {
9502
+ font-size: 75%; }
9503
+ .mu-erd-entity-columns .mu-erd-entity-column .mu-erd-entity-column-type {
9504
+ text-align: right; }
9505
+
9445
9506
  .mu-file-browser {
9446
9507
  width: 100%;
9447
9508
  position: relative; }
@@ -8,4 +8,5 @@
8
8
  @import 'navbar';
9
9
  @import 'styles';
10
10
  @import 'browser';
11
+ @import 'mu-erd';
11
12
  @import 'mu-file-browser';
@@ -1,5 +1,5 @@
1
1
  module Mumuki
2
2
  module Styles
3
- VERSION = "1.13.1"
3
+ VERSION = "1.14.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumuki-styles
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.1
4
+ version: 1.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Federico Scarpa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-14 00:00:00.000000000 Z
11
+ date: 2017-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,7 @@ files:
94
94
  - app/assets/stylesheets/_hovers.scss
95
95
  - app/assets/stylesheets/_mixines.scss
96
96
  - app/assets/stylesheets/_modules.scss
97
+ - app/assets/stylesheets/_mu-erd.scss
97
98
  - app/assets/stylesheets/_mu-file-browser.scss
98
99
  - app/assets/stylesheets/_navbar.scss
99
100
  - app/assets/stylesheets/_styles.scss