word-games-theme 2.1.6 → 2.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/_data/blog/share.yml +1 -1
  3. data/_data/footer/en/data.json +20 -18
  4. data/_data/header/en/data.json +1 -0
  5. data/_data/rating/rating.json +47 -0
  6. data/_data/wordgames/en/root.json +5 -2
  7. data/_includes/script.html +0 -2
  8. data/_includes/wordgames/advanced-filter/advanced-filter.html +56 -0
  9. data/_includes/wordgames/authorpagehead/authorpagehead.html +40 -0
  10. data/_includes/wordgames/faqs/faqs.html +44 -0
  11. data/_includes/wordgames/featurehighlights/featurehighlights.html +76 -0
  12. data/_includes/wordgames/footer/footer.html +277 -0
  13. data/_includes/wordgames/head/bloghead.html +78 -0
  14. data/_includes/wordgames/head/head.html +148 -0
  15. data/_includes/wordgames/header/blog-header.html +51 -0
  16. data/_includes/wordgames/header/header.html +51 -0
  17. data/_includes/wordgames/headings/headings.html +14 -0
  18. data/_includes/wordgames/howto/howto.html +73 -0
  19. data/_includes/wordgames/infographics/infographics.html +131 -0
  20. data/_includes/wordgames/paginations/blog-pagination.html +44 -0
  21. data/_includes/wordgames/paginations/post-pagination.html +24 -0
  22. data/_includes/wordgames/rating/rating.html +124 -0
  23. data/_includes/wordgames/rating/structureddata.html +53 -0
  24. data/_includes/wordgames/recent-posts/recent-posts.html +104 -0
  25. data/_includes/wordgames/related-posts/related-posts.html +203 -0
  26. data/_includes/wordgames/result-page/result-page.html +95 -0
  27. data/_includes/wordgames/scripts/scripts.html +66 -0
  28. data/_includes/wordgames/search-box/search-box.html +49 -0
  29. data/_includes/wordgames/seo/seo.html +58 -0
  30. data/_includes/wordgames/words-data/words-data.html +58 -0
  31. data/_includes/wordgames/words-point-table/words-point-table.html +106 -0
  32. data/_layouts/wordgames-about.html +194 -0
  33. data/_layouts/wordgames-author.html +408 -0
  34. data/_layouts/wordgames-authors.html +138 -0
  35. data/_layouts/wordgames-autogencontent.html +0 -0
  36. data/_layouts/wordgames-blog.html +94 -0
  37. data/_layouts/wordgames-disclaimer.html +148 -0
  38. data/_layouts/wordgames-home.html +78 -0
  39. data/_layouts/wordgames-post.html +215 -0
  40. data/_layouts/wordgames-privacy-policy.html +640 -0
  41. data/_layouts/wordgames-result.html +38 -0
  42. data/_layouts/wordgames-terms-and-conditions.html +569 -0
  43. data/_layouts/wordgames-tools.html +0 -0
  44. data/_layouts/wordgames-word-meaning.html +180 -0
  45. data/_layouts/wordgames-xyz.html +0 -0
  46. data/_layouts/wordgames.categories.html +0 -0
  47. data/assets/css/wordgames-blog.css +431 -0
  48. data/assets/css/wordgames-home.css +948 -0
  49. data/assets/css/wordgames-result.css +498 -0
  50. data/assets/css/wordgames-theme.css +227 -0
  51. data/assets/css/wordgames-variables.css +20 -0
  52. data/assets/images/background.svg +80 -0
  53. data/assets/images/close-btn.svg +16 -0
  54. data/assets/images/facebook-icon.svg +9 -0
  55. data/assets/images/facebook.svg +10 -1
  56. data/assets/images/how-to.svg +1 -0
  57. data/assets/images/idea.svg +113 -0
  58. data/assets/images/instagram.svg +1 -1
  59. data/assets/images/logo wordswithletter final black.svg +95 -0
  60. data/assets/images/logo.svg +106 -0
  61. data/assets/images/minus-btn.svg +14 -0
  62. data/assets/images/plus btn.svg +16 -0
  63. data/assets/images/questionmark.svg +17 -0
  64. data/assets/images/search.svg +16 -1
  65. data/assets/images/twitter.svg +1 -1
  66. data/assets/images/wordfinder-favicon.svg +69 -0
  67. data/assets/images/wordfinder-pink.svg +82 -0
  68. data/assets/images/wordfinder-result-logo.svg +105 -0
  69. data/assets/images/words with letters logo white text.svg +95 -0
  70. data/assets/js/X-letter-test.js +2 -2
  71. data/assets/js/default.js +2 -2
  72. data/assets/js/repeat-letters.js +2 -2
  73. data/assets/js/scrabble-words.js +885 -0
  74. data/assets/js/theme.js +2 -1
  75. data/assets/js/wordScrabble-test.js +2 -2
  76. data/assets/js/wordgames-home.js +82 -0
  77. data/assets/js/wordgames-result.js +885 -0
  78. data/assets/js/wordgames-xletter.js +740 -0
  79. metadata +65 -2
