glib-web 2.6.7 → 3.0.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.
- package/action.js +39 -17
- package/actions/analytics/logEvent.js +2 -2
- package/actions/auth/saveCsrfToken.js +6 -0
- package/actions/cables/push.js +4 -4
- package/actions/commands/enqueue.js +17 -0
- package/actions/fields/reset.js +2 -2
- package/actions/http/get.js +15 -27
- package/actions/panels/scrollTo.js +1 -1
- package/actions/panels/scrollToBottom.js +1 -1
- package/actions/popovers/close.js +5 -0
- package/actions/popovers/open.js +9 -0
- package/actions/windows/closeWithReload.js +1 -1
- package/actions/windows/refreshState.js +3 -1
- package/actions/ws/push.js +5 -3
- package/app.vue +59 -27
- package/components/_badge.vue +1 -6
- package/components/_button.vue +30 -30
- package/components/_chip.vue +27 -29
- package/components/_dropdownMenu.vue +10 -23
- package/components/_icon.vue +5 -5
- package/components/_responsive.vue +7 -21
- package/components/avatar.vue +11 -15
- package/components/banners/alert.vue +2 -7
- package/components/banners/select.vue +18 -30
- package/components/button.vue +4 -5
- package/components/component.vue +112 -133
- package/components/datetime.vue +2 -0
- package/components/fields/_patternText.vue +8 -19
- package/components/fields/_select.vue +9 -27
- package/components/fields/autocomplete.vue +8 -21
- package/components/fields/check.vue +5 -12
- package/components/fields/checkGroup.vue +3 -13
- package/components/fields/country/field.vue +9 -27
- package/components/fields/date.vue +5 -5
- package/components/fields/datetime.vue +6 -11
- package/components/fields/dynamicSelect.vue +8 -29
- package/components/fields/file.vue +10 -29
- package/components/fields/newRichText.vue +67 -54
- package/components/fields/otpField.vue +11 -31
- package/components/fields/phone/field.vue +60 -78
- package/components/fields/radio.vue +8 -44
- package/components/fields/radioGroup.vue +17 -19
- package/components/fields/rating.vue +9 -16
- package/components/fields/richText.vue +27 -45
- package/components/fields/select.vue +10 -7
- package/components/fields/stripe/stripeFields.vue +9 -2
- package/components/fields/stripe/stripeIndividualFields.vue +9 -7
- package/components/fields/stripeExternalAccount.vue +10 -24
- package/components/fields/text.vue +26 -50
- package/components/fields/textarea.vue +14 -27
- package/components/fields/timeZone.vue +9 -6
- package/components/fields/timer.vue +5 -11
- package/components/image.vue +12 -23
- package/components/label.vue +10 -18
- package/components/markdown.vue +45 -23
- package/components/mixins/events.js +24 -25
- package/components/mixins/generic.js +7 -4
- package/components/mixins/inputVariant.js +16 -0
- package/components/mixins/list/autoload.js +7 -5
- package/components/mixins/styles.js +16 -16
- package/components/mixins/table/autoload.js +6 -4
- package/components/mixins/ws/actionCable.js +6 -5
- package/components/mixins/ws/phoenixSocket.js +11 -9
- package/components/p.vue +10 -0
- package/components/panels/column.vue +8 -19
- package/components/panels/custom.vue +9 -13
- package/components/panels/flow.vue +19 -13
- package/components/panels/form.vue +26 -34
- package/components/panels/grid.vue +15 -9
- package/components/panels/horizontal.vue +58 -54
- package/components/panels/list.vue +37 -72
- package/components/panels/responsive.vue +2 -33
- package/components/panels/scroll.vue +3 -0
- package/components/panels/split.vue +2 -2
- package/components/panels/table.vue +32 -63
- package/components/panels/timeline.vue +20 -30
- package/components/panels/vertical.vue +8 -13
- package/components/popover.vue +39 -0
- package/components/progressCircle.vue +2 -8
- package/components/progressbar.vue +4 -14
- package/components/shareButton.vue +24 -30
- package/components/tabBar.vue +29 -28
- package/index.js +60 -94
- package/nav/appbar.vue +8 -6
- package/nav/dialog.vue +30 -49
- package/nav/drawer.vue +39 -51
- package/nav/drawerButton.vue +5 -7
- package/nav/drawerLabel.vue +2 -3
- package/nav/sheet.vue +21 -22
- package/nav/snackbar.vue +19 -30
- package/package.json +13 -16
- package/plugins/driverCustomBehavior.js +1 -1
- package/plugins/updatableComponent.js +2 -2
- package/plugins/vuetify.js +26 -0
- package/store.js +16 -0
- package/templates/comment.vue +42 -19
- package/templates/featured.vue +8 -9
- package/templates/thumbnail-old.vue +188 -0
- package/templates/thumbnail.vue +3 -208
- package/tsconfig.json +1 -1
- package/utils/component.js +18 -18
- package/utils/constant.js +4 -0
- package/utils/eventBus.js +9 -2
- package/utils/history.js +12 -8
- package/utils/http.js +29 -71
- package/utils/launch.js +89 -52
- package/utils/private/ws.js +5 -3
- package/utils/public.js +6 -0
- package/utils/queue.js +102 -0
- package/utils/settings.js +3 -9
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<common-responsive :style="floatingStyles" v-if="toggle" :spec="spec" />
|
|
3
|
+
</template>
|
|
4
|
+
|
|
5
|
+
<script>
|
|
6
|
+
import bus from "../utils/eventBus";
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
props: {
|
|
10
|
+
spec: { type: Object, required: true }
|
|
11
|
+
},
|
|
12
|
+
data() {
|
|
13
|
+
return {
|
|
14
|
+
toggle: true,
|
|
15
|
+
floatingStyles: {},
|
|
16
|
+
floatingSpec: {}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
methods: {
|
|
20
|
+
$mounted() {
|
|
21
|
+
bus.$once(`popover/close-${this.spec.key}`, (options) => {
|
|
22
|
+
document.removeEventListener('click', this.handleClose)
|
|
23
|
+
this.toggle = false;
|
|
24
|
+
})
|
|
25
|
+
document.addEventListener('click', this.handleClose)
|
|
26
|
+
},
|
|
27
|
+
handleClose(event) {
|
|
28
|
+
const isClickInside = this.$el.contains(event.target)
|
|
29
|
+
|
|
30
|
+
if (!isClickInside) {
|
|
31
|
+
this.toggle = false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<style scoped></style>
|
|
39
|
+
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-progress-circular
|
|
3
|
-
:
|
|
4
|
-
:rotate="spec.rotate || 270"
|
|
5
|
-
:size="spec.size || 100"
|
|
6
|
-
:width="spec.width || 20"
|
|
7
|
-
:color="spec.color"
|
|
8
|
-
:value="spec.value"
|
|
9
|
-
>
|
|
2
|
+
<v-progress-circular :class="$classes()" :rotate="spec.rotate || 0" :size="spec.size || 100" :width="spec.width || 20"
|
|
3
|
+
:color="spec.color" :model-value="spec.value">
|
|
10
4
|
<span class="grey--text text--lighten-1 text-h5">{{ spec.text }}</span>
|
|
11
5
|
</v-progress-circular>
|
|
12
6
|
</template>
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-progress-linear
|
|
3
|
-
:
|
|
4
|
-
:
|
|
5
|
-
|
|
6
|
-
:background-color="spec.backgroundColor"
|
|
7
|
-
:disabled="true"
|
|
8
|
-
:value="value_in_percentage"
|
|
9
|
-
:striped="$classes().includes('striped')"
|
|
10
|
-
:reverse="spec.reversed || false"
|
|
11
|
-
rounded
|
|
12
|
-
>
|
|
13
|
-
<strong v-if="!$classes().includes('no-text')"
|
|
14
|
-
>{{ Math.ceil(value_in_percentage) }}%</strong
|
|
15
|
-
>
|
|
2
|
+
<v-progress-linear :class="$classes()" :height="spec.height || 25" :color="spec.color"
|
|
3
|
+
:background-color="spec.backgroundColor" :disabled="true" :model-value="value_in_percentage"
|
|
4
|
+
:striped="$classes().includes('striped')" :reverse="spec.reversed || false" rounded>
|
|
5
|
+
<strong v-if="!$classes().includes('no-text')">{{ Math.ceil(value_in_percentage) }}%</strong>
|
|
16
6
|
</v-progress-linear>
|
|
17
7
|
</template>
|
|
18
8
|
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<ShareNetwork
|
|
3
|
-
:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
:description="spec.description"
|
|
8
|
-
:quote="spec.facebookQuote"
|
|
9
|
-
:hashtags="spec.hashtags"
|
|
10
|
-
:twitter-user="spec.twitterUser"
|
|
11
|
-
>
|
|
12
|
-
<i :class="config[spec.network].icon"></i>
|
|
13
|
-
<!-- <v-icon dark class="fah">facebook</v-icon> -->
|
|
2
|
+
<ShareNetwork :style="styles()" :network="network" :url="spec.url" :title="spec.title" :description="spec.description"
|
|
3
|
+
:quote="spec.facebookQuote" :hashtags="spec.hashtags" :twitter-user="spec.twitterUser">
|
|
4
|
+
<div class="fah">
|
|
5
|
+
<i class="material-icons v-icon">{{ config[spec.network].icon }}</i>
|
|
6
|
+
</div>
|
|
14
7
|
<span v-if="spec.text">{{ spec.text }}</span>
|
|
15
8
|
</ShareNetwork>
|
|
16
9
|
</template>
|
|
@@ -24,69 +17,70 @@ export default {
|
|
|
24
17
|
},
|
|
25
18
|
data() {
|
|
26
19
|
return {
|
|
20
|
+
network: this.spec.network !== 'copy' ? this.spec.network : 'facebook',
|
|
27
21
|
config: {
|
|
28
22
|
copy: {
|
|
29
|
-
icon: "
|
|
23
|
+
icon: "content_copy",
|
|
30
24
|
color: "#183153"
|
|
31
25
|
},
|
|
32
26
|
email: {
|
|
33
|
-
icon: "
|
|
27
|
+
icon: "envelope",
|
|
34
28
|
color: "#333333"
|
|
35
29
|
},
|
|
36
30
|
facebook: {
|
|
37
|
-
icon: "
|
|
31
|
+
icon: "facebook",
|
|
38
32
|
color: "#1877f2"
|
|
39
33
|
},
|
|
40
34
|
hackernews: {
|
|
41
|
-
icon: "
|
|
35
|
+
icon: "hacker-news",
|
|
42
36
|
color: "#ff4000"
|
|
43
37
|
},
|
|
44
38
|
instapaper: {
|
|
45
|
-
icon: "
|
|
39
|
+
icon: "instapaper",
|
|
46
40
|
color: "#428bca"
|
|
47
41
|
},
|
|
48
42
|
line: {
|
|
49
|
-
icon: "
|
|
43
|
+
icon: "line",
|
|
50
44
|
color: "#00c300"
|
|
51
45
|
},
|
|
52
46
|
linkedin: {
|
|
53
|
-
icon: "
|
|
47
|
+
icon: "work",
|
|
54
48
|
color: "#007bb5"
|
|
55
49
|
},
|
|
56
50
|
messenger: {
|
|
57
|
-
icon: "
|
|
51
|
+
icon: "facebook",
|
|
58
52
|
color: "#0084ff"
|
|
59
53
|
},
|
|
60
54
|
pinterest: {
|
|
61
|
-
icon: "
|
|
55
|
+
icon: "pinterest",
|
|
62
56
|
color: "#bd081c"
|
|
63
57
|
},
|
|
64
58
|
reddit: {
|
|
65
|
-
icon: "
|
|
59
|
+
icon: "reddit",
|
|
66
60
|
color: "#ff4500"
|
|
67
61
|
},
|
|
68
62
|
telegram: {
|
|
69
|
-
icon: "
|
|
63
|
+
icon: "telegram",
|
|
70
64
|
color: "#0088cc"
|
|
71
65
|
},
|
|
72
66
|
tumblr: {
|
|
73
|
-
icon: "
|
|
67
|
+
icon: "tumblr",
|
|
74
68
|
color: "#35465c"
|
|
75
69
|
},
|
|
76
70
|
twitter: {
|
|
77
|
-
icon: "
|
|
71
|
+
icon: "twitter",
|
|
78
72
|
color: "#1da1f2"
|
|
79
73
|
},
|
|
80
74
|
weibo: {
|
|
81
|
-
icon: "
|
|
75
|
+
icon: "weibo",
|
|
82
76
|
color: "#e9152d"
|
|
83
77
|
},
|
|
84
78
|
whatsapp: {
|
|
85
|
-
icon: "
|
|
79
|
+
icon: "whatsapp",
|
|
86
80
|
color: "#25d366"
|
|
87
81
|
},
|
|
88
82
|
wordpress: {
|
|
89
|
-
icon: "
|
|
83
|
+
icon: "wordpress",
|
|
90
84
|
color: "#21759b"
|
|
91
85
|
}
|
|
92
86
|
}
|
|
@@ -136,12 +130,12 @@ a[class^="share-network-"] {
|
|
|
136
130
|
|
|
137
131
|
a[class^="share-network-"] .fah {
|
|
138
132
|
background-color: rgba(0, 0, 0, 0.2);
|
|
139
|
-
padding:
|
|
133
|
+
padding: 6px;
|
|
140
134
|
flex: 0 1 auto;
|
|
141
135
|
}
|
|
142
136
|
|
|
143
137
|
a[class^="share-network-"] span {
|
|
144
|
-
padding: 0
|
|
138
|
+
padding: 0 6px;
|
|
145
139
|
flex: 1 1 0%;
|
|
146
140
|
font-weight: 500;
|
|
147
141
|
}
|
package/components/tabBar.vue
CHANGED
|
@@ -1,31 +1,21 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :style="'width: 100%'" :class="$classes()">
|
|
3
|
-
<v-tabs
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
>
|
|
11
|
-
<v-tab
|
|
12
|
-
v-for="(item, index) in spec.buttons"
|
|
13
|
-
:key="index"
|
|
14
|
-
height="100%"
|
|
15
|
-
:href="$href(item)"
|
|
16
|
-
@click="$onClick($event, item)"
|
|
17
|
-
>
|
|
18
|
-
<common-badge :spec="item">
|
|
19
|
-
<common-icon v-if="item.icon" :spec="item.icon" />
|
|
20
|
-
<span :style="{ color: spec.color }">{{ item.text }}</span>
|
|
21
|
-
</common-badge>
|
|
3
|
+
<v-tabs v-model="tab" :bg-color="spec.backgroundColor || 'white'" slider-color="primary" color="primary" show-arrows
|
|
4
|
+
:height="spec.height || 60" :grow="$classes().includes('no-grow') ? false : true">
|
|
5
|
+
<v-tab v-for="(item, index) in spec.buttons " :key="index" height="100%" :value="index">
|
|
6
|
+
<common-icon :class="index == spec.activeIndex ? 'text-primary' : null" :spec="item.icon" v-if="item.icon" />
|
|
7
|
+
<span :style="{ marginLeft: '2px' }" :class="index == spec.activeIndex ? 'text-primary' : null">{{ item.text
|
|
8
|
+
}}</span>
|
|
9
|
+
|
|
22
10
|
</v-tab>
|
|
23
11
|
</v-tabs>
|
|
24
|
-
<v-divider
|
|
12
|
+
<v-divider></v-divider>
|
|
25
13
|
</div>
|
|
26
14
|
</template>
|
|
27
15
|
|
|
28
16
|
<script>
|
|
17
|
+
import Action from '../action';
|
|
18
|
+
|
|
29
19
|
export default {
|
|
30
20
|
props: {
|
|
31
21
|
spec: { type: Object, required: true }
|
|
@@ -36,8 +26,25 @@ export default {
|
|
|
36
26
|
buttons: null
|
|
37
27
|
};
|
|
38
28
|
},
|
|
29
|
+
watch: {
|
|
30
|
+
tab: function (val, oldVal) {
|
|
31
|
+
if (val == oldVal && oldVal == null) return null;
|
|
32
|
+
|
|
33
|
+
this.$nextTick(function () {
|
|
34
|
+
const activeTab = this.buttons[val]
|
|
35
|
+
const onClick = activeTab?.onClick
|
|
36
|
+
|
|
37
|
+
if (onClick) {
|
|
38
|
+
Action.execute(onClick, this)
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
}
|
|
42
|
+
},
|
|
39
43
|
methods: {
|
|
40
44
|
$ready() {
|
|
45
|
+
if (this.spec.activeIndex) {
|
|
46
|
+
this.tab = this.spec.activeIndex;
|
|
47
|
+
}
|
|
41
48
|
this.buttons = this.spec.tabButtons || this.spec.buttons;
|
|
42
49
|
for (const [index, button] of this.buttons.entries()) {
|
|
43
50
|
if (button.disabled) {
|
|
@@ -49,20 +56,14 @@ export default {
|
|
|
49
56
|
};
|
|
50
57
|
</script>
|
|
51
58
|
<style lang="scss" scoped>
|
|
52
|
-
.full-width-divider .v-divider {
|
|
53
|
-
position: absolute;
|
|
54
|
-
left: 0;
|
|
55
|
-
width: 100%;
|
|
56
|
-
}
|
|
57
|
-
.no-divider .v-divider {
|
|
58
|
-
display: none;
|
|
59
|
-
}
|
|
60
59
|
.v-tab .v-badge span {
|
|
61
60
|
// Make sure tab label is middle aligned.
|
|
62
61
|
margin: auto 0;
|
|
63
62
|
}
|
|
63
|
+
|
|
64
64
|
/* .v-badge {
|
|
65
65
|
top: 50%;
|
|
66
66
|
transform: translate(0, -50%);
|
|
67
67
|
} */
|
|
68
68
|
</style>
|
|
69
|
+
|
package/index.js
CHANGED
|
@@ -1,36 +1,49 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { createApp, h } from "vue";
|
|
2
|
+
import vuetify from "./plugins/vuetify";
|
|
4
3
|
import App from "./app.vue";
|
|
4
|
+
import { settings } from "./utils/settings";
|
|
5
|
+
import { useTheme } from "vuetify";
|
|
6
|
+
|
|
7
|
+
import '@vueup/vue-quill/dist/vue-quill.snow.css';
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
// lib for deep merge
|
|
10
|
+
import merge from 'lodash.merge'
|
|
11
|
+
|
|
12
|
+
const Vue = createApp({
|
|
13
|
+
data() {
|
|
14
|
+
return {
|
|
15
|
+
vueApp,
|
|
16
|
+
themeConfig: useTheme()
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
created() {
|
|
20
|
+
this.themeConfig.themes = merge(this.themeConfig.themes, settings.themes)
|
|
21
|
+
},
|
|
22
|
+
render: function () {
|
|
23
|
+
return h(App, { page: this.$data.vueApp.page });
|
|
11
24
|
}
|
|
12
|
-
})
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
Vue.use(vuetify)
|
|
29
|
+
|
|
30
|
+
// import * as VueGoogleMaps from "vue2-google-maps";
|
|
31
|
+
// Vue.use(VueGoogleMaps, {
|
|
32
|
+
// load: {
|
|
33
|
+
// key: process.env.GMAPS_API_KEY,
|
|
34
|
+
// libraries: "places"
|
|
35
|
+
// }
|
|
36
|
+
// });
|
|
13
37
|
|
|
14
38
|
import "./styles/test.scss";
|
|
15
39
|
import "./styles/test.sass";
|
|
16
40
|
|
|
17
|
-
import Vuetify from "vuetify";
|
|
18
|
-
import "vuetify/dist/vuetify.min.css";
|
|
19
|
-
// Only used for social media icons
|
|
20
|
-
import "@fortawesome/fontawesome-free/css/all.css";
|
|
21
|
-
// import "material-design-icons-iconfont/dist/material-design-icons.css";
|
|
22
|
-
// import "@mdi/font/css/materialdesignicons.css";
|
|
23
|
-
Vue.use(Vuetify);
|
|
24
41
|
|
|
25
|
-
import Chartkick from "vue-chartkick";
|
|
26
|
-
import Chart from "chart.js";
|
|
27
|
-
import annotationPlugin from "chartjs-plugin-annotation";
|
|
28
|
-
Chart.plugins.register(annotationPlugin);
|
|
29
|
-
Vue.use(Chartkick.use(Chart));
|
|
30
|
-
|
|
31
|
-
// TODO: make this opt-in
|
|
32
|
-
import VueYoutube from "vue-youtube";
|
|
33
|
-
Vue.use(VueYoutube);
|
|
42
|
+
// import Chartkick from "vue-chartkick";
|
|
43
|
+
// import Chart from "chart.js";
|
|
44
|
+
// import annotationPlugin from "chartjs-plugin-annotation";
|
|
45
|
+
// Chart.plugins.register(annotationPlugin);
|
|
46
|
+
// Vue.use(Chartkick.use(Chart));
|
|
34
47
|
|
|
35
48
|
// import VueAnalytics from 'vue-analytics'
|
|
36
49
|
// // TODO: Avoid hardcoding
|
|
@@ -45,25 +58,25 @@ import "./extensions/string.js";
|
|
|
45
58
|
import "./extensions/array.js";
|
|
46
59
|
|
|
47
60
|
// Recursive components must be global
|
|
48
|
-
import VerticalPanel from "./components/panels/vertical";
|
|
49
|
-
import ResponsivePanel from "./components/panels/responsive";
|
|
50
|
-
import Component from "./components/component";
|
|
51
|
-
import CommonIcon from "./components/_icon";
|
|
52
|
-
import CommonBadge from "./components/_badge";
|
|
53
|
-
import CommonTooltip from "./components/_tooltip";
|
|
54
|
-
import CommonButton from "./components/_button";
|
|
55
|
-
import CommonChip from "./components/_chip";
|
|
56
|
-
import CommonMessage from "./components/_message";
|
|
57
|
-
import CommonDropdownMenu from "./components/_dropdownMenu";
|
|
58
|
-
import CommonResponsive from "./components/_responsive";
|
|
59
|
-
import CommonTemplateMenu from "./templates/_menu";
|
|
60
|
-
import RichButton from "./components/button";
|
|
61
|
+
import VerticalPanel from "./components/panels/vertical.vue";
|
|
62
|
+
import ResponsivePanel from "./components/panels/responsive.vue";
|
|
63
|
+
import Component from "./components/component.vue";
|
|
64
|
+
import CommonIcon from "./components/_icon.vue";
|
|
65
|
+
import CommonBadge from "./components/_badge.vue";
|
|
66
|
+
// import CommonTooltip from "./components/_tooltip.vue";
|
|
67
|
+
import CommonButton from "./components/_button.vue";
|
|
68
|
+
import CommonChip from "./components/_chip.vue";
|
|
69
|
+
import CommonMessage from "./components/_message.vue";
|
|
70
|
+
import CommonDropdownMenu from "./components/_dropdownMenu.vue";
|
|
71
|
+
import CommonResponsive from "./components/_responsive.vue";
|
|
72
|
+
import CommonTemplateMenu from "./templates/_menu.vue";
|
|
73
|
+
import RichButton from "./components/button.vue";
|
|
61
74
|
Vue.component("panels-vertical", VerticalPanel);
|
|
62
75
|
Vue.component("panels-responsive", ResponsivePanel);
|
|
63
76
|
Vue.component("common-button", CommonButton);
|
|
64
77
|
Vue.component("common-icon", CommonIcon);
|
|
65
78
|
Vue.component("common-badge", CommonBadge);
|
|
66
|
-
Vue.component("common-tooltip", CommonTooltip);
|
|
79
|
+
// Vue.component("common-tooltip", CommonTooltip);
|
|
67
80
|
Vue.component("common-chip", CommonChip);
|
|
68
81
|
Vue.component("common-message", CommonMessage);
|
|
69
82
|
Vue.component("common-dropdownMenu", CommonDropdownMenu);
|
|
@@ -91,7 +104,7 @@ Vue.mixin(scrollingMixin);
|
|
|
91
104
|
import datasetMixins from "./components/mixins/dataset.js";
|
|
92
105
|
Vue.mixin(datasetMixins);
|
|
93
106
|
|
|
94
|
-
Vue.
|
|
107
|
+
Vue.config.globalProperties.extension = {};
|
|
95
108
|
import extension from "./components/mixins/extension.js";
|
|
96
109
|
Vue.mixin(extension);
|
|
97
110
|
|
|
@@ -102,8 +115,8 @@ Vue.directive("longclick", window.longClickInstance);
|
|
|
102
115
|
// TODO: Deprecate
|
|
103
116
|
import TypeUtils from "./utils/type";
|
|
104
117
|
Vue.use({
|
|
105
|
-
install: function(Vue, options) {
|
|
106
|
-
Vue.
|
|
118
|
+
install: function (Vue, options) {
|
|
119
|
+
Vue.config.globalProperties.$type = {
|
|
107
120
|
isObject: TypeUtils.isObject,
|
|
108
121
|
isString: TypeUtils.isString,
|
|
109
122
|
isNumber: TypeUtils.isNumber,
|
|
@@ -123,9 +136,6 @@ window.Utils = Utils;
|
|
|
123
136
|
import Framework from "./utils/public";
|
|
124
137
|
window.GLib = Framework;
|
|
125
138
|
|
|
126
|
-
import { settings } from "./utils/settings";
|
|
127
|
-
export { settings };
|
|
128
|
-
|
|
129
139
|
import driverCustomBehavior from "./plugins/driverCustomBehavior";
|
|
130
140
|
Vue.use(driverCustomBehavior);
|
|
131
141
|
|
|
@@ -140,59 +150,15 @@ Vue.use(updatableComponent);
|
|
|
140
150
|
// require(['./my-async-component'], resolve)
|
|
141
151
|
// })
|
|
142
152
|
|
|
143
|
-
import VueGtag from "vue-gtag";
|
|
144
153
|
|
|
145
|
-
|
|
146
|
-
const gtagId = settings.gtagId;
|
|
147
|
-
if (gtagId) {
|
|
148
|
-
Vue.use(VueGtag, {
|
|
149
|
-
config: {
|
|
150
|
-
id: settings.gtagId,
|
|
151
|
-
params: {
|
|
152
|
-
send_page_view: false
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}
|
|
154
|
+
import { vueApp } from "./store";
|
|
157
155
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
icons: {
|
|
161
|
-
iconfont: "md"
|
|
162
|
-
},
|
|
163
|
-
theme: {
|
|
164
|
-
themes: Utils.settings.themes
|
|
165
|
-
},
|
|
166
|
-
breakpoint: {
|
|
167
|
-
smAndDown: true
|
|
168
|
-
}
|
|
169
|
-
}),
|
|
170
|
-
page: window.__page,
|
|
171
|
-
indicator: false,
|
|
172
|
-
// Rename to isPageStale
|
|
173
|
-
isStale: false,
|
|
174
|
-
/// Dirty form handling
|
|
175
|
-
isFormSubmitted: false,
|
|
176
|
-
isFormDirty: false,
|
|
177
|
-
///
|
|
178
|
-
stateUpdatedAt: null,
|
|
179
|
-
webSocket: { channels: {}, header: {} },
|
|
180
|
-
actionCable: { channels: {} },
|
|
181
|
-
registeredComponents: [],
|
|
182
|
-
temp: {}
|
|
183
|
-
};
|
|
184
|
-
new Vue({
|
|
185
|
-
el: "#app",
|
|
186
|
-
vuetify: window.vueApp.vuetify,
|
|
187
|
-
data: {
|
|
188
|
-
vueApp: window.vueApp
|
|
189
|
-
},
|
|
190
|
-
render: function(createElement) {
|
|
191
|
-
return createElement(App, { props: { page: this.$data.vueApp.page } });
|
|
192
|
-
}
|
|
193
|
-
});
|
|
156
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
157
|
+
Vue.mount("#app")
|
|
194
158
|
});
|
|
195
159
|
|
|
160
|
+
export { Vue, settings }
|
|
161
|
+
|
|
196
162
|
// The above code uses Vue without the compiler, which means you cannot
|
|
197
163
|
// use Vue to target elements in your existing html templates. You would
|
|
198
164
|
// need to always use single file components.
|
package/nav/appbar.vue
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<v-toolbar v-if="navBar.height" :style="style" :height="navBar.height" :class="cssClasses()">
|
|
6
6
|
<v-app-bar-nav-icon v-if="page.leftDrawer && !isPermanent" style="color: inherit;"
|
|
7
7
|
@click="drawerTrigger = new Date()"></v-app-bar-nav-icon>
|
|
8
|
-
<v-progress-circular v-if="
|
|
8
|
+
<v-progress-circular v-if="vueApp.indicator" indeterminate></v-progress-circular>
|
|
9
9
|
<div v-else>
|
|
10
10
|
<panels-responsive v-if="navBar.logo" :spec="navBar.logo" />
|
|
11
11
|
<v-toolbar-title v-else-if="navBar.showTitle">{{
|
|
@@ -34,8 +34,9 @@
|
|
|
34
34
|
</template>
|
|
35
35
|
|
|
36
36
|
<script>
|
|
37
|
-
import NavDrawer from "./drawer";
|
|
38
|
-
import ViewsAvatar from "../components/avatar";
|
|
37
|
+
import NavDrawer from "./drawer.vue";
|
|
38
|
+
import ViewsAvatar from "../components/avatar.vue";
|
|
39
|
+
import { vueApp } from "../store";
|
|
39
40
|
|
|
40
41
|
export default {
|
|
41
42
|
components: {
|
|
@@ -49,7 +50,8 @@ export default {
|
|
|
49
50
|
return {
|
|
50
51
|
drawerTrigger: null,
|
|
51
52
|
navBar: {},
|
|
52
|
-
rightButtons: []
|
|
53
|
+
rightButtons: [],
|
|
54
|
+
vueApp
|
|
53
55
|
// on: false
|
|
54
56
|
};
|
|
55
57
|
},
|
|
@@ -59,7 +61,7 @@ export default {
|
|
|
59
61
|
},
|
|
60
62
|
// We could've used the `app` attribute on `v-toolbar` if it didn't conflict with our header-footer css.
|
|
61
63
|
leftPadding: function () {
|
|
62
|
-
switch (this.$vuetify.
|
|
64
|
+
switch (this.$vuetify.display.name) {
|
|
63
65
|
case "lg":
|
|
64
66
|
case "xl":
|
|
65
67
|
return { "padding-left": "270px" };
|
|
@@ -71,7 +73,7 @@ export default {
|
|
|
71
73
|
return this.leftPadding !== null;
|
|
72
74
|
},
|
|
73
75
|
showMobileMenu() {
|
|
74
|
-
return this.rightButtons.length > 0 && this.$vuetify.
|
|
76
|
+
return this.rightButtons.length > 0 && this.$vuetify.display.smAndDown;
|
|
75
77
|
},
|
|
76
78
|
mobileMenu() {
|
|
77
79
|
return {
|