glib-web 0.6.1 → 0.6.2

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.
Files changed (204) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +0 -0
  3. package/action.js +167 -167
  4. package/actions/analytics/logEvent.js +0 -0
  5. package/actions/auth/creditCard.js +0 -0
  6. package/actions/auth/restart.js +0 -0
  7. package/actions/auth/saveCsrfToken.js +0 -0
  8. package/actions/cables/push.js +0 -0
  9. package/actions/dialogs/alert.js +0 -0
  10. package/actions/dialogs/notification.js +0 -0
  11. package/actions/dialogs/oauth.js +0 -0
  12. package/actions/dialogs/open.js +0 -0
  13. package/actions/dialogs/options.js +0 -0
  14. package/actions/dialogs/show.js +0 -0
  15. package/actions/forms/submit.js +0 -0
  16. package/actions/http/delete.js +0 -0
  17. package/actions/http/patch.js +0 -0
  18. package/actions/http/post.js +0 -0
  19. package/actions/http/put.js +0 -0
  20. package/actions/panels/scrollTo.js +18 -18
  21. package/actions/panels/scrollToBottom.js +0 -0
  22. package/actions/runMultiple.js +0 -0
  23. package/actions/sheets/select.js +0 -0
  24. package/actions/snackbars/alert.js +0 -0
  25. package/actions/snackbars/select.js +0 -0
  26. package/actions/timeouts/set.js +20 -20
  27. package/actions/windows/close.js +0 -0
  28. package/actions/windows/closeAll.js +0 -0
  29. package/actions/windows/closeWithReload.js +0 -0
  30. package/actions/windows/open.js +0 -0
  31. package/actions/windows/openWeb.js +0 -0
  32. package/actions/windows/refreshState.js +5 -5
  33. package/actions/windows/reload.js +0 -0
  34. package/actions/ws/push.js +0 -0
  35. package/app.vue +180 -180
  36. package/components/_badge.vue +23 -23
  37. package/components/_button.vue +107 -107
  38. package/components/_dropdownMenu.vue +76 -76
  39. package/components/_icon.vue +50 -50
  40. package/components/_message.vue +0 -0
  41. package/components/avatar.vue +18 -18
  42. package/components/banners/alert.vue +0 -0
  43. package/components/banners/select.vue +82 -82
  44. package/components/button.vue +33 -40
  45. package/components/calendar.vue +0 -0
  46. package/components/charts/column.vue +47 -47
  47. package/components/charts/line.vue +67 -67
  48. package/components/chip.vue +51 -26
  49. package/components/component.vue +225 -225
  50. package/components/datetime.vue +0 -0
  51. package/components/fab.vue +0 -0
  52. package/components/fields/_patternText.vue +65 -65
  53. package/components/fields/_select.vue +86 -86
  54. package/components/fields/autocomplete.vue +73 -73
  55. package/components/fields/check.vue +91 -91
  56. package/components/fields/checkGroup.vue +58 -58
  57. package/components/fields/country/countries.js +0 -0
  58. package/components/fields/country/field.vue +0 -0
  59. package/components/fields/country/regions.js +0 -0
  60. package/components/fields/creditCard.vue +22 -13
  61. package/components/fields/date.vue +24 -24
  62. package/components/fields/datetime.vue +0 -0
  63. package/components/fields/dynamicGroup.vue +0 -0
  64. package/components/fields/dynamicSelect.vue +0 -0
  65. package/components/fields/file.vue +0 -0
  66. package/components/fields/googlePlace.vue +0 -0
  67. package/components/fields/hidden.vue +0 -0
  68. package/components/fields/location.vue +198 -198
  69. package/components/fields/newRichText.vue +0 -0
  70. package/components/fields/phone/countries.js +315 -315
  71. package/components/fields/phone/field.vue +351 -351
  72. package/components/fields/phone/sprite.css +1071 -1071
  73. package/components/fields/radio.vue +16 -16
  74. package/components/fields/radioGroup.vue +42 -42
  75. package/components/fields/rating.vue +0 -0
  76. package/components/fields/richText.vue +0 -0
  77. package/components/fields/select.vue +17 -17
  78. package/components/fields/stripe/stripeFields.vue +93 -93
  79. package/components/fields/stripe/stripeIndividualFields.vue +207 -207
  80. package/components/fields/stripeExternalAccount.vue +135 -135
  81. package/components/fields/text.vue +0 -0
  82. package/components/fields/textarea.vue +0 -0
  83. package/components/fields/timeZone.vue +22 -22
  84. package/components/fields/timer.vue +83 -83
  85. package/components/h1.vue +28 -28
  86. package/components/h2.vue +28 -28
  87. package/components/h3.vue +29 -29
  88. package/components/h4.vue +28 -28
  89. package/components/h5.vue +28 -28
  90. package/components/h6.vue +28 -28
  91. package/components/hr.vue +0 -0
  92. package/components/html.vue +0 -0
  93. package/components/icon.vue +25 -25
  94. package/components/image.vue +0 -0
  95. package/components/label.vue +62 -62
  96. package/components/map.vue +0 -0
  97. package/components/markdown.vue +0 -0
  98. package/components/mixins/chart/annotation.js +73 -73
  99. package/components/mixins/chart/tooltip.js +31 -28
  100. package/components/mixins/events.js +178 -178
  101. package/components/mixins/generic.js +0 -0
  102. package/components/mixins/list/autoload.js +0 -0
  103. package/components/mixins/longClick.js +0 -0
  104. package/components/mixins/scrolling.js +0 -0
  105. package/components/mixins/styles.js +222 -222
  106. package/components/mixins/table/autoload.js +0 -0
  107. package/components/mixins/table/export.js +0 -0
  108. package/components/mixins/table/import.js +0 -0
  109. package/components/mixins/text.js +20 -20
  110. package/components/mixins/tooltip.js +11 -0
  111. package/components/mixins/ws/actionCable.js +48 -48
  112. package/components/mixins/ws/phoenixSocket.js +0 -0
  113. package/components/p.vue +0 -0
  114. package/components/panels/carousel.vue +55 -55
  115. package/components/panels/column.vue +0 -0
  116. package/components/panels/custom.vue +0 -0
  117. package/components/panels/flow.vue +81 -81
  118. package/components/panels/form.vue +130 -130
  119. package/components/panels/horizontal.vue +0 -0
  120. package/components/panels/list.vue +247 -247
  121. package/components/panels/responsive.vue +94 -94
  122. package/components/panels/scroll.vue +0 -0
  123. package/components/panels/split.vue +0 -0
  124. package/components/panels/table.vue +0 -0
  125. package/components/panels/ul.vue +34 -34
  126. package/components/panels/vertical.vue +0 -0
  127. package/components/panels/web.vue +11 -11
  128. package/components/progressbar.vue +36 -36
  129. package/components/spacer.vue +0 -0
  130. package/components/switch.vue +42 -42
  131. package/components/tabBar.vue +68 -68
  132. package/extensions/array.js +0 -0
  133. package/extensions/string.js +21 -21
  134. package/index.js +199 -199
  135. package/keys.js +0 -0
  136. package/nav/appbar.vue +136 -136
  137. package/nav/content.vue +0 -0
  138. package/nav/dialog.vue +127 -127
  139. package/nav/drawer.vue +105 -105
  140. package/nav/drawerButton.vue +31 -31
  141. package/nav/drawerLabel.vue +0 -0
  142. package/nav/sheet.vue +0 -0
  143. package/nav/snackbar.vue +0 -0
  144. package/package.json +44 -44
  145. package/settings.json.example +0 -0
  146. package/static/plugins/alignment/alignment.js +0 -0
  147. package/static/plugins/alignment/alignment.min.js +0 -0
  148. package/static/plugins/beyondgrammar/beyondgrammar.js +0 -0
  149. package/static/plugins/beyondgrammar/beyondgrammar.min.js +0 -0
  150. package/static/plugins/blockcode/blockcode.js +0 -0
  151. package/static/plugins/blockcode/blockcode.min.js +0 -0
  152. package/static/plugins/clips/clips.js +0 -0
  153. package/static/plugins/clips/clips.min.js +0 -0
  154. package/static/plugins/counter/counter.js +0 -0
  155. package/static/plugins/counter/counter.min.js +0 -0
  156. package/static/plugins/definedlinks/definedlinks.js +0 -0
  157. package/static/plugins/definedlinks/definedlinks.min.js +0 -0
  158. package/static/plugins/handle/handle.js +0 -0
  159. package/static/plugins/handle/handle.min.js +0 -0
  160. package/static/plugins/icons/icons.js +0 -0
  161. package/static/plugins/icons/icons.min.js +0 -0
  162. package/static/plugins/imageposition/imageposition.js +0 -0
  163. package/static/plugins/imageposition/imageposition.min.js +0 -0
  164. package/static/plugins/inlineformat/inlineformat.js +0 -0
  165. package/static/plugins/inlineformat/inlineformat.min.js +0 -0
  166. package/static/plugins/removeformat/removeformat.js +0 -0
  167. package/static/plugins/removeformat/removeformat.min.js +0 -0
  168. package/static/plugins/selector/selector.js +0 -0
  169. package/static/plugins/selector/selector.min.js +0 -0
  170. package/static/plugins/specialchars/specialchars.js +0 -0
  171. package/static/plugins/specialchars/specialchars.min.js +0 -0
  172. package/static/plugins/textdirection/textdirection.js +0 -0
  173. package/static/plugins/textdirection/textdirection.min.js +0 -0
  174. package/static/plugins/textexpander/textexpander.js +0 -0
  175. package/static/plugins/textexpander/textexpander.min.js +0 -0
  176. package/static/plugins/underline/underline.js +0 -0
  177. package/static/plugins/underline/underline.min.js +0 -0
  178. package/static/redactorx.css +0 -0
  179. package/static/redactorx.js +0 -0
  180. package/static/redactorx.min.css +0 -0
  181. package/static/redactorx.min.js +0 -0
  182. package/static/redactorx.usm.min.js +0 -0
  183. package/styles/test.sass +0 -0
  184. package/styles/test.scss +0 -0
  185. package/templates/_menu.vue +38 -38
  186. package/templates/comment.vue +202 -202
  187. package/templates/featured.vue +32 -32
  188. package/templates/thumbnail.vue +145 -145
  189. package/templates/unsupported.vue +12 -12
  190. package/utils/app.js +0 -0
  191. package/utils/dom.js +0 -0
  192. package/utils/form.js +0 -0
  193. package/utils/hash.js +0 -0
  194. package/utils/helper.js +0 -0
  195. package/utils/history.js +70 -70
  196. package/utils/http.js +209 -209
  197. package/utils/launch.js +135 -135
  198. package/utils/private/ws.js +0 -0
  199. package/utils/public.js +0 -0
  200. package/utils/settings.js +0 -0
  201. package/utils/storage.js +0 -0
  202. package/utils/type.js +0 -0
  203. package/utils/uploader.js +0 -0
  204. package/utils/url.js +136 -136
