appscms-tools-theme 5.2.5 → 5.2.6

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 (631) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -0
  3. data/README.md +50 -0
  4. data/_data/.DS_Store +0 -0
  5. data/_data/about/en/about.json +17 -0
  6. data/_data/aitools/en/ai-article-writer.json +184 -0
  7. data/_data/aitools/en/all-in-one-social-post.json +217 -0
  8. data/_data/aitools/en/amazon-product-bullet-points-generator.json +224 -0
  9. data/_data/aitools/en/amazon-product-description-generator.json +237 -0
  10. data/_data/aitools/en/blog-conclusion-generator.json +253 -0
  11. data/_data/aitools/en/blog-content-calendar.json +232 -0
  12. data/_data/aitools/en/blog-introduction-generator.json +246 -0
  13. data/_data/aitools/en/blog-outline-generator.json +232 -0
  14. data/_data/aitools/en/blog-section-generator.json +253 -0
  15. data/_data/aitools/en/blog-title-generator.json +232 -0
  16. data/_data/aitools/en/blog-topic-ideas.json +232 -0
  17. data/_data/aitools/en/brand-name-generator.json +215 -0
  18. data/_data/aitools/en/caption-generator.json +271 -0
  19. data/_data/aitools/en/engagement-post-generator.json +251 -0
  20. data/_data/aitools/en/facebook-post.json +232 -0
  21. data/_data/aitools/en/hidden-fact-finder.json +232 -0
  22. data/_data/aitools/en/human-written-blog-post.json +232 -0
  23. data/_data/aitools/en/instagram-bio-generator.json +246 -0
  24. data/_data/aitools/en/instagram-caption.json +232 -0
  25. data/_data/aitools/en/instagram-carousel.json +250 -0
  26. data/_data/aitools/en/instagram-hashtag-generator.json +231 -0
  27. data/_data/aitools/en/instagram-name-generator.json +239 -0
  28. data/_data/aitools/en/instagram-threads-generator.json +239 -0
  29. data/_data/aitools/en/interactive-content-creator.json +252 -0
  30. data/_data/aitools/en/linkedin-hashtag-generator.json +239 -0
  31. data/_data/aitools/en/linkedin-post.json +232 -0
  32. data/_data/aitools/en/motivational-posts.json +239 -0
  33. data/_data/aitools/en/pinterest-pin.json +217 -0
  34. data/_data/aitools/en/platform-specific-content-generator.json +246 -0
  35. data/_data/aitools/en/product-description.json +222 -0
  36. data/_data/aitools/en/quick-article-writer.json +253 -0
  37. data/_data/aitools/en/replies-for-facebook.json +239 -0
  38. data/_data/aitools/en/replies-for-instagram.json +239 -0
  39. data/_data/aitools/en/replies-for-linkedin.json +239 -0
  40. data/_data/aitools/en/replies-for-twitter.json +239 -0
  41. data/_data/aitools/en/rewrite-article-with-keywords.json +246 -0
  42. data/_data/aitools/en/script-for-instagram-reel.json +246 -0
  43. data/_data/aitools/en/script-for-tiktok-video.json +246 -0
  44. data/_data/aitools/en/seo-optimized-blog-post.json +239 -0
  45. data/_data/aitools/en/snapchat-caption-maker.json +245 -0
  46. data/_data/aitools/en/social-media-bio-creator.json +274 -0
  47. data/_data/aitools/en/social-media-bio-generator.json +246 -0
  48. data/_data/aitools/en/social-media-calendar.json +250 -0
  49. data/_data/aitools/en/tiktok-caption.json +232 -0
  50. data/_data/aitools/en/tiktok-username-generator.json +239 -0
  51. data/_data/aitools/en/twitter-poll-generator.json +250 -0
  52. data/_data/aitools/en/twitter-post.json +272 -0
  53. data/_data/blog/alertbar.yml +3 -0
  54. data/_data/blog/authors.yml +11 -0
  55. data/_data/blog/blog.yml +4 -0
  56. data/_data/blog/nav.json +14 -0
  57. data/_data/blog/relatedblogs.json +2816 -0
  58. data/_data/blog/share.yml +28 -0
  59. data/_data/contact/en/contact.json +39 -0
  60. data/_data/contenttool/en/features.json +18 -0
  61. data/_data/contenttool/en/mainfeatures.json +12 -0
  62. data/_data/customcdns/customcdns.yml +0 -0
  63. data/_data/disclaimer/en/disclaimer.json +38 -0
  64. data/_data/download/en/download.json +1 -0
  65. data/_data/feature/.DS_Store +0 -0
  66. data/_data/feature/en/3_shop_posters.json +456 -0
  67. data/_data/feature/en/allele-frequency.json +349 -0
  68. data/_data/feature/en/batch-conversion.json +193 -0
  69. data/_data/feature/en/compress-pdf.json +231 -0
  70. data/_data/feature/en/devtools.json +322 -0
  71. data/_data/feature/en/face-detection.json +157 -0
  72. data/_data/feature/en/split-pdf.json +222 -0
  73. data/_data/feature/en/theframe.json +161 -0
  74. data/_data/feature/hi/compress-pdf.json +1 -0
  75. data/_data/feature/tr/compress-pdf.json +1 -0
  76. data/_data/filecomparison/en/filecomparison.json +39 -0
  77. data/_data/fileinfo/en/fileinfo.json +16 -0
  78. data/_data/footer/.DS_Store +0 -0
  79. data/_data/footer/en/data.json +265 -0
  80. data/_data/footer/hi/data.json +69 -0
  81. data/_data/footer/networksites.json +16 -0
  82. data/_data/header/.DS_Store +0 -0
  83. data/_data/header/en/data.json +1396 -0
  84. data/_data/header/hi/data.json +145 -0
  85. data/_data/help/en/help.json +0 -0
  86. data/_data/home/.DS_Store +0 -0
  87. data/_data/home/de/da.json +0 -0
  88. data/_data/home/de/de.json +0 -0
  89. data/_data/home/en/en.json +249 -0
  90. data/_data/home/en/ens.json +143 -0
  91. data/_data/home/en/photoeffects.json +1 -0
  92. data/_data/home/en/posters.json +322 -0
  93. data/_data/home/hi/hi.json +87 -0
  94. data/_data/home-1/en/en.json +237 -0
  95. data/_data/languagesupport/compress-pdf-langs.json +12 -0
  96. data/_data/languagesupport/index-langs.json +14 -0
  97. data/_data/noindexURLs.json +23 -0
  98. data/_data/photo-categories.json +105 -0
  99. data/_data/photoeffects.json +32 -0
  100. data/_data/privacy/en/privacyPolicy.json +266 -0
  101. data/_data/rating/rating.json +1 -0
  102. data/_data/review/trustpilot.json +29 -0
  103. data/_data/templates.json +17459 -0
  104. data/_data/termAndCondition/en/termAndCondition.json +1 -0
  105. data/_data/vintage/en/test.json +142 -0
  106. data/_includes/.DS_Store +0 -0
  107. data/_includes/Atest.html +248 -0
  108. data/_includes/Rating/rating.html +93 -0
  109. data/_includes/Rating/structureddata.html +53 -0
  110. data/_includes/Usp/usp.html +96 -0
  111. data/_includes/adblocker.html +240 -0
  112. data/_includes/adsense/adsense.html +7 -0
  113. data/_includes/aitools/instagram-hashtag-generator.html +0 -0
  114. data/_includes/alternates/alternates.html +64 -0
  115. data/_includes/appscms/.DS_Store +0 -0
  116. data/_includes/appscms/category-tabs/category-tabs.html +145 -0
  117. data/_includes/appscms/customblog/contenttool-recent-posts.html +94 -0
  118. data/_includes/appscms/customblog/pageRelatedPosts.html +79 -0
  119. data/_includes/appscms/customblog/recentposts.html +68 -0
  120. data/_includes/appscms/customblog/relatedBlogs.html +83 -0
  121. data/_includes/appscms/customblog/relatedposts.html +194 -0
  122. data/_includes/appscms/extras/appscms-postbox.html +57 -0
  123. data/_includes/appscms/extras/ratings.html +349 -0
  124. data/_includes/appscms/extras/recent-posts.html +1 -0
  125. data/_includes/appscms/extras/traffic-count.html +21 -0
  126. data/_includes/appscms/faq/faq.html +40 -0
  127. data/_includes/appscms/featurePageAuthors/featurePageAuthors.html +86 -0
  128. data/_includes/appscms/featurehighlight/featurehighlight.html +48 -0
  129. data/_includes/appscms/footer/ai-image-tools-footer.html +14 -0
  130. data/_includes/appscms/footer/footer.html +438 -0
  131. data/_includes/appscms/footer/products.html +24 -0
  132. data/_includes/appscms/footer/static-footer.html +81 -0
  133. data/_includes/appscms/head/bloghead.html +129 -0
  134. data/_includes/appscms/head/head.html +516 -0
  135. data/_includes/appscms/headings/ai-image-tools-headings.html +24 -0
  136. data/_includes/appscms/headings/contenttool-headings.html +33 -0
  137. data/_includes/appscms/headings/devtool-headings.html +38 -0
  138. data/_includes/appscms/headings/headings.html +24 -0
  139. data/_includes/appscms/home/contenttool-feature-boxes.html +20 -0
  140. data/_includes/appscms/home/devtool-feature-boxes.html +71 -0
  141. data/_includes/appscms/home/feature-boxes.html +58 -0
  142. data/_includes/appscms/howto/howto.html +89 -0
  143. data/_includes/appscms/infographics/infographics.html +217 -0
  144. data/_includes/appscms/loaders/loader.html +4 -0
  145. data/_includes/appscms/navbars/ai-image-tools-navbar.html +454 -0
  146. data/_includes/appscms/navbars/devtool-navbar.html +50 -0
  147. data/_includes/appscms/navbars/devtool-toolbar.html +100 -0
  148. data/_includes/appscms/navbars/navbar.html +334 -0
  149. data/_includes/appscms/navbars/toolbar.html +303 -0
  150. data/_includes/appscms/recent-posts/recent_posts.html +90 -0
  151. data/_includes/appscms/recent-posts/related_categories_post.html +195 -0
  152. data/_includes/appscms/reviews/trustpilot.html +377 -0
  153. data/_includes/appscms/scripts/script.html +168 -0
  154. data/_includes/appscms/searchbar/devtool-searchbar.html +63 -0
  155. data/_includes/appscms/searchbar/searchbar.html +17 -0
  156. data/_includes/appscms/uploadbutton/uploadbutton.html +68 -0
  157. data/_includes/appscms/usp/usp.html +91 -0
  158. data/_includes/author_bio.html +41 -0
  159. data/_includes/authorpagehead/index.html +47 -0
  160. data/_includes/authors/authors.html +40 -0
  161. data/_includes/batch-conversion.html +141 -0
  162. data/_includes/bookmark.html +7 -0
  163. data/_includes/contenttool_banner.html +266 -0
  164. data/_includes/contenttool_result_banner.html +135 -0
  165. data/_includes/cssfile/links.html +54 -0
  166. data/_includes/custom-head.html +139 -0
  167. data/_includes/customCode.html +1 -0
  168. data/_includes/customScripts.html +1 -0
  169. data/_includes/customblog/pageRelatedPosts.html +88 -0
  170. data/_includes/customblog/recentposts.html +68 -0
  171. data/_includes/customblog/relatedBlogs.html +87 -0
  172. data/_includes/customblog/relatedposts.html +202 -0
  173. data/_includes/disqus_comments.html +11 -0
  174. data/_includes/dropdown/langdropdown.html +32 -0
  175. data/_includes/feature.html +40 -0
  176. data/_includes/featurePageAuthors/featurePageAuthors.html +101 -0
  177. data/_includes/fileformat/Tabularcompariosn.html +159 -0
  178. data/_includes/fileformat/comparisonfiles.html +152 -0
  179. data/_includes/fileformat/fileformatdetail.html +102 -0
  180. data/_includes/fileformat/fileinfoformat.html +94 -0
  181. data/_includes/footer/index.html +538 -0
  182. data/_includes/google-analytics.html +32 -0
  183. data/_includes/head/index.html +642 -0
  184. data/_includes/header/blogHeader.html +35 -0
  185. data/_includes/header/index.html +153 -0
  186. data/_includes/infographics/infographics.html +244 -0
  187. data/_includes/internationalization-section.html +67 -0
  188. data/_includes/languages/languages.html +61 -0
  189. data/_includes/monumetric/ads.html +58 -0
  190. data/_includes/monumetric/monumetric.html +58 -0
  191. data/_includes/monumetric/profitablecpmgate.html +52 -0
  192. data/_includes/nofiletransfer/nofiletransfer.html +38 -0
  193. data/_includes/paginationBlogPage.html +70 -0
  194. data/_includes/paginationPostPage.html +15 -0
  195. data/_includes/postauthorbio.html +18 -0
  196. data/_includes/postbox.html +65 -0
  197. data/_includes/script.html +560 -0
  198. data/_includes/section/alertbar.html +12 -0
  199. data/_includes/section/count.html +33 -0
  200. data/_includes/section/recent_posts.html +94 -0
  201. data/_includes/section/related_categories_post.html +197 -0
  202. data/_includes/share/socialshare.html +21 -0
  203. data/_includes/staticfooter.html +70 -0
  204. data/_includes/userTracking.html +15 -0
  205. data/_layouts/aboutUs.html +180 -0
  206. data/_layouts/ai-image-generator.html +307 -0
  207. data/_layouts/ai-image-home.html +160 -0
  208. data/_layouts/ai-image-pricing.html +642 -0
  209. data/_layouts/ai-image-profile.html +434 -0
  210. data/_layouts/allAuthors.html +136 -0
  211. data/_layouts/appscms-about.html +168 -0
  212. data/_layouts/appscms-audio.html +33 -0
  213. data/_layouts/appscms-author.html +440 -0
  214. data/_layouts/appscms-authors.html +150 -0
  215. data/_layouts/appscms-batch.html +136 -0
  216. data/_layouts/appscms-blog.html +122 -0
  217. data/_layouts/appscms-calculator.html +158 -0
  218. data/_layouts/appscms-categories.html +26 -0
  219. data/_layouts/appscms-contact.html +137 -0
  220. data/_layouts/appscms-disclaimer.html +129 -0
  221. data/_layouts/appscms-download.html +304 -0
  222. data/_layouts/appscms-feature-result.html +101 -0
  223. data/_layouts/appscms-feature.html +101 -0
  224. data/_layouts/appscms-help.html +32 -0
  225. data/_layouts/appscms-home.html +61 -0
  226. data/_layouts/appscms-imagekit.html +96 -0
  227. data/_layouts/appscms-post.html +247 -0
  228. data/_layouts/appscms-privacy-policy.html +786 -0
  229. data/_layouts/appscms-terms-and-conditions.html +650 -0
  230. data/_layouts/appscms-video.html +33 -0
  231. data/_layouts/audio.html +33 -0
  232. data/_layouts/author.html +413 -0
  233. data/_layouts/batch.html +177 -0
  234. data/_layouts/blog-1.html +121 -0
  235. data/_layouts/blog.html +136 -0
  236. data/_layouts/calculator.html +99 -0
  237. data/_layouts/categories.html +34 -0
  238. data/_layouts/contactUs.html +128 -0
  239. data/_layouts/content-tool-ai copy 2.html +6611 -0
  240. data/_layouts/content-tool-ai copy.html +261 -0
  241. data/_layouts/content-tool-ai-2.html +353 -0
  242. data/_layouts/content-tool-ai.html +566 -0
  243. data/_layouts/contenttool-feature.html +47 -0
  244. data/_layouts/contenttool-home.html +58 -0
  245. data/_layouts/default.html +1 -0
  246. data/_layouts/devtool-blog.html +137 -0
  247. data/_layouts/devtool-feature.html +59 -0
  248. data/_layouts/devtool-home.html +58 -0
  249. data/_layouts/devtools.html +58 -0
  250. data/_layouts/disclaimer.html +129 -0
  251. data/_layouts/download.html +305 -0
  252. data/_layouts/feature-1.html +412 -0
  253. data/_layouts/feature-download.html +315 -0
  254. data/_layouts/feature.html +499 -0
  255. data/_layouts/featureResultPage.html +87 -0
  256. data/_layouts/fileInfo.html +46 -0
  257. data/_layouts/filecomparison.html +130 -0
  258. data/_layouts/frame.html +223 -0
  259. data/_layouts/help.html +25 -0
  260. data/_layouts/home-1.html +260 -0
  261. data/_layouts/home.html +380 -0
  262. data/_layouts/homeResultPage.html +51 -0
  263. data/_layouts/imagekit.html +309 -0
  264. data/_layouts/page.html +5 -0
  265. data/_layouts/photo-effects-home.html +191 -0
  266. data/_layouts/post.html +237 -0
  267. data/_layouts/privacyPolicy.html +786 -0
  268. data/_layouts/profile.html +566 -0
  269. data/_layouts/termAndCondition.html +650 -0
  270. data/_layouts/video.html +33 -0
  271. data/assets/.DS_Store +0 -0
  272. data/assets/app.js +75 -0
  273. data/assets/bulb.svg +1 -0
  274. data/assets/cloud.svg +1 -0
  275. data/assets/cross.svg +5 -0
  276. data/assets/css/adblocker.css +185 -0
  277. data/assets/css/ai-image-generator.css +547 -0
  278. data/assets/css/ai-image-home.css +763 -0
  279. data/assets/css/appscms-blog.css +505 -0
  280. data/assets/css/appscms-calculator.css +97 -0
  281. data/assets/css/appscms-contenttool.css +1384 -0
  282. data/assets/css/appscms-feature.css +0 -0
  283. data/assets/css/appscms-home.css +5 -0
  284. data/assets/css/appscms-imagekit.css +855 -0
  285. data/assets/css/appscms-theme.css +3934 -0
  286. data/assets/css/appscms-variables.css +24 -0
  287. data/assets/css/batch.css +501 -0
  288. data/assets/css/blog-1.css +66 -0
  289. data/assets/css/blog.css +510 -0
  290. data/assets/css/bootstrap.min.css +7 -0
  291. data/assets/css/calculators.css +46 -0
  292. data/assets/css/common.css +945 -0
  293. data/assets/css/content-tool-ai.css +1192 -0
  294. data/assets/css/devtool-main.css +1351 -0
  295. data/assets/css/devtools.css +106 -0
  296. data/assets/css/feature-1.css +294 -0
  297. data/assets/css/filecomparison.css +25 -0
  298. data/assets/css/frame.css +781 -0
  299. data/assets/css/home-1.css +188 -0
  300. data/assets/css/imagekit copy.css +849 -0
  301. data/assets/css/imagekit.css +849 -0
  302. data/assets/css/responsive.css +0 -0
  303. data/assets/css/tools.css +2209 -0
  304. data/assets/document.png +0 -0
  305. data/assets/dropbox.png +0 -0
  306. data/assets/easy-to-use.svg +7 -0
  307. data/assets/easy.svg +1 -0
  308. data/assets/facebook.svg +5 -0
  309. data/assets/fileimg/0RX6D8V.jpeg +0 -0
  310. data/assets/fileimg/11To9CR.jpeg +0 -0
  311. data/assets/fileimg/16q77H1.jpeg +0 -0
  312. data/assets/fileimg/1o2rNBD.jpeg +0 -0
  313. data/assets/fileimg/2DVHHaP.jpeg +0 -0
  314. data/assets/fileimg/38J4iOl.jpeg +0 -0
  315. data/assets/fileimg/38SErjW.jpeg +0 -0
  316. data/assets/fileimg/3JbciOH.jpeg +0 -0
  317. data/assets/fileimg/51PJjGr.jpeg +0 -0
  318. data/assets/fileimg/5938cLE.jpeg +0 -0
  319. data/assets/fileimg/5hGiNf7.jpeg +0 -0
  320. data/assets/fileimg/69oMRM0.jpeg +0 -0
  321. data/assets/fileimg/6WTDOAw.jpeg +0 -0
  322. data/assets/fileimg/6hQNdGk.jpeg +0 -0
  323. data/assets/fileimg/6uyiajm.jpeg +0 -0
  324. data/assets/fileimg/6z9n45v.jpeg +0 -0
  325. data/assets/fileimg/7Z9sNdy.jpeg +0 -0
  326. data/assets/fileimg/7eQehmc.jpeg +0 -0
  327. data/assets/fileimg/7xNWYRA.jpeg +0 -0
  328. data/assets/fileimg/82vepge.jpeg +0 -0
  329. data/assets/fileimg/8A6rYqw.jpeg +0 -0
  330. data/assets/fileimg/8aN9yEj.jpeg +0 -0
  331. data/assets/fileimg/99jo0FJ.jpeg +0 -0
  332. data/assets/fileimg/A2QFJgs.jpeg +0 -0
  333. data/assets/fileimg/AuNqAKT.jpeg +0 -0
  334. data/assets/fileimg/BV8ML15.jpeg +0 -0
  335. data/assets/fileimg/Cc9amsH.jpeg +0 -0
  336. data/assets/fileimg/Cjoa7OB.jpeg +0 -0
  337. data/assets/fileimg/Dh0nFk6.jpeg +0 -0
  338. data/assets/fileimg/EuFgmVh.jpeg +0 -0
  339. data/assets/fileimg/F87GDJM.jpeg +0 -0
  340. data/assets/fileimg/FAo0QEL.jpeg +0 -0
  341. data/assets/fileimg/FSHZ7pW.jpeg +0 -0
  342. data/assets/fileimg/FYEygcW.jpeg +0 -0
  343. data/assets/fileimg/FdqTl1x.jpeg +0 -0
  344. data/assets/fileimg/H7CZmss.jpeg +0 -0
  345. data/assets/fileimg/HAhjqEA.jpeg +0 -0
  346. data/assets/fileimg/HmizpGb.jpeg +0 -0
  347. data/assets/fileimg/IKdU9NN.jpeg +0 -0
  348. data/assets/fileimg/JEuwwVE.jpeg +0 -0
  349. data/assets/fileimg/JeFS57j.jpeg +0 -0
  350. data/assets/fileimg/KXTzTK7.jpeg +0 -0
  351. data/assets/fileimg/Kp0egqG.jpeg +0 -0
  352. data/assets/fileimg/MX9qrvZ.jpeg +0 -0
  353. data/assets/fileimg/Mny97V6.jpeg +0 -0
  354. data/assets/fileimg/Mt9PAUF.jpeg +0 -0
  355. data/assets/fileimg/NY9GTXm.jpeg +0 -0
  356. data/assets/fileimg/O1HqazZ.jpeg +0 -0
  357. data/assets/fileimg/P6WGAMN.jpeg +0 -0
  358. data/assets/fileimg/PLx4Opv.jpeg +0 -0
  359. data/assets/fileimg/PePZ5cb.jpeg +0 -0
  360. data/assets/fileimg/PtakFU2.jpeg +0 -0
  361. data/assets/fileimg/QdcouPN.jpeg +0 -0
  362. data/assets/fileimg/RUVWLwB.jpeg +0 -0
  363. data/assets/fileimg/SJ29L8A.jpeg +0 -0
  364. data/assets/fileimg/TmHdEAq.jpeg +0 -0
  365. data/assets/fileimg/TnwKQd9.jpeg +0 -0
  366. data/assets/fileimg/U6hLUgu.jpeg +0 -0
  367. data/assets/fileimg/V2G1SGL.jpeg +0 -0
  368. data/assets/fileimg/WBNj13N.jpeg +0 -0
  369. data/assets/fileimg/WofJU7C.jpeg +0 -0
  370. data/assets/fileimg/XLdMM90.jpeg +0 -0
  371. data/assets/fileimg/XYvKzO9.jpeg +0 -0
  372. data/assets/fileimg/Xa1wjEf.jpeg +0 -0
  373. data/assets/fileimg/XxsKREw.jpeg +0 -0
  374. data/assets/fileimg/YaqCA2d.jpeg +0 -0
  375. data/assets/fileimg/YmBdG16.jpeg +0 -0
  376. data/assets/fileimg/ZTI2NTv.jpeg +0 -0
  377. data/assets/fileimg/acdsee.png +0 -0
  378. data/assets/fileimg/b18tt3b.jpeg +0 -0
  379. data/assets/fileimg/bC8ZzSs.jpeg +0 -0
  380. data/assets/fileimg/c2PuNRk.jpeg +0 -0
  381. data/assets/fileimg/c5Zl0O1.jpeg +0 -0
  382. data/assets/fileimg/cPO8bqH.jpeg +0 -0
  383. data/assets/fileimg/cfwD39J.jpeg +0 -0
  384. data/assets/fileimg/d5byEov.jpeg +0 -0
  385. data/assets/fileimg/diIDQ4M.jpeg +0 -0
  386. data/assets/fileimg/e9cgmZo.jpeg +0 -0
  387. data/assets/fileimg/fClLkgM.jpeg +0 -0
  388. data/assets/fileimg/fVyIEs4.jpeg +0 -0
  389. data/assets/fileimg/ffv3iNy.jpeg +0 -0
  390. data/assets/fileimg/hJWCII5.jpeg +0 -0
  391. data/assets/fileimg/hnkzD4T.jpeg +0 -0
  392. data/assets/fileimg/hodO9zz.jpeg +0 -0
  393. data/assets/fileimg/irCSU4s.jpeg +0 -0
  394. data/assets/fileimg/jcTagMw.jpeg +0 -0
  395. data/assets/fileimg/jsU9KjR.jpeg +0 -0
  396. data/assets/fileimg/kXyPDCs.jpeg +0 -0
  397. data/assets/fileimg/lWFl5mc.jpeg +0 -0
  398. data/assets/fileimg/mF1gtxb.jpeg +0 -0
  399. data/assets/fileimg/mSrHgSp.jpeg +0 -0
  400. data/assets/fileimg/nrsG7Ys.jpeg +0 -0
  401. data/assets/fileimg/ovQYI78.jpeg +0 -0
  402. data/assets/fileimg/p5rWIzT.jpeg +0 -0
  403. data/assets/fileimg/p64BUbi.jpeg +0 -0
  404. data/assets/fileimg/pgXaxjb.jpeg +0 -0
  405. data/assets/fileimg/pqcWQ2F.jpeg +0 -0
  406. data/assets/fileimg/qwnEy06.jpeg +0 -0
  407. data/assets/fileimg/rElyIoV.jpeg +0 -0
  408. data/assets/fileimg/rawD7q8.jpeg +0 -0
  409. data/assets/fileimg/rrCOBeO.jpeg +0 -0
  410. data/assets/fileimg/sOBpiyF.jpeg +0 -0
  411. data/assets/fileimg/t2WljZe.jpeg +0 -0
  412. data/assets/fileimg/uoX9gqI.jpeg +0 -0
  413. data/assets/fileimg/upbts7y.jpeg +0 -0
  414. data/assets/fileimg/vyEg9wb.jpeg +0 -0
  415. data/assets/fileimg/wAHKc6t.jpeg +0 -0
  416. data/assets/fileimg/wJy7aoh.jpeg +0 -0
  417. data/assets/fileimg/wK1B8lS.jpeg +0 -0
  418. data/assets/fileimg/wcqHWtb.jpeg +0 -0
  419. data/assets/fileimg/xbfyrdU.jpeg +0 -0
  420. data/assets/fileimg/xeDZX8x.jpeg +0 -0
  421. data/assets/flag.svg +7 -0
  422. data/assets/fonts/Calligraphy.ttf +0 -0
  423. data/assets/free.svg +7 -0
  424. data/assets/gdrive.png +0 -0
  425. data/assets/guaranty.svg +1 -0
  426. data/assets/homeimages/3_shop_posters-main.png +0 -0
  427. data/assets/images/.DS_Store +0 -0
  428. data/assets/images/1.png +0 -0
  429. data/assets/images/1.webp +0 -0
  430. data/assets/images/2.png +0 -0
  431. data/assets/images/2.webp +0 -0
  432. data/assets/images/3.png +0 -0
  433. data/assets/images/3.webp +0 -0
  434. data/assets/images/3_shop_posters.png +0 -0
  435. data/assets/images/Ankita.webp +0 -0
  436. data/assets/images/Anushka.webp +0 -0
  437. data/assets/images/Arjyahi.webp +0 -0
  438. data/assets/images/Nikita.webp +0 -0
  439. data/assets/images/abp.svg +41 -0
  440. data/assets/images/adblock.svg +266 -0
  441. data/assets/images/add-image.png +0 -0
  442. data/assets/images/add.png +0 -0
  443. data/assets/images/add.svg +1 -0
  444. data/assets/images/addimg.svg +3 -0
  445. data/assets/images/alka.webp +0 -0
  446. data/assets/images/arrow-left.svg +7 -0
  447. data/assets/images/arrow-right.svg +7 -0
  448. data/assets/images/audio-upload.svg +1 -0
  449. data/assets/images/avatar.jpeg +0 -0
  450. data/assets/images/avatar.png +0 -0
  451. data/assets/images/avatar.webp +0 -0
  452. data/assets/images/balark.jpeg +0 -0
  453. data/assets/images/balark.webp +0 -0
  454. data/assets/images/bandana.jpeg +0 -0
  455. data/assets/images/bandana.webp +0 -0
  456. data/assets/images/bgimg1.png +0 -0
  457. data/assets/images/bulb.png +0 -0
  458. data/assets/images/bulb.svg +1 -0
  459. data/assets/images/bunnies.png +0 -0
  460. data/assets/images/close-button.svg +32 -0
  461. data/assets/images/cloud-computing.png +0 -0
  462. data/assets/images/cloud_new.svg +1 -0
  463. data/assets/images/content-tool-logo.png +0 -0
  464. data/assets/images/contenttool-main.svg +66 -0
  465. data/assets/images/contributor.webp +0 -0
  466. data/assets/images/convert.png +0 -0
  467. data/assets/images/convert.svg +9 -0
  468. data/assets/images/cross.svg +1 -0
  469. data/assets/images/debosmita.jpeg +0 -0
  470. data/assets/images/debosmita.webp +0 -0
  471. data/assets/images/digiball.jpg +0 -0
  472. data/assets/images/digipaint.svg +7 -0
  473. data/assets/images/document.png +0 -0
  474. data/assets/images/download.png +0 -0
  475. data/assets/images/drive.svg +25 -0
  476. data/assets/images/dropbox.svg +17 -0
  477. data/assets/images/easy-to-use.svg +7 -0
  478. data/assets/images/faceframe.png +0 -0
  479. data/assets/images/fast.svg +1 -0
  480. data/assets/images/file.png +0 -0
  481. data/assets/images/fileformat.webp +0 -0
  482. data/assets/images/flag.svg +7 -0
  483. data/assets/images/free.svg +7 -0
  484. data/assets/images/gallary.png +0 -0
  485. data/assets/images/google-drive.svg +6 -0
  486. data/assets/images/iconn.svg +13 -0
  487. data/assets/images/idea.svg +95 -0
  488. data/assets/images/image.png +0 -0
  489. data/assets/images/karuna.1.webp +0 -0
  490. data/assets/images/karuna.jpeg +0 -0
  491. data/assets/images/karuna.png +0 -0
  492. data/assets/images/karuna.webp +0 -0
  493. data/assets/images/keshav.webp +0 -0
  494. data/assets/images/krutika.jpeg +0 -0
  495. data/assets/images/krutika.webp +0 -0
  496. data/assets/images/lakshmi.svg +1 -0
  497. data/assets/images/left-arrow.svg +9 -0
  498. data/assets/images/lightbulb.svg +1 -0
  499. data/assets/images/like.svg +7 -0
  500. data/assets/images/loader.gif +0 -0
  501. data/assets/images/logo.png +0 -0
  502. data/assets/images/logo.svg +3 -0
  503. data/assets/images/mahika.jpeg +0 -0
  504. data/assets/images/mahika.webp +0 -0
  505. data/assets/images/manthink.svg +3552 -0
  506. data/assets/images/mega.png +0 -0
  507. data/assets/images/menu.svg +1 -0
  508. data/assets/images/paavan.webp +0 -0
  509. data/assets/images/pallavi.jpeg +0 -0
  510. data/assets/images/pallavi.webp +0 -0
  511. data/assets/images/privacy.svg +7 -0
  512. data/assets/images/rating.png +0 -0
  513. data/assets/images/right-arrow.svg +9 -0
  514. data/assets/images/safeimagekit. (2).png +0 -0
  515. data/assets/images/safeimagekit. (3).png +0 -0
  516. data/assets/images/safeimagekit..png +0 -0
  517. data/assets/images/safeimagekit.png +0 -0
  518. data/assets/images/safety.svg +7 -0
  519. data/assets/images/safevideoconverter.svg +23 -0
  520. data/assets/images/search-icon.svg +3 -0
  521. data/assets/images/shield.svg +1 -0
  522. data/assets/images/siddhika.jpeg +0 -0
  523. data/assets/images/siddhika.webp +0 -0
  524. data/assets/images/sona.jpeg +0 -0
  525. data/assets/images/sona.webp +0 -0
  526. data/assets/images/speed.svg +7 -0
  527. data/assets/images/spinner.gif +0 -0
  528. data/assets/images/suchita.1.webp +0 -0
  529. data/assets/images/suchita.jpeg +0 -0
  530. data/assets/images/suchita.png +0 -0
  531. data/assets/images/suchita.webp +0 -0
  532. data/assets/images/target.svg +1 -0
  533. data/assets/images/taufik.1.webp +0 -0
  534. data/assets/images/taufik.jpeg +0 -0
  535. data/assets/images/taufik.png +0 -0
  536. data/assets/images/taufik.webp +0 -0
  537. data/assets/images/test.svg +1 -0
  538. data/assets/images/time.svg +16 -0
  539. data/assets/images/together_foreve (2).png +0 -0
  540. data/assets/images/together_foreve.png +0 -0
  541. data/assets/images/together_forever.png +0 -0
  542. data/assets/images/trust.svg +1 -0
  543. data/assets/images/udit.1.webp +0 -0
  544. data/assets/images/udit.2.webp +0 -0
  545. data/assets/images/udit.jpeg +0 -0
  546. data/assets/images/udit.jpg +0 -0
  547. data/assets/images/udit.png +0 -0
  548. data/assets/images/udit.webp +0 -0
  549. data/assets/images/uo.svg +41 -0
  550. data/assets/images/user-friendly.svg +7 -0
  551. data/assets/images/vectorpaint.svg +6 -0
  552. data/assets/images/video.png +0 -0
  553. data/assets/instagram.svg +5 -0
  554. data/assets/js/TopScroll.js +8 -0
  555. data/assets/js/adBlocker.js +68 -0
  556. data/assets/js/ads.js +8 -0
  557. data/assets/js/append-div.js +10 -0
  558. data/assets/js/appscms-infographics.js +0 -0
  559. data/assets/js/appscms-login.js +447 -0
  560. data/assets/js/appscms-search-home1.js +136 -0
  561. data/assets/js/appscms-search.js +133 -0
  562. data/assets/js/appscms-theme.js +516 -0
  563. data/assets/js/batch.js +219 -0
  564. data/assets/js/calculator-tooltip.js +3 -0
  565. data/assets/js/devtools.js +82 -0
  566. data/assets/js/face-api.js +38064 -0
  567. data/assets/js/face-detection.js +303 -0
  568. data/assets/js/faceSystem.js +0 -0
  569. data/assets/js/featureResult.js +48 -0
  570. data/assets/js/frame.js +264 -0
  571. data/assets/js/get-credits.js +0 -0
  572. data/assets/js/googledrive.js +158 -0
  573. data/assets/js/homeResult.js +37 -0
  574. data/assets/js/manifest.json +17 -0
  575. data/assets/js/models/age_gender_model-shard1 +0 -0
  576. data/assets/js/models/age_gender_model-weights_manifest.json +1 -0
  577. data/assets/js/models/face_expression_model-shard1 +0 -0
  578. data/assets/js/models/face_expression_model-weights_manifest.json +1 -0
  579. data/assets/js/models/face_landmark_68_model-shard1 +0 -0
  580. data/assets/js/models/face_landmark_68_model-weights_manifest.json +1 -0
  581. data/assets/js/models/face_landmark_68_tiny_model-shard1 +0 -0
  582. data/assets/js/models/face_landmark_68_tiny_model-weights_manifest.json +1 -0
  583. data/assets/js/models/face_recognition_model-shard1 +0 -0
  584. data/assets/js/models/face_recognition_model-shard2 +6 -0
  585. data/assets/js/models/face_recognition_model-weights_manifest.json +1 -0
  586. data/assets/js/models/mtcnn_model-shard1 +0 -0
  587. data/assets/js/models/mtcnn_model-weights_manifest.json +1 -0
  588. data/assets/js/models/ssd_mobilenetv1_model-shard1 +0 -0
  589. data/assets/js/models/ssd_mobilenetv1_model-shard2 +145 -0
  590. data/assets/js/models/ssd_mobilenetv1_model-weights_manifest.json +1 -0
  591. data/assets/js/models/tiny_face_detector_model-shard1 +0 -0
  592. data/assets/js/models/tiny_face_detector_model-weights_manifest.json +1 -0
  593. data/assets/js/multiselect.js +185 -0
  594. data/assets/js/partytown/debug/partytown-atomics.js +929 -0
  595. data/assets/js/partytown/debug/partytown-media.js +374 -0
  596. data/assets/js/partytown/debug/partytown-sandbox-sw.js +920 -0
  597. data/assets/js/partytown/debug/partytown-sw.js +59 -0
  598. data/assets/js/partytown/debug/partytown-ww-atomics.js +2699 -0
  599. data/assets/js/partytown/debug/partytown-ww-sw.js +2691 -0
  600. data/assets/js/partytown/debug/partytown.js +114 -0
  601. data/assets/js/partytown/partytown-atomics.js +600 -0
  602. data/assets/js/partytown/partytown-media.js +2 -0
  603. data/assets/js/partytown/partytown-sw.js +50 -0
  604. data/assets/js/perspective.min.js +182 -0
  605. data/assets/js/photo-effects.json +85 -0
  606. data/assets/js/redirectResult.js +10 -0
  607. data/assets/js/sharePage.js +65 -0
  608. data/assets/js/testing-batch.js +39 -0
  609. data/assets/js/theme.js +104 -0
  610. data/assets/js/usageTracking.js +143 -0
  611. data/assets/js/usageTrackingEvents.js +6 -0
  612. data/assets/js/userUsageCount.js +0 -0
  613. data/assets/js/webvitals.js +5 -0
  614. data/assets/like.svg +7 -0
  615. data/assets/linkdin.svg +5 -0
  616. data/assets/noserverupload.svg +4 -0
  617. data/assets/pdf.svg +20 -0
  618. data/assets/privacy.svg +7 -0
  619. data/assets/protect.svg +1 -0
  620. data/assets/secure.svg +43 -0
  621. data/assets/shield.svg +7 -0
  622. data/assets/skks.svg +1 -0
  623. data/assets/speed.svg +7 -0
  624. data/assets/star.svg +5 -0
  625. data/assets/support.svg +1 -0
  626. data/assets/time.svg +16 -0
  627. data/assets/twitter.svg +5 -0
  628. data/assets/user-friendly.svg +7 -0
  629. data/assets/youtube.svg +5 -0
  630. data/robots.txt +34 -0
  631. metadata +631 -2
