mazer-rails 0.1.0 → 0.1.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/assets/fonts/Iconly---Bold.eot +0 -0
  3. data/assets/fonts/Iconly---Bold.svg +19 -0
  4. data/assets/fonts/Iconly---Bold.ttf +0 -0
  5. data/assets/fonts/Iconly---Bold.woff +0 -0
  6. data/assets/fonts/iconly/Iconly---Bold.eot +0 -0
  7. data/assets/fonts/iconly/Iconly---Bold.svg +19 -0
  8. data/assets/fonts/iconly/Iconly---Bold.ttf +0 -0
  9. data/assets/fonts/iconly/Iconly---Bold.woff +0 -0
  10. data/assets/images/bg/4853433.png +0 -0
  11. data/assets/images/faces/1.jpg +0 -0
  12. data/assets/images/faces/2.jpg +0 -0
  13. data/assets/images/faces/3.jpg +0 -0
  14. data/assets/images/faces/4.jpg +0 -0
  15. data/assets/images/faces/5.jpg +0 -0
  16. data/assets/images/faces/6.jpg +0 -0
  17. data/assets/images/faces/7.jpg +0 -0
  18. data/assets/images/faces/8.jpg +0 -0
  19. data/assets/images/logo/favicon.png +0 -0
  20. data/assets/images/logo/favicon.svg +1 -0
  21. data/assets/images/logo/logo.svg +1 -0
  22. data/assets/images/samples/1.png +0 -0
  23. data/assets/images/samples/2.png +0 -0
  24. data/assets/images/samples/3.png +0 -0
  25. data/assets/images/samples/4.png +0 -0
  26. data/assets/images/samples/architecture1.jpg +0 -0
  27. data/assets/images/samples/banana.jpg +0 -0
  28. data/assets/images/samples/bg-mountain.jpg +0 -0
  29. data/assets/images/samples/building.jpg +0 -0
  30. data/assets/images/samples/error-403.svg +94 -0
  31. data/assets/images/samples/error-404.svg +88 -0
  32. data/assets/images/samples/error-500.svg +76 -0
  33. data/assets/images/samples/jump.jpg +0 -0
  34. data/assets/images/samples/motorcycle.jpg +0 -0
  35. data/assets/images/samples/origami.jpg +0 -0
  36. data/assets/images/samples/water.jpg +0 -0
  37. data/assets/images/svg-loaders/audio.svg +29 -0
  38. data/assets/images/svg-loaders/ball-triangle.svg +1 -0
  39. data/assets/images/svg-loaders/bars.svg +1 -0
  40. data/assets/images/svg-loaders/circles.svg +20 -0
  41. data/assets/images/svg-loaders/grid.svg +1 -0
  42. data/assets/images/svg-loaders/hearts.svg +1 -0
  43. data/assets/images/svg-loaders/oval.svg +1 -0
  44. data/assets/images/svg-loaders/puff.svg +1 -0
  45. data/assets/images/svg-loaders/rings.svg +1 -0
  46. data/assets/images/svg-loaders/spinning-circles.svg +1 -0
  47. data/assets/images/svg-loaders/tail-spin.svg +1 -0
  48. data/assets/images/svg-loaders/three-dots.svg +1 -0
  49. data/assets/javascripts/app.js +9 -0
  50. data/assets/javascripts/bootstrap.js +6 -0
  51. data/assets/javascripts/components/dark.js +65 -0
  52. data/assets/javascripts/components/sidebar.js +185 -0
  53. data/assets/javascripts/helper/isDesktop.js +1 -0
  54. data/assets/javascripts/initTheme.js +5 -0
  55. data/assets/javascripts/mazer.js +9 -0
  56. data/assets/javascripts/pages/ckeditor.js +3 -0
  57. data/assets/javascripts/pages/component-toasts.js +9 -0
  58. data/assets/javascripts/pages/dashboard.js +158 -0
  59. data/assets/javascripts/pages/datatables.js +1 -0
  60. data/assets/javascripts/pages/filepond.js +181 -0
  61. data/assets/javascripts/pages/form-editor.js +27 -0
  62. data/assets/javascripts/pages/form-element-select.js +14 -0
  63. data/assets/javascripts/pages/horizontal-layout.js +43 -0
  64. data/assets/javascripts/pages/jquery.js +1 -0
  65. data/assets/javascripts/pages/jsvectormap.js +60 -0
  66. data/assets/javascripts/pages/parsley.js +55 -0
  67. data/assets/javascripts/pages/quill.js +27 -0
  68. data/assets/javascripts/pages/rater-js.js +38 -0
  69. data/assets/javascripts/pages/simple-datatables.js +46 -0
  70. data/assets/javascripts/pages/summernote.js +20 -0
  71. data/assets/javascripts/pages/sweetalert2.js +142 -0
  72. data/assets/javascripts/pages/tinymce.js +22 -0
  73. data/assets/javascripts/pages/toastify.js +81 -0
  74. data/assets/javascripts/pages/ui-apexchart.js +521 -0
  75. data/assets/javascripts/pages/ui-chartjs.js +445 -0
  76. data/assets/javascripts/pages/ui-todolist.js +5 -0
  77. data/assets/stylesheets/_fonts.scss +5 -0
  78. data/assets/stylesheets/_mazer.scss +103 -0
  79. data/assets/stylesheets/_utilities.scss +53 -0
  80. data/assets/stylesheets/_variables.scss +1626 -0
  81. data/assets/stylesheets/app.scss +20 -0
  82. data/assets/stylesheets/bootstrap.scss +58 -0
  83. data/assets/stylesheets/components/_alert.scss +43 -0
  84. data/assets/stylesheets/components/_avatar.scss +78 -0
  85. data/assets/stylesheets/components/_badge.scss +20 -0
  86. data/assets/stylesheets/components/_breadcrumb.scss +10 -0
  87. data/assets/stylesheets/components/_buttons.scss +62 -0
  88. data/assets/stylesheets/components/_card.scss +126 -0
  89. data/assets/stylesheets/components/_carousel.scss +6 -0
  90. data/assets/stylesheets/components/_divider.scss +37 -0
  91. data/assets/stylesheets/components/_dropdowns.scss +24 -0
  92. data/assets/stylesheets/components/_forms.scss +213 -0
  93. data/assets/stylesheets/components/_icons.scss +48 -0
  94. data/assets/stylesheets/components/_modal.scss +46 -0
  95. data/assets/stylesheets/components/_navbar.scss +280 -0
  96. data/assets/stylesheets/components/_navs.scss +32 -0
  97. data/assets/stylesheets/components/_pagination.scss +39 -0
  98. data/assets/stylesheets/components/_progress.scss +32 -0
  99. data/assets/stylesheets/components/_sidebar.scss +171 -0
  100. data/assets/stylesheets/components/_table.scss +36 -0
  101. data/assets/stylesheets/iconly.scss +327 -0
  102. data/assets/stylesheets/layouts/main.scss +48 -0
  103. data/assets/stylesheets/mixins/_navbar.scss +20 -0
  104. data/assets/stylesheets/pages/auth.scss +51 -0
  105. data/assets/stylesheets/pages/chat.scss +145 -0
  106. data/assets/stylesheets/pages/datatables.scss +7 -0
  107. data/assets/stylesheets/pages/dripicons.scss +20 -0
  108. data/assets/stylesheets/pages/email.scss +625 -0
  109. data/assets/stylesheets/pages/error.scss +22 -0
  110. data/assets/stylesheets/pages/form-element-select.scss +7 -0
  111. data/assets/stylesheets/pages/simple-datatables.scss +20 -0
  112. data/assets/stylesheets/pages/summernote.scss +4 -0
  113. data/assets/stylesheets/themes/dark/_mazer-dark.scss +82 -0
  114. data/assets/stylesheets/themes/dark/_root.scss +55 -0
  115. data/assets/stylesheets/themes/dark/_variables-dark.scss +329 -0
  116. data/assets/stylesheets/themes/dark/app-dark.scss +54 -0
  117. data/assets/stylesheets/widgets/chat.scss +26 -0
  118. data/assets/stylesheets/widgets/todo.scss +33 -0
  119. data/lib/mazer_rails/engine.rb +16 -0
  120. data/lib/mazer_rails/version.rb +5 -0
  121. data/lib/mazer_rails.rb +77 -0
  122. data/mazer-rails.gemspec +5 -5
  123. data/yarn.lock +9209 -0
  124. metadata +151 -4
  125. data/lib/mazer/rails/version.rb +0 -7
  126. data/lib/mazer/rails.rb +0 -10
