appscms-tools-theme 2.2.2 → 2.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/assets/js/frame.js CHANGED
@@ -1,251 +1,250 @@
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 fileDropBox = document.querySelector('.custom-box')
6
- const cropModal = document.querySelector('.crop-image-modal-container')
7
- const workspace = document.getElementById('workspace')
8
- const canvasPanel = document.getElementById('canvas-panel')
9
- const download = document.querySelector('#download-button')
10
- const form = document.querySelector('#effect-form')
11
- let files = []
12
- let cropWidth = null
13
- let cropHeight = null
14
- let cropper = null
15
- let cropInputWidth = null
16
- let index = 0
17
- let cropInputHeight = null
18
- let image = null
19
- const showLoader = () => {
20
- showLoading()
21
- }
22
- const closeLoader = () => {}
23
- const clickInput = (e) => {
24
- console.log(`#file-${e.dataset.index}`)
25
- document.querySelector(`#file-${e.dataset.index}`).click()
26
- }
27
- let featureData = null
28
-
29
- fetch('/assets/js/photo-effects.json')
30
- .then((response) => response.json())
31
- .then((data) => {
32
- featureData = data.find((i) => i.name === form.dataset.featureName)
33
- console.log(featureData)
34
- })
35
- const fileOnChange = (e) => {
36
- index = Number(e.dataset.index)
37
- let reader = new FileReader()
38
- reader.onload = (event) => {
39
- cropModal.style.display = 'flex'
40
- if (cropper === null) {
41
- cropImage(event.target.result, e.id)
42
- } else {
43
- updateCropper(event.target.result, e.id)
44
- }
45
- }
46
- reader.readAsDataURL(e.files[0])
47
- }
48
- const closeModal = () => {
49
- cropModal.style.display = 'none'
50
- }
51
- form.addEventListener('submit', (e) => {
52
- e.preventDefault()
53
- drawImage()
54
- })
55
- const drawInputImage = (ctx, item, indexValue, canvas, image) => {
56
- return new Promise((resolve, reject) => {
57
- let image = document.createElement('img')
58
- image.src = files[indexValue]
59
- image.onload = () => {
60
- image.width = Number(item.width)
61
- image.height = Number(item.height)
62
- if (item.filter) {
63
- ctx.filter = item.filter
64
- }
65
- ctx.drawImage(
66
- image,
67
- Number(item.x),
68
- Number(item.y),
69
- image.width,
70
- image.height
71
- )
72
-
73
- if (item.rotate) {
74
- drawRotated(item.rotate, ctx, canvas, image, item)
75
- }
76
- resolve()
77
- }
78
- })
79
- }
80
- const drawRotated = (degrees, ctx, canvas, image, item) => {
81
- console.log(image)
82
- ctx.clearRect(0, 0, canvas.width, canvas.height)
83
-
84
- // save the unrotatedctx of the canvas so we can restore it later
85
- // the alternative is to untranslate & unrotate after drawing
86
- ctx.save()
87
-
88
- // move to the center of the canvas
89
- ctx.translate(item.x, item.y)
90
-
91
- // rotate the canvas to the specified degrees
92
- ctx.rotate((degrees * Math.PI) / 180)
93
-
94
- // draw the image
95
- // since thectx is rotated, the image will be rotated also
96
- ctx.drawImage(image, -image.width / 2, -image.width / 2)
97
-
98
- // we’re done with the rotating so restore the unrotatedctx
99
- ctx.restore()
100
- }
101
- const drawImage = () => {
102
- let img = new Image()
103
- img.src = featureData.effectImagePath
104
- var canvas = document.createElement('canvas')
105
- var ctx = canvas.getContext('2d')
106
- img.onload = () => {
107
- canvas.width = img.width
108
- canvas.height = img.height
109
- Promise.all(
110
- featureData.elements.map((item, indexValue) => {
111
- if (item.type === 'image') {
112
- return new Promise((resolve, reject) => {
113
- drawInputImage(ctx, item, indexValue, canvas).then(() => {
114
- resolve()
115
- })
116
- })
117
- }
118
- })
119
- ).then(() => {
120
- ctx.filter = 'none'
121
- ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
122
- featureData.elements.map((item, indexValue) => {
123
- if (item.type === 'text') {
124
- let myFont = new FontFace(item.font, `url(${item.fontPath})`)
125
- myFont.load().then(function (font) {
126
- document.fonts.add(font)
127
- ctx.font = `${item.fontSize}px ${item.font}`
128
- if (item.shadowColor) {
129
- ctx.shadowColor = `${item.shadowColor}`
130
- }
131
- console.log(item)
132
- console.log((item.rotate * Math.PI) / 180)
133
- if (item.rotate) {
134
- ctx.rotate((item.rotate * Math.PI) / 180)
135
- }
136
- if (item.shadowOffsetX) {
137
- ctx.shadowOffsetX = 3
138
- }
139
- if (item.shadowOffsetY) {
140
- ctx.shadowOffsetY = 3
141
- }
142
- if (item.shadowBlur) {
143
- ctx.shadowBlur = 2
144
- }
145
- ctx.textAlign = 'center'
146
- ctx.fillStyle = `${item.color}`
147
- ctx.save()
148
- ctx.fillText(
149
- document.querySelector(`#${item.id}`).value,
150
- item.x,
151
- item.y
152
- )
153
- ctx.restore()
154
- })
155
- }
156
- if (item.type === 'rectangle') {
157
- }
158
- })
159
- canvasPanel.innerHTML = ''
160
- canvasPanel.appendChild(canvas)
161
- workspace.style.display = 'block'
162
- })
163
- }
164
- }
165
- const cropImage = (result, id) => {
166
- let image = new Image()
167
- image.onload = () => {
168
- let img = document.createElement('img')
169
- img.src = result
170
- img.id = 'image'
171
- document.querySelector('.crop-image-modal-body').appendChild(img)
172
- cropper = new Cropper(img, {
173
- viewMode: 3,
174
- ready() {
175
- console.log(id)
176
- let find = featureData.elements.find((i) => i.id === id)
177
- console.log(find)
178
- cropper.setAspectRatio(Number(find.width) / Number(find.height))
179
- cropModal.style.display = 'flex'
180
- this.cropper.crop()
181
- },
182
- crop(event) {
183
- cropWidth = Math.round(event.detail.width)
184
- cropHeight = Math.round(event.detail.height)
185
- },
186
- })
187
- }
188
- image.src = result
189
- }
190
- const updateCropper = (result, id) => {
191
- cropper.destroy()
192
- document.querySelector('.crop-image-modal-body').innerHTML = ''
193
- cropImage(result, id)
194
- }
195
- document.querySelector('#crop').addEventListener('click', () => {
196
- let cropperImg = cropper
197
- .getCroppedCanvas({
198
- width: cropWidth,
199
- height: cropHeight,
200
- })
201
- .toDataURL()
202
- files[index - 1] = cropperImg
203
- cropModal.style.display = 'none'
204
- })
205
- let inputFile = ''
206
- const handleFile = (file) => {
207
- cropModal.style.display = 'flex'
208
- document.querySelector('#file-loader').style.display = 'flex'
209
- document.querySelector('.file-input').style.display = 'none'
210
- inputFile = file
211
- if (file) {
212
- const reader = new FileReader()
213
- reader.onload = (e) => {
214
- if (e.target.result) {
215
- cropImage(e.target.result)
216
- }
217
- }
218
- reader.readAsDataURL(file)
219
- }
220
- }
221
- const showLoading = () => {
222
- document.querySelector('#file-loader').style.display = 'flex'
223
- document.querySelector('.file-input').style.display = 'none'
224
- }
225
- const stopLoading = () => {
226
- fileDropBox.style.display = 'none'
227
- }
228
- download.addEventListener('click', () => {
229
- let canvas = document.querySelector('canvas')
230
- let url = canvas.toDataURL(`image/png`)
231
- let a = document.createElement('a')
232
- a.href = url
233
- a.download = `safeimagekit-border-image.${inputFile.type.split('/')[1]}`
234
- document.body.appendChild(a)
235
- a.click()
236
- if (lang === 'en') {
237
- window.location.href = `/download?tool=${pageTool}`
238
- } else {
239
- window.location.href = `/${lang}/download?tool=${pageTool}`
240
- }
241
- })
242
-
243
- //
244
- // fonts
245
- // font rotation
246
- // font position
247
- // font transform
248
-
249
- //images
250
- //image rotation
251
- // image rectangle with text
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 fileDropBox = document.querySelector('.custom-box')
6
+ const cropModal = document.querySelector('.crop-image-modal-container')
7
+ const workspace = document.getElementById('workspace')
8
+ const canvasPanel = document.getElementById('canvas-panel')
9
+ const download = document.querySelector('#download-button')
10
+ const form = document.querySelector('#effect-form')
11
+ let files = []
12
+ let cropWidth = null
13
+ let cropHeight = null
14
+ let cropper = null
15
+ let cropInputWidth = null
16
+ let index = 0
17
+ let cropInputHeight = null
18
+ let image = null
19
+ const showLoader = () => {
20
+ showLoading()
21
+ }
22
+ const closeLoader = () => {}
23
+ const clickInput = (e) => {
24
+ console.log(`#file-${e.dataset.index}`)
25
+ document.querySelector(`#file-${e.dataset.index}`).click()
26
+ }
27
+ let featureData = null
28
+
29
+ fetch('/assets/js/photo-effects.json')
30
+ .then((response) => response.json())
31
+ .then((data) => {
32
+ featureData = data.find((i) => i.name === form.dataset.featureName)
33
+ console.log(featureData)
34
+ })
35
+ const fileOnChange = (e) => {
36
+ index = Number(e.dataset.index)
37
+ let reader = new FileReader()
38
+ reader.onload = (event) => {
39
+ cropModal.style.display = 'flex'
40
+ if (cropper === null) {
41
+ cropImage(event.target.result, e.id)
42
+ } else {
43
+ updateCropper(event.target.result, e.id)
44
+ }
45
+ }
46
+ reader.readAsDataURL(e.files[0])
47
+ }
48
+ const closeModal = () => {
49
+ cropModal.style.display = 'none'
50
+ }
51
+ form.addEventListener('submit', (e) => {
52
+ e.preventDefault()
53
+ drawImage()
54
+ })
55
+ const drawInputImage = (ctx, item, indexValue, canvas, image) => {
56
+ return new Promise((resolve, reject) => {
57
+ let image = document.createElement('img')
58
+ image.src = files[indexValue]
59
+ image.onload = () => {
60
+ image.width = Number(item.width)
61
+ image.height = Number(item.height)
62
+ if (item.filter) {
63
+ ctx.filter = item.filter
64
+ }
65
+ ctx.drawImage(
66
+ image,
67
+ Number(item.x),
68
+ Number(item.y),
69
+ image.width,
70
+ image.height
71
+ )
72
+ if (item.rotate) {
73
+ drawRotated(item.rotate, ctx, canvas, image, item)
74
+ }
75
+ resolve()
76
+ }
77
+ })
78
+ }
79
+
80
+ const drawRotated = (degrees, ctx, canvas, image, item) => {
81
+ console.log(image)
82
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
83
+
84
+ // save the unrotatedctx of the canvas so we can restore it later
85
+ // the alternative is to untranslate & unrotate after drawing
86
+ ctx.save()
87
+
88
+ // move to the center of the canvas
89
+ ctx.translate(item.x, item.y)
90
+
91
+ // rotate the canvas to the specified degrees
92
+ ctx.rotate((degrees * Math.PI) / 180)
93
+
94
+ // draw the image
95
+ // since thectx is rotated, the image will be rotated also
96
+ ctx.drawImage(image, -image.width / 2, -image.width / 2)
97
+
98
+ // we’re done with the rotating so restore the unrotatedctx
99
+ ctx.restore()
100
+ }
101
+ const drawImage = () => {
102
+ let img = new Image()
103
+ img.src = featureData.effectImagePath
104
+ var canvas = document.createElement('canvas')
105
+ var ctx = canvas.getContext('2d')
106
+ img.onload = () => {
107
+ canvas.width = img.width
108
+ canvas.height = img.height
109
+ Promise.all(
110
+ featureData.elements.map((item, indexValue) => {
111
+ if (item.type === 'image') {
112
+ return new Promise((resolve, reject) => {
113
+ drawInputImage(ctx, item, indexValue, canvas).then(() => {
114
+ resolve()
115
+ })
116
+ })
117
+ }
118
+ })
119
+ ).then(() => {
120
+ ctx.filter = 'none'
121
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
122
+ featureData.elements.map((item, indexValue) => {
123
+ if (item.type === 'text') {
124
+ let myFont = new FontFace(item.font, `url(${item.fontPath})`)
125
+ myFont.load().then(function (font) {
126
+ ctx.save()
127
+ document.fonts.add(font)
128
+ ctx.font = `${item.fontSize}px ${item.font}`
129
+ if (item.shadowColor) {
130
+ ctx.shadowColor = `${item.shadowColor}`
131
+ }
132
+
133
+ if (item.shadowOffsetX) {
134
+ ctx.shadowOffsetX = 3
135
+ }
136
+ if (item.shadowOffsetY) {
137
+ ctx.shadowOffsetY = 3
138
+ }
139
+ if (item.shadowBlur) {
140
+ ctx.shadowBlur = 2
141
+ }
142
+ if (item.rotate) {
143
+ ctx.rotate((item.rotate * Math.PI) / 180)
144
+ }
145
+ ctx.textAlign = 'center'
146
+ ctx.fillStyle = `${item.color}`
147
+ ctx.fillText(
148
+ document.querySelector(`#${item.id}`).value,
149
+ item.x,
150
+ item.y
151
+ )
152
+ ctx.restore()
153
+ })
154
+ }
155
+ if (item.type === 'rectangle') {
156
+ }
157
+ })
158
+ canvasPanel.innerHTML = ''
159
+ canvasPanel.appendChild(canvas)
160
+ workspace.style.display = 'block'
161
+ })
162
+ }
163
+ }
164
+ const cropImage = (result, id) => {
165
+ let image = new Image()
166
+ image.onload = () => {
167
+ let img = document.createElement('img')
168
+ img.src = result
169
+ img.id = 'image'
170
+ document.querySelector('.crop-image-modal-body').appendChild(img)
171
+ cropper = new Cropper(img, {
172
+ viewMode: 3,
173
+ ready() {
174
+ console.log(id)
175
+ let find = featureData.elements.find((i) => i.id === id)
176
+ console.log(find)
177
+ cropper.setAspectRatio(Number(find.width) / Number(find.height))
178
+ cropModal.style.display = 'flex'
179
+ this.cropper.crop()
180
+ },
181
+ crop(event) {
182
+ cropWidth = Math.round(event.detail.width)
183
+ cropHeight = Math.round(event.detail.height)
184
+ },
185
+ })
186
+ }
187
+ image.src = result
188
+ }
189
+ const updateCropper = (result, id) => {
190
+ cropper.destroy()
191
+ document.querySelector('.crop-image-modal-body').innerHTML = ''
192
+ cropImage(result, id)
193
+ }
194
+ document.querySelector('#crop').addEventListener('click', () => {
195
+ let cropperImg = cropper
196
+ .getCroppedCanvas({
197
+ width: cropWidth,
198
+ height: cropHeight,
199
+ })
200
+ .toDataURL()
201
+ files[index - 1] = cropperImg
202
+ cropModal.style.display = 'none'
203
+ })
204
+ let inputFile = ''
205
+ const handleFile = (file) => {
206
+ cropModal.style.display = 'flex'
207
+ document.querySelector('#file-loader').style.display = 'flex'
208
+ document.querySelector('.file-input').style.display = 'none'
209
+ inputFile = file
210
+ if (file) {
211
+ const reader = new FileReader()
212
+ reader.onload = (e) => {
213
+ if (e.target.result) {
214
+ cropImage(e.target.result)
215
+ }
216
+ }
217
+ reader.readAsDataURL(file)
218
+ }
219
+ }
220
+ const showLoading = () => {
221
+ document.querySelector('#file-loader').style.display = 'flex'
222
+ document.querySelector('.file-input').style.display = 'none'
223
+ }
224
+ const stopLoading = () => {
225
+ fileDropBox.style.display = 'none'
226
+ }
227
+ download.addEventListener('click', () => {
228
+ let canvas = document.querySelector('canvas')
229
+ let url = canvas.toDataURL(`image/png`)
230
+ let a = document.createElement('a')
231
+ a.href = url
232
+ a.download = `safeimagekit-border-image.${inputFile.type.split('/')[1]}`
233
+ document.body.appendChild(a)
234
+ a.click()
235
+ if (lang === 'en') {
236
+ window.location.href = `/download?tool=${pageTool}`
237
+ } else {
238
+ window.location.href = `/${lang}/download?tool=${pageTool}`
239
+ }
240
+ })
241
+
242
+ //
243
+ // fonts
244
+ // font rotation
245
+ // font position
246
+ // font transform
247
+
248
+ //images
249
+ //image rotation
250
+ // image rectangle with text
@@ -18,9 +18,9 @@
18
18
  "id": "text-1",
