appscms-tools-theme 2.2.2 → 2.2.5

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.
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