@@ -0,0 +1,185 @@
1
+ import isDesktop from '../helper/isDesktop'
2
+
3
+ function slideToggle(a, b, c) { 0 === a.clientHeight ? j(a, b, c, !0) : j(a, b, c) } function slideUp(a, b, c) { j(a, b, c) } function slideDown(a, b, c) { j(a, b, c, !0) } function j(c, a, k, d) { void 0 === a && (a = 400), void 0 === d && (d = !1), c.style.overflow = "hidden", d && (c.style.display = "block"); var l, b = window.getComputedStyle(c), e = parseFloat(b.getPropertyValue("height")), f = parseFloat(b.getPropertyValue("padding-top")), g = parseFloat(b.getPropertyValue("padding-bottom")), h = parseFloat(b.getPropertyValue("margin-top")), i = parseFloat(b.getPropertyValue("margin-bottom")), m = e / a, n = f / a, o = g / a, p = h / a, q = i / a; window.requestAnimationFrame(function s(r) { void 0 === l && (l = r); var b = r - l; d ? (c.style.height = m * b + "px", c.style.paddingTop = n * b + "px", c.style.paddingBottom = o * b + "px", c.style.marginTop = p * b + "px", c.style.marginBottom = q * b + "px") : (c.style.height = e - m * b + "px", c.style.paddingTop = f - n * b + "px", c.style.paddingBottom = g - o * b + "px", c.style.marginTop = h - p * b + "px", c.style.marginBottom = i - q * b + "px"), b >= a ? (c.style.height = "", c.style.paddingTop = "", c.style.paddingBottom = "", c.style.marginTop = "", c.style.marginBottom = "", c.style.overflow = "", d || (c.style.display = "none"), "function" == typeof k && k()) : window.requestAnimationFrame(s) }) }
4
+
5
+ /**
6
+ * a Sidebar component
7
+ * @param {HTMLElement} el - sidebar element
8
+ * @param {object} options={} - options
9
+ */
10
+ class Sidebar {
11
+ constructor(el, options = {}) {
12
+ this.sidebarEL = el instanceof HTMLElement ? el : document.querySelector(el)
13
+ this.options = options
14
+ this.init()
15
+ }
16
+
17
+ /**
18
+ * initialize the sidebar
19
+ */
20
+ init() {
21
+ // add event listener to sidebar
22
+ document
23
+ .querySelectorAll(".burger-btn")
24
+ .forEach((el) => el.addEventListener("click", this.toggle.bind(this)))
25
+ document
26
+ .querySelectorAll(".sidebar-hide")
27
+ .forEach((el) => el.addEventListener("click", this.toggle.bind(this)))
28
+ window.addEventListener("resize", this.onResize.bind(this))
29
+
30
+ //
31
+ let sidebarItems = document.querySelectorAll(".sidebar-item.has-sub")
32
+ for (var i = 0; i < sidebarItems.length; i++) {
33
+ let sidebarItem = sidebarItems[i]
34
+ sidebarItems[i]
35
+ .querySelector(".sidebar-link")
36
+ .addEventListener("click", (e) => {
37
+ e.preventDefault()
38
+
39
+ let submenu = sidebarItem.querySelector(".submenu")
40
+ if (submenu.classList.contains("active"))
41
+ submenu.style.display = "block"
42
+
43
+ if (submenu.style.display == "none") submenu.classList.add("active")
44
+ else submenu.classList.remove("active")
45
+ slideToggle(submenu, 300, () =>
46
+ this.forceElementVisibility(sidebarItem)
47
+ )
48
+ })
49
+ }
50
+
51
+ // Perfect Scrollbar Init
52
+ if (typeof PerfectScrollbar == "function") {
53
+ const container = document.querySelector(".sidebar-wrapper")
54
+ const ps = new PerfectScrollbar(container, {
55
+ wheelPropagation: false,
56
+ })
57
+ }
58
+
59
+ // Scroll into active sidebar
60
+ setTimeout(
61
+ () =>
62
+ document.querySelector(".sidebar-item.active")?.scrollIntoView(false),
63
+ 100
64
+ )
65
+
66
+ // check responsive
67
+ this.onFirstLoad()
68
+ }
69
+
70
+ /**
71
+ * On First Load
72
+ */
73
+ onFirstLoad() {
74
+ if (!isDesktop(window)) {
75
+ this.sidebarEL.classList.remove("active")
76
+ }
77
+ }
78
+
79
+ /**
80
+ * On Sidebar Rezise Event
81
+ */
82
+ onResize() {
83
+ if (isDesktop(window)) {
84
+ this.sidebarEL.classList.add("active")
85
+ } else {
86
+ this.sidebarEL.classList.remove("active")
87
+ }
88
+
89
+ // reset
90
+ this.deleteBackdrop()
91
+ this.toggleOverflowBody(true)
92
+ }
93
+
94
+ /**
95
+ * Toggle Sidebar
96
+ */
97
+ toggle() {
98
+ const sidebarState = this.sidebarEL.classList.contains("active")
99
+ if (sidebarState) {
100
+ this.hide()
101
+ } else {
102
+ this.show()
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Show Sidebar
108
+ */
109
+ show() {
110
+ this.sidebarEL.classList.add("active")
111
+ this.createBackdrop()
112
+ this.toggleOverflowBody()
113
+ }
114
+
115
+ /**
116
+ * Hide Sidebar
117
+ */
118
+ hide() {
119
+ this.sidebarEL.classList.remove("active")
120
+ this.deleteBackdrop()
121
+ this.toggleOverflowBody()
122
+ }
123
+
124
+ /**
125
+ * Create Sidebar Backdrop
126
+ */
127
+ createBackdrop() {
128
+ if (isDesktop(window)) return
129
+ this.deleteBackdrop()
130
+ const backdrop = document.createElement("div")
131
+ backdrop.classList.add("sidebar-backdrop")
132
+ backdrop.addEventListener("click", this.hide.bind(this))
133
+ document.body.appendChild(backdrop)
134
+ }
135
+
136
+ /**
137
+ * Delete Sidebar Backdrop
138
+ */
139
+ deleteBackdrop() {
140
+ const backdrop = document.querySelector(".sidebar-backdrop")
141
+ if (backdrop) {
142
+ backdrop.remove()
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Toggle Overflow Body
148
+ */
149
+ toggleOverflowBody(active) {
150
+ if(isDesktop(window)) return;
151
+ const sidebarState = this.sidebarEL.classList.contains("active")
152
+ const body = document.querySelector("body")
153
+ if (typeof active == "undefined") {
154
+ body.style.overflowY = sidebarState ? "hidden" : "auto"
155
+ } else {
156
+ body.style.overflowY = active ? "auto" : "hidden"
157
+ }
158
+ }
159
+
160
+ isElementInViewport(el) {
161
+ var rect = el.getBoundingClientRect()
162
+
163
+ return (
164
+ rect.top >= 0 &&
165
+ rect.left >= 0 &&
166
+ rect.bottom <=
167
+ (window.innerHeight || document.documentElement.clientHeight) &&
168
+ rect.right <= (window.innerWidth || document.documentElement.clientWidth)
169
+ )
170
+ }
171
+
172
+ forceElementVisibility(el) {
173
+ if (!this.isElementInViewport(el)) {
174
+ el.scrollIntoView(false)
175
+ }
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Create Sidebar Wrapper
181
+ */
182
+ let sidebarEl = document.getElementById("sidebar")
183
+ if (sidebarEl) {
184
+ window.sidebar = new Sidebar(sidebarEl)
185
+ }
@@ -0,0 +1 @@
1
+ export default (window) => window.innerWidth > 1200;
@@ -0,0 +1,5 @@
1
+ const body = document.body;
2
+ const theme = localStorage.getItem('theme')
3
+
4
+ if (theme)
5
+ document.documentElement.setAttribute('data-bs-theme', theme)
@@ -0,0 +1,9 @@
1
+ // Don't forget to load bootstrap js in your project
2
+ // Here, we load it in our app.js
3
+
4
+ // We could import PerfectScrollbar directly in the sidebar module
5
+ window.PerfectScrollbar = require("perfect-scrollbar/dist/perfect-scrollbar.min.js")
6
+
7
+ let Sidebar = require("./components/sidebar")
8
+
9
+ export { Sidebar }
@@ -0,0 +1,3 @@
1
+ ClassicEditor.create(document.querySelector("#editor")).catch((error) => {
2
+ console.error(error)
3
+ })
@@ -0,0 +1,9 @@
1
+ const toastTrigger = document.getElementById("liveToastBtn")
2
+ const toastLiveExample = document.getElementById("liveToast")
3
+ if (toastTrigger) {
4
+ toastTrigger.addEventListener("click", () => {
5
+ const toast = new bootstrap.Toast(toastLiveExample)
6
+
7
+ toast.show()
8
+ })
9
+ }
@@ -0,0 +1,158 @@
1
+ var optionsProfileVisit = {
2
+ annotations: {
3
+ position: "back",
4
+ },
5
+ dataLabels: {
6
+ enabled: false,
7
+ },
8
+ chart: {
9
+ type: "bar",
10
+ height: 300,
11
+ },
12
+ fill: {
13
+ opacity: 1,
14
+ },
15
+ plotOptions: {},
16
+ series: [
17
+ {
18
+ name: "sales",
19
+ data: [9, 20, 30, 20, 10, 20, 30, 20, 10, 20, 30, 20],
20
+ },
21
+ ],
22
+ colors: "#435ebe",
23
+ xaxis: {
24
+ categories: [
25
+ "Jan",
26
+ "Feb",
27
+ "Mar",
28
+ "Apr",
29
+ "May",
30
+ "Jun",
31
+ "Jul",
32
+ "Aug",
33
+ "Sep",
34
+ "Oct",
35
+ "Nov",
36
+ "Dec",
37
+ ],
38
+ },
39
+ }
40
+ let optionsVisitorsProfile = {
41
+ series: [70, 30],
42
+ labels: ["Male", "Female"],
43
+ colors: ["#435ebe", "#55c6e8"],
44
+ chart: {
45
+ type: "donut",
46
+ width: "100%",
47
+ height: "350px",
48
+ },
49
+ legend: {
50
+ position: "bottom",
51
+ },
52
+ plotOptions: {
53
+ pie: {
54
+ donut: {
55
+ size: "30%",
56
+ },
57
+ },
58
+ },
59
+ }
60
+
61
+ var optionsEurope = {
62
+ series: [
63
+ {
64
+ name: "series1",
65
+ data: [310, 800, 600, 430, 540, 340, 605, 805, 430, 540, 340, 605],
66
+ },
67
+ ],
68
+ chart: {
69
+ height: 80,
70
+ type: "area",
71
+ toolbar: {
72
+ show: false,
73
+ },
74
+ },
75
+ colors: ["#5350e9"],
76
+ stroke: {
77
+ width: 2,
78
+ },
79
+ grid: {
80
+ show: false,
81
+ },
82
+ dataLabels: {
83
+ enabled: false,
84
+ },
85
+ xaxis: {
86
+ type: "datetime",
87
+ categories: [
88
+ "2018-09-19T00:00:00.000Z",
89
+ "2018-09-19T01:30:00.000Z",
90
+ "2018-09-19T02:30:00.000Z",
91
+ "2018-09-19T03:30:00.000Z",
92
+ "2018-09-19T04:30:00.000Z",
93
+ "2018-09-19T05:30:00.000Z",
94
+ "2018-09-19T06:30:00.000Z",
95
+ "2018-09-19T07:30:00.000Z",
96
+ "2018-09-19T08:30:00.000Z",
97
+ "2018-09-19T09:30:00.000Z",
98
+ "2018-09-19T10:30:00.000Z",
99
+ "2018-09-19T11:30:00.000Z",
100
+ ],
101
+ axisBorder: {
102
+ show: false,
103
+ },
104
+ axisTicks: {
105
+ show: false,
106
+ },
107
+ labels: {
108
+ show: false,
109
+ },
110
+ },
111
+ show: false,
112
+ yaxis: {
113
+ labels: {
114
+ show: false,
115
+ },
116
+ },
117
+ tooltip: {
118
+ x: {
119
+ format: "dd/MM/yy HH:mm",
120
+ },
121
+ },
122
+ }
123
+
124
+ let optionsAmerica = {
125
+ ...optionsEurope,
126
+ colors: ["#008b75"],
127
+ }
128
+ let optionsIndonesia = {
129
+ ...optionsEurope,
130
+ colors: ["#dc3545"],
131
+ }
132
+
133
+ var chartProfileVisit = new ApexCharts(
134
+ document.querySelector("#chart-profile-visit"),
135
+ optionsProfileVisit
136
+ )
137
+ var chartVisitorsProfile = new ApexCharts(
138
+ document.getElementById("chart-visitors-profile"),
139
+ optionsVisitorsProfile
140
+ )
141
+ var chartEurope = new ApexCharts(
142
+ document.querySelector("#chart-europe"),
143
+ optionsEurope
144
+ )
145
+ var chartAmerica = new ApexCharts(
146
+ document.querySelector("#chart-america"),
147
+ optionsAmerica
148
+ )
149
+ var chartIndonesia = new ApexCharts(
150
+ document.querySelector("#chart-indonesia"),
151
+ optionsIndonesia
152
+ )
153
+
154
+ chartIndonesia.render()
155
+ chartAmerica.render()
156
+ chartEurope.render()
157
+ chartProfileVisit.render()
158
+ chartVisitorsProfile.render()
@@ -0,0 +1 @@
1
+ let jquery_datatable = $("#table1").DataTable()
@@ -0,0 +1,181 @@
1
+ // Filepond: Basic
2
+ FilePond.create(document.querySelector(".basic-filepond"), {
3
+ credits: null,
4
+ allowImagePreview: false,
5
+ allowMultiple: false,
6
+ allowFileEncode: false,
7
+ required: false,
8
+ })
9
+
10
+ // Filepond: Multiple Files
11
+ FilePond.create(document.querySelector(".multiple-files-filepond"), {
12
+ credits: null,
13
+ allowImagePreview: false,
14
+ allowMultiple: true,
15
+ allowFileEncode: false,
16
+ required: false,
17
+ })
18
+
19
+ // Filepond: With Validation
20
+ FilePond.create(document.querySelector(".with-validation-filepond"), {
21
+ credits: null,
22
+ allowImagePreview: false,
23
+ allowMultiple: true,
24
+ allowFileEncode: false,
25
+ required: true,
26
+ acceptedFileTypes: ["image/png"],
27
+ fileValidateTypeDetectType: (source, type) =>
28
+ new Promise((resolve, reject) => {
29
+ // Do custom type detection here and return with promise
30
+ resolve(type)
31
+ }),
32
+ })
33
+
34
+ // Filepond: ImgBB with server property
35
+ FilePond.create(document.querySelector(".imgbb-filepond"), {
36
+ credits: null,
37
+ allowImagePreview: false,
38
+ server: {
39
+ process: (fieldName, file, metadata, load, error, progress, abort) => {
40
+ // We ignore the metadata property and only send the file
41
+
42
+ const formData = new FormData()
43
+ formData.append(fieldName, file, file.name)
44
+
45
+ const request = new XMLHttpRequest()
46
+ // you can change it by your client api key
47
+ request.open(
48
+ "POST",
49
+ "https://api.imgbb.com/1/upload?key=762894e2014f83c023b233b2f10395e2"
50
+ )
51
+
52
+ request.upload.onprogress = (e) => {
53
+ progress(e.lengthComputable, e.loaded, e.total)
54
+ }
55
+
56
+ request.onload = function () {
57
+ if (request.status >= 200 && request.status < 300) {
58
+ load(request.responseText)
59
+ } else {
60
+ error("oh no")
61
+ }
62
+ }
63
+
64
+ request.onreadystatechange = function () {
65
+ if (this.readyState == 4) {
66
+ if (this.status == 200) {
67
+ let response = JSON.parse(this.responseText)
68
+
69
+ Toastify({
70
+ text: "Success uploading to imgbb! see console f12",
71
+ duration: 3000,
72
+ close: true,
73
+ gravity: "bottom",
74
+ position: "right",
75
+ backgroundColor: "#4fbe87",
76
+ }).showToast()
77
+
78
+ console.log(response)
79
+ } else {
80
+ Toastify({
81
+ text: "Failed uploading to imgbb! see console f12",
82
+ duration: 3000,
83
+ close: true,
84
+ gravity: "bottom",
85
+ position: "right",
86
+ backgroundColor: "#ff0000",
87
+ }).showToast()
88
+
89
+ console.log("Error", this.statusText)
90
+ }
91
+ }
92
+ }
93
+
94
+ request.send(formData)
95
+ },
96
+ },
97
+ })
98
+
99
+ // Filepond: Image Preview
100
+ FilePond.create(document.querySelector(".image-preview-filepond"), {
101
+ credits: null,
102
+ allowImagePreview: true,
103
+ allowImageFilter: false,
104
+ allowImageExifOrientation: false,
105
+ allowImageCrop: false,
106
+ acceptedFileTypes: ["image/png", "image/jpg", "image/jpeg"],
107
+ fileValidateTypeDetectType: (source, type) =>
108
+ new Promise((resolve, reject) => {
109
+ // Do custom type detection here and return with promise
110
+ resolve(type)
111
+ }),
112
+ })
113
+
114
+ // Filepond: Image Crop
115
+ FilePond.create(document.querySelector(".image-crop-filepond"), {
116
+ credits: null,
117
+ allowImagePreview: true,
118
+ allowImageFilter: false,
119
+ allowImageExifOrientation: false,
120
+ allowImageCrop: true,
121
+ acceptedFileTypes: ["image/png", "image/jpg", "image/jpeg"],
122
+ fileValidateTypeDetectType: (source, type) =>
123
+ new Promise((resolve, reject) => {
124
+ // Do custom type detection here and return with promise
125
+ resolve(type)
126
+ }),
127
+ })
128
+
129
+ // Filepond: Image Exif Orientation
130
+ FilePond.create(document.querySelector(".image-exif-filepond"), {
131
+ credits: null,
132
+ allowImagePreview: true,
133
+ allowImageFilter: false,
134
+ allowImageExifOrientation: true,
135
+ allowImageCrop: false,
136
+ acceptedFileTypes: ["image/png", "image/jpg", "image/jpeg"],
137
+ fileValidateTypeDetectType: (source, type) =>
138
+ new Promise((resolve, reject) => {
139
+ // Do custom type detection here and return with promise
140
+ resolve(type)
141
+ }),
142
+ })
143
+
144
+ // Filepond: Image Filter
145
+ FilePond.create(document.querySelector(".image-filter-filepond"), {
146
+ credits: null,
147
+ allowImagePreview: true,
148
+ allowImageFilter: true,
149
+ allowImageExifOrientation: false,
150
+ allowImageCrop: false,
151
+ imageFilterColorMatrix: [
152
+ 0.299, 0.587, 0.114, 0, 0, 0.299, 0.587, 0.114, 0, 0, 0.299, 0.587, 0.114,
153
+ 0, 0, 0.0, 0.0, 0.0, 1, 0,
154
+ ],
155
+ acceptedFileTypes: ["image/png", "image/jpg", "image/jpeg"],
156
+ fileValidateTypeDetectType: (source, type) =>
157
+ new Promise((resolve, reject) => {
158
+ // Do custom type detection here and return with promise
159
+ resolve(type)
160
+ }),
161
+ })
162
+
163
+ // Filepond: Image Resize
164
+ FilePond.create(document.querySelector(".image-resize-filepond"), {
165
+ credits: null,
166
+ allowImagePreview: true,
167
+ allowImageFilter: false,
168
+ allowImageExifOrientation: false,
169
+ allowImageCrop: false,
170
+ allowImageResize: true,
171
+ imageResizeTargetWidth: 200,
172
+ imageResizeTargetHeight: 200,
173
+ imageResizeMode: "cover",
174
+ imageResizeUpscale: true,
175
+ acceptedFileTypes: ["image/png", "image/jpg", "image/jpeg"],
176
+ fileValidateTypeDetectType: (source, type) =>
177
+ new Promise((resolve, reject) => {
178
+ // Do custom type detection here and return with promise
179
+ resolve(type)
180
+ }),
181
+ })
@@ -0,0 +1,27 @@
1
+ var snow = new Quill("#snow", {
2
+ theme: "snow",
3
+ })
4
+ var bubble = new Quill("#bubble", {
5
+ theme: "bubble",
6
+ })
7
+ new Quill("#full", {
8
+ bounds: "#full-container .editor",
9
+ modules: {
10
+ toolbar: [
11
+ [{ font: [] }, { size: [] }],
12
+ ["bold", "italic", "underline", "strike"],
13
+ [{ color: [] }, { background: [] }],
14
+ [{ script: "super" }, { script: "sub" }],
15
+ [
16
+ { list: "ordered" },
17
+ { list: "bullet" },
18
+ { indent: "-1" },
19
+ { indent: "+1" },
20
+ ],
21
+ ["direction", { align: [] }],
22
+ ["link", "image", "video"],
23
+ ["clean"],
24
+ ],
25
+ },
26
+ theme: "snow",
27
+ })
@@ -0,0 +1,14 @@
1
+ let choices = document.querySelectorAll(".choices")
2
+ let initChoice
3
+ for (let i = 0; i < choices.length; i++) {
4
+ if (choices[i].classList.contains("multiple-remove")) {
5
+ initChoice = new Choices(choices[i], {
6
+ delimiter: ",",
7
+ editItems: true,
8
+ maxItemCount: -1,
9
+ removeItemButton: true,
10
+ })
11
+ } else {
12
+ initChoice = new Choices(choices[i])
13
+ }
14
+ }
@@ -0,0 +1,43 @@
1
+ function slideToggle(a, b, c) { 0 === a.clientHeight ? j(a, b, c, !0) : j(a, b, c) } function slideUp(a, b, c) { j(a, b, c) } function slideDown(a, b, c) { j(a, b, c, !0) } function j(c, a, k, d) { void 0 === a && (a = 400), void 0 === d && (d = !1), c.style.overflow = "hidden", d && (c.style.display = "block"); var l, b = window.getComputedStyle(c), e = parseFloat(b.getPropertyValue("height")), f = parseFloat(b.getPropertyValue("padding-top")), g = parseFloat(b.getPropertyValue("padding-bottom")), h = parseFloat(b.getPropertyValue("margin-top")), i = parseFloat(b.getPropertyValue("margin-bottom")), m = e / a, n = f / a, o = g / a, p = h / a, q = i / a; window.requestAnimationFrame(function s(r) { void 0 === l && (l = r); var b = r - l; d ? (c.style.height = m * b + "px", c.style.paddingTop = n * b + "px", c.style.paddingBottom = o * b + "px", c.style.marginTop = p * b + "px", c.style.marginBottom = q * b + "px") : (c.style.height = e - m * b + "px", c.style.paddingTop = f - n * b + "px", c.style.paddingBottom = g - o * b + "px", c.style.marginTop = h - p * b + "px", c.style.marginBottom = i - q * b + "px"), b >= a ? (c.style.height = "", c.style.paddingTop = "", c.style.paddingBottom = "", c.style.marginTop = "", c.style.marginBottom = "", c.style.overflow = "", d || (c.style.display = "none"), "function" == typeof k && k()) : window.requestAnimationFrame(s) }) }
2
+
3
+ // Responsive burger btn onclick
4
+ document.querySelector(".burger-btn").addEventListener("click", (e) => {
5
+ e.preventDefault()
6
+ let navbar = document.querySelector(".main-navbar")
7
+
8
+ slideToggle(navbar, 300)
9
+ })
10
+
11
+ window.onload = () => checkWindowSize()
12
+ window.addEventListener("resize", (event) => {
13
+ checkWindowSize()
14
+ })
15
+
16
+ function checkWindowSize() {
17
+ if (window.innerWidth < 1200) listener()
18
+ if (window.innerWidth > 1200)
19
+ document.querySelector(".main-navbar").style.display = ""
20
+ }
21
+
22
+ function listener() {
23
+ let menuItems = document.querySelectorAll(".menu-item.has-sub")
24
+ menuItems.forEach((menuItem) => {
25
+ menuItem.querySelector(".menu-link").addEventListener("click", (e) => {
26
+ e.preventDefault()
27
+ let submenu = menuItem.querySelector(".submenu")
28
+ submenu.classList.toggle("active")
29
+ })
30
+ })
31
+
32
+ // Three level menu event listener
33
+ let submenuItems = document.querySelectorAll(".submenu-item.has-sub")
34
+
35
+ submenuItems.forEach((submenuItem) => {
36
+ submenuItem
37
+ .querySelector(".submenu-link")
38
+ .addEventListener("click", (e) => {
39
+ e.preventDefault()
40
+ submenuItem.querySelector(".subsubmenu").classList.toggle("active")
41
+ })
42
+ })
43
+ }
@@ -0,0 +1 @@
1
+ let $ = require("jquery")