@hashtagcms/admin-ui-kit 1.0.6

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/admin-ui-kit.min.css +14 -0
  4. package/dist/admin-ui-kit.min.js +2 -0
  5. package/dist/admin-ui-kit.min.js.LICENSE.txt +175 -0
  6. package/package.json +53 -0
  7. package/packages/components/README.md +92 -0
  8. package/packages/components/package.json +28 -0
  9. package/packages/components/src/action-bar.vue +237 -0
  10. package/packages/components/src/category-platform.vue +97 -0
  11. package/packages/components/src/category-settings.vue +815 -0
  12. package/packages/components/src/cms-module-dropdown.vue +78 -0
  13. package/packages/components/src/downlods.vue +21 -0
  14. package/packages/components/src/file-uploader.vue +188 -0
  15. package/packages/components/src/frontend-module-creator.vue +599 -0
  16. package/packages/components/src/global-site-button.vue +94 -0
  17. package/packages/components/src/homepage.vue +1087 -0
  18. package/packages/components/src/html-slot.vue +23 -0
  19. package/packages/components/src/image-gallery.vue +144 -0
  20. package/packages/components/src/index.js +53 -0
  21. package/packages/components/src/info-boxes.vue +68 -0
  22. package/packages/components/src/info-popup.vue +121 -0
  23. package/packages/components/src/language-button.vue +80 -0
  24. package/packages/components/src/language-copier.vue +177 -0
  25. package/packages/components/src/left-nav.vue +159 -0
  26. package/packages/components/src/library/copy-paste.vue +186 -0
  27. package/packages/components/src/library/info-box.vue +102 -0
  28. package/packages/components/src/library/left-menu-show-hide.vue +47 -0
  29. package/packages/components/src/library/loader.vue +141 -0
  30. package/packages/components/src/library/modal-box.vue +136 -0
  31. package/packages/components/src/library/split-button.vue +127 -0
  32. package/packages/components/src/library/timer-button.vue +43 -0
  33. package/packages/components/src/library/toast-box.vue +53 -0
  34. package/packages/components/src/menu-sorter.vue +265 -0
  35. package/packages/components/src/module-creator.vue +650 -0
  36. package/packages/components/src/module-permission.vue +334 -0
  37. package/packages/components/src/pagination.vue +125 -0
  38. package/packages/components/src/platform-button.vue +118 -0
  39. package/packages/components/src/search-bar.vue +144 -0
  40. package/packages/components/src/site-button.vue +42 -0
  41. package/packages/components/src/site-cloner.vue +150 -0
  42. package/packages/components/src/sitewise-copier.vue +234 -0
  43. package/packages/components/src/sitewise-data.vue +347 -0
  44. package/packages/components/src/sorter.vue +239 -0
  45. package/packages/components/src/tabular-view.vue +824 -0
  46. package/packages/components/src/title-bar.vue +76 -0
  47. package/packages/components/src/top-nav.vue +96 -0
  48. package/packages/helpers/README.md +88 -0
  49. package/packages/helpers/package.json +20 -0
  50. package/packages/helpers/src/admin-config.js +9 -0
  51. package/packages/helpers/src/common.js +89 -0
  52. package/packages/helpers/src/dashboard.js +16 -0
  53. package/packages/helpers/src/editor.js +163 -0
  54. package/packages/helpers/src/error-message-handler.js +50 -0
  55. package/packages/helpers/src/event-bus.js +4 -0
  56. package/packages/helpers/src/form.js +4 -0
  57. package/packages/helpers/src/fx.js +106 -0
  58. package/packages/helpers/src/humanize.js +14 -0
  59. package/packages/helpers/src/map.js +3 -0
  60. package/packages/styles/README.md +37 -0
  61. package/packages/styles/package.json +15 -0
  62. package/packages/styles/src/_action-bar.scss +35 -0
  63. package/packages/styles/src/_admin.scss +22 -0
  64. package/packages/styles/src/_animate.scss +1579 -0
  65. package/packages/styles/src/_badges.scss +34 -0
  66. package/packages/styles/src/_category-list.scss +14 -0
  67. package/packages/styles/src/_common.scss +163 -0
  68. package/packages/styles/src/_info-box.scss +96 -0
  69. package/packages/styles/src/_left-nav.scss +59 -0
  70. package/packages/styles/src/_loader.scss +82 -0
  71. package/packages/styles/src/_menu-sorter.scss +39 -0
  72. package/packages/styles/src/_model-creator.scss +48 -0
  73. package/packages/styles/src/_module-permission.scss +25 -0
  74. package/packages/styles/src/_page-manager.scss +63 -0
  75. package/packages/styles/src/_popover-modal.scss +20 -0
  76. package/packages/styles/src/_table-grid.scss +39 -0
  77. package/packages/styles/src/_toast.scss +20 -0
  78. package/packages/styles/src/_variables.scss +37 -0
  79. package/packages/styles/src/app.scss +2 -0