19
19
  "type": "text",
20
20
  "x": "100",
21
- "rotate": 0,
22
21
  "y": "100",
23
22
  "color": "red",
23
+ "rotate": 10,
24
24
  "fontFamily": "Calligraphy",
25
25
  "fontPath": "/assets/fonts/Calligraphy.ttf",
26
26
  "fontWeight": "bold",
@@ -31,11 +31,11 @@
31
31
  "imagePath": "",
32
32
  "filter": "grayscale(100%)",
33
33
  "perspective": "",
34
- "rotate": 40,
35
34
  "height": 300,
36
35
  "width": 300,
37
- "x": 100,
38
- "y": 200,
36
+ "rotate": 1,
37
+ "x": 0,
38
+ "y": 0,
39
39
  "id": "file-3"
40
40
  },
41
41
  {
@@ -44,7 +44,6 @@
44
44
  "type": "text",
45
45
  "x": "200",
46
46
  "y": "200",
47
- "rotate": 40,
48
47
  "color": "red",
49
48
  "fontFamily": "Calligraphy",
50
49
  "fontPath": "/assets/fonts/Calligraphy.ttf",
@@ -0,0 +1,28 @@
1
+ const opacity = document.querySelector("#opacity")
2
+ const batchConversion = async (file, indexValue) => {
3
+ return new Promise((resolve, reject) => {
4
+ if (file) {
5
+ const reader = new FileReader()
6
+ reader.readAsDataURL(file)
7
+ reader.onload = (e) => {
8
+ if (e.target.result) {
9
+ let image = new Image()
10
+ let canvas = document.createElement('canvas')
11
+ canvas.setAttribute('id', 'canvas-img')
12
+ let ctx = canvas.getContext('2d')
13
+ image.onload = () => {
14
+ canvas.width = image.width
15
+ canvas.height = image.height
16
+ ctx.globalAlpha = opacity.value
17
+ ctx.drawImage(image, 0, 0, canvas.width, canvas.height)
18
+ resolve([indexValue, canvas.toDataURL('image/png'), "image"])
19
+ }
20
+ image.src = e.target.result
21
+ }
22
+ }
23
+ }
24
+ })
25
+ }
26
+
27
+
28
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appscms-tools-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - vivek-appscms
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-17 00:00:00.000000000 Z
11
+ date: 2022-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -2359,6 +2359,7 @@ files:
2359
2359
  - _data/disclaimer/en/disclaimer.json
2360
2360
  - _data/download/en/download.json
2361
2361
  - _data/feature/en/allele-frequency.json
2362
+ - _data/feature/en/batch-conversion.json
2362
2363
  - _data/feature/en/compress-pdf.json
2363
2364
  - _data/feature/en/split-pdf.json
2364
2365
  - _data/feature/en/theframe.json
@@ -2388,6 +2389,7 @@ files:
2388
2389
  - _includes/alternates/alternates.html
2389
2390
  - _includes/author_bio.html
2390
2391
  - _includes/authors/authors.html
2392
+ - _includes/batch-conversion.html
2391
2393
  - _includes/cssfile/links.html
2392
2394
  - _includes/custom-head.html
2393
2395
  - _includes/customblog/recentposts.html
@@ -2421,6 +2423,7 @@ files:
2421
2423
  - _includes/share/socialshare.html
2422
2424
  - _includes/staticfooter.html
2423
2425
  - _layouts/aboutUs.html
2426
+ - _layouts/batch.html
2424
2427
  - _layouts/blog.html
2425
2428
  - _layouts/calculator.html
2426
2429
  - _layouts/categories.html
@@ -2444,6 +2447,7 @@ files:
2444
2447
  - assets/cloud.svg
2445
2448
  - assets/cross.svg
2446
2449
  - assets/css/adblocker.css
2450
+ - assets/css/batch.css
2447
2451
  - assets/css/blog.css
2448
2452
  - assets/css/bootstrap.min.css
2449
2453
  - assets/css/calculators.css
@@ -2573,9 +2577,15 @@ files:
2573
2577
  - assets/images/Nikita.webp
2574
2578
  - assets/images/abp.svg
2575
2579
  - assets/images/adblock.svg
2580
+ - assets/images/add-image.png
2581
+ - assets/images/add.png
2576
2582
  - assets/images/alka.webp
2577
2583
  - assets/images/avatar.png
2578
2584
  - assets/images/balark.jpeg
2585
+ - assets/images/cloud-computing.png
2586
+ - assets/images/convert.png
2587
+ - assets/images/download.png
2588
+ - assets/images/file.png
2579
2589
  - assets/images/fileformat.webp
2580
2590
  - assets/images/gallary.png
2581
2591
  - assets/images/keshav.webp
@@ -2583,19 +2593,27 @@ files:
2583
2593
  - assets/images/logo.png
2584
2594
  - assets/images/paavan.webp
2585
2595
  - assets/images/rating.png
2596
+ - assets/images/safeimagekit. (2).png
2597
+ - assets/images/safeimagekit. (3).png
2598
+ - assets/images/safeimagekit..png
2599
+ - assets/images/safeimagekit.png
2586
2600
  - assets/images/safevideoconverter.svg
2587
2601
  - assets/images/siddhika.jpeg
2588
2602
  - assets/images/sona.jpeg
2603
+ - assets/images/spinner.gif
2589
2604
  - assets/images/together_forever.png
2605
+ - assets/images/trust.svg
2590
2606
  - assets/images/udit.jpeg
2591
2607
  - assets/images/udit.jpg
2592
2608
  - assets/images/udit.png
2593
2609
  - assets/images/uo.svg
2610
+ - assets/images/vectorpaint.svg
2594
2611
  - assets/instagram.svg
2595
2612
  - assets/js/TopScroll.js
2596
2613
  - assets/js/adBlocker.js
2597
2614
  - assets/js/ads.js
2598
2615
  - assets/js/append-div.js
2616
+ - assets/js/batch.js
2599
2617
  - assets/js/featureResult.js
2600
2618
  - assets/js/frame.js
2601
2619
  - assets/js/googledrive.js
@@ -2604,6 +2622,7 @@ files:
2604
2622
  - assets/js/multiselect.js
2605
2623
  - assets/js/photo-effects.json
2606
2624
  - assets/js/redirectResult.js
2625
+ - assets/js/testing-batch.js
2607
2626
  - assets/js/theme.js
2608
2627
  - assets/linkdin.svg
2609
2628
  - assets/noserverupload.svg