appscms-tools-theme 4.9.7 → 4.9.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_data/.DS_Store +0 -0
- data/_data/feature/.DS_Store +0 -0
- data/_data/feature/en/compress-pdf.json +17 -2
- data/_data/footer/.DS_Store +0 -0
- data/_data/header/hi/data.json +2 -2
- data/_data/home/.DS_Store +0 -0
- data/_data/home/de/da.json +0 -0
- data/_data/home/de/de.json +0 -0
- data/_data/review/trustpilot.json +28 -29
- data/_includes/.DS_Store +0 -0
- data/_includes/Atest.html +248 -0
- data/_includes/appscms/.DS_Store +0 -0
- data/_includes/appscms/customblog/pageRelatedPosts.html +29 -19
- data/_includes/appscms/featurePageAuthors/featurePageAuthors.html +2 -1
- data/_includes/appscms/footer/footer.html +380 -255
- data/_includes/appscms/head/head.html +18 -18
- data/_includes/appscms/navbars/navbar.html +1 -1
- data/_includes/appscms/navbars/toolbar.html +1 -1
- data/_includes/authors/authors.html +1 -0
- data/assets/.DS_Store +0 -0
- data/assets/images/lakshmi.svg +1 -0
- data/assets/js/appscms-search.js +120 -125
- data/assets/js/appscms-theme.js +241 -74
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77077be30078f5cdcdf699ae245f6b31e0d5e14f94dbd34562b631de11ae83aa
|
4
|
+
data.tar.gz: 31134090f09b375a8d3f4eda101587b712a62be08d9b22d4e8229e307e00ce04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65c68aca35073b283a7e0322750fe2a43f0ab092eb053ee404a08aa3c0a9394d697e350795c410269f90bf899915e49016125f145c8965dfa1eb5d727fc80f8f
|
7
|
+
data.tar.gz: ab56cdf2130296edd4d85c4b635d18e8d63a25319ec2bdf0d2690321a82b2c6e816aca07eb99e1fbb630922a9d1dbac9e5bdc76b83252ba8f91a0d2368169622
|
data/_data/.DS_Store
CHANGED
Binary file
|
data/_data/feature/.DS_Store
CHANGED
Binary file
|
@@ -60,7 +60,16 @@
|
|
60
60
|
"content": "Setalarmforme.com is a cloud and web based application. You do not need to install any software to use Setalarmforme.com while setting alarms for $variable minutes from now."
|
61
61
|
}
|
62
62
|
],
|
63
|
-
|
63
|
+
"HOW_TO_CONTENT": {
|
64
|
+
"logoImageUrl": "/assets/pdf.svg",
|
65
|
+
"heading": "How to set alarm for \"Preview\" minutes:",
|
66
|
+
"steps": [
|
67
|
+
"Click on set alarm \"Preview\" ",
|
68
|
+
"Set $variable minutes for alarm.",
|
69
|
+
"Choose sound of your choice.",
|
70
|
+
"Click submit to set alarm, that's it !."
|
71
|
+
]
|
72
|
+
},
|
64
73
|
"FAQ": [
|
65
74
|
{
|
66
75
|
"question": "How many seconds from now, will the alarm ring ?",
|
@@ -201,7 +210,7 @@
|
|
201
210
|
"USP_FACTOR": "USP_FACTOR"
|
202
211
|
}
|
203
212
|
],
|
204
|
-
"author": "
|
213
|
+
"author": "lakshmi",
|
205
214
|
"contributors": [
|
206
215
|
{
|
207
216
|
"name": "Debosmita Bedajna"
|
@@ -211,6 +220,12 @@
|
|
211
220
|
},
|
212
221
|
{
|
213
222
|
"name": "RK Shree"
|
223
|
+
},
|
224
|
+
{
|
225
|
+
"name": "Bandana"
|
226
|
+
},
|
227
|
+
{
|
228
|
+
"name": "Manpreet Singh"
|
214
229
|
}
|
215
230
|
]
|
216
231
|
}
|
Binary file
|
data/_data/header/hi/data.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
2
|
+
"navbarBrandText": "",
|
3
|
+
"navbarBrandLogoSvg": "<svg height='40' width='180' xmlns:x='http://ns.adobe.com/Extensibility/1.0/' xmlns:i='http://ns.adobe.com/AdobeIllustrator/10.0/' xmlns:graph='http://ns.adobe.com/Graphs/1.0/' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1' x='0px' y='0px' viewBox='0 0 250 50' style='enable-background:new 0 0 250 50;' xml:space='preserve'><style type='text/css'>.st0{fill:#1C0DC8;}.st1{clip-path:url(#SVGID_1_);fill:url(#SVGID_2_);}.st2{fill:#FFFFFF;}</style><metadata><sfw xmlns='http://ns.adobe.com/SaveForWeb/1.0/'><slices></slices><slicesourcebounds bottomleftorigin='true' height='46.5' width='216' x='1.4' y='-48.2'></slicesourcebounds></sfw></metadata><g><g><path class='st0' d='M55.6,33.2c-1-0.4-1.8-1-2.3-1.8s-0.9-1.7-0.9-2.8h4.4c0.1,0.6,0.3,1.1,0.6,1.4c0.4,0.3,0.8,0.5,1.4,0.5 c0.6,0,1.1-0.1,1.4-0.4c0.4-0.3,0.5-0.7,0.5-1.2c0-0.4-0.1-0.8-0.4-1c-0.3-0.3-0.6-0.5-1-0.7c-0.4-0.2-1-0.4-1.7-0.6 c-1.1-0.3-2-0.7-2.7-1c-0.7-0.3-1.3-0.8-1.8-1.5c-0.5-0.7-0.7-1.5-0.7-2.6c0-1.6,0.6-2.8,1.7-3.7c1.1-0.9,2.6-1.3,4.4-1.3 c1.9,0,3.4,0.4,4.5,1.3c1.1,0.9,1.7,2.1,1.8,3.7h-4.4c0-0.5-0.2-1-0.6-1.3s-0.8-0.5-1.4-0.5c-0.5,0-0.9,0.1-1.2,0.4 c-0.3,0.3-0.5,0.6-0.5,1.1c0,0.5,0.3,1,0.8,1.3c0.5,0.3,1.3,0.6,2.4,1c1.1,0.4,2,0.7,2.7,1.1s1.3,0.8,1.8,1.5 c0.5,0.6,0.7,1.5,0.7,2.5c0,1-0.2,1.8-0.7,2.6c-0.5,0.8-1.2,1.4-2.1,1.9s-2,0.7-3.3,0.7C57.7,33.8,56.6,33.6,55.6,33.2z'></path><path class='st0' d='M67.5,23.3c0.5-1,1.2-1.8,2.1-2.4c0.9-0.6,1.9-0.8,3-0.8c0.9,0,1.8,0.2,2.5,0.6c0.7,0.4,1.3,0.9,1.6,1.5v-1.9 h4.1v13.4h-4.1v-1.9c-0.4,0.6-1,1.1-1.7,1.5c-0.7,0.4-1.5,0.6-2.5,0.6c-1.1,0-2.1-0.3-3-0.9c-0.9-0.6-1.6-1.4-2.1-2.4 c-0.5-1-0.8-2.3-0.8-3.6C66.8,25.6,67,24.4,67.5,23.3z M75.9,24.6c-0.6-0.6-1.3-0.9-2.1-0.9c-0.8,0-1.5,0.3-2.1,0.9 c-0.6,0.6-0.9,1.4-0.9,2.4c0,1,0.3,1.8,0.9,2.4c0.6,0.6,1.3,0.9,2.1,0.9c0.8,0,1.5-0.3,2.1-0.9c0.6-0.6,0.9-1.4,0.9-2.4 C76.8,26,76.5,25.1,75.9,24.6z'></path><path class='st0' d='M90.6,23.7h-2.2v10h-4.1v-10h-1.5v-3.4h1.5v-0.4c0-1.6,0.5-2.9,1.4-3.8c0.9-0.9,2.3-1.3,4.2-1.3 c0.3,0,0.5,0,0.7,0v3.5c-0.8,0-1.3,0.1-1.7,0.3c-0.3,0.3-0.5,0.8-0.5,1.5v0.1h2.2V23.7z'></path><path class='st0' d='M105.1,28h-9.3c0.1,0.8,0.3,1.5,0.8,1.9c0.5,0.4,1.1,0.7,1.7,0.7c1,0,1.7-0.4,2.1-1.3h4.4 c-0.2,0.9-0.6,1.7-1.2,2.4s-1.3,1.3-2.2,1.7c-0.9,0.4-1.9,0.6-3,0.6c-1.3,0-2.5-0.3-3.5-0.8c-1-0.6-1.8-1.4-2.4-2.4 s-0.9-2.3-0.9-3.6c0-1.4,0.3-2.6,0.9-3.6c0.6-1,1.4-1.8,2.4-2.4c1-0.6,2.2-0.8,3.5-0.8c1.3,0,2.4,0.3,3.5,0.8 c1,0.5,1.8,1.3,2.4,2.3c0.6,1,0.9,2.2,0.9,3.5C105.1,27.1,105.1,27.5,105.1,28z M100.9,25.7c0-0.7-0.2-1.3-0.7-1.7 c-0.5-0.4-1.1-0.6-1.8-0.6c-0.7,0-1.3,0.2-1.7,0.6c-0.5,0.4-0.8,1-0.9,1.7H100.9z'></path><path class='st0' d='M111.4,16.8v16.8h-4.1V16.8H111.4z'></path><path class='st0' d='M135.4,21.7c1,1,1.5,2.4,1.5,4.2v7.8h-4.1v-7.3c0-0.9-0.2-1.5-0.7-2c-0.5-0.5-1.1-0.7-1.9-0.7 s-1.4,0.2-1.9,0.7c-0.5,0.5-0.7,1.1-0.7,2v7.3h-4.1v-7.3c0-0.9-0.2-1.5-0.7-2c-0.5-0.5-1.1-0.7-1.9-0.7c-0.8,0-1.4,0.2-1.9,0.7 c-0.5,0.5-0.7,1.1-0.7,2v7.3h-4.1V20.3h4.1V22c0.4-0.6,1-1,1.6-1.3c0.7-0.3,1.4-0.5,2.3-0.5c1,0,1.9,0.2,2.7,0.6 c0.8,0.4,1.4,1,1.9,1.8c0.5-0.7,1.1-1.3,1.9-1.8s1.7-0.7,2.6-0.7C133.1,20.1,134.5,20.6,135.4,21.7z'></path><path class='st0' d='M139.8,23.3c0.5-1,1.2-1.8,2.1-2.4c0.9-0.6,1.9-0.8,3-0.8c0.9,0,1.8,0.2,2.5,0.6c0.7,0.4,1.3,0.9,1.6,1.5 v-1.9h4.1v13.4H149v-1.9c-0.4,0.6-1,1.1-1.7,1.5c-0.7,0.4-1.5,0.6-2.5,0.6c-1.1,0-2.1-0.3-3-0.9c-0.9-0.6-1.6-1.4-2.1-2.4 c-0.5-1-0.8-2.3-0.8-3.6C139,25.6,139.2,24.4,139.8,23.3z M148.2,24.6c-0.6-0.6-1.3-0.9-2.1-0.9c-0.8,0-1.5,0.3-2.1,0.9 c-0.6,0.6-0.9,1.4-0.9,2.4c0,1,0.3,1.8,0.9,2.4c0.6,0.6,1.3,0.9,2.1,0.9c0.8,0,1.5-0.3,2.1-0.9c0.6-0.6,0.9-1.4,0.9-2.4 C149,26,148.7,25.1,148.2,24.6z'></path><path class='st0' d='M163.7,20.7c0.7,0.4,1.3,0.9,1.6,1.5v-1.9h4.1v13.4c0,1.2-0.2,2.3-0.7,3.3c-0.5,1-1.2,1.8-2.2,2.4 s-2.2,0.9-3.7,0.9c-2,0-3.6-0.5-4.8-1.4c-1.2-0.9-1.9-2.2-2.1-3.8h4.1c0.1,0.5,0.4,0.9,0.9,1.2c0.5,0.3,1.1,0.4,1.8,0.4 c0.8,0,1.5-0.2,2-0.7s0.8-1.3,0.8-2.3v-1.9c-0.4,0.6-1,1.1-1.7,1.5c-0.7,0.4-1.5,0.6-2.5,0.6c-1.1,0-2.1-0.3-3-0.9 c-0.9-0.6-1.6-1.4-2.1-2.4c-0.5-1-0.8-2.3-0.8-3.6c0-1.4,0.3-2.6,0.8-3.6c0.5-1,1.2-1.8,2.1-2.4c0.9-0.6,1.9-0.8,3-0.8 C162.1,20.1,162.9,20.3,163.7,20.7z M164.5,24.6c-0.6-0.6-1.3-0.9-2.1-0.9c-0.8,0-1.5,0.3-2.1,0.9c-0.6,0.6-0.9,1.4-0.9,2.4 c0,1,0.3,1.8,0.9,2.4c0.6,0.6,1.3,0.9,2.1,0.9c0.8,0,1.5-0.3,2.1-0.9c0.6-0.6,0.9-1.4,0.9-2.4C165.3,26,165,25.1,164.5,24.6z'></path><path class='st0' d='M184.9,28h-9.3c0.1,0.8,0.3,1.5,0.8,1.9c0.5,0.4,1.1,0.7,1.7,0.7c1,0,1.7-0.4,2.1-1.3h4.4 c-0.2,0.9-0.6,1.7-1.2,2.4s-1.3,1.3-2.2,1.7c-0.9,0.4-1.9,0.6-3,0.6c-1.3,0-2.5-0.3-3.5-0.8c-1-0.6-1.8-1.4-2.4-2.4 s-0.9-2.3-0.9-3.6c0-1.4,0.3-2.6,0.9-3.6c0.6-1,1.4-1.8,2.4-2.4c1-0.6,2.2-0.8,3.5-0.8c1.3,0,2.4,0.3,3.5,0.8 c1,0.5,1.8,1.3,2.4,2.3c0.6,1,0.9,2.2,0.9,3.5C185,27.1,185,27.5,184.9,28z M180.8,25.7c0-0.7-0.2-1.3-0.7-1.7 c-0.5-0.4-1.1-0.6-1.8-0.6c-0.7,0-1.3,0.2-1.7,0.6c-0.5,0.4-0.8,1-0.9,1.7H180.8z'></path><path class='st0' d='M195.3,33.7l-4.1-5.6v5.6h-4.1V15.9h4.1v9.8l4.1-5.4h5.1l-5.6,6.7l5.6,6.7H195.3z'></path><path class='st0' d='M202.3,18.3c-0.5-0.4-0.7-0.9-0.7-1.6c0-0.6,0.2-1.2,0.7-1.6s1-0.6,1.8-0.6c0.7,0,1.3,0.2,1.7,0.6 s0.7,1,0.7,1.6c0,0.6-0.2,1.1-0.7,1.6s-1,0.6-1.7,0.6C203.3,18.9,202.8,18.7,202.3,18.3z M206.1,20.3v13.4H202V20.3H206.1z'></path><path class='st0' d='M216.5,30.2v3.5h-2.1c-1.5,0-2.6-0.4-3.5-1.1c-0.8-0.7-1.2-1.9-1.2-3.6v-5.3h-1.6v-3.4h1.6V17h4.1v3.3h2.7 v3.4h-2.7v5.4c0,0.4,0.1,0.7,0.3,0.9c0.2,0.2,0.5,0.3,1,0.3H216.5z'></path></g><g><g><defs><path id='SVGID_4_' d='M8.3,10.3c-0.8,1.1-0.8,4.6-0.8,11.4v3.4c0,12,9.1,17.9,14.8,20.4c1.5,0.7,2.3,1,4.5,1s2.9-0.4,4.5-1 C36.9,43,46,37.2,46,25.1v-3.4c0-6.8,0-10.3-0.8-11.4c-0.8-1.1-4-2.2-10.4-4.4l-1.2-0.4c-3.4-1.1-5-1.7-6.7-1.7 c-1.7,0-3.4,0.5-6.7,1.7l-1.2,0.4C12.3,8,9.2,9.2,8.3,10.3z'></path></defs><clipPath id='SVGID_1_'><use xlink:href='#SVGID_4_' style='overflow:visible;'></use></clipPath><linearGradient id='SVGID_2_' gradientUnits='userSpaceOnUse' x1='4.2901' y1='45.9056' x2='40.5632' y2='14.204' gradientTransform='matrix(1 0 0 -1 0 52)'><stop offset='0' style='stop-color:#4F00E8'></stop><stop offset='0.2561' style='stop-color:#4B01E6'></stop><stop offset='0.489' style='stop-color:#4003E1'></stop><stop offset='0.7129' style='stop-color:#2E06D9'></stop><stop offset='0.9299' style='stop-color:#140BCD'></stop><stop offset='1' style='stop-color:#0A0DC8'></stop></linearGradient><rect x='1.4' y='1.7' class='st1' width='48.2' height='45.7'></rect></g></g><g><path class='st2' d='M24.6,17c-0.5-0.5-0.8-1.1-0.8-1.9s0.3-1.4,0.8-1.9c0.5-0.5,1.2-0.8,2.1-0.8c0.9,0,1.6,0.3,2.1,0.8 c0.4,0.4,0.8,1,0.8,1.7c0.1,0.9-0.3,1.8-1,2.3c-0.5,0.4-1.2,0.7-2,0.7C25.9,17.8,25.1,17.5,24.6,17z M29.2,20.2v14.9 c0,0.4-0.3,0.6-0.6,0.6h-3.7c-0.4,0-0.6-0.3-0.6-0.6V20.2c0-0.4,0.3-0.6,0.6-0.6h3.7C28.9,19.5,29.2,19.8,29.2,20.2z'></path></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>",
|
4
4
|
"megaMenu": {
|
5
5
|
"nav-link-name": "Tools",
|
6
6
|
"dropdown": [{
|
Binary file
|
File without changes
|
File without changes
|
@@ -1,30 +1,29 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
2
|
+
"reviews": [
|
3
|
+
{
|
4
|
+
"name": "Alice Johnson",
|
5
|
+
"title": "Excellent Image Editing Tool",
|
6
|
+
"review": "Safeimagekit is a lifesaver for quick and secure image editing. Love the variety of tools!"
|
7
|
+
},
|
8
|
+
{
|
9
|
+
"name": "Michael Lee",
|
10
|
+
"title": "Very Easy to Use",
|
11
|
+
"review": "Super simple to resize and adjust images. No need to download anything; works seamlessly online!"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"name": "Sophia Martinez",
|
15
|
+
"title": "Great for Quick Edits",
|
16
|
+
"review": "Perfect for quick edits without compromising privacy. Highly recommend Safeimagekit."
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"name": "David Kim",
|
20
|
+
"title": "Fast and Reliable",
|
21
|
+
"review": "Impressed by the speed and reliability of Safeimagekit. Great for editing on the go without extra downloads."
|
22
|
+
}
|
23
|
+
],
|
24
|
+
"title": "Over 5 Million Users Enjoy Using Our Applications monthly.",
|
25
|
+
"description": "Join a thriving community of creators who rely on our safeimagekit.com Tools.",
|
26
|
+
"rated": 4.1,
|
27
|
+
"numberOfReviews": "320",
|
28
|
+
"trustpilotReviewLink": "https://www.trustpilot.com/review/safeaudiokit.com"
|
29
|
+
}
|
data/_includes/.DS_Store
CHANGED
Binary file
|
@@ -0,0 +1,248 @@
|
|
1
|
+
<script src="https://d3js.org/d3.v4.min.js"></script>
|
2
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/venn.js/0.2.20/venn.min.js"></script>
|
3
|
+
<style>
|
4
|
+
#venn {
|
5
|
+
margin: 20px auto;
|
6
|
+
width: 800px;
|
7
|
+
height: 600px;
|
8
|
+
}
|
9
|
+
|
10
|
+
.controls {
|
11
|
+
margin-bottom: 20px;
|
12
|
+
}
|
13
|
+
|
14
|
+
canvas {
|
15
|
+
display: none;
|
16
|
+
}
|
17
|
+
</style>
|
18
|
+
<div class="controls">
|
19
|
+
<label for="setCount">Number of sets:</label>
|
20
|
+
<select id="setCount" onchange="updateControls()">
|
21
|
+
<option value="2" selected>2</option>
|
22
|
+
<option value="3">3</option>
|
23
|
+
<option value="4">4</option>
|
24
|
+
<option value="5">5</option>
|
25
|
+
<option value="6">6</option>
|
26
|
+
<option value="7">7</option>
|
27
|
+
<option value="8">8</option>
|
28
|
+
</select>
|
29
|
+
|
30
|
+
<div id="setInputs"></div>
|
31
|
+
|
32
|
+
<label for="transparency">Transparency (0 to 1):</label>
|
33
|
+
<input type="number" id="transparency" value="0.4" step="0.1" min="0" max="1">
|
34
|
+
|
35
|
+
<label for="fontColor">Font Color:</label>
|
36
|
+
<input type="color" id="fontColor" value="#000000">
|
37
|
+
|
38
|
+
<button onclick="updateVenn()">Update Venn Diagram</button>
|
39
|
+
<button onclick="downloadVenn('png')">Download PNG</button>
|
40
|
+
<button onclick="downloadVenn('jpg')">Download JPG</button>
|
41
|
+
</div>
|
42
|
+
|
43
|
+
<div id="venn"></div>
|
44
|
+
|
45
|
+
<canvas id="canvas"></canvas>
|
46
|
+
<script>
|
47
|
+
let sets = [
|
48
|
+
{ sets: ['A'], size: 12 },
|
49
|
+
{ sets: ['B'], size: 12 },
|
50
|
+
{ sets: ['A', 'B'], size: 2 }
|
51
|
+
];
|
52
|
+
|
53
|
+
// Render the initial Venn diagram
|
54
|
+
const chart = venn.VennDiagram();
|
55
|
+
const div = d3.select("#venn").datum(sets).call(chart);
|
56
|
+
|
57
|
+
function updateControls() {
|
58
|
+
const setCount = parseInt(document.getElementById("setCount").value, 10);
|
59
|
+
const setInputs = document.getElementById("setInputs");
|
60
|
+
|
61
|
+
// Reset inputs
|
62
|
+
setInputs.innerHTML = '';
|
63
|
+
|
64
|
+
// Add inputs for individual set sizes
|
65
|
+
for (let i = 0; i < setCount; i++) {
|
66
|
+
const setLabel = String.fromCharCode(65 + i); // A, B, C, etc.
|
67
|
+
setInputs.innerHTML += `
|
68
|
+
<div>
|
69
|
+
<label for="set${setLabel}">Set ${setLabel} size:</label>
|
70
|
+
<input type="number" id="set${setLabel}" value="12">
|
71
|
+
</div>`;
|
72
|
+
}
|
73
|
+
|
74
|
+
// Add input for intersections if applicable
|
75
|
+
if (setCount > 1) {
|
76
|
+
setInputs.innerHTML += `
|
77
|
+
<div>
|
78
|
+
<label for="intersections">Intersection sizes (comma-separated):</label>
|
79
|
+
<input type="text" id="intersections" placeholder="e.g., 20,15,10">
|
80
|
+
</div>`;
|
81
|
+
}
|
82
|
+
|
83
|
+
// If 4 sets are selected, set default values
|
84
|
+
if (setCount === 4) {
|
85
|
+
document.getElementById("setA").value = 12;
|
86
|
+
document.getElementById("setB").value = 12;
|
87
|
+
document.getElementById("setC").value = 12;
|
88
|
+
document.getElementById("setD").value = 12;
|
89
|
+
document.getElementById("intersections").value = "2,2,2,1,2,2,3,3,3,3";
|
90
|
+
}
|
91
|
+
|
92
|
+
if (setCount === 5) {
|
93
|
+
document.getElementById("setA").value = 20;
|
94
|
+
document.getElementById("setB").value = 20;
|
95
|
+
document.getElementById("setC").value = 20;
|
96
|
+
document.getElementById("setD").value = 20;
|
97
|
+
document.getElementById("setE").value = 20;
|
98
|
+
document.getElementById("intersections").value = "5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1";
|
99
|
+
}
|
100
|
+
if (setCount === 6) {
|
101
|
+
document.getElementById("setA").value = 20;
|
102
|
+
document.getElementById("setB").value = 20;
|
103
|
+
document.getElementById("setC").value = 20;
|
104
|
+
document.getElementById("setD").value = 20;
|
105
|
+
document.getElementById("setE").value = 20;
|
106
|
+
document.getElementById("setF").value = 20;
|
107
|
+
|
108
|
+
// Set intersection values as specified
|
109
|
+
document.getElementById("intersections").value = "5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1";
|
110
|
+
}
|
111
|
+
if (setCount === 7) {
|
112
|
+
document.getElementById("setA").value = 20;
|
113
|
+
document.getElementById("setB").value = 20;
|
114
|
+
document.getElementById("setC").value = 20;
|
115
|
+
document.getElementById("setD").value = 20;
|
116
|
+
document.getElementById("setE").value = 20;
|
117
|
+
document.getElementById("setF").value = 20;
|
118
|
+
document.getElementById("setG").value = 20;
|
119
|
+
|
120
|
+
document.getElementById("intersections").value =
|
121
|
+
"7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2";
|
122
|
+
}
|
123
|
+
if (setCount === 8) {
|
124
|
+
document.getElementById("setA").value = 20;
|
125
|
+
document.getElementById("setB").value = 20;
|
126
|
+
document.getElementById("setC").value = 20;
|
127
|
+
document.getElementById("setD").value = 20;
|
128
|
+
document.getElementById("setE").value = 20;
|
129
|
+
document.getElementById("setF").value = 20;
|
130
|
+
document.getElementById("setG").value = 20;
|
131
|
+
document.getElementById("setH").value = 20;
|
132
|
+
|
133
|
+
document.getElementById("intersections").value =
|
134
|
+
"8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2";
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
function updateVenn() {
|
139
|
+
const setCount = parseInt(document.getElementById("setCount").value, 10);
|
140
|
+
const transparency = parseFloat(document.getElementById("transparency").value);
|
141
|
+
const fontColor = document.getElementById("fontColor").value;
|
142
|
+
const updatedSets = [];
|
143
|
+
|
144
|
+
// Add individual sets
|
145
|
+
for (let i = 0; i < setCount; i++) {
|
146
|
+
const setLabel = String.fromCharCode(65 + i); // A, B, C, etc.
|
147
|
+
const setSize = parseInt(document.getElementById(`set${setLabel}`).value || "12", 10);
|
148
|
+
updatedSets.push({ sets: [setLabel], size: setSize });
|
149
|
+
}
|
150
|
+
|
151
|
+
// Add intersections based on the set count
|
152
|
+
if (setCount > 1) {
|
153
|
+
const intersectionInput = document.getElementById("intersections");
|
154
|
+
if (intersectionInput && intersectionInput.value.trim() !== '') {
|
155
|
+
const intersectionSizes = intersectionInput.value.split(',').map(Number);
|
156
|
+
let index = 0;
|
157
|
+
|
158
|
+
// Generate all combinations of sets for intersections
|
159
|
+
for (let i = 2; i <= setCount; i++) { // Only generate combinations of size >= 2
|
160
|
+
const combinations = getCombinations(
|
161
|
+
Array.from({ length: setCount }, (_, k) => String.fromCharCode(65 + k)),
|
162
|
+
i
|
163
|
+
);
|
164
|
+
combinations.forEach(combo => {
|
165
|
+
if (index < intersectionSizes.length) {
|
166
|
+
updatedSets.push({ sets: combo, size: intersectionSizes[index++] });
|
167
|
+
}
|
168
|
+
});
|
169
|
+
}
|
170
|
+
} else {
|
171
|
+
// Default pairwise intersections if no input is provided
|
172
|
+
for (let i = 0; i < setCount - 1; i++) {
|
173
|
+
for (let j = i + 1; j < setCount; j++) {
|
174
|
+
const setA = String.fromCharCode(65 + i);
|
175
|
+
const setB = String.fromCharCode(65 + j);
|
176
|
+
updatedSets.push({ sets: [setA, setB], size: 2 }); // Default size for pairwise intersections
|
177
|
+
}
|
178
|
+
}
|
179
|
+
}
|
180
|
+
}
|
181
|
+
|
182
|
+
sets = updatedSets;
|
183
|
+
d3.select("#venn").datum(sets).call(chart);
|
184
|
+
|
185
|
+
// Update transparency and font color
|
186
|
+
d3.selectAll(".venn-circle path").style("fill-opacity", transparency);
|
187
|
+
d3.selectAll(".venn-circle text").style("fill", fontColor);
|
188
|
+
}
|
189
|
+
|
190
|
+
// Helper function to generate combinations
|
191
|
+
function getCombinations(array, size) {
|
192
|
+
function combine(input, length, start, result) {
|
193
|
+
if (length === 0) return [result];
|
194
|
+
const combinations = [];
|
195
|
+
for (let i = start; i <= input.length - length; i++) {
|
196
|
+
combinations.push(...combine(input, length - 1, i + 1, result.concat(input[i])));
|
197
|
+
}
|
198
|
+
return combinations;
|
199
|
+
}
|
200
|
+
return combine(array, size, 0, []);
|
201
|
+
}
|
202
|
+
|
203
|
+
function downloadVenn(format) {
|
204
|
+
const svg = document.querySelector("#venn svg");
|
205
|
+
const canvas = document.getElementById("canvas");
|
206
|
+
const ctx = canvas.getContext("2d");
|
207
|
+
const serializer = new XMLSerializer();
|
208
|
+
const svgString = serializer.serializeToString(svg);
|
209
|
+
const img = new Image();
|
210
|
+
|
211
|
+
const svgBlob = new Blob([svgString], { type: "image/svg+xml;charset=utf-8" });
|
212
|
+
const url = URL.createObjectURL(svgBlob);
|
213
|
+
|
214
|
+
img.onload = function () {
|
215
|
+
canvas.width = svg.getBoundingClientRect().width;
|
216
|
+
canvas.height = svg.getBoundingClientRect().height;
|
217
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
218
|
+
ctx.drawImage(img, 0, 0);
|
219
|
+
URL.revokeObjectURL(url);
|
220
|
+
|
221
|
+
const link = document.createElement("a");
|
222
|
+
link.download = `venn-diagram.${format}`;
|
223
|
+
link.href = canvas.toDataURL(`image/${format}`);
|
224
|
+
link.click();
|
225
|
+
};
|
226
|
+
|
227
|
+
img.src = url;
|
228
|
+
}
|
229
|
+
|
230
|
+
// Add tooltips
|
231
|
+
div.selectAll(".venn-circle")
|
232
|
+
.on("mouseover", function (d) {
|
233
|
+
d3.select(this).select("path").style("fill-opacity", 0.6);
|
234
|
+
const tooltip = d3.select("body").append("div").attr("class", "tooltip")
|
235
|
+
.style("position", "absolute")
|
236
|
+
.style("background", "#fff")
|
237
|
+
.style("border", "1px solid #ccc")
|
238
|
+
.style("padding", "5px")
|
239
|
+
.style("z-index", 10)
|
240
|
+
.text(`${d.sets.join(' & ')}: ${d.size}`);
|
241
|
+
|
242
|
+
tooltip.style("left", `${d3.event.pageX + 5}px`).style("top", `${d3.event.pageY + 5}px`);
|
243
|
+
})
|
244
|
+
.on("mouseout", function () {
|
245
|
+
d3.select(this).select("path").style("fill-opacity", parseFloat(document.getElementById("transparency").value));
|
246
|
+
d3.select(".tooltip").remove();
|
247
|
+
});
|
248
|
+
</script>
|
data/_includes/appscms/.DS_Store
CHANGED
Binary file
|
@@ -22,30 +22,40 @@
|
|
22
22
|
{% for post in blogData %}
|
23
23
|
{%- include authors/authors.html-%}
|
24
24
|
{% assign title = post.title %}
|
25
|
-
{% assign title_lower = title | downcase %}
|
26
|
-
{% assign title_hyphenated = title_lower | replace: ' ', '-' %}
|
27
|
-
{% assign blogUrl = title_hyphenated | replace: '!', '' | replace: '?', '' | replace: ',', '' |
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
25
|
+
{% assign title_lower = title | downcase %}
|
26
|
+
{% assign title_hyphenated = title_lower | replace: ' ', '-' %}
|
27
|
+
{% assign blogUrl = title_hyphenated | replace: '!', '' | replace: '?', '' | replace: ',', '' |
|
28
|
+
replace: '.', '' | replace: ';', '' | replace: ':', '' | replace: '&', '' | replace: '@', '' |
|
29
|
+
replace: '#', '' | replace: '$', '' | replace: '%', '' | replace: '^', '' | replace: '*', '' |
|
30
|
+
replace: '(', '' | replace: ')', '' | replace: '+', '' | replace: '=', '' | replace: '{', '' |
|
31
|
+
replace: '}', '' | replace: '[', '' | replace: ']', '' | replace: '|', '' | replace: '\\', '' |
|
32
|
+
replace: '/', '' | replace: '<', '' | replace: '>' , '' | replace: '~' , '' | replace: '`' , '' |
|
33
|
+
replace: '"' , '' | replace: "'" , '' %}
|
34
|
+
|
35
|
+
|
36
|
+
{%- assign ActualUrl = post.url | default: blogUrl -%}
|
37
|
+
<div
|
38
|
+
class="{%- if site.monumetricId and page.url != '/' and page.lang == " en" -%} col-md-6 mb-4
|
39
|
+
card-group {%- else -%} col-lg-4 col-md-6 mb-4 card-group {%- endif -%} ">
|
40
|
+
<div class=" card h-100 appscms-blog-cards">
|
41
|
+
<a class="extrapaddingforimg" href="/blog/{{ ActualUrl }}" aria-label="{{post.title}}">
|
42
|
+
<img src="{{ post.image }}" loading="lazy" class="card-img-top" height="250" width="100%"
|
43
|
+
alt="{{post.title}}" {%- if site.crossorigin -%} crossorigin {%- endif -%}>
|
36
44
|
</a>
|
37
45
|
<div class="card-body">
|
38
|
-
<a class="text-decoration-none text-dark" href="/blog/{{ blogUrl }}" class="anchor_link"
|
46
|
+
<a class="text-decoration-none text-dark" href="/blog/{{ blogUrl }}" class="anchor_link"
|
47
|
+
aria-label="{{post.title}}">
|
39
48
|
<h4 class="card-title mb-4 text-left">{{ post.title }}</h4>
|
40
49
|
</a>
|
41
50
|
<div class="wrapfooter">
|
42
51
|
{% if post.author %}
|
43
|
-
|
44
|
-
|
52
|
+
<img class="author-thumb" loading="lazy" src="{{ image }}" alt="{{ authorName }}" {%- if
|
53
|
+
site.crossorigin -%} crossorigin {%- endif -%}>
|
45
54
|
{% endif %}
|
46
55
|
|
47
56
|
<div class="author-meta">
|
48
|
-
<a class="post-name" target="_blank"
|
57
|
+
<a class="post-name" target="_blank"
|
58
|
+
href="/authors/{{authorName |downcase |replace:' ','-'}}">{{ authorName }}</a>
|
49
59
|
{% assign path_parts = post.path | split: '/' %}
|
50
60
|
{% assign filename = path_parts[1] %}
|
51
61
|
{% assign date_parts = filename | split: '-' %}
|
@@ -57,13 +67,13 @@
|
|
57
67
|
|
58
68
|
</div>
|
59
69
|
</div>
|
60
|
-
</div>
|
61
70
|
</div>
|
62
|
-
{% endfor %}
|
63
|
-
{%- if site.monumetricId and page.url != '/' and page.lang == "en" -%}
|
64
71
|
</div>
|
72
|
+
{% endfor %}
|
73
|
+
{%- if site.monumetricId and page.url != '/' and page.lang == "en" -%}
|
65
74
|
</div>
|
66
|
-
|
75
|
+
</div>
|
76
|
+
{%- endif -%}
|
67
77
|
</div>
|
68
78
|
</div>
|
69
79
|
</section>
|
@@ -49,7 +49,8 @@
|
|
49
49
|
Contributors
|
50
50
|
</h4>
|
51
51
|
<div class="d-flex justify-content-center w-100" style="gap: 10px">
|
52
|
-
{%- for contributor in contributors -%}
|
52
|
+
{%- for contributor in contributors -%}
|
53
|
+
{%- assign
|
53
54
|
featureContributorData = contributor.name | split: " " -%} {%-
|
54
55
|
assign featureContributorData = featureContributorData.first |
|
55
56
|
downcase -%} {%- assign collectionData = [featureContributorData]
|