appscms-tools-theme 3.0.8 → 3.0.9

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 (164) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -21
  3. data/README.md +50 -50
  4. data/_data/about/en/about.json +16 -16
  5. data/_data/blog/alertbar.yml +3 -3
  6. data/_data/blog/authors.yml +11 -11
  7. data/_data/blog/blog.yml +4 -4
  8. data/_data/blog/nav.json +13 -13
  9. data/_data/blog/share.yml +28 -28
  10. data/_data/calculators/en/biology-calc/bulb-spacing.json +78 -78
  11. data/_data/calculators/en/biology-calc/cat-chocolate-toxicity.json +52 -52
  12. data/_data/calculators/en/chemistry-calc/activation-energy.json +44 -44
  13. data/_data/calculators/en/finance-calc/401k.json +122 -122
  14. data/_data/contact/en/contact.json +38 -38
  15. data/_data/disclaimer/en/disclaimer.json +37 -37
  16. data/_data/download/en/download.json +35 -35
  17. data/_data/feature/en/3_shop_posters.json +351 -351
  18. data/_data/feature/en/allele-frequency.json +246 -246
  19. data/_data/feature/en/batch-conversion.json +77 -77
  20. data/_data/feature/en/compress-pdf.json +202 -202
  21. data/_data/feature/en/face-detection.json +52 -52
  22. data/_data/feature/en/split-pdf.json +115 -115
  23. data/_data/feature/en/theframe.json +56 -56
  24. data/_data/feature/hi/compress-pdf.json +81 -81
  25. data/_data/feature/tr/compress-pdf.json +80 -80
  26. data/_data/filecomparison/en/filecomparison.json +38 -38
  27. data/_data/fileinfo/en/fileinfo.json +15 -15
  28. data/_data/footer/en/data.json +166 -166
  29. data/_data/footer/hi/data.json +68 -68
  30. data/_data/footer/networksites.json +15 -15
  31. data/_data/header/en/data.json +173 -173
  32. data/_data/header/hi/data.json +144 -144
  33. data/_data/home/en/en.json +285 -285
  34. data/_data/home/en/photoeffects.json +22 -22
  35. data/_data/home/en/posters.json +323 -323
  36. data/_data/home/hi/hi.json +86 -86
  37. data/_data/home-1/en/en.json +229 -229
  38. data/_data/languagesupport/compress-pdf-langs.json +11 -11
  39. data/_data/languagesupport/index-langs.json +13 -13
  40. data/_data/photo-categories.json +104 -104
  41. data/_data/photoeffects.json +31 -31
  42. data/_data/privacy/en/privacyPolicy.json +265 -265
  43. data/_data/termAndCondition/en/termAndCondition.json +358 -358
  44. data/_includes/Rating/rating.html +92 -92
  45. data/_includes/Rating/structureddata.html +53 -53
  46. data/_includes/Usp/usp.html +95 -95
  47. data/_includes/adblocker.html +240 -240
  48. data/_includes/adsense/adsense.html +7 -7
  49. data/_includes/alternates/alternates.html +45 -45
  50. data/_includes/author_bio.html +36 -36
  51. data/_includes/authors/authors.html +67 -67
  52. data/_includes/batch-conversion.html +65 -65
  53. data/_includes/bookmark.html +5 -5
  54. data/_includes/cssfile/links.html +11 -11
  55. data/_includes/custom-head.html +136 -136
  56. data/_includes/customblog/recentposts.html +67 -67
  57. data/_includes/customblog/relatedposts.html +203 -203
  58. data/_includes/disqus_comments.html +10 -10
  59. data/_includes/dropdown/langdropdown.html +22 -22
  60. data/_includes/feature.html +56 -56
  61. data/_includes/fileformat/Tabularcompariosn.html +158 -158
  62. data/_includes/fileformat/comparisonfiles.html +151 -151
  63. data/_includes/fileformat/fileformatdetail.html +101 -101
  64. data/_includes/fileformat/fileinfoformat.html +93 -93
  65. data/_includes/footer/index.html +538 -538
  66. data/_includes/google-analytics.html +22 -22
  67. data/_includes/head/index.html +235 -235
  68. data/_includes/header/blogHeader.html +34 -34
  69. data/_includes/header/index.html +188 -188
  70. data/_includes/languages/languages.html +60 -60
  71. data/_includes/monumetric/ads.html +57 -57
  72. data/_includes/monumetric/monumetric.html +57 -57
  73. data/_includes/monumetric/profitablecpmgate.html +51 -51
  74. data/_includes/nofiletransfer/nofiletransfer.html +38 -38
  75. data/_includes/paginationBlogPage.html +71 -71
  76. data/_includes/paginationPostPage.html +14 -14
  77. data/_includes/postauthorbio.html +17 -17
  78. data/_includes/postbox.html +31 -31
  79. data/_includes/script.html +508 -508
  80. data/_includes/section/alertbar.html +11 -11
  81. data/_includes/section/count.html +36 -36
  82. data/_includes/section/recent_posts.html +65 -65
  83. data/_includes/section/related_categories_post.html +198 -198
  84. data/_includes/share/socialshare.html +20 -20
  85. data/_includes/staticfooter.html +69 -69
  86. data/_layouts/aboutUs.html +34 -34
  87. data/_layouts/audio.html +33 -33
  88. data/_layouts/batch.html +98 -98
  89. data/_layouts/blog-1.html +83 -83
  90. data/_layouts/blog.html +94 -94
  91. data/_layouts/calculator.html +89 -89
  92. data/_layouts/categories.html +33 -33
  93. data/_layouts/contactUs.html +124 -124
  94. data/_layouts/default.html +1 -1
  95. data/_layouts/disclaimer.html +123 -123
  96. data/_layouts/download.html +301 -301
  97. data/_layouts/feature-1.html +322 -322
  98. data/_layouts/feature-download.html +311 -311
  99. data/_layouts/feature.html +256 -256
  100. data/_layouts/featureResultPage.html +65 -65
  101. data/_layouts/fileInfo.html +39 -39
  102. data/_layouts/filecomparison.html +85 -85
  103. data/_layouts/frame.html +222 -222
  104. data/_layouts/help.html +23 -23
  105. data/_layouts/home-1.html +229 -229
  106. data/_layouts/home.html +265 -265
  107. data/_layouts/homeResultPage.html +31 -31
  108. data/_layouts/imagekit.html +150 -126
  109. data/_layouts/page.html +5 -5
  110. data/_layouts/photo-effects-home.html +5 -5
  111. data/_layouts/post.html +177 -177
  112. data/_layouts/privacyPolicy.html +637 -637
  113. data/_layouts/termAndCondition.html +646 -646
  114. data/_layouts/video.html +33 -33
  115. data/assets/cross.svg +4 -4
  116. data/assets/css/adblocker.css +187 -187
  117. data/assets/css/batch.css +437 -437
  118. data/assets/css/blog-1.css +65 -65
  119. data/assets/css/blog.css +491 -491
  120. data/assets/css/bootstrap.min.css +6 -6
  121. data/assets/css/calculators.css +47 -47
  122. data/assets/css/common.css +550 -550
  123. data/assets/css/feature-1.css +290 -290
  124. data/assets/css/filecomparison.css +25 -25
  125. data/assets/css/frame.css +780 -780
  126. data/assets/css/home-1.css +187 -187
  127. data/assets/css/imagekit.css +840 -840
  128. data/assets/css/tools.css +1545 -1545
  129. data/assets/facebook.svg +4 -4
  130. data/assets/images/abp.svg +41 -41
  131. data/assets/images/adblock.svg +266 -266
  132. data/assets/images/addimg.svg +2 -2
  133. data/assets/images/convert.svg +8 -8
  134. data/assets/images/safevideoconverter.svg +23 -23
  135. data/assets/images/uo.svg +41 -41
  136. data/assets/images/vectorpaint.svg +5 -5
  137. data/assets/instagram.svg +4 -4
  138. data/assets/js/TopScroll.js +8 -8
  139. data/assets/js/adBlocker.js +68 -68
  140. data/assets/js/ads.js +8 -8
  141. data/assets/js/append-div.js +10 -10
  142. data/assets/js/batch.js +229 -229
  143. data/assets/js/calculator-tooltip.js +3 -3
  144. data/assets/js/face-api.js +38064 -38064
  145. data/assets/js/face-detection.js +303 -303
  146. data/assets/js/featureResult.js +48 -48
  147. data/assets/js/frame.js +263 -263
  148. data/assets/js/googledrive.js +155 -155
  149. data/assets/js/homeResult.js +36 -36
  150. data/assets/js/manifest.json +16 -16
  151. data/assets/js/multiselect.js +157 -157
  152. data/assets/js/perspective.min.js +182 -182
  153. data/assets/js/photo-effects.json +84 -84
  154. data/assets/js/redirectResult.js +9 -9
  155. data/assets/js/testing-batch.js +39 -39
  156. data/assets/js/theme.js +44 -44
  157. data/assets/linkdin.svg +4 -4
  158. data/assets/noserverupload.svg +4 -4
  159. data/assets/pdf.svg +20 -20
  160. data/assets/secure.svg +43 -43
  161. data/assets/star.svg +4 -4
  162. data/assets/twitter.svg +4 -4
  163. data/assets/youtube.svg +4 -4
  164. metadata +7 -7
