appscms-tools-theme 5.1.8 → 5.2.0

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 (124) hide show
  1. checksums.yaml +4 -4
  2. data/_data/.DS_Store +0 -0
  3. data/_data/aitools/en/ai-article-writer.json +184 -0
  4. data/_data/aitools/en/all-in-one-social-post.json +217 -0
  5. data/_data/aitools/en/amazon-product-bullet-points-generator.json +224 -0
  6. data/_data/aitools/en/amazon-product-description-generator.json +237 -0
  7. data/_data/aitools/en/blog-conclusion-generator.json +253 -0
  8. data/_data/aitools/en/blog-content-calendar.json +232 -0
  9. data/_data/aitools/en/blog-introduction-generator.json +246 -0
  10. data/_data/aitools/en/blog-outline-generator.json +232 -0
  11. data/_data/aitools/en/blog-section-generator.json +253 -0
  12. data/_data/aitools/en/blog-title-generator.json +232 -0
  13. data/_data/aitools/en/blog-topic-ideas.json +232 -0
  14. data/_data/aitools/en/brand-name-generator.json +215 -0
  15. data/_data/aitools/en/caption-generator.json +271 -0
  16. data/_data/aitools/en/engagement-post-generator.json +251 -0
  17. data/_data/aitools/en/facebook-post.json +232 -0
  18. data/_data/aitools/en/hidden-fact-finder.json +232 -0
  19. data/_data/aitools/en/human-written-blog-post.json +232 -0
  20. data/_data/aitools/en/instagram-bio-generator.json +246 -0
  21. data/_data/aitools/en/instagram-caption.json +232 -0
  22. data/_data/aitools/en/instagram-carousel.json +250 -0
  23. data/_data/aitools/en/instagram-hashtag-generator.json +246 -0
  24. data/_data/aitools/en/instagram-name-generator.json +239 -0
  25. data/_data/aitools/en/instagram-threads-generator.json +239 -0
  26. data/_data/aitools/en/interactive-content-creator.json +252 -0
  27. data/_data/aitools/en/linkedin-hashtag-generator.json +239 -0
  28. data/_data/aitools/en/linkedin-post.json +232 -0
  29. data/_data/aitools/en/motivational-posts.json +239 -0
  30. data/_data/aitools/en/pinterest-pin.json +217 -0
  31. data/_data/aitools/en/platform-specific-content-generator.json +246 -0
  32. data/_data/aitools/en/product-description.json +222 -0
  33. data/_data/aitools/en/quick-article-writer.json +253 -0
  34. data/_data/aitools/en/replies-for-facebook.json +239 -0
  35. data/_data/aitools/en/replies-for-instagram.json +239 -0
  36. data/_data/aitools/en/replies-for-linkedin.json +239 -0
  37. data/_data/aitools/en/replies-for-twitter.json +239 -0
  38. data/_data/aitools/en/rewrite-article-with-keywords.json +246 -0
  39. data/_data/aitools/en/script-for-instagram-reel.json +246 -0
  40. data/_data/aitools/en/script-for-tiktok-video.json +246 -0
  41. data/_data/aitools/en/seo-optimized-blog-post.json +239 -0
  42. data/_data/aitools/en/snapchat-caption-maker.json +245 -0
  43. data/_data/aitools/en/social-media-bio-creator.json +274 -0
  44. data/_data/aitools/en/social-media-bio-generator.json +246 -0
  45. data/_data/aitools/en/social-media-calendar.json +250 -0
  46. data/_data/aitools/en/tiktok-caption.json +232 -0
  47. data/_data/aitools/en/tiktok-username-generator.json +239 -0
  48. data/_data/aitools/en/twitter-poll-generator.json +250 -0
  49. data/_data/aitools/en/twitter-post.json +272 -0
  50. data/_data/contenttool/en/features.json +217 -10
  51. data/_includes/.DS_Store +0 -0
  52. data/_includes/appscms/.DS_Store +0 -0
  53. data/_includes/appscms/customblog/pageRelatedPosts.html +1 -1
  54. data/_layouts/appscms-feature.html +1 -1
  55. data/_layouts/content-tool-ai copy 2.html +6611 -0
  56. data/_layouts/content-tool-ai.html +305 -44
  57. data/assets/.DS_Store +0 -0
  58. data/assets/css/content-tool-ai.css +815 -11
  59. metadata +50 -67
  60. data/assets/js/.DS_Store +0 -0
  61. data/assets/js/TopScroll.js +0 -8
  62. data/assets/js/adBlocker.js +0 -68
  63. data/assets/js/ads.js +0 -8
  64. data/assets/js/append-div.js +0 -10
  65. data/assets/js/appscms-infographics.js +0 -0
  66. data/assets/js/appscms-login.js +0 -447
  67. data/assets/js/appscms-search-home1.js +0 -136
  68. data/assets/js/appscms-search.js +0 -133
  69. data/assets/js/appscms-theme.js +0 -459
  70. data/assets/js/batch.js +0 -219
  71. data/assets/js/blog-topic-ideas.js +0 -57
  72. data/assets/js/calculator-tooltip.js +0 -3
  73. data/assets/js/devtools.js +0 -82
  74. data/assets/js/face-api.js +0 -38064
  75. data/assets/js/face-detection.js +0 -303
  76. data/assets/js/faceSystem.js +0 -0
  77. data/assets/js/featureResult.js +0 -48
  78. data/assets/js/frame.js +0 -264
  79. data/assets/js/googledrive.js +0 -158
  80. data/assets/js/homeResult.js +0 -37
  81. data/assets/js/human-written-blog-post.js +0 -57
  82. data/assets/js/instagram-caption.js +0 -57
  83. data/assets/js/instagram-hashtag-generator.js +0 -10
  84. data/assets/js/instagram-name-generator.js +0 -61
  85. data/assets/js/manifest.json +0 -17
  86. data/assets/js/models/age_gender_model-shard1 +0 -0
  87. data/assets/js/models/age_gender_model-weights_manifest.json +0 -1
  88. data/assets/js/models/face_expression_model-shard1 +0 -0
  89. data/assets/js/models/face_expression_model-weights_manifest.json +0 -1
  90. data/assets/js/models/face_landmark_68_model-shard1 +0 -0
  91. data/assets/js/models/face_landmark_68_model-weights_manifest.json +0 -1
  92. data/assets/js/models/face_landmark_68_tiny_model-shard1 +0 -0
  93. data/assets/js/models/face_landmark_68_tiny_model-weights_manifest.json +0 -1
  94. data/assets/js/models/face_recognition_model-shard1 +0 -0
  95. data/assets/js/models/face_recognition_model-shard2 +0 -6
  96. data/assets/js/models/face_recognition_model-weights_manifest.json +0 -1
  97. data/assets/js/models/mtcnn_model-shard1 +0 -0
  98. data/assets/js/models/mtcnn_model-weights_manifest.json +0 -1
  99. data/assets/js/models/ssd_mobilenetv1_model-shard1 +0 -0
  100. data/assets/js/models/ssd_mobilenetv1_model-shard2 +8 -137
  101. data/assets/js/models/ssd_mobilenetv1_model-weights_manifest.json +0 -1
  102. data/assets/js/models/tiny_face_detector_model-shard1 +0 -0
  103. data/assets/js/models/tiny_face_detector_model-weights_manifest.json +0 -1
  104. data/assets/js/multiselect.js +0 -185
  105. data/assets/js/partytown/debug/partytown-atomics.js +0 -929
  106. data/assets/js/partytown/debug/partytown-media.js +0 -374
  107. data/assets/js/partytown/debug/partytown-sandbox-sw.js +0 -920
  108. data/assets/js/partytown/debug/partytown-sw.js +0 -59
  109. data/assets/js/partytown/debug/partytown-ww-atomics.js +0 -2699
  110. data/assets/js/partytown/debug/partytown-ww-sw.js +0 -2691
  111. data/assets/js/partytown/debug/partytown.js +0 -114
  112. data/assets/js/partytown/partytown-atomics.js +0 -600
  113. data/assets/js/partytown/partytown-media.js +0 -2
  114. data/assets/js/partytown/partytown-sw.js +0 -50
  115. data/assets/js/perspective.min.js +0 -182
  116. data/assets/js/photo-effects.json +0 -85
  117. data/assets/js/redirectResult.js +0 -10
  118. data/assets/js/sharePage.js +0 -65
  119. data/assets/js/testing-batch.js +0 -39
  120. data/assets/js/theme.js +0 -104
  121. data/assets/js/usageTracking.js +0 -143
  122. data/assets/js/usageTrackingEvents.js +0 -6
  123. data/assets/js/userUsageCount.js +0 -0
  124. data/assets/js/webvitals.js +0 -5
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appscms-tools-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.8
4
+ version: 5.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - vivek-appscms
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-14 00:00:00.000000000 Z
11
+ date: 2025-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -63,6 +63,53 @@ files:
63
63
  - README.md
