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,447 @@
1
+ ---
2
+ ---
3
+
4
+ const profileButton = document.getElementById("profileButton");
5
+ const userModal = document.getElementById("userModal");
6
+ let isModalOpen = false;
7
+
8
+ if (profileButton && userModal) {
9
+ profileButton.addEventListener("click", () => {
10
+ if (isModalOpen) {
11
+ userModal.style.display = "none";
12
+ isModalOpen = false;
13
+ } else {
14
+ userModal.style.display = "block";
15
+ isModalOpen = true;
16
+ }
17
+ });
18
+
19
+ // Close modal when clicking outside
20
+ document.addEventListener("click", (event) => {
21
+ if (
22
+ profileButton &&
23
+ userModal &&
24
+ !profileButton.contains(event.target) &&
25
+ !userModal.contains(event.target)
26
+ ) {
27
+ userModal.style.display = "none";
28
+ isModalOpen = false;
29
+ }
30
+ });
31
+ }
32
+
33
+ // Get the modal elements
34
+ const sideModal = document.getElementById("sideModal");
35
+ const modalOverlayy = document.getElementById("modalOverlay");
36
+ const openModalBtn = document.querySelector(".open-modal-btn");
37
+ const closeModalBtn = document.querySelector(".close-modal-btn");
38
+
39
+ // Function to open the modal
40
+ function openModal() {
41
+ if (modalOverlayy && sideModal) {
42
+ modalOverlayy.style.display = "block";
43
+ setTimeout(() => {
44
+ sideModal.style.right = "0";
45
+ }, 50);
46
+ }
47
+ }
48
+
49
+ // Function to close the modal
50
+ function closeModal() {
51
+ if (sideModal && modalOverlayy) {
52
+ sideModal.style.right = "-90%";
53
+ setTimeout(() => {
54
+ modalOverlayy.style.display = "none";
55
+ }, 300);
56
+ }
57
+ }
58
+
59
+ // Event listeners
60
+ if (openModalBtn) {
61
+ openModalBtn.addEventListener("click", openModal);
62
+ }
63
+
64
+ if (closeModalBtn) {
65
+ closeModalBtn.addEventListener("click", closeModal);
66
+ }
67
+
68
+ if (modalOverlayy) {
69
+ modalOverlayy.addEventListener("click", closeModal);
70
+ }
71
+
72
+ if (sideModal) {
73
+ sideModal.addEventListener("click", function (event) {
74
+ event.stopPropagation();
75
+ });
76
+ }
77
+
78
+ if (
79
+ window.location.pathname === "/profile" &&
80
+ document.querySelector(".login-button")
81
+ ) {
82
+ document.querySelector(".login-button").addEventListener("click", openModal);
83
+ }
84
+
85
+ // Firebase configuration
86
+ let firebaseConfig;
87
+
88
+ async function loadFirebaseConfig() {
89
+ try {
90
+ const hostname = window.location.hostname;
91
+ let baseUrl = "";
92
+
93
+ if (hostname === "localhost" || hostname === "127.0.0.1") {
94
+ baseUrl = "http://localhost:9000";
95
+ }
96
+
97
+ const response = await fetch(
98
+ `${baseUrl}/.netlify/functions/get-firebase-config`
99
+ );
100
+
101
+ if (response.ok) {
102
+ firebaseConfig = await response.json();
103
+
104
+ if (
105
+ firebaseConfig.apiKey &&
106
+ firebaseConfig.authDomain &&
107
+ firebaseConfig.projectId
108
+ ) {
109
+ if (typeof firebase !== "undefined") {
110
+ initializeFirebase();
111
+ } else {
112
+ console.error("Firebase SDK not loaded");
113
+ }
114
+ } else {
115
+ console.error("Incomplete Firebase configuration received");
116
+ }
117
+ } else {
118
+ console.error("Failed to load Firebase config:", response.status);
119
+ }
120
+ } catch (error) {
121
+ console.log(error);
122
+ console.error("Error loading Firebase config:", error);
123
+ }
124
+ }
125
+
126
+ function initializeFirebase() {
127
+ if (!firebase.apps.length) {
128
+ firebase.initializeApp(firebaseConfig);
129
+ setupAuthListeners();
130
+ }
131
+ }
132
+
133
+ function setupAuthListeners() {
134
+ const auth = firebase.auth();
135
+
136
+ auth
137
+ .getRedirectResult()
138
+ .then((result) => {
139
+ if (result && result.user) {
140
+ // Successful redirect login
141
+ }
142
+ })
143
+ .catch((error) => {
144
+ console.error("Redirect result error:", error);
145
+ if (error.code !== "auth/credential-already-in-use") {
146
+ alert(`Authentication error: ${error.message}`);
147
+ }
148
+ });
149
+
150
+ const loginForm = document.getElementById("loginForm");
151
+ const signupForm = document.getElementById("signupForm");
152
+ const forgotPasswordForm = document.getElementById("forgotPasswordForm");
153
+ const userAvatar = document.getElementById("userAvatar");
154
+ const profileUserAvatar = document.querySelector(".profile-user-avatar");
155
+
156
+ const showSignupBtn = document.getElementById("showSignup");
157
+ if (showSignupBtn) {
158
+ showSignupBtn.addEventListener("click", (e) => {
159
+ e.preventDefault();
160
+ if (loginForm) loginForm.style.display = "none";
161
+ if (signupForm) signupForm.style.display = "block";
162
+ if (forgotPasswordForm) forgotPasswordForm.style.display = "none";
163
+ });
164
+ }
165
+
166
+ const showLoginBtn = document.getElementById("showLogin");
167
+ if (showLoginBtn) {
168
+ showLoginBtn.addEventListener("click", (e) => {
169
+ e.preventDefault();
170
+ if (signupForm) signupForm.style.display = "none";
171
+ if (loginForm) loginForm.style.display = "block";
172
+ if (forgotPasswordForm) forgotPasswordForm.style.display = "none";
173
+ });
174
+ }
175
+
176
+ const forgotPasswordBtn = document.getElementById("forgotPassword");
177
+ if (forgotPasswordBtn) {
178
+ forgotPasswordBtn.addEventListener("click", (e) => {
179
+ e.preventDefault();
180
+ if (loginForm) loginForm.style.display = "none";
181
+ if (forgotPasswordForm) forgotPasswordForm.style.display = "block";
182
+ });
183
+ }
184
+
185
+ const backToLoginBtn = document.getElementById("backToLogin");
186
+ if (backToLoginBtn) {
187
+ backToLoginBtn.addEventListener("click", () => {
188
+ if (forgotPasswordForm) forgotPasswordForm.style.display = "none";
189
+ if (loginForm) loginForm.style.display = "block";
190
+ const resetSuccess = document.getElementById("resetSuccess");
191
+ if (resetSuccess) resetSuccess.style.display = "none";
192
+ });
193
+ }
194
+
195
+ const resetPasswordForm = document.getElementById("resetPasswordForm");
196
+ if (resetPasswordForm) {
197
+ resetPasswordForm.addEventListener("submit", (e) => {
198
+ e.preventDefault();
199
+ const resetEmail = document.getElementById("resetEmail");
200
+ if (!resetEmail) return;
201
+
202
+ const email = resetEmail.value;
203
+
204
+ const actionCodeSettings = {
205
+ url: "https://pdftoolkit-develop.netlify.app/",
206
+ handleCodeInApp: false,
207
+ };
208
+
209
+ auth
210
+ .sendPasswordResetEmail(email, actionCodeSettings)
211
+ .then(() => {
212
+ const resetSuccess = document.getElementById("resetSuccess");
213
+ if (resetSuccess) resetSuccess.style.display = "block";
214
+ resetPasswordForm.reset();
215
+ })
216
+ .catch((error) => {
217
+ alert(`Error: ${error.message}`);
218
+ });
219
+ });
220
+ }
221
+
222
+ const toggleLoginPassword = document.getElementById("toggleLoginPassword");
223
+ if (toggleLoginPassword) {
224
+ toggleLoginPassword.addEventListener("click", () => {
225
+ const passwordInput = document.getElementById("loginPassword");
226
+ if (passwordInput) {
227
+ passwordInput.type =
228
+ passwordInput.type === "password" ? "text" : "password";
229
+ }
230
+ });
231
+ }
232
+
233
+ const toggleSignupPassword = document.getElementById("toggleSignupPassword");
234
+ if (toggleSignupPassword) {
235
+ toggleSignupPassword.addEventListener("click", () => {
236
+ const passwordInput = document.getElementById("signupPassword");
237
+ if (passwordInput) {
238
+ passwordInput.type =
239
+ passwordInput.type === "password" ? "text" : "password";
240
+ }
241
+ });
242
+ }
243
+
244
+ const emailLoginForm = document.getElementById("emailLoginForm");
245
+ if (emailLoginForm) {
246
+ emailLoginForm.addEventListener("submit", (e) => {
247
+ e.preventDefault();
248
+ const loginEmail = document.getElementById("loginEmail");
249
+ const loginPassword = document.getElementById("loginPassword");
250
+ if (!loginEmail || !loginPassword) return;
251
+
252
+ auth
253
+ .signInWithEmailAndPassword(loginEmail.value, loginPassword.value)
254
+ .then(() => {})
255
+ .catch((error) => {
256
+ alert(`Login error: ${error.message}`);
257
+ });
258
+ });
259
+ }
260
+
261
+ const emailSignupForm = document.getElementById("emailSignupForm");
262
+ if (emailSignupForm) {
263
+ emailSignupForm.addEventListener("submit", (e) => {
264
+ e.preventDefault();
265
+ const signupEmail = document.getElementById("signupEmail");
266
+ const signupPassword = document.getElementById("signupPassword");
267
+ if (!signupEmail || !signupPassword) return;
268
+
269
+ auth
270
+ .createUserWithEmailAndPassword(signupEmail.value, signupPassword.value)
271
+ .then(() => {})
272
+ .catch((error) => {
273
+ alert(`Signup error: ${error.message}`);
274
+ });
275
+ });
276
+ }
277
+
278
+ const googleLoginBtn = document.getElementById("googleLogin");
279
+ if (googleLoginBtn) {
280
+ googleLoginBtn.addEventListener("click", () => {
281
+ const provider = new firebase.auth.GoogleAuthProvider();
282
+ auth
283
+ .signInWithPopup(provider)
284
+ .then(() => {})
285
+ .catch((error) => {
286
+ alert(`Google login error: ${error.message}`);
287
+ });
288
+ });
289
+ }
290
+
291
+ const googleSignupBtn = document.getElementById("googleSignup");
292
+ if (googleSignupBtn) {
293
+ googleSignupBtn.addEventListener("click", () => {
294
+ const provider = new firebase.auth.GoogleAuthProvider();
295
+ auth
296
+ .signInWithPopup(provider)
297
+ .then(() => {})
298
+ .catch((error) => {
299
+ alert(`Google signup error: ${error.message}`);
300
+ });
301
+ });
302
+ }
303
+
304
+ const facebookLoginBtn = document.getElementById("facebookLogin");
305
+ if (facebookLoginBtn) {
306
+ facebookLoginBtn.addEventListener("click", () => {
307
+ const provider = new firebase.auth.FacebookAuthProvider();
308
+ provider.addScope("email");
309
+
310
+ auth
311
+ .signInWithPopup(provider)
312
+ .then(() => {})
313
+ .catch((error) => {
314
+ console.error("Facebook login error:", error);
315
+ alert(`Facebook login error: ${error.message}`);
316
+ });
317
+ });
318
+ }
319
+
320
+ const twitterLoginBtn = document.getElementById("twitterLogin");
321
+ if (twitterLoginBtn) {
322
+ twitterLoginBtn.addEventListener("click", () => {
323
+ const provider = new firebase.auth.TwitterAuthProvider();
324
+ auth
325
+ .signInWithPopup(provider)
326
+ .then(() => {})
327
+ .catch((error) => {
328
+ console.error("Twitter popup error:", error);
329
+ if (
330
+ error.code === "auth/popup-blocked" ||
331
+ error.code === "auth/popup-closed-by-user"
332
+ ) {
333
+ auth.signInWithRedirect(provider).catch((redirectError) => {
334
+ console.error("Twitter redirect error:", redirectError);
335
+ alert(`Twitter login error: ${redirectError.message}`);
336
+ });
337
+ } else {
338
+ alert(`Twitter login error: ${error.message}`);
339
+ }
340
+ });
341
+ });
342
+ }
343
+
344
+ const logoutBtn = document.getElementById("logoutBtn");
345
+ if (logoutBtn) {
346
+ logoutBtn.addEventListener("click", () => {
347
+ auth
348
+ .signOut()
349
+ .then(() => {
350
+ const userProfileHeader = document.querySelector(
351
+ ".user-profile-header"
352
+ );
353
+ if (userProfileHeader) userProfileHeader.style.display = "none";
354
+ window.location.reload();
355
+ })
356
+ .catch((error) => {
357
+ alert(`Logout error: ${error.message}`);
358
+ });
359
+ });
360
+ }
361
+
362
+ auth.onAuthStateChanged((user) => {
363
+ if (user) {
364
+ const email = user.email || "No email available";
365
+ const loggedInUserEmail = document.querySelector(".logged-in-user-email");
366
+ if (loggedInUserEmail) loggedInUserEmail.textContent = email;
367
+
368
+ let displayName =
369
+ user.displayName || (user.email ? user.email.split("@")[0] : "User");
370
+
371
+ if (
372
+ user.providerData[0].providerId === "twitter.com" &&
373
+ !user.displayName
374
+ ) {
375
+ displayName = user.providerData[0].uid;
376
+ }
377
+
378
+ if (sideModal) {
379
+ sideModal.style.display = "none";
380
+ sideModal.style.right = "-90%";
381
+ }
382
+
383
+ if (modalOverlayy) {
384
+ modalOverlayy.style.display = "none";
385
+ }
386
+
387
+ const loggedInUsername = document.querySelector(".logged-in-username");
388
+ if (loggedInUsername) loggedInUsername.textContent = displayName;
389
+
390
+ const loginModalButton = document.querySelector(".login-modal-button");
391
+ if (loginModalButton) loginModalButton.style.display = "none";
392
+
393
+ const initials = displayName
394
+ .split(" ")
395
+ .map((n) => n[0])
396
+ .join("")
397
+ .toUpperCase()
398
+ .substring(0, 2);
399
+
400
+ if (profileButton) profileButton.textContent = initials;
401
+ if (profileUserAvatar) profileUserAvatar.textContent = initials;
402
+
403
+ const userProfileHeader = document.querySelector(".user-profile-header");
404
+ if (userProfileHeader) userProfileHeader.style.display = "block";
405
+
406
+ if (userAvatar) {
407
+ userAvatar.textContent = initials;
408
+ userAvatar.style.display = "flex";
409
+ }
410
+
411
+ if (window.location.pathname === "/profile") {
412
+ const userProfileSection = document.querySelector(
413
+ ".user-profile-section"
414
+ );
415
+ if (userProfileSection)
416
+ userProfileSection.style.display = "flex";
417
+
418
+ const profileLoginContainer = document.querySelector(
419
+ ".profile-login-container"
420
+ );
421
+ if (profileLoginContainer)
422
+ profileLoginContainer.style.display = "none";
423
+
424
+ const avatarLarge = document.querySelector(".avatar-large");
425
+ if (avatarLarge) avatarLarge.textContent = initials;
426
+
427
+ const userEmailInput = document.querySelector("#user-email-input");
428
+ if (userEmailInput) userEmailInput.value = email;
429
+
430
+ const usernameInput = document.querySelector(".username-input");
431
+ if (usernameInput) usernameInput.value = displayName;
432
+ }
433
+ } else {
434
+ if (userAvatar) userAvatar.style.display = "none";
435
+ if (loginForm) loginForm.style.display = "block";
436
+ if (signupForm) signupForm.style.display = "none";
437
+ if (forgotPasswordForm) forgotPasswordForm.style.display = "none";
438
+ }
439
+ });
440
+ }
441
+
442
+ // Initialize the app
443
+ if (document.readyState === "loading") {
444
+ document.addEventListener("DOMContentLoaded", loadFirebaseConfig);
445
+ } else {
446
+ loadFirebaseConfig();
447
+ }
@@ -0,0 +1,136 @@
1
+ let features = [];
2
+ let featureshi = [];
3
+ let featuresar = [];
4
+ let featuresda = [];
5
+ let featuresde = [];
6
+ let featureses = [];
7
+ let featuresfr = [];
8
+ let featuresid = [];
9
+ let featuresit = [];
10
+ let featuresja = [];
11
+ let featuresko = [];
12
+ let featuresnl = [];
13
+ let featurespl = [];
14
+ let featurespt = [];
15
+ let featuresru = [];
16
+ let featuressv = [];
17
+ let featuresth = [];
18
+ let featurestr = [];
19
+ let featuresuk = [];
20
+ let featuresvi = [];
21
+ let featureszh = [];
22
+ let featureszhtw = [];
23
+
24
+ // Fetch data from searchbar.json
25
+ const fetchFeatures = async () => {
26
+ try {
27
+ const response = await fetch('/searchbar1.json');
28
+ const data = await response.json();
29
+ features = data.features;
30
+ featureshi = data.featureshi;
31
+ featuresar = data.featuresar;
32
+ featuresda = data.featuresda;
33
+ featuresde = data.featuresde;
34
+ featureses = data.featureses;
35
+ featuresfr = data.featuresfr;
36
+ featuresid = data.featuresid;
37
+ featuresit = data.featuresit;
38
+ featuresja = data.featuresja;
39
+ featuresko = data.featuresko;
40
+ featuresnl = data.featuresnl;
41
+ featurespl = data.featurespl;
42
+ featurespt = data.featurespt;
43
+ featuresru = data.featuresru;
44
+ featuressv = data.featuressv;
45
+ featuresth = data.featuresth;
46
+ featurestr = data.featurestr;
47
+ featuresuk = data.featuresuk;
48
+ featuresvi = data.featuresvi;
49
+ featureszh = data.featureszh;
50
+ featureszhtw = data.featureszhtw;
51
+ } catch (error) {
52
+ console.error('Error loading features:', error);
53
+ featureList.innerHTML = '<div class="error-msg">Error loading features</div>';
54
+ }
55
+ };
56
+
57
+ const getFeatureSet = () => {
58
+ const currentUrl = window.location.pathname;
59
+ if (currentUrl.includes('/hi')) return featureshi;
60
+ if (currentUrl.includes('/ar')) return featuresar;
61
+ if (currentUrl.includes('/da')) return featuresda;
62
+ if (currentUrl.includes('/de')) return featuresde;
63
+ if (currentUrl.includes('/es')) return featureses;
64
+ if (currentUrl.includes('/fr')) return featuresfr;
65
+ if (currentUrl.includes('/id')) return featuresid;
66
+ if (currentUrl.includes('/it')) return featuresit;
67
+ if (currentUrl.includes('/ja')) return featuresja;
68
+ if (currentUrl.includes('/ko')) return featuresko;
69
+ if (currentUrl.includes('/nl')) return featuresnl;
70
+ if (currentUrl.includes('/pl')) return featurespl;
71
+ if (currentUrl.includes('/pt')) return featurespt;
72
+ if (currentUrl.includes('/ru')) return featuresru;
73
+ if (currentUrl.includes('/sv')) return featuressv;
74
+ if (currentUrl.includes('/th')) return featuresth;
75
+ if (currentUrl.includes('/tr')) return featurestr;
76
+ if (currentUrl.includes('/uk')) return featuresuk;
77
+ if (currentUrl.includes('/vi')) return featuresvi;
78
+ if (currentUrl.includes('/zh')) return featureszh;
79
+ if (currentUrl.includes('/zh-tw')) return featureszhtw;
80
+ return features;
81
+ };
82
+
83
+ const featureList = document.querySelector('.home1-features');
84
+ const renderFeatures = (query) => {
85
+ featureList.innerHTML = "";
86
+ const currentFeatures = getFeatureSet();
87
+ const filteredFeatures = currentFeatures.filter(currentFeatures =>
88
+ currentFeatures.name.toLowerCase().includes(query.toLowerCase())
89
+ );
90
+
91
+ if (filteredFeatures.length > 0) {
92
+ filteredFeatures.forEach(item => {
93
+ const listItem = document.createElement("li");
94
+ listItem.classList.add("home1-features-box");
95
+
96
+ listItem.innerHTML = `
97
+ <div class="home1-inner-box">
98
+ <a class="home1-feature-name" href="${item.url}">
99
+ <div class="home1-feature-text">${truncate(item.name, 33, '..')}</div>
100
+ </a>
101
+ <div style="background: ${item.color};" class="home1-feature-img" height="30px" width="30px">
102
+ <img style="padding:5px;" src="${item.icon}" height="32px" width="32px" alt="home1-feature-icon" crossorigin="">
103
+ </div>
104
+ <div class="home1-right-arrow-icon">
105
+ <div style="width:24px;height:24px">
106
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
107
+ <path d="M9 7L10 6L16 12L10 18L9 17L14.17 12L9 7Z"></path>
108
+ </svg>
109
+ </div>
110
+ </div>
111
+ <p class="home1-feature-desc">${truncate(item.description, 67, '..')}</p>
112
+ </div>
113
+ `;
114
+ featureList.appendChild(listItem);
115
+ });
116
+ } else {
117
+ let msg = document.createElement('div');
118
+ msg.classList.add('no-result-found-msg');
119
+ msg.innerHTML = "No search results found!";
120
+ featureList.appendChild(msg);
121
+ }
122
+ };
123
+
124
+ function truncate(str, length, ending = '..') {
125
+ if (!str) return '';
126
+ return str.length > length ? str.substring(0, length) + ending : str;
127
+ }
128
+
129
+ const searchInput = document.querySelector('#search-features');
130
+ searchInput.addEventListener("input", function () {
131
+ const query = searchInput.value.trim();
132
+ renderFeatures(query);
133
+ });
134
+
135
+ // Initialize by fetching data
136
+ fetchFeatures();