data/assets/js/batch.js CHANGED
@@ -1,229 +1,229 @@
1
- const getScript = document.currentScript
2
- const pageTool = getScript.dataset.tool
3
- const lang = getScript.dataset.lang
4
- const inputBox = document.querySelector('#Inputbox')
5
- const addFiles = document.querySelector('.add-more-files')
6
- const gdrive = document.querySelector('#filepicker')
7
- const fileDropBox = document.querySelector('.custom-box')
8
- const workspace = document.querySelector('.workspace')
9
- const selectedFilesList = document.querySelector('.selectedFilesList')
10
- const downloadButton = document.querySelector('#download-button')
11
- const submitButton = document.querySelector('#submit-button')
12
- const showProcessingFiles = document.querySelector('.files-processing-list')
13
- let zipFileType = null
14
- let renderFileTypes = null
15
- let root = document.querySelector(':root')
16
- root.style.setProperty('--maincolor', fileDropBox.dataset.color)
17
-
18
- const getFile = (file) => {
19
- handleFile(file)
20
- }
21
- fileDropBox.addEventListener('dragover', (e) => {
22
- e.preventDefault()
23
- })
24
- fileDropBox.addEventListener('drop', (e) => {
25
- e.preventDefault()
26
- handleFile(e.dataTransfer.files[0])
27
- })
28
- const fileOnChange = () => {
29
- handleFile(file.files)
30
- }
31
- inputBox.onclick = function () {
32
- document.querySelector('#file').click()
33
- }
34
- const fileOnChange2 = () => {
35
- addMoreFiles(document.querySelector('#file2').files)
36
- }
37
- addFiles.onclick = function () {
38
- document.querySelector('#file2').click()
39
- }
40
- var files = []
41
- let fileName = ''
42
- let blobList = []
43
- const addMoreFiles = (addFiles) => {
44
- handleFile(addFiles)
45
- }
46
- const onSubmit = (files) => {
47
- blobList = []
48
- Promise.all(
49
- files.map((item, index) => {
50
- document.querySelector(
51
- `#loader-${index}`
52
- ).innerHTML = `<span class="processing">processing</span>
53
- <div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>`
54
- return new Promise((resolve, reject) => {
55
- batchConversion(item, index).then(([indexValue, blob, type]) => {
56
- blobList.push({ blob: blob, fileName: item })
57
- document.querySelector(
58
- `#loader-${indexValue}`
59
- ).innerHTML = `<span class="done">finished</span>`
60
- document.querySelector(`#download-${indexValue}`).style.display =
61
- 'inline-block'
62
- resolve()
63
- })
64
- }).catch((error) => {
65
- console.log(error)
66
- })
67
- })
68
- ).then(() => {
69
- document.querySelector('.bottom-section-container').style.display = 'flex'
70
- document.querySelector('.bottom-section-container').style.padding =
71
- '20px .75rem'
72
- document.querySelector('#download-zip').style.display = 'block'
73
- let zip = new JSZip()
74
- let zipFiles = zip.folder(`safeimagekit-batch-images`)
75
-
76
- blobList.map((item) => {
77
- zipFiles.file(
78
- `safeimagekit-batch-${item.fileName.name.split('.')[0]}.${
79
- zipFileType ? zipFileType : 'png'
80
- }`,
81
- getBase64String(item.blob),
82
- { base64: true }
83
- )
84
- })
85
-
86
- document.querySelector('#download-zip').addEventListener('click', () => {
87
- zip.generateAsync({ type: 'blob' }).then(function (content) {
88
- saveAs(content, `safeimagekit-batch-conversion.zip`)
89
- if (lang === 'en') {
90
- window.location.href = `/download?tool=${pageTool}`
91
- } else {
92
- window.location.href = `/${lang}/download?tool=${pageTool}`
93
- }
94
- })
95
- })
96
- })
97
- }
98
- let renderFileTypesHtml = ` <option value="png">png</option>
99
- <option value="jpg">jpg</option>
100
- <option value="jpeg">jpeg</option>
101
- <option value="webp">webp</option>
102
- `
103
-
104
- const renderFiles = (files) => {
105
- if (renderFileTypes !== null) {
106
- renderFileTypesHtml = ''
107
- renderFileTypes.map((i) => {
108
- renderFileTypesHtml += `<option value="${i}">${i}</option>`
109
- })
110
- }
111
- files.map((file, index) => {
112
- if (file) {
113
- let loader = 'Ready'
114
- showProcessingFiles.innerHTML += `
115
- <tr>
116
- <th scope="row" class="file-icon-row">
117
- <img src="/assets/images/file.png" alt="file" class="file-icon">
118
- </th>
119
- <td class="fileName">${file.name}</td>
120
- <td id=loader-${index} class="file-processing"><span class="ready">${loader}</span></td>
121
- <td>
122
- <div class="download-format ">
123
- <select name="image-format" id="image-format">
124
- ${renderFileTypesHtml}
125
- </select>
126
- </div>
127
-
128
- </td>
129
- <td class="file-download-button text-right">
130
- <button style="display:none;" id=download-${index} data-type="image" onclick="handleDownload(this)" class="btn download-file-btn">
131
- <svg class="download-icon" width="16px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"
132
- fill="currentColor">
133
- <path
134
- d="M18 20H5V15H6V19H17V15H18V20ZM12 4V15.19L14.3 13L15 13.6667L11.5 17L8 13.6667L8.7 13L11 15.19V4H12Z">
135
- </path>
136
- </svg> Download
137
- </button>
138
- </td>
139
- </tr>
140
- `
141
- }
142
- })
143
- }
144
-
145
- const handleFile = (file) => {
146
- showProcessingFiles.innerHTML = ''
147
- if (file) {
148
- for (let i = 0; i < file.length; i++) {
149
- files.push(file[i])
150
- stopLoading()
151
- workspace.style.display = 'block'
152
- document.querySelector('#file').style.display = 'block'
153
- let listItem = document.createElement('li')
154
- listItem.style.listStyle = 'none'
155
- let getFileSize = formatBytes(file[i].size)
156
- listItem.innerHTML = `${file[i].name} (${getFileSize})`
157
- // selectedFilesList.appendChild(listItem)
158
- }
159
- }
160
- renderFiles(files)
161
- submitButton.addEventListener('click', () => onSubmit(files))
162
- }
163
- function formatBytes(bytes, decimals = 2) {
164
- if (bytes === 0) return '0 Bytes'
165
-
166
- const k = 1024
167
- const dm = decimals < 0 ? 0 : decimals
168
- const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
169
-
170
- const i = Math.floor(Math.log(bytes) / Math.log(k))
171
-
172
- return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
173
- }
174
- const handleDownload = (e) => {
175
- let find = blobList[Number(e.id.replace(/^\D+/g, ''))].blob
176
- let fileName = blobList[Number(e.id.replace(/^\D+/g, ''))].fileName.name
177
-
178
- let format = document.querySelector('#image-format').value
179
-
180
- switch (e.dataset.type) {
181
- case 'image':
182
- let a = document.createElement('a')
183
- a.href = find
184
- a.download = `safeimagekit-batch-${fileName.split('.')[0]}.${format}`
185
- document.body.appendChild(a)
186
- a.click()
187
- break
188
- default:
189
- break
190
- }
191
- }
192
- const showLoading = () => {
193
- document.querySelector('#file-loader').style.display = 'flex'
194
- document.querySelector('.file-input').style.display = 'none'
195
- }
196
- const stopLoading = () => {
197
- fileDropBox.style.display = 'none'
198
- }
199
- const showDropDown = document.querySelector('.file-pick-dropdown')
200
- const icon = document.querySelector('.arrow-sign')
201
- const dropDown = document.querySelector('.file-picker-dropdown')
202
- showDropDown.addEventListener('click', () => {
203
- addScripts()
204
- if (dropDown.style.display !== 'none') {
205
- dropDown.style.display = 'none'
206
- icon.classList.remove('fa-angle-up')
207
- icon.classList.add('fa-angle-down')
208
- } else {
209
- dropDown.style.display = 'block'
210
- icon.classList.remove('fa-angle-down')
211
- icon.classList.add('fa-angle-up')
212
- }
213
- })
214
-
215
- const getBase64String = (dataURL) => {
216
- const idx = dataURL.indexOf('base64,') + 'base64,'.length
217
- return dataURL.substring(idx)
218
- }
219
- const dataURLtoBlob = (dataurl) => {
220
- let arr = dataurl.split(','),
221
- mime = arr[0].match(/:(.*?);/)[1],
222
- bstr = atob(arr[1]),
223
- n = bstr.length,
224
- u8arr = new Uint8Array(n)
225
- while (n--) {
226
- u8arr[n] = bstr.charCodeAt(n)
227
- }
228
- return new Blob([u8arr], { type: mime })
229
- }
1
+ const getScript = document.currentScript
2
+ const pageTool = getScript.dataset.tool
3
+ const lang = getScript.dataset.lang
4
+ const inputBox = document.querySelector('#Inputbox')
5
+ const addFiles = document.querySelector('.add-more-files')
6
+ const gdrive = document.querySelector('#filepicker')
7
+ const fileDropBox = document.querySelector('.custom-box')
8
+ const workspace = document.querySelector('.workspace')
9
+ const selectedFilesList = document.querySelector('.selectedFilesList')
10
+ const downloadButton = document.querySelector('#download-button')
11
+ const submitButton = document.querySelector('#submit-button')
12
+ const showProcessingFiles = document.querySelector('.files-processing-list')
13
+ let zipFileType = null
14
+ let renderFileTypes = null
15
+ let root = document.querySelector(':root')
16
+ root.style.setProperty('--maincolor', fileDropBox.dataset.color)
17
+
18
+ const getFile = (file) => {
19
+ handleFile(file)
20
+ }
21
+ fileDropBox.addEventListener('dragover', (e) => {
22
+ e.preventDefault()
23
+ })
24
+ fileDropBox.addEventListener('drop', (e) => {
25
+ e.preventDefault()
26
+ handleFile(e.dataTransfer.files[0])
27
+ })
28
+ const fileOnChange = () => {
29
+ handleFile(file.files)
30
+ }
31
+ inputBox.onclick = function () {
32
+ document.querySelector('#file').click()
33
+ }
34
+ const fileOnChange2 = () => {
35
+ addMoreFiles(document.querySelector('#file2').files)
36
+ }
37
+ addFiles.onclick = function () {
38
+ document.querySelector('#file2').click()
39
+ }
40
+ var files = []
41
+ let fileName = ''
42
+ let blobList = []
43
+ const addMoreFiles = (addFiles) => {
44
+ handleFile(addFiles)
45
+ }
46
+ const onSubmit = (files) => {
47
+ blobList = []
48
+ Promise.all(
49
+ files.map((item, index) => {
50
+ document.querySelector(
51
+ `#loader-${index}`
52
+ ).innerHTML = `<span class="processing">processing</span>
53
+ <div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>`
54
+ return new Promise((resolve, reject) => {
55
+ batchConversion(item, index).then(([indexValue, blob, type]) => {
56
+ blobList.push({ blob: blob, fileName: item })
57
+ document.querySelector(
58
+ `#loader-${indexValue}`
59
+ ).innerHTML = `<span class="done">finished</span>`
60
+ document.querySelector(`#download-${indexValue}`).style.display =
61
+ 'inline-block'
62
+ resolve()
63
+ })
64
+ }).catch((error) => {
65
+ console.log(error)
66
+ })
67
+ })
68
+ ).then(() => {
69
+ document.querySelector('.bottom-section-container').style.display = 'flex'
70
+ document.querySelector('.bottom-section-container').style.padding =
71
+ '20px .75rem'
72
+ document.querySelector('#download-zip').style.display = 'block'
73
+ let zip = new JSZip()
74
+ let zipFiles = zip.folder(`safeimagekit-batch-images`)
75
+
76
+ blobList.map((item) => {
77
+ zipFiles.file(
78
+ `safeimagekit-batch-${item.fileName.name.split('.')[0]}.${
79
+ zipFileType ? zipFileType : 'png'
80
+ }`,
81
+ getBase64String(item.blob),
82
+ { base64: true }
83
+ )
84
+ })
85
+
86
+ document.querySelector('#download-zip').addEventListener('click', () => {
87
+ zip.generateAsync({ type: 'blob' }).then(function (content) {
88
+ saveAs(content, `safeimagekit-batch-conversion.zip`)
89
+ if (lang === 'en') {
90
+ window.location.href = `/download?tool=${pageTool}`
91
+ } else {
92
+ window.location.href = `/${lang}/download?tool=${pageTool}`
93
+ }
94
+ })
95
+ })
96
+ })
97
+ }
98
+ let renderFileTypesHtml = ` <option value="png">png</option>
99
+ <option value="jpg">jpg</option>
100
+ <option value="jpeg">jpeg</option>
101
+ <option value="webp">webp</option>
102
+ `
103
+
104
+ const renderFiles = (files) => {
105
+ if (renderFileTypes !== null) {
106
+ renderFileTypesHtml = ''
107
+ renderFileTypes.map((i) => {
108
+ renderFileTypesHtml += `<option value="${i}">${i}</option>`
109
+ })
110
+ }
111
+ files.map((file, index) => {
112
+ if (file) {
113
+ let loader = 'Ready'
114
+ showProcessingFiles.innerHTML += `
115
+ <tr>
116
+ <th scope="row" class="file-icon-row">
117
+ <img src="/assets/images/file.png" alt="file" class="file-icon">
118
+ </th>
119
+ <td class="fileName">${file.name}</td>
120
+ <td id=loader-${index} class="file-processing"><span class="ready">${loader}</span></td>
121
+ <td>
122
+ <div class="download-format ">
123
+ <select name="image-format" id="image-format">
124
+ ${renderFileTypesHtml}
125
+ </select>
126
+ </div>
127
+
128
+ </td>
129
+ <td class="file-download-button text-right">
130
+ <button style="display:none;" id=download-${index} data-type="image" onclick="handleDownload(this)" class="btn download-file-btn">
131
+ <svg class="download-icon" width="16px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"
132
+ fill="currentColor">
133
+ <path
134
+ d="M18 20H5V15H6V19H17V15H18V20ZM12 4V15.19L14.3 13L15 13.6667L11.5 17L8 13.6667L8.7 13L11 15.19V4H12Z">
135
+ </path>
136
+ </svg> Download
137
+ </button>
138
+ </td>
139
+ </tr>
140
+ `
141
+ }
142
+ })
143
+ }
144
+
145
+ const handleFile = (file) => {
146
+ showProcessingFiles.innerHTML = ''
147
+ if (file) {
148
+ for (let i = 0; i < file.length; i++) {
149
+ files.push(file[i])
150
+ stopLoading()
151
+ workspace.style.display = 'block'
152
+ document.querySelector('#file').style.display = 'block'
153
+ let listItem = document.createElement('li')
154
+ listItem.style.listStyle = 'none'
155
+ let getFileSize = formatBytes(file[i].size)
156
+ listItem.innerHTML = `${file[i].name} (${getFileSize})`
157
+ // selectedFilesList.appendChild(listItem)
158
+ }
159
+ }
160
+ renderFiles(files)
161
+ submitButton.addEventListener('click', () => onSubmit(files))
162
+ }
163
+ function formatBytes(bytes, decimals = 2) {
164
+ if (bytes === 0) return '0 Bytes'
165
+
166
+ const k = 1024
167
+ const dm = decimals < 0 ? 0 : decimals
168
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
169
+
170
+ const i = Math.floor(Math.log(bytes) / Math.log(k))
171
+
172
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
173
+ }
174
+ const handleDownload = (e) => {
175
+ let find = blobList[Number(e.id.replace(/^\D+/g, ''))].blob
176
+ let fileName = blobList[Number(e.id.replace(/^\D+/g, ''))].fileName.name
177
+
178
+ let format = document.querySelector('#image-format').value
179
+
180
+ switch (e.dataset.type) {
181
+ case 'image':
182
+ let a = document.createElement('a')
183
+ a.href = find
184
+ a.download = `safeimagekit-batch-${fileName.split('.')[0]}.${format}`
185
+ document.body.appendChild(a)
186
+ a.click()
187
+ break
188
+ default:
189
+ break
190
+ }
191
+ }
192
+ const showLoading = () => {
193
+ document.querySelector('#file-loader').style.display = 'flex'
194
+ document.querySelector('.file-input').style.display = 'none'
195
+ }
196
+ const stopLoading = () => {
197
+ fileDropBox.style.display = 'none'
198
+ }
199
+ const showDropDown = document.querySelector('.file-pick-dropdown')
200
+ const icon = document.querySelector('.arrow-sign')
201
+ const dropDown = document.querySelector('.file-picker-dropdown')
202
+ showDropDown.addEventListener('click', () => {
203
+ addScripts()
204
+ if (dropDown.style.display !== 'none') {
205
+ dropDown.style.display = 'none'
206
+ icon.classList.remove('fa-angle-up')
207
+ icon.classList.add('fa-angle-down')
208
+ } else {
209
+ dropDown.style.display = 'block'
210
+ icon.classList.remove('fa-angle-down')
211
+ icon.classList.add('fa-angle-up')
212
+ }
213
+ })
214
+
215
+ const getBase64String = (dataURL) => {
216
+ const idx = dataURL.indexOf('base64,') + 'base64,'.length
217
+ return dataURL.substring(idx)
218
+ }
219
+ const dataURLtoBlob = (dataurl) => {
220
+ let arr = dataurl.split(','),
221
+ mime = arr[0].match(/:(.*?);/)[1],
222
+ bstr = atob(arr[1]),
223
+ n = bstr.length,
224
+ u8arr = new Uint8Array(n)
225
+ while (n--) {
226
+ u8arr[n] = bstr.charCodeAt(n)
227
+ }
228
+ return new Blob([u8arr], { type: mime })
229
+ }
@@ -1,3 +1,3 @@
1
- $(function () {
2
- $('[data-toggle="tooltip"]').tooltip()
3
- })
1
+ $(function () {
2
+ $('[data-toggle="tooltip"]').tooltip()
3
+ })