64
64
  - _data/.DS_Store
65
65
  - _data/about/en/about.json
66
+ - _data/aitools/en/ai-article-writer.json
67
+ - _data/aitools/en/all-in-one-social-post.json
68
+ - _data/aitools/en/amazon-product-bullet-points-generator.json
69
+ - _data/aitools/en/amazon-product-description-generator.json
70
+ - _data/aitools/en/blog-conclusion-generator.json
71
+ - _data/aitools/en/blog-content-calendar.json
72
+ - _data/aitools/en/blog-introduction-generator.json
73
+ - _data/aitools/en/blog-outline-generator.json
74
+ - _data/aitools/en/blog-section-generator.json
75
+ - _data/aitools/en/blog-title-generator.json
76
+ - _data/aitools/en/blog-topic-ideas.json
77
+ - _data/aitools/en/brand-name-generator.json
78
+ - _data/aitools/en/caption-generator.json
79
+ - _data/aitools/en/engagement-post-generator.json
80
+ - _data/aitools/en/facebook-post.json
81
+ - _data/aitools/en/hidden-fact-finder.json
82
+ - _data/aitools/en/human-written-blog-post.json
83
+ - _data/aitools/en/instagram-bio-generator.json
84
+ - _data/aitools/en/instagram-caption.json
85
+ - _data/aitools/en/instagram-carousel.json
86
+ - _data/aitools/en/instagram-hashtag-generator.json
87
+ - _data/aitools/en/instagram-name-generator.json
88
+ - _data/aitools/en/instagram-threads-generator.json
89
+ - _data/aitools/en/interactive-content-creator.json
90
+ - _data/aitools/en/linkedin-hashtag-generator.json
91
+ - _data/aitools/en/linkedin-post.json
92
+ - _data/aitools/en/motivational-posts.json
93
+ - _data/aitools/en/pinterest-pin.json
94
+ - _data/aitools/en/platform-specific-content-generator.json
95
+ - _data/aitools/en/product-description.json
96
+ - _data/aitools/en/quick-article-writer.json
97
+ - _data/aitools/en/replies-for-facebook.json
98
+ - _data/aitools/en/replies-for-instagram.json
99
+ - _data/aitools/en/replies-for-linkedin.json
100
+ - _data/aitools/en/replies-for-twitter.json
101
+ - _data/aitools/en/rewrite-article-with-keywords.json
102
+ - _data/aitools/en/script-for-instagram-reel.json
103
+ - _data/aitools/en/script-for-tiktok-video.json
104
+ - _data/aitools/en/seo-optimized-blog-post.json
105
+ - _data/aitools/en/snapchat-caption-maker.json
106
+ - _data/aitools/en/social-media-bio-creator.json
107
+ - _data/aitools/en/social-media-bio-generator.json
108
+ - _data/aitools/en/social-media-calendar.json
109
+ - _data/aitools/en/tiktok-caption.json
110
+ - _data/aitools/en/tiktok-username-generator.json
111
+ - _data/aitools/en/twitter-poll-generator.json
112
+ - _data/aitools/en/twitter-post.json
66
113
  - _data/blog/alertbar.yml
