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.
- checksums.yaml +4 -4
- data/_data/calculators/en/biology-calc/bulb-spacing.json +79 -1
- data/_data/calculators/en/biology-calc/cat-chocolate-toxicity.json +53 -1
- data/_data/calculators/en/chemistry-calc/activation-energy.json +45 -1
- data/_data/feature/en/batch-conversion.json +78 -0
- data/_data/feature/en/compress-pdf.json +11 -5
- data/_includes/batch-conversion.html +37 -0
- data/_includes/monumetric/monumetric.html +2 -3
- data/_layouts/batch.html +97 -0
- data/assets/css/batch.css +423 -0
- data/assets/images/add-image.png +0 -0
- data/assets/images/add.png +0 -0
- data/assets/images/cloud-computing.png +0 -0
- data/assets/images/convert.png +0 -0
- data/assets/images/download.png +0 -0
- data/assets/images/file.png +0 -0
- data/assets/images/safeimagekit. (2).png +0 -0
- data/assets/images/safeimagekit. (3).png +0 -0
- data/assets/images/safeimagekit..png +0 -0
- data/assets/images/safeimagekit.png +0 -0
- data/assets/images/spinner.gif +0 -0
- data/assets/images/trust.svg +1 -0
- data/assets/images/vectorpaint.svg +6 -0
- data/assets/js/batch.js +190 -0
- data/assets/js/frame.js +250 -251
- data/assets/js/photo-effects.json +4 -5
- data/assets/js/testing-batch.js +28 -0
- metadata +21 -2
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (item.
|
|
134
|
-
ctx.
|
|
135
|
-
}
|
|
136
|
-
if (item.
|
|
137
|
-
ctx.
|
|
138
|
-
}
|
|
139
|
-
if (item.
|
|
140
|
-
ctx.
|
|
141
|
-
}
|
|
142
|
-
if (item.
|
|
143
|
-
ctx.
|
|
144
|
-
}
|
|
145
|
-
ctx.textAlign = 'center'
|
|
146
|
-
ctx.fillStyle = `${item.color}`
|
|
147
|
-
ctx.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
item.
|
|
151
|
-
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
canvasPanel.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
img.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
document.querySelector('
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
document.querySelector('
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
let
|
|
230
|
-
let
|
|
231
|
-
|
|
232
|
-
a.
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
//
|
|
244
|
-
//
|
|
245
|
-
// font
|
|
246
|
-
// font
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
//
|
|
250
|
-
//image
|
|
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
|
-
"
|
|
38
|
-
"
|
|
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.
|
|
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-
|
|
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
|