@@ -0,0 +1,303 @@
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 exampleModal = document.querySelector('.example-images-modal-container')
8
+ const workspace = document.getElementById('workspace')
9
+ const canvasPanel = document.getElementById('canvas-panel')
10
+ const download = document.querySelector('#download-button')
11
+ const form = document.querySelector('#effect-form')
12
+ let files = []
13
+ let cropWidth = null
14
+ let cropHeight = null
15
+ let cropper = null
16
+ let cropInputWidth = null
17
+ let index = 0
18
+ let cropInputHeight = null
19
+ let image = null
20
+ const showLoader = () => {
21
+ showLoading()
22
+ }
23
+ const closeLoader = () => {}
24
+ const clickInput = (e) => {
25
+ console.log(`#file-${e.dataset.index}`)
26
+ document.querySelector(`#file-${e.dataset.index}`).click()
27
+ }
28
+ let featureData = null
29
+
30
+ fetch('/assets/js/photo-effects.json')
31
+ .then((response) => response.json())
32
+ .then((data) => {
33
+ featureData = data.find((i) => i.name === form.dataset.featureName)
34
+ console.log(featureData)
35
+ })
36
+ const fileOnChange = (e) => {
37
+ index = Number(e.dataset.index)
38
+ let reader = new FileReader()
39
+ reader.onload = (event) => {
40
+ cropModal.style.display = 'flex'
41
+ if (cropper === null) {
42
+ cropImage(event.target.result, e.id)
43
+ } else {
44
+ updateCropper(event.target.result, e.id)
45
+ }
46
+ }
47
+ reader.readAsDataURL(e.files[0])
48
+ }
49
+ const closeModal = () => {
50
+ cropModal.style.display = 'none'
51
+ }
52
+ const closeExamplesModal = () => {
53
+ exampleModal.style.display = 'none'
54
+ }
55
+ form.addEventListener('submit', (e) => {
56
+ e.preventDefault()
57
+ drawImage()
58
+ })
59
+ async function face(imageSrc) {
60
+ return new Promise(async (resolve, reject) => {
61
+ await faceapi.nets.tinyFaceDetector.load('/assets/js/models'),
62
+ await faceapi.nets.faceLandmark68Net.load('/assets/js/models'),
63
+ await faceapi.nets.faceRecognitionNet.load('/assets/js/models'),
64
+ await faceapi.nets.faceExpressionNet.load('/assets/js/models')
65
+
66
+ const img = document.createElement('img')
67
+ img.src = imageSrc
68
+ img.onload = async () => {
69
+ const detections = await faceapi.detectSingleFace(
70
+ img,
71
+ new faceapi.TinyFaceDetectorOptions()
72
+ )
73
+ let faceDescriptions = await faceapi.detectSingleFace(
74
+ img,
75
+ new faceapi.TinyFaceDetectorOptions()
76
+ )
77
+ const canvas = document.createElement('canvas')
78
+ faceapi.matchDimensions(canvas, img)
79
+ faceDescriptions = faceapi.resizeResults(faceDescriptions, img)
80
+ faceapi.draw.drawDetections(canvas, faceDescriptions)
81
+ let value = extractFaceFromBox(img, detections.box, canvas)
82
+ resolve([value])
83
+ }
84
+ })
85
+ }
86
+ async function extractFaceFromBox(imageRef, box) {
87
+ const regionsToExtract = [
88
+ new faceapi.Rect(box.x, box.y, box.width, box.height),
89
+ ]
90
+ let faceImages = await faceapi.extractFaces(imageRef, regionsToExtract)
91
+ if (faceImages.length === 0) {
92
+ return 'no face found'
93
+ } else {
94
+ return faceImages[0].toDataURL()
95
+ }
96
+ }
97
+ const drawInputImage = (ctx, item, indexValue) => {
98
+ return new Promise((resolve, reject) => {
99
+ let image = document.createElement('img')
100
+ image.src = files[indexValue]
101
+ image.onload = () => {
102
+ ctx.save()
103
+ image.width = Number(item.width)
104
+ image.height = Number(item.height)
105
+ if (item.filter) {
106
+ ctx.filter = item.filter
107
+ }
108
+ if (item.rotate) {
109
+ ctx.rotate((item.rotate * Math.PI) / 180)
110
+ }
111
+ let perspectiveKey = 'perspective' in item
112
+ if (!perspectiveKey) {
113
+ ctx.drawImage(
114
+ image,
115
+ Number(item.x),
116
+ Number(item.y),
117
+ image.width,
118
+ image.height
119
+ )
120
+ }
121
+ if (item.translate) {
122
+ ctx.translate(item.translate.x, item.translate.y)
123
+ }
124
+ if (perspectiveKey) {
125
+ let p = new Perspective(ctx, image)
126
+ p.draw([
127
+ [item.perspective.topLeft.x, item.perspective.topLeft.y],
128
+ [item.perspective.topRight.x, item.perspective.topRight.y],
129
+ [item.perspective.bottomRight.x, item.perspective.bottomRight.y],
130
+ [item.perspective.bottomLeft.x, item.perspective.bottomLeft.y],
131
+ ])
132
+ }
133
+
134
+ if (item.skew) {
135
+ ctx.setTransform(1, item.skew.x, item.skew.y, 1, 0, 0)
136
+ }
137
+
138
+ ctx.restore()
139
+ resolve()
140
+ }
141
+ })
142
+ }
143
+
144
+ const drawImage = () => {
145
+ workspace.style.display = 'block'
146
+ document.querySelector('#upper-panel').style.display = 'none'
147
+ document.querySelector('#saving-data').style.display = 'flex'
148
+ let img = new Image()
149
+ img.src = featureData.effectImagePath
150
+ var canvas = document.createElement('canvas')
151
+ var ctx = canvas.getContext('2d')
152
+ img.onload = () => {
153
+ canvas.width = img.width
154
+ canvas.height = img.height
155
+ Promise.all(
156
+ featureData.elements.map((item, indexValue) => {
157
+ if (item.type === 'image') {
158
+ return new Promise((resolve, reject) => {
159
+ drawInputImage(ctx, item, indexValue, canvas).then(() => {
160
+ resolve()
161
+ })
162
+ })
163
+ }
164
+ })
165
+ ).then(() => {
166
+ ctx.filter = 'none'
167
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
168
+ featureData.elements.map((item, indexValue) => {
169
+ if (item.type === 'text') {
170
+ let myFont = new FontFace(item.font, `url(${item.fontPath})`)
171
+ myFont.load().then(function (font) {
172
+ ctx.save()
173
+ document.fonts.add(font)
174
+ let textValue = document.querySelector(`#${item.id}`).value
175
+ if (textValue.length > 10 && item.fontSizeOption1) {
176
+ item.fontSize = item.fontSizeOption1
177
+ }
178
+ if (textValue.length > 12 && item.fontSizeOption2) {
179
+ item.fontSize = item.fontSizeOption2
180
+ }
181
+ if (textValue.length > 15 && item.fontSizeOption3) {
182
+ item.fontSize = item.fontSizeOption3
183
+ }
184
+ if (textValue.length > 20 && item.fontSizeOption4) {
185
+ item.fontSize = item.fontSizeOption4
186
+ }
187
+ ctx.font = `${item.fontSize}px ${item.font}`
188
+ if (item.shadowColor) {
189
+ ctx.shadowColor = `${item.shadowColor}`
190
+ }
191
+
192
+ if (item.shadowOffsetX) {
193
+ ctx.shadowOffsetX = 3
194
+ }
195
+ if (item.shadowOffsetY) {
196
+ ctx.shadowOffsetY = 3
197
+ }
198
+ if (item.shadowBlur) {
199
+ ctx.shadowBlur = 2
200
+ }
201
+ if (item.rotate) {
202
+ ctx.rotate((item.rotate * Math.PI) / 180)
203
+ }
204
+ ctx.textAlign = 'center'
205
+ ctx.fillStyle = `${item.color}`
206
+ ctx.fillText(textValue, item.x, item.y)
207
+ ctx.restore()
208
+ })
209
+ }
210
+ if (item.type === 'rectangle') {
211
+ }
212
+ })
213
+ canvasPanel.innerHTML = ''
214
+ document.querySelector('#saving-data').style.display = 'none'
215
+ canvasPanel.appendChild(canvas)
216
+ })
217
+ }
218
+ }
219
+ const cropImage = (result, id) => {
220
+ let image = new Image()
221
+ image.onload = () => {
222
+ let img = document.createElement('img')
223
+ img.src = result
224
+ img.id = 'image'
225
+ document.querySelector('.crop-image-modal-body').appendChild(img)
226
+ cropper = new Cropper(img, {
227
+ viewMode: 3,
228
+ ready() {
229
+ let find = featureData.elements.find((i) => i.id === id)
230
+ cropper.setAspectRatio(Number(find.width) / Number(find.height))
231
+ cropModal.style.display = 'flex'
232
+ this.cropper.crop()
233
+ },
234
+ crop(event) {
235
+ cropWidth = Math.round(event.detail.width)
236
+ cropHeight = Math.round(event.detail.height)
237
+ },
238
+ })
239
+ }
240
+ image.src = result
241
+ }
242
+ const updateCropper = (result, id) => {
243
+ cropper.destroy()
244
+ document.querySelector('.crop-image-modal-body').innerHTML = ''
245
+ cropImage(result, id)
246
+ }
247
+ document.querySelector('#crop').addEventListener('click', () => {
248
+ let cropperImg = cropper
249
+ .getCroppedCanvas({
250
+ width: cropWidth,
251
+ height: cropHeight,
252
+ })
253
+ .toDataURL()
254
+ face(cropperImg).then(([value]) => {
255
+ value.then((result) => {
256
+ files[index - 1] = result
257
+ document.querySelector(`#image-pre-${index}`).src = result
258
+ document.querySelector(`#image-pre-${index}`).style.display = 'block'
259
+ document.querySelector(`#cam-${index}`).style.display = 'none'
260
+ cropModal.style.display = 'none'
261
+ })
262
+ })
263
+ })
264
+ const openExamplesModal = () => {
265
+ exampleModal.style.display = 'flex'
266
+ }
267
+ let inputFile = ''
268
+ const handleFile = (file) => {
269
+ cropModal.style.display = 'flex'
270
+ document.querySelector('#file-loader').style.display = 'flex'
271
+ document.querySelector('.file-input').style.display = 'none'
272
+ inputFile = file
273
+ if (file) {
274
+ const reader = new FileReader()
275
+ reader.onload = (e) => {
276
+ if (e.target.result) {
277
+ cropImage(e.target.result)
278
+ }
279
+ }
280
+ reader.readAsDataURL(file)
281
+ }
282
+ }
283
+ const showLoading = () => {
284
+ document.querySelector('#file-loader').style.display = 'flex'
285
+ document.querySelector('.file-input').style.display = 'none'
286
+ }
287
+ const stopLoading = () => {
288
+ fileDropBox.style.display = 'none'
289
+ }
290
+ download.addEventListener('click', () => {
291
+ let canvas = document.querySelector('canvas')
292
+ let url = canvas.toDataURL(`image/png`)
293
+ let a = document.createElement('a')
294
+ a.href = url
295
+ a.download = `safeimagekit-photo-effect-image.png`
296
+ document.body.appendChild(a)
297
+ a.click()
298
+ if (lang === 'en') {
299
+ window.location.href = `/download?tool=${pageTool}`
300
+ } else {
301
+ window.location.href = `/${lang}/download?tool=${pageTool}`
302
+ }
303
+ })
File without changes
@@ -0,0 +1,48 @@
1
+ let script = document.currentScript;
2
+ const params = new URLSearchParams(window.location.search);
3
+ let type = params.get("fileName");
4
+ let jsonFileName = atob(type);
5
+ let folderName = script.dataset.foldername;
6
+ let fileName = jsonFileName;
7
+ let lang = script.dataset.lang;
8
+ let headingDiv = document.querySelector("#heading-div");
9
+ let feature_h1 = document.createElement("h1");
10
+ let feature_h2 = document.createElement("h2");
11
+ feature_h1.setAttribute("class", "feature-h1");
12
+ feature_h2.setAttribute("class", "feature-h2");
13
+ headingDiv.appendChild(feature_h1);
14
+ headingDiv.appendChild(feature_h2);
15
+
16
+ let feature_img = document.querySelector(".features-img");
17
+
18
+ const getSeodata = async () => {
19
+ let URL = "/data" + "/" + folderName + "/" + lang + "/" + fileName + ".json";
20
+ const data = await fetch(URL);
21
+ const seoData = await data.json();
22
+
23
+ feature_h1.innerHTML = seoData.H1;
24
+ feature_h2.innerHTML = seoData.H2;
25
+
26
+ document.head
27
+ .querySelector('meta[property="og:title"]')
28
+ .setAttribute("content", seoData.TITLE);
29
+ document.head
30
+ .querySelector('meta[name="description"]')
31
+ .setAttribute("content", seoData.META);
32
+ document.head
33
+ .querySelector('meta[name="twitter:title"]')
34
+ .setAttribute("content", seoData.TITLE);
35
+ document.head
36
+ .querySelector('meta[name="twitter:description"]')
37
+ .setAttribute("content", seoData.META);
38
+
39
+ if (seoData.img) {
40
+ feature_img.src = seoData.img;
41
+ feature_img.setAttribute("alt", seoData.imgalt);
42
+ feature_img.style.width = seoData.imgwidth;
43
+ feature_img.style.height = seoData.imgheight;
44
+ }
45
+
46
+ document.title = seoData.TITLE;
47
+ };
48
+ getSeodata();
@@ -0,0 +1,264 @@
1
+ ---
2
+ ---
3
+
4
+ const getScript = document.currentScript
5
+ const pageTool = getScript.dataset.tool
6
+ const downloadName = "{{site.downloadName}}"
7
+ const lang = getScript.dataset.lang
8
+ const inputBox = document.querySelector('#Inputbox')
9
+ const fileDropBox = document.querySelector('.custom-box')
10
+ const cropModal = document.querySelector('.crop-image-modal-container')
11
+ const exampleModal = document.querySelector('.example-images-modal-container')
12
+ const workspace = document.getElementById('workspace')
13
+ const canvasPanel = document.getElementById('canvas-panel')
14
+ const download = document.querySelector('#download-button')
15
+ const form = document.querySelector('#effect-form')
16
+ let files = []
17
+ let cropWidth = null
18
+ let cropHeight = null
19
+ let cropper = null
20
+ let cropInputWidth = null
21
+ let index = 0
22
+ let cropInputHeight = null
23
+ let image = null
24
+ const showLoader = () => {
25
+ showLoading()
26
+ }
27
+ const closeLoader = () => { }
28
+ const clickInput = (e) => {
29
+ console.log(`#file-${e.dataset.index}`)
30
+ document.querySelector(`#file-${e.dataset.index}`).click()
31
+ }
32
+ let featureData = null
33
+ fetch('/assets/js/photo-effects.json')
34
+ .then((response) => response.json())
35
+ .then((data) => {
36
+ featureData = data.find((i) => i.name === form.dataset.featureName)
37
+ console.log(featureData)
38
+ })
39
+ const fileOnChange = (e) => {
40
+ index = Number(e.dataset.index)
41
+ let reader = new FileReader()
42
+ reader.onload = (event) => {
43
+ cropModal.style.display = 'flex'
44
+ if (cropper === null) {
45
+ cropImage(event.target.result, e.id)
46
+ } else {
47
+ updateCropper(event.target.result, e.id)
48
+ }
49
+ }
50
+ reader.readAsDataURL(e.files[0])
51
+ }
52
+ const closeModal = () => {
53
+ cropModal.style.display = 'none'
54
+ document.body.style.overflow = "auto"
55
+ }
56
+ const closeExamplesModal = () => {
57
+ exampleModal.style.display = 'none'
58
+ }
59
+ form.addEventListener('submit', (e) => {
60
+ e.preventDefault()
61
+ drawImage()
62
+ })
63
+ const drawInputImage = (ctx, item, indexValue) => {
64
+ return new Promise((resolve, reject) => {
65
+ let image = document.createElement('img')
66
+ image.src = files[indexValue]
67
+ image.onload = () => {
68
+ ctx.save()
69
+ image.width = Number(item.width)
70
+ image.height = Number(item.height)
71
+ if (item.filter) {
72
+ ctx.filter = item.filter
73
+ }
74
+ if (item.rotate) {
75
+ ctx.rotate((item.rotate * Math.PI) / 180)
76
+ }
77
+ let perspectiveKey = 'perspective' in item
78
+ if (!perspectiveKey) {
79
+ ctx.drawImage(
80
+ image,
81
+ Number(item.x),
82
+ Number(item.y),
83
+ image.width,
84
+ image.height
85
+ )
86
+ }
87
+ if (item.translate) {
88
+ ctx.translate(item.translate.x, item.translate.y)
89
+ }
90
+ if (perspectiveKey) {
91
+ let p = new Perspective(ctx, image)
92
+ p.draw([
93
+ [item.perspective.topLeft.x, item.perspective.topLeft.y],
94
+ [item.perspective.topRight.x, item.perspective.topRight.y],
95
+ [item.perspective.bottomRight.x, item.perspective.bottomRight.y],
96
+ [item.perspective.bottomLeft.x, item.perspective.bottomLeft.y],
97
+ ])
98
+ }
99
+ if (item.skew) {
100
+ ctx.setTransform(1, item.skew.x, item.skew.y, 1, 0, 0)
101
+ }
102
+ ctx.restore()
103
+ resolve()
104
+ }
105
+ })
106
+ }
107
+ const drawImage = () => {
108
+ workspace.style.display = 'block'
109
+ document.querySelector('#upper-panel').style.display = 'none'
110
+ document.querySelector('#saving-data').style.display = 'flex'
111
+ let img = new Image()
112
+ img.src = featureData.effectImagePath
113
+ var canvas = document.createElement('canvas')
114
+ var ctx = canvas.getContext('2d')
115
+ img.onload = () => {
116
+ canvas.width = img.width
117
+ canvas.height = img.height
118
+ Promise.all(
119
+ featureData.elements.map((item, indexValue) => {
120
+ if (item.type === 'image') {
121
+ return new Promise((resolve, reject) => {
122
+ drawInputImage(ctx, item, indexValue, canvas).then(() => {
123
+ resolve()
124
+ })
125
+ })
126
+ }
127
+ })
128
+ ).then(() => {
129
+ ctx.filter = 'none'
130
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
131
+ featureData.elements.map((item, indexValue) => {
132
+ if (item.type === 'text') {
133
+ let myFont = new FontFace(item.font, `url(${item.fontPath})`)
134
+ myFont.load().then(function (font) {
135
+ ctx.save()
136
+ document.fonts.add(font)
137
+ let textValue = document.querySelector(`#${item.id}`).value
138
+ if (textValue.length > 10 && item.fontSizeOption1) {
139
+ item.fontSize = item.fontSizeOption1
140
+ }
141
+ if (textValue.length > 12 && item.fontSizeOption2) {
142
+ item.fontSize = item.fontSizeOption2
143
+ }
144
+ if (textValue.length > 15 && item.fontSizeOption3) {
145
+ item.fontSize = item.fontSizeOption3
146
+ }
147
+ if (textValue.length > 20 && item.fontSizeOption4) {
148
+ item.fontSize = item.fontSizeOption4
149
+ }
150
+ ctx.font = `${item.fontSize}px ${item.font}`
151
+ if (item.shadowColor) {
152
+ ctx.shadowColor = `${item.shadowColor}`
153
+ }
154
+ if (item.shadowOffsetX) {
155
+ ctx.shadowOffsetX = 3
156
+ }
157
+ if (item.shadowOffsetY) {
158
+ ctx.shadowOffsetY = 3
159
+ }
160
+ if (item.shadowBlur) {
161
+ ctx.shadowBlur = 2
162
+ }
163
+ if (item.rotate) {
164
+ ctx.rotate((item.rotate * Math.PI) / 180)
165
+ }
166
+ ctx.textAlign = 'center'
167
+ ctx.fillStyle = `${item.color}`
168
+ ctx.fillText(textValue, item.x, item.y)
169
+ ctx.restore()
170
+ })
171
+ }
172
+ if (item.type === 'rectangle') {
173
+ }
174
+ })
175
+ canvasPanel.innerHTML = ''
176
+ document.querySelector('#saving-data').style.display = 'none'
177
+ canvasPanel.appendChild(canvas)
178
+ })
179
+ }
180
+ }
181
+ const cropImage = (result, id) => {
182
+ document.body.style.overflow = "hidden"
183
+ let image = new Image()
184
+ image.onload = () => {
185
+ let img = document.createElement('img')
186
+ img.src = result
187
+ img.id = 'image'
188
+ document.querySelector('.crop-image-modal-body').appendChild(img)
189
+ cropper = new Cropper(img, {
190
+ viewMode: 3,
191
+ ready() {
192
+ let find = featureData.elements.find((i) => i.id === id)
193
+ console.log(find)
194
+ cropper.setAspectRatio(Number(find.width) / Number(find.height))
195
+ cropModal.style.display = 'flex'
196
+ this.cropper.crop()
197
+ },
198
+ crop(event) {
199
+ cropWidth = Math.round(event.detail.width)
200
+ cropHeight = Math.round(event.detail.height)
201
+ },
202
+ })
203
+ }
204
+ image.src = result
205
+ }
206
+ const updateCropper = (result, id) => {
207
+ cropper.destroy()
208
+ document.querySelector('.crop-image-modal-body').innerHTML = ''
209
+ cropImage(result, id)
210
+ }
211
+ document.querySelector('#crop').addEventListener('click', () => {
212
+ let cropperImg = cropper
213
+ .getCroppedCanvas({
214
+ width: cropWidth,
215
+ height: cropHeight,
216
+ })
217
+ .toDataURL()
218
+ files[index - 1] = cropperImg
219
+ document.querySelector(`#image-pre-${index}`).src = cropperImg
220
+ document.querySelector(`#image-pre-${index}`).style.display = 'block'
221
+ document.querySelector(`#cam-${index}`).style.display = 'none'
222
+ cropModal.style.display = 'none'
223
+ document.body.style.overflow = "auto"
224
+ })
225
+ const openExamplesModal = () => {
226
+ exampleModal.style.display = 'flex'
227
+ }
228
+ let inputFile = ''
229
+ const handleFile = (file) => {
230
+ cropModal.style.display = 'flex'
231
+ document.querySelector('#file-loader').style.display = 'flex'
232
+ document.querySelector('.file-input').style.display = 'none'
233
+ inputFile = file
234
+ if (file) {
235
+ const reader = new FileReader()
236
+ reader.onload = (e) => {
237
+ if (e.target.result) {
238
+ cropImage(e.target.result)
239
+ }
240
+ }
241
+ reader.readAsDataURL(file)
242
+ }
243
+ }
244
+ const showLoading = () => {
245
+ document.querySelector('#file-loader').style.display = 'flex'
246
+ document.querySelector('.file-input').style.display = 'none'
247
+ }
248
+ const stopLoading = () => {
249
+ fileDropBox.style.display = 'none'
250
+ }
251
+ download.addEventListener('click', () => {
252
+ let canvas = document.querySelector('canvas')
253
+ let url = canvas.toDataURL(`image/png`)
254
+ let a = document.createElement('a')
255
+ a.href = url
256
+ a.download = `${downloadName}-image.png`
257
+ document.body.appendChild(a)
258
+ a.click()
259
+ if (lang === 'en') {
260
+ window.location.href = `/download?tool=${pageTool}`
261
+ } else {
262
+ window.location.href = `/${lang}/download?tool=${pageTool}`
263
+ }
264
+ })
File without changes