67
114
  - _data/blog/authors.yml
68
115
  - _data/blog/blog.yml
@@ -237,6 +284,7 @@ files:
237
284
  - _layouts/calculator.html
238
285
  - _layouts/categories.html
239
286
  - _layouts/contactUs.html
287
+ - _layouts/content-tool-ai copy 2.html
240
288
  - _layouts/content-tool-ai copy.html
241
289
  - _layouts/content-tool-ai-2.html
242
290
  - _layouts/content-tool-ai.html
@@ -547,71 +595,6 @@ files:
547
595
  - assets/images/vectorpaint.svg
548
596
  - assets/images/video.png
549
597
  - assets/instagram.svg
550
- - assets/js/.DS_Store
551
- - assets/js/TopScroll.js
552
- - assets/js/adBlocker.js
553
- - assets/js/ads.js
554
- - assets/js/append-div.js
555
- - assets/js/appscms-infographics.js
556
- - assets/js/appscms-login.js
557
- - assets/js/appscms-search-home1.js
558
- - assets/js/appscms-search.js
559
- - assets/js/appscms-theme.js
560
- - assets/js/batch.js
561
- - assets/js/blog-topic-ideas.js
562
- - assets/js/calculator-tooltip.js
563
- - assets/js/devtools.js
564
- - assets/js/face-api.js
565
- - assets/js/face-detection.js
566
- - assets/js/faceSystem.js
567
- - assets/js/featureResult.js
568
- - assets/js/frame.js
569
- - assets/js/googledrive.js
570
- - assets/js/homeResult.js
571
- - assets/js/human-written-blog-post.js
572
- - assets/js/instagram-caption.js
573
- - assets/js/instagram-hashtag-generator.js
574
- - assets/js/instagram-name-generator.js
575
- - assets/js/manifest.json
576
- - assets/js/models/age_gender_model-shard1
577
- - assets/js/models/age_gender_model-weights_manifest.json
578
- - assets/js/models/face_expression_model-shard1
579
- - assets/js/models/face_expression_model-weights_manifest.json
580
- - assets/js/models/face_landmark_68_model-shard1
581
- - assets/js/models/face_landmark_68_model-weights_manifest.json
582
- - assets/js/models/face_landmark_68_tiny_model-shard1
583
- - assets/js/models/face_landmark_68_tiny_model-weights_manifest.json
584
- - assets/js/models/face_recognition_model-shard1
585
- - assets/js/models/face_recognition_model-shard2
586
- - assets/js/models/face_recognition_model-weights_manifest.json
587
- - assets/js/models/mtcnn_model-shard1
588
- - assets/js/models/mtcnn_model-weights_manifest.json
589
- - assets/js/models/ssd_mobilenetv1_model-shard1
590
- - assets/js/models/ssd_mobilenetv1_model-shard2
591
- - assets/js/models/ssd_mobilenetv1_model-weights_manifest.json
592
- - assets/js/models/tiny_face_detector_model-shard1
593
- - assets/js/models/tiny_face_detector_model-weights_manifest.json
594
- - assets/js/multiselect.js
595
- - assets/js/partytown/debug/partytown-atomics.js
596
- - assets/js/partytown/debug/partytown-media.js
597
- - assets/js/partytown/debug/partytown-sandbox-sw.js
598
- - assets/js/partytown/debug/partytown-sw.js
599
- - assets/js/partytown/debug/partytown-ww-atomics.js
600
- - assets/js/partytown/debug/partytown-ww-sw.js
601
- - assets/js/partytown/debug/partytown.js
602
- - assets/js/partytown/partytown-atomics.js
603
- - assets/js/partytown/partytown-media.js
604
- - assets/js/partytown/partytown-sw.js
605
- - assets/js/perspective.min.js
606
- - assets/js/photo-effects.json
607
- - assets/js/redirectResult.js
608
- - assets/js/sharePage.js
609
- - assets/js/testing-batch.js
610
- - assets/js/theme.js
611
- - assets/js/usageTracking.js
612
- - assets/js/usageTrackingEvents.js
613
- - assets/js/userUsageCount.js
614
- - assets/js/webvitals.js
615
598
  - assets/like.svg