package/app.vue CHANGED
@@ -1,180 +1,180 @@
1
- <template>
2
- <v-app :class="page.styleClasses">
3
- <nav-appbar :page="page" />
4
-
5
- <v-progress-linear
6
- v-if="$root.vueApp.indicator"
7
- :indeterminate="true"
8
- height="5"
9
- style="position: fixed; z-index: 4;"
10
- >
11
- </v-progress-linear>
12
-
13
- <div class="pages-header">
14
- <layouts-content
15
- :template="page.template"
16
- :spec="header"
17
- :full-height="false"
18
- />
19
- </div>
20
-
21
- <div id="page_body" class="pages-body body-wrapper">
22
- <layouts-content
23
- :template="page.template"
24
- :spec="body"
25
- :full-height="true"
26
- />
27
- </div>
28
-
29
- <div class="pages-footer">
30
- <layouts-content
31
- :template="page.template"
32
- :spec="footer"
33
- :full-height="false"
34
- />
35
- </div>
36
- </v-app>
37
- </template>
38
-
39
- <script>
40
- import NavAppBar from "./nav/appbar";
41
- import Utils from "./utils/helper";
42
- import ContentLayout from "./nav/content";
43
- import phoenixSocketMixin from "./components/mixins/ws/phoenixSocket.js";
44
- import actionCableMixin from "./components/mixins/ws/actionCable.js";
45
-
46
- export default {
47
- components: {
48
- "nav-appbar": NavAppBar,
49
- "layouts-content": ContentLayout
50
- },
51
- mixins: [phoenixSocketMixin, actionCableMixin],
52
- props: {
53
- page: { type: Object, required: true }
54
- },
55
- data() {
56
- return {
57
- title: "..."
58
- };
59
- },
60
- computed: {
61
- header() {
62
- return this.page.header || {};
63
- },
64
- body() {
65
- return this.page.body || {};
66
- },
67
- footer() {
68
- return this.page.footer || {};
69
- }
70
- },
71
- watch: {
72
- "$root.indicator": function(val, oldVal) {
73
- document.title = val ? "..." : this.page.title;
74
- }
75
- },
76
- created() {
77
- console.log(
78
- `Version: ${Utils.settings.appVersion} (${Utils.settings.env})`
79
- );
80
- Utils.history.saveInitialContent(this.page);
81
- Utils.history.restoreOnBackOrForward();
82
- },
83
- methods: {
84
- $ready: function() {
85
- document.title = this.page.title;
86
-
87
- this.$wsInitPhoenixSocket(this.page.phoenixSocket);
88
- this.$wsInitActionCable(this.page.actionCable);
89
-
90
- if (this.$gtag) {
91
- if (!Utils.settings.isDev) {
92
- console.log(`Tracking analytics: ${window.location}`);
93
- // this.$ga.page(window.location);
94
-
95
- this.$gtag.pageview({
96
- page_location: window.location
97
- });
98
- }
99
- } else {
100
- console.warn("Analytics not setup. Set `settings.gtagId`.");
101
- }
102
-
103
- if (Utils.history.isPoppedState(this.page)) {
104
- setTimeout(() => {
105
- // Wait until page is rendered
106
- GLib.action.execute(this.page.onRefocus, null, this);
107
- });
108
- } else {
109
- setTimeout(() => {
110
- // Wait until page is rendered
111
- GLib.action.execute(this.page.onLoad, null, this);
112
- });
113
- }
114
- }
115
- }
116
- };
117
- </script>
118
-
119
- <style lang="scss">
120
- // h1,
121
- // h2,
122
- // h3,
123
- // h4,
124
- // h5,
125
- // h6,
126
- // span {
127
- // line-height: 1;
128
- // }
129
-
130
- body {
131
- // Hide superfluous scrollbar (Edge)
132
- -ms-overflow-style: none;
133
- * {
134
- -ms-overflow-style: initial;
135
- }
136
-
137
- // Hide superfluous scrollbar (Webkit)
138
- &::-webkit-scrollbar {
139
- display: none;
140
- }
141
- }
142
- html {
143
- // Hide superfluous scrollbar (Firefox)
144
- scrollbar-width: none;
145
- }
146
-
147
- /*** Header/footer support ***/
148
- html,
149
- body,
150
- #app {
151
- height: 100%;
152
- }
153
- /******/
154
-
155
- /*** panels/scrollTo support ***/
156
- .glib-scrollto {
157
- transition: background 0.5s;
158
- }
159
- .glib-scrollto--highlighted {
160
- background: yellow !important;
161
- }
162
- /******/
163
- </style>
164
-
165
- <style scoped>
166
- /*** Header/footer support ***/
167
- .application--wrap {
168
- display: flex;
169
- flex-direction: column;
170
- justify-content: space-between;
171
- height: 100%;
172
- }
173
-
174
- .body-wrapper {
175
- height: 100%;
176
- /* overflow-y: auto; */
177
- overflow-y: overlay;
178
- }
179
- /******/
180
- </style>
1
+ <template>
2
+ <v-app :class="page.styleClasses">
3
+ <nav-appbar :page="page" />
4
+
5
+ <v-progress-linear
6
+ v-if="$root.vueApp.indicator"
7
+ :indeterminate="true"
8
+ height="5"
9
+ style="position: fixed; z-index: 4;"
10
+ >
11
+ </v-progress-linear>
12
+
13
+ <div class="pages-header">
14
+ <layouts-content
15
+ :template="page.template"
16
+ :spec="header"
17
+ :full-height="false"
18
+ />
19
+ </div>
20
+
21
+ <div id="page_body" class="pages-body body-wrapper">
22
+ <layouts-content
23
+ :template="page.template"
24
+ :spec="body"
25
+ :full-height="true"
26
+ />
27
+ </div>
28
+
29
+ <div class="pages-footer">
30
+ <layouts-content
31
+ :template="page.template"
32
+ :spec="footer"
33
+ :full-height="false"
34
+ />
35
+ </div>
36
+ </v-app>
37
+ </template>
38
+
39
+ <script>
40
+ import NavAppBar from "./nav/appbar";
41
+ import Utils from "./utils/helper";
42
+ import ContentLayout from "./nav/content";
43
+ import phoenixSocketMixin from "./components/mixins/ws/phoenixSocket.js";
44
+ import actionCableMixin from "./components/mixins/ws/actionCable.js";
45
+
46
+ export default {
47
+ components: {
48
+ "nav-appbar": NavAppBar,
49
+ "layouts-content": ContentLayout
50
+ },
51
+ mixins: [phoenixSocketMixin, actionCableMixin],
52
+ props: {
53
+ page: { type: Object, required: true }
54
+ },
55
+ data() {
56
+ return {
57
+ title: "..."
58
+ };
59
+ },
60
+ computed: {
61
+ header() {
62
+ return this.page.header || {};
63
+ },
64
+ body() {
65
+ return this.page.body || {};
66
+ },
67
+ footer() {
68
+ return this.page.footer || {};
69
+ }
70
+ },
71
+ watch: {
72
+ "$root.indicator": function(val, oldVal) {
73
+ document.title = val ? "..." : this.page.title;
74
+ }
75
+ },
76
+ created() {
77
+ console.log(
78
+ `Version: ${Utils.settings.appVersion} (${Utils.settings.env})`
79
+ );
80
+ Utils.history.saveInitialContent(this.page);
81
+ Utils.history.restoreOnBackOrForward();
82
+ },
83
+ methods: {
84
+ $ready: function() {
85
+ document.title = this.page.title;
86
+
87
+ this.$wsInitPhoenixSocket(this.page.phoenixSocket);
88
+ this.$wsInitActionCable(this.page.actionCable);
89
+
90
+ if (this.$gtag) {
91
+ if (!Utils.settings.isDev) {
92
+ console.log(`Tracking analytics: ${window.location}`);
93
+ // this.$ga.page(window.location);
94
+
95
+ this.$gtag.pageview({
96
+ page_location: window.location
97
+ });
98
+ }
99
+ } else {
100
+ console.warn("Analytics not setup. Set `settings.gtagId`.");
101
+ }
102
+
103
+ if (Utils.history.isPoppedState(this.page)) {
104
+ setTimeout(() => {
105
+ // Wait until page is rendered
106
+ GLib.action.execute(this.page.onRefocus, null, this);
107
+ });
108
+ } else {
109
+ setTimeout(() => {
110
+ // Wait until page is rendered
111
+ GLib.action.execute(this.page.onLoad, null, this);
112
+ });
113
+ }
114
+ }
115
+ }
116
+ };
117
+ </script>
118
+
119
+ <style lang="scss">
120
+ // h1,
121
+ // h2,
122
+ // h3,
123
+ // h4,
124
+ // h5,
125
+ // h6,
126
+ // span {
127
+ // line-height: 1;
128
+ // }
129
+
130
+ body {
131
+ // Hide superfluous scrollbar (Edge)
132
+ -ms-overflow-style: none;
133
+ * {
134
+ -ms-overflow-style: initial;
135
+ }
136
+
137
+ // Hide superfluous scrollbar (Webkit)
138
+ &::-webkit-scrollbar {
139
+ display: none;
140
+ }
141
+ }
142
+ html {
143
+ // Hide superfluous scrollbar (Firefox)
144
+ scrollbar-width: none;
145
+ }
146
+
147
+ /*** Header/footer support ***/
148
+ html,
149
+ body,
150
+ #app {
151
+ height: 100%;
152
+ }
153
+ /******/
154
+
155
+ /*** panels/scrollTo support ***/
156
+ .glib-scrollto {
157
+ transition: background 0.5s;
158
+ }
159
+ .glib-scrollto--highlighted {
160
+ background: yellow !important;
161
+ }
162
+ /******/
163
+ </style>
164
+
165
+ <style scoped>
166
+ /*** Header/footer support ***/
167
+ .application--wrap {
168
+ display: flex;
169
+ flex-direction: column;
170
+ justify-content: space-between;
171
+ height: 100%;
172
+ }
173
+
174
+ .body-wrapper {
175
+ height: 100%;
176
+ /* overflow-y: auto; */
177
+ overflow-y: overlay;
178
+ }
179
+ /******/
180
+ </style>
@@ -1,23 +1,23 @@
1
- <template>
2
- <v-badge
3
- v-if="spec.badgeContent"
4
- :color="spec.badgeColor || 'red'"
5
- :content="spec.badgeContent"
6
- :value="spec.badgeContent || false"
7
- >
8
- </v-badge>
9
- </template>
10
-
11
- <script>
12
- export default {
13
- props: {
14
- spec: { type: Object, required: true }
15
- }
16
- };
17
- </script>
18
-
19
- <style scoped>
20
- .v-badge {
21
- margin-left: 2px;
22
- }
23
- </style>
1
+ <template>
2
+ <v-badge
3
+ v-if="spec.badgeContent"
4
+ :color="spec.badgeColor || 'red'"
5
+ :content="spec.badgeContent"
6
+ :value="spec.badgeContent || false"
7
+ >
8
+ </v-badge>
9
+ </template>
10
+
11
+ <script>
12
+ export default {
13
+ props: {
14
+ spec: { type: Object, required: true }
15
+ }
16
+ };
17
+ </script>
18
+
19
+ <style scoped>
20
+ .v-badge {
21
+ margin-left: 2px;
22
+ }
23
+ </style>
@@ -1,107 +1,107 @@
1
- <template>
2
- <v-btn
3
- :type="type"
4
- :disabled="disabled || $isBusy || spec.disabled"
5
- :style="styles()"
6
- :class="$classes()"
7
- :href="$href()"
8
- :rel="$rel()"
9
- :text="linkStyling || $classes().includes('text')"
10
- :small="linkStyling"
11
- :icon="$classes().includes('icon')"
12
- :outlined="$classes().includes('outlined')"
13
- :tile="$classes().includes('tile')"
14
- :rounded="$classes().includes('rounded')"
15
- :depressed="$classes().includes('depressed')"
16
- @click="type == 'submit' ? null : $onClick()"
17
- >
18
- <span><common-icon :spec="spec.icon || {}"/></span>
19
- <v-badge
20
- :color="spec.badgeColor || 'red'"
21
- :content="spec.badgeContent"
22
- :value="spec.badgeContent || false"
23
- >
24
- <div :class="hideTextOnXs && spec.icon ? 'd-none d-sm-flex' : null">
25
- {{ spec.text }}
26
- </div>
27
- </v-badge>
28
- </v-btn>
29
- </template>
30
-
31
- <script>
32
- export default {
33
- props: {
34
- spec: { type: Object, required: true },
35
- type: { type: String, default: "button" },
36
- disabled: { type: Boolean, required: true },
37
- hideTextOnXs: { type: Boolean }
38
- },
39
- data: function() {
40
- return {
41
- linkStyling: false
42
- };
43
- },
44
- methods: {
45
- $ready() {
46
- this.$type.ifArray(this.spec.styleClasses, val => {
47
- this.linkStyling = val.includes("link");
48
- });
49
- },
50
- styles() {
51
- const styles = this.genericStyles();
52
- if (this.linkStyling) {
53
- styles["color"] = styles["color"] || "#1976d2";
54
- }
55
- return styles;
56
- }
57
- }
58
- };
59
- </script>
60
-
61
- <style lang="scss" scoped>
62
- a,
63
- button {
64
- min-width: 0;
65
- margin: 0;
66
- }
67
- .v-btn {
68
- &.link {
69
- text-transform: none !important;
70
- /* text-decoration: underline; */
71
- padding-left: 0;
72
- padding-right: 0;
73
- /* `height: inherit/auto/initial` will stretch to max height when used inside a horizontal panel,
74
- presumably because it is affected by the panel's flex arrangement. */
75
- height: 16px;
76
- font-size: 16px;
77
- line-height: 1;
78
- min-width: auto;
79
- }
80
- }
81
- .v-btn--rounded {
82
- // Override .v-application.rounded
83
- border-radius: 28px !important;
84
- }
85
- .v-banner__wrapper .v-btn:not(.v-btn--round).v-size--default {
86
- min-width: 0;
87
- padding: 0;
88
- }
89
- .v-banner__wrapper .v-btn.v-size--default {
90
- font-size: 12px;
91
- }
92
- .breadcrumbs .v-btn.link {
93
- display: inline-table;
94
- justify-content: left;
95
- white-space: normal;
96
- }
97
-
98
- @media only screen and (min-width: 600px) {
99
- .v-banner__wrapper.v-btn.v-size--default {
100
- font-size: 0.875rem;
101
- }
102
- .v-banner__wrapper.v-btn:not(.v-btn--round).v-size--default {
103
- min-width: 64px;
104
- padding: 0 16px;
105
- }
106
- }
107
- </style>
1
+ <template>
2
+ <v-btn
3
+ :type="type"
4
+ :disabled="disabled || $isBusy || spec.disabled"
5
+ :style="styles()"
6
+ :class="$classes()"
7
+ :href="$href()"
8
+ :rel="$rel()"
9
+ :text="linkStyling || $classes().includes('text')"
10
+ :small="linkStyling"
11
+ :icon="$classes().includes('icon')"
12
+ :outlined="$classes().includes('outlined')"
13
+ :tile="$classes().includes('tile')"
14
+ :rounded="$classes().includes('rounded')"
15
+ :depressed="$classes().includes('depressed')"
16
+ @click="type == 'submit' ? null : $onClick()"
17
+ >
18
+ <span><common-icon :spec="spec.icon || {}"/></span>
19
+ <v-badge
20
+ :color="spec.badgeColor || 'red'"
21
+ :content="spec.badgeContent"
22
+ :value="spec.badgeContent || false"
23
+ >
24
+ <div :class="hideTextOnXs && spec.icon ? 'd-none d-sm-flex' : null">
25
+ {{ spec.text }}
26
+ </div>
27
+ </v-badge>
28
+ </v-btn>
29
+ </template>
30
+
31
+ <script>
32
+ export default {
33
+ props: {
34
+ spec: { type: Object, required: true },
35
+ type: { type: String, default: "button" },
36
+ disabled: { type: Boolean, required: true },
37
+ hideTextOnXs: { type: Boolean }
38
+ },
39
+ data: function() {
40
+ return {
41
+ linkStyling: false
42
+ };
43
+ },
44
+ methods: {
45
+ $ready() {
46
+ this.$type.ifArray(this.spec.styleClasses, val => {
47
+ this.linkStyling = val.includes("link");
48
+ });
49
+ },
50
+ styles() {
51
+ const styles = this.genericStyles();
52
+ if (this.linkStyling) {
53
+ styles["color"] = styles["color"] || "#1976d2";
54
+ }
55
+ return styles;
56
+ }
57
+ }
58
+ };
59
+ </script>
60
+
61
+ <style lang="scss" scoped>
62
+ a,
63
+ button {
64
+ min-width: 0;
65
+ margin: 0;
66
+ }
67
+ .v-btn {
68
+ &.link {
69
+ text-transform: none !important;
70
+ /* text-decoration: underline; */
71
+ padding-left: 0;
72
+ padding-right: 0;
73
+ /* `height: inherit/auto/initial` will stretch to max height when used inside a horizontal panel,
74
+ presumably because it is affected by the panel's flex arrangement. */
75
+ height: 16px;
76
+ font-size: 16px;
77
+ line-height: 1;
78
+ min-width: auto;
79
+ }
80
+ }
81
+ .v-btn--rounded {
82
+ // Override .v-application.rounded
83
+ border-radius: 28px !important;
84
+ }
85
+ .v-banner__wrapper .v-btn:not(.v-btn--round).v-size--default {
86
+ min-width: 0;
87
+ padding: 0;
88
+ }
89
+ .v-banner__wrapper .v-btn.v-size--default {
90
+ font-size: 12px;
91
+ }
92
+ .breadcrumbs .v-btn.link {
93
+ display: inline-table;
94
+ justify-content: left;
95
+ white-space: normal;
96
+ }
97
+
98
+ @media only screen and (min-width: 600px) {
99
+ .v-banner__wrapper.v-btn.v-size--default {
100
+ font-size: 0.875rem;
101
+ }
102
+ .v-banner__wrapper.v-btn:not(.v-btn--round).v-size--default {
103
+ min-width: 64px;
104
+ padding: 0 16px;
105
+ }
106
+ }
107
+ </style>