@@ -0,0 +1,78 @@
1
+ <template>
2
+ <split-button
3
+ v-if="hasChild()"
4
+ :data-options="allModules"
5
+ @change="onChange"
6
+ :data-parser="parseData"
7
+ :data-selected="currentIndex"
8
+ data-btn-css="btn-success"
9
+ >
10
+ {{ selectedModule }}
11
+ </split-button>
12
+ </template>
13
+
14
+ <script>
15
+ import AdminConfig from "@hashtagcms/helpers/admin-config";
16
+ import SplitButton from "./library/split-button.vue";
17
+
18
+ export default {
19
+ components: {
20
+ "split-button": SplitButton,
21
+ },
22
+ props: ["dataModules", "dataCurrentModule"],
23
+ mounted() {
24
+ //console.log(this.modules);
25
+ },
26
+ data() {
27
+ return {
28
+ modules:
29
+ typeof this.dataModules == "undefined"
30
+ ? []
31
+ : typeof this.dataModules == "string"
32
+ ? JSON.parse(this.dataModules)
33
+ : this.dataModules,
34
+ selectedModule:
35
+ typeof this.dataCurrentModule == "undefined"
36
+ ? ""
37
+ : this.dataCurrentModule,
38
+ };
39
+ },
40
+ computed: {
41
+ currentIndex() {
42
+ if (this.allModules.length > 0) {
43
+ for (var i = 0; i < this.allModules.length; i++) {
44
+ var item = this.allModules[i];
45
+ if (
46
+ item.controller_name.toLowerCase() ==
47
+ this.selectedModule.toLowerCase()
48
+ ) {
49
+ return i;
50
+ }
51
+ }
52
+ }
53
+
54
+ return 0;
55
+ },
56
+ allModules() {
57
+ let options = this.modules.child;
58
+ options.splice(0, 0, {
59
+ name: this.modules.name,
60
+ controller_name: this.modules.controller_name,
61
+ });
62
+ return options;
63
+ },
64
+ },
65
+ methods: {
66
+ hasChild() {
67
+ return this.modules.parent_id == 0 && this.allModules.length > 1;
68
+ },
69
+ parseData: function (row) {
70
+ return { label: row.name, value: row.controller_name };
71
+ },
72
+ onChange(data) {
73
+ let url = AdminConfig.admin_path(data.value);
74
+ window.location = url;
75
+ },
76
+ },
77
+ };
78
+ </script>
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <button @click="downloadNow()" type="button" class="btn btn-dark">
3
+ <slot>Download</slot>
4
+ </button>
5
+ </template>
6
+
7
+ <script>
8
+ import AdminConfig from "@hashtagcms/helpers/admin-config";
9
+
10
+ export default {
11
+ mounted() {},
12
+ props: ["dataControllerName"],
13
+ methods: {
14
+ downloadNow() {
15
+ window.location.href = AdminConfig.admin_path(
16
+ this.dataControllerName + "/download",
17
+ );
18
+ },
19
+ },
20
+ };
21
+ </script>
@@ -0,0 +1,188 @@
1
+ <template>
2
+ <form ref="uploaderForm" name="uploaderForm" enctype="multipart/form-data">
3
+ <div class="row" v-show="!isUploading">
4
+ <div class="col-5">
5
+ <input
6
+ type="file"
7
+ ref="allFilesC"
8
+ name="msFiles__[]"
9
+ multiple
10
+ class="form-control"
11
+ required
12
+ @change="checkErrors"
13
+ :accept="acceptFileType"
14
+ />
15
+ <div class="alert alert-danger mt-1" v-if="errors.files">
16
+ Please select at least one file.
17
+ </div>
18
+ </div>
19
+ <div class="col-5">
20
+ <input
21
+ type="text"
22
+ name="msTags__"
23
+ id="msTags__"
24
+ required
25
+ v-model="form.tags"
26
+ class="form-control"
27
+ placeholder="Please enter keyword to search later. User comma for multiple keywords"
28
+ @change="checkErrors"
29
+ />
30
+ <div class="alert alert-danger mt-1" v-if="errors.tags">
31
+ Please enter keywords to search later.
32
+ </div>
33
+ </div>
34
+ <div class="col-2">
35
+ <input
36
+ type="button"
37
+ value="Upload"
38
+ class="btn btn-primary"
39
+ @click="uploadNow"
40
+ />
41
+ </div>
42
+ </div>
43
+ </form>
44
+ <div class="row" v-if="isUploading">
45
+ <div class="progress p-0">
46
+ <div
47
+ class="progress-bar progress-bar-striped bg-success"
48
+ role="progressbar"
49
+ :style="'width:' + percent + '%'"
50
+ :aria-valuenow="percent"
51
+ aria-valuemin="0"
52
+ aria-valuemax="100"
53
+ >
54
+ {{ percent }}%
55
+ </div>
56
+ </div>
57
+ </div>
58
+ <div class="row" v-if="message !== ''">
59
+ <div class="col">
60
+ <div :class="'alert m-1 ' + msgType">{{ message }}</div>
61
+ </div>
62
+ </div>
63
+ </template>
64
+
65
+ <script>
66
+ import AdminConfig from "@hashtagcms/helpers/admin-config";
67
+ import { EventBus } from "@hashtagcms/helpers/event-bus";
68
+
69
+ export default {
70
+ mounted() {},
71
+ props: ["dataTitle", "dataAccept"],
72
+ data() {
73
+ return {
74
+ title: this.dataTitle,
75
+ form: {
76
+ tags: "",
77
+ files: "",
78
+ },
79
+ isUploading: false,
80
+ errors: {
81
+ files: false,
82
+ tags: false,
83
+ },
84
+ percent: 0,
85
+ message: "",
86
+ msgType: "alert-success",
87
+ acceptFileType:
88
+ typeof this.dataAccept !== "undefined" ? this.dataAccept : "image/*",
89
+ };
90
+ },
91
+ methods: {
92
+ goBack() {
93
+ window.location.href = this.backUrl;
94
+ },
95
+ checkErrors() {
96
+ this.errors.files = false;
97
+ this.errors.tags = false;
98
+ },
99
+ resetForm() {
100
+ this.form.tags = "";
101
+ this.form.files = "";
102
+ this.errors.tags = false;
103
+ this.errors.files = false;
104
+ this.percent = 0;
105
+ this.$refs.uploaderForm.reset();
106
+ },
107
+ showMsg(msg, isError) {
108
+ this.message = msg;
109
+ if (isError) {
110
+ this.msgType = "alert-danger";
111
+ } else {
112
+ this.msgType = "alert-success";
113
+ setTimeout(() => {
114
+ this.message = "";
115
+ }, 2000);
116
+ }
117
+ },
118
+ uploadNow() {
119
+ let url = AdminConfig.admin_path("gallery/uploadFiles");
120
+ let onProgress = (progress) => {
121
+ this.percent = Math.round(progress.progress * 100);
122
+ };
123
+ let onSuccess = (response) => {
124
+ EventBus.emit("gallery-image-uploaded", response.data);
125
+ this.resetForm();
126
+ this.showMsg(response.data.message, false);
127
+ };
128
+ let onError = (error) => {
129
+ let dm = "There is some error while uploading. Please try again.";
130
+ this.showMsg(error.response.statusText || dm, true);
131
+ this.resetForm();
132
+ };
133
+
134
+ this.message = "";
135
+
136
+ let files = this.$refs.allFilesC.files;
137
+
138
+ //check required fields
139
+ let isErrors = false;
140
+ if (files.length === 0) {
141
+ isErrors = this.errors.files = true;
142
+ }
143
+ if (this.form.tags === "") {
144
+ isErrors = this.errors.tags = true;
145
+ }
146
+ if (isErrors) {
147
+ return false;
148
+ }
149
+
150
+ this.isUploading = true;
151
+ let formData = new FormData();
152
+ // Append each file to the FormData object
153
+ for (let i = 0; i < files.length; i++) {
154
+ formData.append("images[]", files[i]);
155
+ }
156
+
157
+ formData.append("tags", this.form.tags);
158
+ formData.append("groupName", "content");
159
+ // keep only text from the accepted file types and accepted file type can be any input
160
+ formData.append(
161
+ "mediaType",
162
+ this.acceptFileType.replace(/[^a-zA-Z,]/g, ""),
163
+ );
164
+
165
+ formData.append("_csrf", window.Laravel.csrfToken);
166
+
167
+ axios
168
+ .post(url, formData, {
169
+ headers: {
170
+ "Content-Type": "multipart/form-data",
171
+ },
172
+ onUploadProgress: (progressEvent) => {
173
+ onProgress(progressEvent);
174
+ },
175
+ })
176
+ .then((response) => {
177
+ onSuccess(response);
178
+ })
179
+ .catch((error) => {
180
+ onError(error);
181
+ })
182
+ .finally(() => {
183
+ this.isUploading = false;
184
+ });
185
+ },
186
+ },
187
+ };
188
+ </script>