616
599
  - assets/linkdin.svg
617
600
  - assets/noserverupload.svg
data/assets/js/.DS_Store DELETED
Binary file
@@ -1,8 +0,0 @@
1
- const alertbar = document.querySelector('.alertbar')
2
- window.addEventListener('scroll', () => {
3
- if (pageYOffset > 200) {
4
- alertbar.style.display = 'block'
5
- } else {
6
- alertbar.style.display = 'none'
7
- }
8
- })
@@ -1,68 +0,0 @@
1
- let showPop = false;
2
- if (
3
- !localStorage.getItem("timeDisplayed") ||
4
- new Date().getTime() - localStorage.getItem("timeDisplayed") >=
5
- 60000 * 24 * 60
6
- ) {
7
- showPop = true;
8
- localStorage.setItem("timeDisplayed", new Date().getTime());
9
- } else {
10
- showPop = false;
11
- }
12
- let freeCount = localStorage.getItem("freeCount");
13
- if (!freeCount) {
14
- freeCount = 0;
15
- }
16
- localStorage.setItem(
17
- "freeCount",
18
- Number(freeCount) < 5 ? Number(freeCount) + 1 : 5
19
- );
20
- if (freeCount >= 5 || showPop) {
21
- $(".nav-tabs a.nav-tab-link").click(function () {
22
- $(".nav-tabs a.nav-tab-link").removeClass("active");
23
- });
24
-
25
- const detect = document.querySelector("#detect");
26
- const wrapper = document.querySelector(".wrapper");
27
- const closePopup = document.getElementsByClassName("closePopup");
28
- const extensions = document.querySelector(".extensions");
29
-
30
- const refresh = () => {
31
- location.reload();
32
- };
33
-
34
- let adsBtn = document.querySelector(".allow-ads-btn");
35
- adsBtn.addEventListener("click", () => {
36
- extensions.classList.add("showPopUp");
37
- });
38
-
39
- let adClasses = [
40
- "ad",
41
- "ads",
42
- "adsbox",
43
- "doubleclick",
44
- "ad-placement",
45
- "ad-placeholder",
46
- "adbadge",
47
- "BannerAd",
48
- ];
49
- for (let item of adClasses) {
50
- detect.classList.add(item);
51
- }
52
-
53
- let getProperty = window.getComputedStyle(detect).getPropertyValue("display");
54
- console.log(getProperty);
55
- if (!wrapper.classList.contains("showPopUp")) {
56
- getProperty == "none"
57
- ? wrapper.classList.add("showPopUp")
58
- : wrapper.classList.remove("showPopUp");
59
- }
60
- closePopup[0].addEventListener("click", () => {
61
- wrapper.classList.remove("showPopUp");
62
- localStorage.setItem("freeCount", 0);
63
- });
64
- closePopup[1].addEventListener("click", () => {
65
- extensions.classList.remove("");
66
- localStorage.setItem("freeCount", 0);
67
- });
68
- }
data/assets/js/ads.js DELETED
@@ -1,8 +0,0 @@
1
- ;(function (s, u, z, p) {
2
- ;(s.src = u), s.setAttribute('data-zone', z), p.appendChild(s)
3
- })(
4
- document.createElement('script'),
5
- 'https://inklinkor.com/tag.min.js',
6
- 5225477,
7
- document.body || document.documentElement
8
- )
@@ -1,10 +0,0 @@
1
- ---
2
- ---
3
- function insertAfter(referenceNode, newNode) {
4
- referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling)
5
- }
6
- let themeContentBox = document.getElementById('theme-content-box')
7
- const div = document.createElement('div')
8
- const profitablecpmgateId = '{{site.profitablecpmgateId}}'
9
- div.setAttribute('id', `container-${profitablecpmgateId}`)
10
- insertAfter(themeContentBox, div)
File without changes
@@ -1,447 +0,0 @@
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
- }