@@ -0,0 +1,73 @@
1
+ {%- if dataToShow.HOW_TO_CONTENT -%}
2
+ <div class="container">
3
+ <div class="row">
4
+ <div class="col-lg-4 col-md-6 my-3">
5
+ <p class="howto mb-0">How to</p>
6
+ </div>
7
+ </div>
8
+ </div>
9
+ <section class="how-to-section mt-5">
10
+ <div class="container">
11
+ <div class="row pt-5 justify-content-center">
12
+ {%- if site.ezoicAds -%}
13
+ <div class="col-md-9 mx-auto">
14
+ <div class="row">
15
+ {%- endif -%}
16
+ <div class="col-md-6 order-0 ">
17
+ {%- if dataToShow.HOW_TO_CONTENT.YoutubeVideoUrl.size > 0 -%}
18
+ <div class="how-to-video-wrapper">
19
+ {% assign video_url = dataToShow.HOW_TO_CONTENT.YoutubeVideoUrl %}
20
+ {% assign video_id = "" %}
21
+ {% if video_url contains "youtu.be/" %}
22
+ {% assign parts = video_url | split: "/" %}
23
+ {% assign video_id = parts[3] %}
24
+ {% elsif video_url contains "youtube.com/watch" %}
25
+ {% assign params = video_url | split: "?" | last | split: "&" %}
26
+ {% for param in params %}
27
+ {% if param contains "v=" %}
28
+ {% assign video_id = param | split: "=" | last %}
29
+ {% endif %}
30
+ {% endfor %}
31
+ {% endif %}
32
+ {%- if site.ezoicAds -%}
33
+ <iframe class="youtubeVideoPlayer mb-5" width="400" height="315"
34
+ src="https://www.youtube.com/embed/{{video_id}}?autoplay=1&mute=1" allowfullscreen>
35
+ </iframe>
36
+ {%- else -%}
37
+ <iframe class="youtubeVideoPlayer mb-5" width="500" height="315"
38
+ src="https://www.youtube.com/embed/{{video_id}}?autoplay=1&mute=1" allowfullscreen>
39
+ </iframe>
40
+ {%- endif -%}
41
+
42
+ </div>
43
+ {%- else -%}
44
+ <div class="how-to-img-wrapper ">
45
+ <img width="100%" height="100%" class="how-to-leftimg" src="{{dataToShow.HOW_TO_CONTENT.logoImageUrl}}"
46
+ loading="lazy"
47
+ alt="{{dataToShow.HOW_TO_CONTENT.logoImageAlt | default: 'how to image' }}">
48
+ </div>
49
+ {%- endif -%}
50
+ </div>
51
+ <div class="col-md-6 order-1">
52
+ <div class="how-to-right">
53
+ <h3 class="how-to-title">{{dataToShow.HOW_TO_CONTENT.heading | replace: "$variable",
54
+ page.value}}</h3>
55
+ <ol class="how-to-list">
56
+ {% for data in dataToShow.HOW_TO_CONTENT.steps %}
57
+ <li id="step{{forloop.index}}" class="how-to-list-item">
58
+ <span>{{forloop.index}}.</span>{{data |
59
+ replace: "$variable",
60
+ page.value}}
61
+ </li>
62
+ {% endfor %}
63
+ </ol>
64
+ </div>
65
+ </div>
66
+ {%- if site.ezoicAds -%}
67
+ </div>
68
+ </div>
69
+ {%- endif -%}
70
+ </div>
71
+ </div>
72
+ </section>
73
+ {%- endif -%}
@@ -0,0 +1,131 @@
1
+ <div class="container">
2
+ <div class="row">
3
+ <div class="col-lg-12 my-3">
4
+ <h3 class="text-center w-100 mb-5 infographics-title border-0"><b>Other useful information</b>
5
+ </h3>
6
+ </div>
7
+ </div>
8
+ </div>
9
+
10
+ <div class="inforgraphics_section">
11
+
12
+ <div class="wrapper">
13
+ <svg id="left" fill="#000000" viewBox="-12 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
14
+ <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
15
+ <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
16
+ <g id="SVGRepo_iconCarrier">
17
+ <title>angle-left</title>
18
+ <path
19
+ d="M7.28 23.28c-0.2 0-0.44-0.080-0.6-0.24l-6.44-6.44c-0.32-0.32-0.32-0.84 0-1.2l6.44-6.44c0.32-0.32 0.84-0.32 1.2 0 0.32 0.32 0.32 0.84 0 1.2l-5.8 5.84 5.84 5.84c0.32 0.32 0.32 0.84 0 1.2-0.16 0.16-0.44 0.24-0.64 0.24z">
20
+ </path>
21
+ </g>
22
+ </svg>
23
+ <div class="carousel">
24
+ <div class="carousel-inner">
25
+ {%- for item in dataToShow.infographics -%}
26
+ <div class="slide">
27
+ <img loading="lazy" src="{{ item.image }}" alt="img" draggable="false">
28
+ <p class="infographic-desc">{{ item.description | capitalize }}</p>
29
+ </div>
30
+ {% endfor %}
31
+ </div>
32
+ </div>
33
+ <svg id="right" fill="#000000" viewBox="-12 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
34
+ <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
35
+ <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
36
+ <g id="SVGRepo_iconCarrier">
37
+ <title>angle-right</title>
38
+ <path
39
+ d="M0.88 23.28c-0.2 0-0.44-0.080-0.6-0.24-0.32-0.32-0.32-0.84 0-1.2l5.76-5.84-5.8-5.84c-0.32-0.32-0.32-0.84 0-1.2 0.32-0.32 0.84-0.32 1.2 0l6.44 6.44c0.16 0.16 0.24 0.36 0.24 0.6s-0.080 0.44-0.24 0.6l-6.4 6.44c-0.2 0.16-0.4 0.24-0.6 0.24z">
40
+ </path>
41
+ </g>
42
+ </svg>
43
+ </div>
44
+ </div>
45
+
46
+ <script>
47
+ const carousel = document.querySelector(".carousel-inner"),
48
+ firstImg = carousel.querySelectorAll("img")[0],
49
+ arrowIcons = document.querySelectorAll(".wrapper svg")
50
+
51
+ const numImages = carousel.querySelectorAll("img").length;
52
+ const isMobile = window.matchMedia("(max-width: 767px)").matches; // Check if screen width is less than or equal to 767px
53
+
54
+ if (numImages > 3) {
55
+ arrowIcons[1].style.display = "block"
56
+ } else {
57
+ arrowIcons[0].style.display = "none";
58
+ arrowIcons[1].style.display = "none";
59
+ }
60
+
61
+ let isDragStart = false, isDragging = false, prevPageX, prevScrollLeft, positionDiff;
62
+ const showHideIcons = () => {
63
+ let scrollWidth = carousel.scrollWidth - carousel.clientWidth; // getting max scrollable width
64
+ arrowIcons[0].style.display = carousel.scrollLeft == 0 ? "none" : "block";
65
+ arrowIcons[1].style.display = carousel.scrollLeft == scrollWidth ? "none" : "block";
66
+ }
67
+
68
+ arrowIcons.forEach(icon => {
69
+ icon.addEventListener("click", () => {
70
+ let firstImgWidth = firstImg.clientWidth + 40;
71
+ const scrollAmount = icon.id === "left" ? -firstImgWidth : firstImgWidth;
72
+ carousel.scrollBy({
73
+ left: scrollAmount,
74
+ behavior: "smooth",
75
+ });
76
+ setTimeout(() => showHideIcons(), 60); // calling showHideIcons after 60ms
77
+ });
78
+ });
79
+
80
+ // const autoSlide = () => {
81
+ // // if there is no image left to scroll then return from here
82
+ // if (carousel.scrollLeft - (carousel.scrollWidth - carousel.clientWidth) > -1 || carousel.scrollLeft <= 0) return;
83
+
84
+ // positionDiff = Math.abs(positionDiff); // making positionDiff value to positive
85
+ // let firstImgWidth = firstImg.clientWidth + 14;
86
+ // // getting difference value that needs to add or reduce from carousel left to take middle img center
87
+ // let valDifference = firstImgWidth - positionDiff;
88
+
89
+ // if (carousel.scrollLeft > prevScrollLeft) { // if user is scrolling to the right
90
+ // return carousel.scrollLeft += positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff;
91
+ // }
92
+ // // if user is scrolling to the left
93
+ // carousel.scrollLeft -= positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff;
94
+ // }
95
+
96
+ // const dragStart = (e) => {
97
+ // // updatating global variables value on mouse down event
98
+ // isDragStart = true;
99
+ // prevPageX = e.pageX || e.touches[0].pageX;
100
+ // prevScrollLeft = carousel.scrollLeft;
101
+ // }
102
+
103
+ // const dragging = (e) => {
104
+ // // scrolling images/carousel to left according to mouse pointer
105
+ // if (!isDragStart) return;
106
+ // e.preventDefault();
107
+ // isDragging = true;
108
+ // carousel.classList.add("dragging");
109
+ // positionDiff = (e.pageX || e.touches[0].pageX) - prevPageX;
110
+ // carousel.scrollLeft = prevScrollLeft - positionDiff;
111
+ // showHideIcons();
112
+ // }
113
+
114
+ // const dragStop = () => {
115
+ // isDragStart = false;
116
+ // carousel.classList.remove("dragging");
117
+
118
+ // if (!isDragging) return;
119
+ // isDragging = false;
120
+ // autoSlide();
121
+ // }
122
+
123
+ // carousel.addEventListener("mousedown", dragStart);
124
+ // carousel.addEventListener("touchstart", dragStart);
125
+
126
+ // document.addEventListener("mousemove", dragging);
127
+ // carousel.addEventListener("touchmove", dragging);
128
+
129
+ // document.addEventListener("mouseup", dragStop);
130
+ // carousel.addEventListener("touchend", dragStop);
131
+ </script>
@@ -0,0 +1,44 @@
1
+
2
+ <!-- pagination -->
3
+ <div class="bottompagination">
4
+ <div class="pointerup"><i class="fa fa-caret-up"></i></div>
5
+ <span class="navigation" role="navigation"></span>
6
+ </div>
7
+ {% if paginator.total_pages > 1 %}
8
+ <div class="blog-pagination mt-5">
9
+ {% if paginator.previous_page %}
10
+ <a style="color: #00ab6b; font-weight: 900;"
11
+ href="{{ paginator.previous_page_path | prepend: site.baseurl | replace: '//', '/' }}">&laquo; Prev</a>
12
+ {% else %}
13
+ <span class="text-dark">
14
+ <svg width="14" height="24" viewBox="0 0 14 24" fill="none" xmlns="http://www.w3.org/2000/svg">
15
+ <path d="M0.937875 10.9393C0.352089 11.5251 0.352089 12.4749 0.937875 13.0607L10.4838 22.6066C11.0696 23.1924 12.0194 23.1924 12.6051 22.6066C13.1909 22.0208 13.1909 21.0711 12.6051 20.4853L4.11986 12L12.6051 3.51472C13.1909 2.92893 13.1909 1.97919 12.6051 1.3934C12.0194 0.807612 11.0696 0.807612 10.4838 1.3934L0.937875 10.9393ZM4.99854 10.5H1.99854L1.99854 13.5H4.99854L4.99854 10.5Z" fill="#1E1E1E"/>
16
+ </svg>
17
+ &nbsp; &nbsp; Prev</span>
18
+ {% endif %}
19
+
20
+ {% for page in (1..paginator.total_pages) %}
21
+ {% if page == paginator.page %}
22
+ <span class="webjeda text-dark">{{ page }}</span>
23
+ {% elsif page == 1 %}
24
+ <a href="/blog" style="color: #00ab6b; font-weight: 900;">{{ page }}</a>
25
+ {% else %}
26
+ <a style="color: #00ab6b; font-weight: 900;"
27
+ href="{{ site.paginate_path | prepend: site.baseurl | replace: '//', '/' | replace: ':num', page }}">{{ page
28
+ }}</a>
29
+ {% endif %}
30
+ {% endfor %}
31
+
32
+ {% if paginator.next_page %}
33
+ <a style="color:#00ab6b; font-weight: 900;"
34
+ href="{{ paginator.next_page_path | prepend: site.baseurl | replace: '//', '/' }}">Next
35
+ &nbsp; &nbsp;
36
+ <svg width="14" height="24" viewBox="0 0 14 24" fill="none" xmlns="http://www.w3.org/2000/svg">
37
+ <path d="M13.0607 13.0607C13.6464 12.4749 13.6464 11.5251 13.0607 10.9393L3.51472 1.3934C2.92893 0.807611 1.97919 0.807611 1.3934 1.3934C0.807612 1.97918 0.807612 2.92893 1.3934 3.51472L9.87868 12L1.3934 20.4853C0.807611 21.0711 0.807611 22.0208 1.3934 22.6066C1.97918 23.1924 2.92893 23.1924 3.51472 22.6066L13.0607 13.0607ZM9 13.5L12 13.5L12 10.5L9 10.5L9 13.5Z" fill="#1E1E1E"/>
38
+ </svg>
39
+ </a>
40
+ {% else %}
41
+ <span class="text-dark">Next &raquo;</span>
42
+ {% endif %}
43
+ </div>
44
+ {% endif %}
@@ -0,0 +1,24 @@
1
+ <div class="post-links">
2
+ <div class="bottompagination">
3
+ <div class="pointerup"><i class="fa fa-caret-up"></i></div>
4
+ <span class="navigation" role="navigation">
5
+ <div class="pagination">
6
+ {% if page.previous.url %}
7
+ <a class="ml-1 mr-5 pageUrl" href="{{page.previous.url}}">
8
+ <svg width="14" height="24" viewBox="0 0 14 24" fill="none" xmlns="http://www.w3.org/2000/svg">
9
+ <path d="M0.937875 10.9393C0.352089 11.5251 0.352089 12.4749 0.937875 13.0607L10.4838 22.6066C11.0696 23.1924 12.0194 23.1924 12.6051 22.6066C13.1909 22.0208 13.1909 21.0711 12.6051 20.4853L4.11986 12L12.6051 3.51472C13.1909 2.92893 13.1909 1.97919 12.6051 1.3934C12.0194 0.807612 11.0696 0.807612 10.4838 1.3934L0.937875 10.9393ZM4.99854 10.5H1.99854L1.99854 13.5H4.99854L4.99854 10.5Z" fill="#1E1E1E"/>
10
+ </svg>
11
+ &nbsp; &nbsp;
12
+ Prev</a>
13
+ {% endif %}
14
+ {% if page.next.url %}
15
+ <a class="ml-1 mr-1 pageUrl" href="{{page.next.url}}"> Next &nbsp; &nbsp;
16
+ <svg width="14" height="24" viewBox="0 0 14 24" fill="none" xmlns="http://www.w3.org/2000/svg">
17
+ <path d="M13.0607 13.0607C13.6464 12.4749 13.6464 11.5251 13.0607 10.9393L3.51472 1.3934C2.92893 0.807611 1.97919 0.807611 1.3934 1.3934C0.807612 1.97918 0.807612 2.92893 1.3934 3.51472L9.87868 12L1.3934 20.4853C0.807611 21.0711 0.807611 22.0208 1.3934 22.6066C1.97918 23.1924 2.92893 23.1924 3.51472 22.6066L13.0607 13.0607ZM9 13.5L12 13.5L12 10.5L9 10.5L9 13.5Z" fill="#1E1E1E"/>
18
+ </svg>
19
+ </a></a>
20
+ {% endif %}
21
+ </div>
22
+ </span>
23
+ </div>
24
+ </div>
@@ -0,0 +1,124 @@
1
+ {%- if page.tool -%}
2
+ {%- assign tool = page.tool -%}
3
+ {%- assign data = site.data.rating.rating.tools -%}
4
+ <div class="rating-tool">
5
+ <div class="container">
6
+ <div class="row text-center">
7
+ <div class="col-md-12">
8
+ <img id="rating-img" loading='lazy' src="/assets/images/rating.webp" alt="rating-img">
9
+ <div class="rating-text">Rate this tool</div>
10
+ <div class="rating-stars">
11
+
12
+
13
+ <svg class="rating-star" width="56" height="53" viewBox="0 0 56 53" fill="gray"
14
+ xmlns="http://www.w3.org/2000/svg">
15
+ <path
16
+ d="M30.8532 3.54509C29.9551 0.781158 26.0449 0.781146 25.1468 3.54508L20.538 17.7295C20.4042 18.1415 20.0202 18.4205 19.587 18.4205H4.67262C1.76645 18.4205 0.558112 22.1393 2.90926 23.8475L14.9752 32.614C15.3257 32.8686 15.4724 33.32 15.3385 33.732L10.7297 47.9164C9.83166 50.6803 12.9951 52.9787 15.3462 51.2705L27.4122 42.5041C27.7627 42.2494 28.2373 42.2494 28.5878 42.5041L40.6538 51.2705C43.0049 52.9787 46.1683 50.6803 45.2703 47.9164L40.6615 33.732C40.5276 33.32 40.6743 32.8686 41.0248 32.614L53.0907 23.8475C55.4419 22.1393 54.2336 18.4205 51.3274 18.4205H36.413C35.9798 18.4205 35.5958 18.1415 35.462 17.7295L30.8532 3.54509Z" />
17
+ </svg>
18
+ <svg class="rating-star" width="56" height="53" viewBox="0 0 56 53" fill="gray"
19
+ xmlns="http://www.w3.org/2000/svg">
20
+ <path
21
+ d="M30.8532 3.54509C29.9551 0.781158 26.0449 0.781146 25.1468 3.54508L20.538 17.7295C20.4042 18.1415 20.0202 18.4205 19.587 18.4205H4.67262C1.76645 18.4205 0.558112 22.1393 2.90926 23.8475L14.9752 32.614C15.3257 32.8686 15.4724 33.32 15.3385 33.732L10.7297 47.9164C9.83166 50.6803 12.9951 52.9787 15.3462 51.2705L27.4122 42.5041C27.7627 42.2494 28.2373 42.2494 28.5878 42.5041L40.6538 51.2705C43.0049 52.9787 46.1683 50.6803 45.2703 47.9164L40.6615 33.732C40.5276 33.32 40.6743 32.8686 41.0248 32.614L53.0907 23.8475C55.4419 22.1393 54.2336 18.4205 51.3274 18.4205H36.413C35.9798 18.4205 35.5958 18.1415 35.462 17.7295L30.8532 3.54509Z" />
22
+ </svg> <svg class="rating-star" width="56" height="53" viewBox="0 0 56 53" fill="gray"
23
+ xmlns="http://www.w3.org/2000/svg">
24
+ <path
25
+ d="M30.8532 3.54509C29.9551 0.781158 26.0449 0.781146 25.1468 3.54508L20.538 17.7295C20.4042 18.1415 20.0202 18.4205 19.587 18.4205H4.67262C1.76645 18.4205 0.558112 22.1393 2.90926 23.8475L14.9752 32.614C15.3257 32.8686 15.4724 33.32 15.3385 33.732L10.7297 47.9164C9.83166 50.6803 12.9951 52.9787 15.3462 51.2705L27.4122 42.5041C27.7627 42.2494 28.2373 42.2494 28.5878 42.5041L40.6538 51.2705C43.0049 52.9787 46.1683 50.6803 45.2703 47.9164L40.6615 33.732C40.5276 33.32 40.6743 32.8686 41.0248 32.614L53.0907 23.8475C55.4419 22.1393 54.2336 18.4205 51.3274 18.4205H36.413C35.9798 18.4205 35.5958 18.1415 35.462 17.7295L30.8532 3.54509Z" />
26
+ </svg> <svg class="rating-star" width="56" height="53" viewBox="0 0 56 53" fill="gray"
27
+ xmlns="http://www.w3.org/2000/svg">
28
+ <path
29
+ d="M30.8532 3.54509C29.9551 0.781158 26.0449 0.781146 25.1468 3.54508L20.538 17.7295C20.4042 18.1415 20.0202 18.4205 19.587 18.4205H4.67262C1.76645 18.4205 0.558112 22.1393 2.90926 23.8475L14.9752 32.614C15.3257 32.8686 15.4724 33.32 15.3385 33.732L10.7297 47.9164C9.83166 50.6803 12.9951 52.9787 15.3462 51.2705L27.4122 42.5041C27.7627 42.2494 28.2373 42.2494 28.5878 42.5041L40.6538 51.2705C43.0049 52.9787 46.1683 50.6803 45.2703 47.9164L40.6615 33.732C40.5276 33.32 40.6743 32.8686 41.0248 32.614L53.0907 23.8475C55.4419 22.1393 54.2336 18.4205 51.3274 18.4205H36.413C35.9798 18.4205 35.5958 18.1415 35.462 17.7295L30.8532 3.54509Z" />
30
+ </svg> <svg class="rating-star" width="56" height="53" viewBox="0 0 56 53" fill="gray"
31
+ xmlns="http://www.w3.org/2000/svg">
32
+ <path
33
+ d="M30.8532 3.54509C29.9551 0.781158 26.0449 0.781146 25.1468 3.54508L20.538 17.7295C20.4042 18.1415 20.0202 18.4205 19.587 18.4205H4.67262C1.76645 18.4205 0.558112 22.1393 2.90926 23.8475L14.9752 32.614C15.3257 32.8686 15.4724 33.32 15.3385 33.732L10.7297 47.9164C9.83166 50.6803 12.9951 52.9787 15.3462 51.2705L27.4122 42.5041C27.7627 42.2494 28.2373 42.2494 28.5878 42.5041L40.6538 51.2705C43.0049 52.9787 46.1683 50.6803 45.2703 47.9164L40.6615 33.732C40.5276 33.32 40.6743 32.8686 41.0248 32.614L53.0907 23.8475C55.4419 22.1393 54.2336 18.4205 51.3274 18.4205H36.413C35.9798 18.4205 35.5958 18.1415 35.462 17.7295L30.8532 3.54509Z" />
34
+ </svg>
35
+ <!-- <i class="bi bi-star-fill rating-star"></i>
36
+ <i class="bi bi-star-fill rating-star"></i>
37
+ <i class="bi bi-star-fill rating-star"></i>
38
+ <i class="bi bi-star-fill rating-star"></i>
39
+ <i class="bi bi-star-fill rating-star"></i> -->
40
+
41
+ </div>
42
+ <div class="rating-value mt-5 ml-2">
43
+ {%- for item in data -%}
44
+ {%- if item.name ==tool -%}
45
+ {%- assign rating = item.rating -%}
46
+ {%- assign votes = item.votes -%}
47
+ {%- endif -%}
48
+ {%- endfor -%}
49
+ <span class="rating"> <strong id='rating'>{{rating}}</strong><span>/5</span> </span>
50
+ &nbsp; <span class="total-ratings" id='count'>{{votes}} </span> votes
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <script>
58
+ const ratingValue = document.getElementById('rating')
59
+ const count = document.getElementById('count')
60
+ const setRating = async (rating) => {
61
+ const name = '{{site.name}}'
62
+ const tool = '{{page.tool}}'
63
+ const data = { website: name, feature: tool, rating: rating };
64
+ fetch('https://ratingapi-main.netlify.app/.netlify/functions/api/v1/rating/add', {
65
+ method: 'POST',
66
+ headers: {
67
+ 'Content-Type': 'application/json',
68
+ },
69
+ body: JSON.stringify(data),
70
+ })
71
+ .then(response => response.json())
72
+ .then(data => {
73
+ ratingValue.innerText = data.rating
74
+ count.innerText = data.count
75
+ })
76
+ .catch((error) => {
77
+ console.error('Error:', error);
78
+ });
79
+ }
80
+ const tool = '{{page.tool}}'
81
+ const fetchRating = async () => {
82
+
83
+ const data = await fetch(`https://ratingapi-main.netlify.app/.netlify/functions/api/v1/${tool}/rating`).then(res => res.json())
84
+ ratingValue.innerText = data.rating
85
+ count.innerText = data.votes
86
+ }
87
+ let ratingImg = document.querySelector('#rating-img');
88
+ ratingImg.addEventListener('load', (event) => {
89
+ fetchRating()
90
+ });
91
+ const ratingNode = document.getElementsByClassName('rating-star')
92
+ let ratedValue = localStorage.getItem(`${tool}rating`)
93
+ if (ratedValue) {
94
+ Array.from(ratingNode).slice(0, ratedValue).map(item => {
95
+ item.style.fill = '#FFB21D'
96
+ })
97
+ }
98
+
99
+ Array.from(ratingNode).map(item => item.addEventListener('click', () => {
100
+ console.log(item);
101
+ const tool = '{{page.tool}}'
102
+ if (!localStorage.getItem(`${tool}rating`)) {
103
+ function indexInClass(node) {
104
+ var className = node.className;
105
+ var num = 0;
106
+ for (var i = 0; i < ratingNode.length; i++) {
107
+ if (ratingNode[i] === node) {
108
+ return num;
109
+ }
110
+ num++;
111
+ }
112
+ return -1;
113
+ }
114
+ const index = indexInClass(item)
115
+ Array.from(ratingNode).slice(0, index + 1).map(item => {
116
+ item.style.fill = '#FFB21D'
117
+ })
118
+ setRating(index + 1)
119
+ localStorage.setItem(`${tool}rating`, index + 1)
120
+ }
121
+ }))
122
+ </script>
123
+
124
+ {%- endif -%}
@@ -0,0 +1,53 @@
1
+ {% assign dataArr = site.data.[page.folderName][lang][file] %}
2
+ {% assign dataToShow = dataArr %}
3
+ {% assign description = dataToShow.META | replace:"$variable", page.value | default: site.description %}
4
+ {%- assign tool = page.tool -%}
5
+ {%- assign data = site.data.rating.rating.tools -%}
6
+ {%- for item in data -%}
7
+ {%- if item.name ==tool -%}
8
+ {%- assign name = item.name -%}
9
+ {%- assign rating = item.rating -%}
10
+ {%- assign votes = item.votes -%}
11
+ {%- endif -%}
12
+ {%- endfor -%}
13
+ <script type="application/ld+json">
14
+ {
15
+ "@context": "http://schema.org",
16
+ "@type": "WebApplication",
17
+ "operatingSystem":"All - Windows/Mac/iOS/Linux/Android",
18
+ "applicationCategory":"UtilitiesApplication",
19
+ "name": "{{name}}",
20
+ "url":"{{site.url | append: page.url}}",
21
+ "image":"{{site.siteurl}}{{site.logo}}",
22
+ "aggregateRating": {
23
+ "@type": "AggregateRating",
24
+ "worstRating":"1",
25
+ "bestRating":"5",
26
+ "ratingValue":
27
+ {%- if rating -%}
28
+ {%- if rating=='NaN' -%}
29
+ "5"
30
+ {%- else -%}
31
+ "{{rating}}"
32
+ {%- endif -%}
33
+ {%- else -%}
34
+ "5"
35
+ {%- endif -%},
36
+ "ratingCount": {%- if votes -%}
37
+ {%- if votes== 0 -%}
38
+ "1"
39
+ {%- else -%}
40
+ "{{votes}}"
41
+ {%- endif -%}
42
+ {%- else -%}
43
+ "1"
44
+ {%- endif -%}
45
+
46
+ },
47
+ "offers": {
48
+ "@type": "Offer",
49
+ "price": "0.00",
50
+ "priceCurrency": "USD"
51
+ }
52
+ }
53
+ </script>
@@ -0,0 +1,104 @@
1
+ <div class="container">
2
+ <div class="relatedPosts">
3
+
4
+
5
+ <div class="row">
6
+ <div class="col-lg-4 p-0 col-md-6 my-3">
7
+ {%- if site.posts.size>0 -%}
8
+ <h2 class="related_post_heading">Recent Posts</h2>
9
+ {%- endif -%}
10
+ </div>
11
+ </div>
12
+
13
+
14
+
15
+
16
+ <div class="row">
17
+ {%- if site.ezoicAds -%}
18
+ <div class="col-md-9 mx-auto">
19
+ <div class="row">
20
+ {% assign posts = site.posts | where_exp:"post","post.url != page.url" %}
21
+ {% for post in posts limit: 6%}
22
+ {%- include /authors/authors.html -%}
23
+ <div class="col-md-6 mb-4 card-group">
24
+ <div class="card h-100">
25
+ <!-- <a href="{{ post.url }}">
26
+ <img src="{{ post.image }}" class="card-img-top" height="100%" width="100%"
27
+ loading="lazy" alt="{{post.title}}">
28
+ </a> -->
29
+ <div class="card-body">
30
+ <a href="{{ post.url }}" class="anchor_link">
31
+ <h4 class="card-title mb-4">{{ post.title }}
32
+ </h4>
33
+ <p class="post-desc"> {{post.description}}</p>
34
+ </a>
35
+ </div>
36
+ <div class="card-footer bg-white">
37
+ <div class="wrapfooter">
38
+ {% if post.author %}
39
+ <span class="meta-footer-thumb">
40
+ <img class="author-thumb" loading="lazy" height="35px" width="35px"
41
+ src="{{image}}" alt="{{ authorName }}">
42
+ </span>
43
+ {% endif %}
44
+ <span class="author-meta">
45
+ <span class="post-name">
46
+ <a target="_blank" href="/blog">{{authorName}}</a>
47
+ </span><br>
48
+ <span class="post-date">{{post.date | date_to_string }}</span>
49
+ </span>
50
+ <!-- <p class="post-read-more">
51
+ <a class="text-dark" href="{{ post.url }}"
52
+ aria-label="Read more about blog post">Read</a>
53
+ </p> -->
54
+ </div>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ {% endfor %}
59
+ </div>
60
+ </div>
61
+ {%- else -%}
62
+ {% assign posts = site.posts | where_exp:"post","post.url != page.url" %}
63
+ {% for post in posts limit: 6%}
64
+ {%- include /authors/authors.html -%}
65
+ <div class="col-lg-4 col-md-6 mb-5 card-group">
66
+ <div class="recent-post-card card h-100">
67
+ <!-- <a href="{{ post.url }}">
68
+ <img src="{{ post.image }}" class="card-img-top" height="100%" width="100%" loading="lazy"
69
+ alt="{{post.title}}">
70
+ </a> -->
71
+ <div class="card-body">
72
+ <a href="{{ post.url }}" class="anchor_link">
73
+ <h4 class="card-title mb-4">{{ post.title }}
74
+ </h4>
75
+ <p class="post-desc"> {{post.description}}</p>
76
+ </a>
77
+ </div>
78
+ <div class="card-footer bg-white">
79
+ <div class="wrapfooter">
80
+ {% if post.author %}
81
+ <span class="meta-footer-thumb">
82
+ <img class="author-thumb" loading="lazy" height="35px" width="35px" src="{{image}}"
83
+ alt="{{ authorName }}">
84
+ </span>
85
+ {% endif %}
86
+ <span class="author-meta">
87
+ <span class="post-name">
88
+ <a target="_blank" href="/blog">{{authorName}}</a>
89
+ </span><br>
90
+ <span class="post-date">{{post.date | date_to_string }}</span>
91
+ </span>
92
+ <!-- <p class="post-read-more">
93
+ <a class="text-dark" href="{{ post.url }}"
94
+ aria-label="Read more about blog post">Read</a>
95
+ </p> -->
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
100
+ {% endfor %}
101
+ {%- endif -%}
102
+ </div>
103
+ </div>
104
+ </div>