miguelgargallo commited on
Commit
4702132
·
1 Parent(s): f67eee9

Design Update

Browse files
Files changed (5) hide show
  1. assets/avoid.svg +7 -0
  2. assets/correct.svg +4 -0
  3. content.json +45 -42
  4. main.js +37 -10
  5. styles.css +36 -41
assets/avoid.svg ADDED
assets/correct.svg ADDED
content.json CHANGED
@@ -1,87 +1,90 @@
1
  {
2
  "title": "Pylar AI creative ML Shared Restrictive License",
3
- "version": "Version 1.0 - 2024",
4
- "subtitle": "Restrictive license for Pylar AI creative machine learning assets and related files, focused on preventing any use without explicit written permission from the author.",
5
- "meta": "PYLAR AI CREATIVE ML / SHARED RESTRICTIVE LICENSE",
6
- "badge": "Pylar AI creative ML Shared Restrictive License",
7
  "sectionLabel": "Overview",
8
  "sourceUrl": "https://huggingface.co/spaces/superdatas/sharedrestrictive",
9
  "sourceText": "Source:",
10
  "sections": [
11
  {
12
  "title": "Copyright",
13
- "content": [
14
- "<strong>Copyright © 2024 Miguel Gargallo</strong> All rights reserved for this work and its related files."
15
- ]
16
  },
17
  {
18
  "title": "1. Permission",
19
  "content": [
20
- "No permission is granted to use, copy, modify, distribute, or deploy these files in any context without the explicit written consent of the author.",
21
- "The only exception is the author of the work, who may use these files as desired.",
22
- "Any other party must obtain written authorization by email before any kind of usage."
23
  ]
24
  },
25
  {
26
  "title": "2. Conditions",
27
- "content": [
28
- "Under no circumstances may these files be used, incorporated into other projects, or shared, unless the author has explicitly allowed it in writing.",
29
- "Any intended personal, academic, commercial, or research use requires prior written permission from the author.",
30
- "Unauthorized use may be considered a violation of this license and of applicable copyright law."
31
- ]
32
  },
33
  {
34
  "title": "3. Disclaimer",
35
  "content": [
36
- "The files are provided without any warranty, express or implied, including but not limited to fitness for a particular purpose.",
37
- "The author will not be liable for any damages or consequences arising from the use or misuse of these files, whether authorized or unauthorized."
38
- ]
39
- },
40
- {
41
- "title": "4. Enforcement",
42
- "content": [
43
- "The author reserves the right to take legal action against any party that uses these files without authorization.",
44
- "Parties that fail to comply with this license may be subject to legal claims, including but not limited to injunctions and damages."
45
- ]
46
- },
47
- {
48
- "title": "5. Further Information",
49
- "content": [
50
- "For additional details about this license or to request permission, please visit the official license page or contact the author through the indicated channels.",
51
- "More information is available at the referenced Hugging Face space."
52
  ]
53
  }
54
  ],
55
  "sidePanel": {
56
- "pill": "Restrictive by Default",
57
  "principles": {
58
- "title": "License Intent",
59
- "text": "This license is designed to strongly restrict usage of the underlying creative ML files, allowing access and usage only when the author has granted explicit written permission."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  },
61
  "snapshot": {
62
  "title": "License Snapshot",
63
  "items": [
64
  [
65
  "Status",
66
- "Active"
67
  ],
68
  [
69
  "Scope",
70
- "Creative ML Assets"
71
  ],
72
  [
73
- "Owner",
74
- "Miguel Gargallo"
75
  ],
76
  [
77
- "Year",
78
- "2024"
79
  ]
80
  ]
81
  },
82
  "hint": {
83
- "title": "Usage Reminder",
84
- "text": "Do not use, copy, or distribute these files unless you have explicit written permission from the author. When in doubt, contact the author and obtain approval before any use."
85
  }
86
  }
87
  }
 
1
  {
2
  "title": "Pylar AI creative ML Shared Restrictive License",
3
+ "version": "Version 1.0 2024",
4
+ "subtitle": "Strict no-permission license with written author exception only, prohibiting all usage without explicit email authorization.",
5
+ "meta": "SOFTWARE LICENSE AGREEMENT / SHARED RESTRICTIVE",
6
+ "badge": "PYLAR AI SHARED RESTRICTIVE LICENSE",
7
  "sectionLabel": "Overview",
8
  "sourceUrl": "https://huggingface.co/spaces/superdatas/sharedrestrictive",
9
  "sourceText": "Source:",
10
  "sections": [
11
  {
12
  "title": "Copyright",
13
+ "content": "Copyright (C) 2024 Miguel Gargallo"
 
 
14
  },
15
  {
16
  "title": "1. Permission",
17
  "content": [
18
+ "No permission to use anywhere. With the exception of the author of the work, only if it is allowed in writing and by email."
 
 
19
  ]
20
  },
21
  {
22
  "title": "2. Conditions",
23
+ "content": "Under any circumstance."
 
 
 
 
24
  },
25
  {
26
  "title": "3. Disclaimer",
27
  "content": [
28
+ "Parties can take legal actions if you use this files.",
29
+ "For further details about this license, please visit: https://huggingface.co/spaces/superdatas/sharedrestrictive"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  ]
31
  }
32
  ],
33
  "sidePanel": {
34
+ "pill": " Author Only | 📧 Written Permission",
35
  "principles": {
36
+ "title": "Access Rules",
37
+ "items": [
38
+ {
39
+ "type": "allow",
40
+ "text": "Author Miguel Gargallo"
41
+ },
42
+ {
43
+ "type": "allow",
44
+ "text": "Written email permission"
45
+ },
46
+ {
47
+ "type": "avoid",
48
+ "text": "No general usage"
49
+ },
50
+ {
51
+ "type": "avoid",
52
+ "text": "No distribution"
53
+ },
54
+ {
55
+ "type": "avoid",
56
+ "text": "No modifications"
57
+ },
58
+ {
59
+ "type": "avoid",
60
+ "text": "Legal action risk"
61
+ }
62
+ ]
63
  },
64
  "snapshot": {
65
  "title": "License Snapshot",
66
  "items": [
67
  [
68
  "Status",
69
+ "Active v1.0"
70
  ],
71
  [
72
  "Scope",
73
+ "Author-Only Access"
74
  ],
75
  [
76
+ "Updated",
77
+ "2024"
78
  ],
79
  [
80
+ "Jurisdiction",
81
+ "Global"
82
  ]
83
  ]
84
  },
85
  "hint": {
86
+ "title": "License Validity",
87
+ "text": "To use and have validity, always link to source URL: https://huggingface.co/spaces/superdatas/sharedrestrictive"
88
  }
89
  }
90
  }
main.js CHANGED
@@ -12,21 +12,21 @@ async function loadContent() {
12
  document.title = content.title;
13
 
14
  // Source
15
- document.querySelector("[data-source-url]").href = content.sourceUrl;
16
- document.querySelector("[data-source-url]").textContent = content.sourceUrl;
 
17
  document.querySelector("[data-source-text]").textContent = content.sourceText;
18
 
19
  // Sections
20
  const sectionsContainer = document.querySelector("[data-sections]");
21
  content.sections.forEach((section) => {
22
  const sectionEl = document.createElement("div");
 
23
  sectionEl.innerHTML = `
24
  <div class="section-label">${content.sectionLabel}</div>
25
  <h2>${section.title}</h2>
26
  ${Array.isArray(section.content)
27
- ? `<ul>${section.content
28
- .map((item) => `<li>${item}</li>`)
29
- .join("")}</ul>`
30
  : `<p>${section.content}</p>`
31
  }
32
  `;
@@ -42,20 +42,18 @@ async function loadContent() {
42
  ${content.sidePanel.pill}
43
  </div>
44
  <h3 class="side-title">${content.sidePanel.principles.title}</h3>
45
- <p class="side-text">${content.sidePanel.principles.text}</p>
46
  </div>
47
  <div class="side-card">
48
  <h3 class="side-title">${content.sidePanel.snapshot.title}</h3>
49
  <div class="meta-grid">
50
  ${content.sidePanel.snapshot.items
51
- .map(
52
- ([key, value]) => `
53
  <div class="meta-item">
54
  <span>${key}</span>
55
  <span>${value}</span>
56
  </div>
57
- `
58
- )
59
  .join("")}
60
  </div>
61
  </div>
@@ -64,8 +62,37 @@ async function loadContent() {
64
  <p class="side-text">${content.sidePanel.hint.text}</p>
65
  </div>
66
  `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  } catch (error) {
68
  console.error("Error loading content:", error);
 
69
  }
70
  }
71
 
 
12
  document.title = content.title;
13
 
14
  // Source
15
+ const sourceUrlEl = document.querySelector("[data-source-url]");
16
+ sourceUrlEl.href = content.sourceUrl;
17
+ sourceUrlEl.textContent = content.sourceUrl || "No source available";
18
  document.querySelector("[data-source-text]").textContent = content.sourceText;
19
 
20
  // Sections
21
  const sectionsContainer = document.querySelector("[data-sections]");
22
  content.sections.forEach((section) => {
23
  const sectionEl = document.createElement("div");
24
+ sectionEl.className = "section";
25
  sectionEl.innerHTML = `
26
  <div class="section-label">${content.sectionLabel}</div>
27
  <h2>${section.title}</h2>
28
  ${Array.isArray(section.content)
29
+ ? `<ul>${section.content.map((item) => `<li>${item}</li>`).join("")}</ul>`
 
 
30
  : `<p>${section.content}</p>`
31
  }
32
  `;
 
42
  ${content.sidePanel.pill}
43
  </div>
44
  <h3 class="side-title">${content.sidePanel.principles.title}</h3>
45
+ <div class="principles-list" data-principles></div>
46
  </div>
47
  <div class="side-card">
48
  <h3 class="side-title">${content.sidePanel.snapshot.title}</h3>
49
  <div class="meta-grid">
50
  ${content.sidePanel.snapshot.items
51
+ .map(([key, value]) => `
 
52
  <div class="meta-item">
53
  <span>${key}</span>
54
  <span>${value}</span>
55
  </div>
56
+ `)
 
57
  .join("")}
58
  </div>
59
  </div>
 
62
  <p class="side-text">${content.sidePanel.hint.text}</p>
63
  </div>
64
  `;
65
+
66
+ // Render principles with SVG icons
67
+ const principlesList = document.querySelector("[data-principles]");
68
+ if (content.sidePanel.principles.items) {
69
+ const items = content.sidePanel.principles.items;
70
+ const allowedItems = items.filter(item => item.type === 'allow');
71
+ const avoidItems = items.filter(item => item.type === 'avoid');
72
+
73
+ principlesList.innerHTML = `
74
+ <div class="permissions-group">
75
+ ${allowedItems.map(item => `
76
+ <div class="permission-item">
77
+ <img src="assets/correct.svg" width="16" height="16" alt="Allowed" />
78
+ <span>${item.text}</span>
79
+ </div>
80
+ `).join('')}
81
+ </div>
82
+ <div class="permissions-group avoid">
83
+ ${avoidItems.map(item => `
84
+ <div class="permission-item">
85
+ <img src="assets/avoid.svg" width="16" height="16" alt="Prohibited" />
86
+ <span>${item.text}</span>
87
+ </div>
88
+ `).join('')}
89
+ </div>
90
+ `;
91
+ }
92
+
93
  } catch (error) {
94
  console.error("Error loading content:", error);
95
+ document.body.innerHTML = "<h1>Error loading license content</h1>";
96
  }
97
  }
98
 
styles.css CHANGED
@@ -56,6 +56,7 @@ body {
56
  backdrop-filter: blur(16px);
57
  }
58
 
 
59
  header {
60
  display: flex;
61
  flex-direction: column;
@@ -65,35 +66,6 @@ header {
65
  padding-bottom: 16px;
66
  }
67
 
68
- .badge {
69
- display: inline-flex;
70
- align-items: center;
71
- gap: 8px;
72
- font-size: 11px;
73
- letter-spacing: 0.14em;
74
- text-transform: uppercase;
75
- color: var(--text-muted);
76
- }
77
-
78
- .badge-dot {
79
- width: 8px;
80
- height: 8px;
81
- border-radius: 999px;
82
- background: var(--accent);
83
- box-shadow: 0 0 12px var(--accent);
84
- }
85
-
86
- .h1 {
87
- /* font-size: 26px;
88
- font-weight: 650;
89
- letter-spacing: 0.04em;
90
- text-transform: uppercase;
91
- display: flex;
92
- flex-wrap: wrap;
93
- align-items: center;
94
- gap: 8px; */
95
- }
96
-
97
  .htitle {
98
  font-size: 22px;
99
  font-weight: 650;
@@ -126,16 +98,6 @@ hpill {
126
  border: 1px solid rgba(230, 57, 70, 0.45);
127
  }
128
 
129
- h1 span {
130
- font-size: 12px;
131
- font-weight: 400;
132
- color: var(--accent);
133
- padding: 3px 9px;
134
- border-radius: 999px;
135
- background: var(--accent-soft);
136
- border: 1px solid rgba(230, 57, 70, 0.45);
137
- }
138
-
139
  .subtitle {
140
  font-size: 13px;
141
  color: var(--text-muted);
@@ -151,6 +113,7 @@ h1 span {
151
  margin-top: 2px;
152
  }
153
 
 
154
  main {
155
  display: grid;
156
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.9fr);
@@ -210,6 +173,7 @@ main {
210
  margin-bottom: 2px;
211
  }
212
 
 
213
  .pill {
214
  display: inline-flex;
215
  align-items: center;
@@ -263,6 +227,37 @@ main {
263
  line-height: 1.5;
264
  }
265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  .meta-grid {
267
  display: grid;
268
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -308,7 +303,7 @@ a:hover {
308
 
309
  /* Responsive */
310
  @media (min-width: 900px) {
311
- h1 {
312
  font-size: 28px;
313
  }
314
  }
@@ -328,7 +323,7 @@ a:hover {
328
  }
329
 
330
  @media (max-width: 600px) {
331
- h1 {
332
  font-size: 18px;
333
  }
334
 
 
56
  backdrop-filter: blur(16px);
57
  }
58
 
59
+ /* Header styles */
60
  header {
61
  display: flex;
62
  flex-direction: column;
 
66
  padding-bottom: 16px;
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  .htitle {
70
  font-size: 22px;
71
  font-weight: 650;
 
98
  border: 1px solid rgba(230, 57, 70, 0.45);
99
  }
100
 
 
 
 
 
 
 
 
 
 
 
101
  .subtitle {
102
  font-size: 13px;
103
  color: var(--text-muted);
 
113
  margin-top: 2px;
114
  }
115
 
116
+ /* Main content */
117
  main {
118
  display: grid;
119
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.9fr);
 
173
  margin-bottom: 2px;
174
  }
175
 
176
+ /* Side panel */
177
  .pill {
178
  display: inline-flex;
179
  align-items: center;
 
227
  line-height: 1.5;
228
  }
229
 
230
+ /* Permissions list */
231
+ .permissions-group {
232
+ margin-bottom: 12px;
233
+ }
234
+
235
+ .permissions-group:last-child {
236
+ margin-bottom: 0;
237
+ }
238
+
239
+ .permissions-group.avoid {
240
+ padding-top: 8px;
241
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
242
+ }
243
+
244
+ .permission-item {
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 8px;
248
+ margin-bottom: 6px;
249
+ font-family: monospace;
250
+ font-size: 13px;
251
+ }
252
+
253
+ .permission-item span {
254
+ color: var(--text-muted);
255
+ }
256
+
257
+ .permissions-group.avoid .permission-item span {
258
+ color: #fca5a5;
259
+ }
260
+
261
  .meta-grid {
262
  display: grid;
263
  grid-template-columns: repeat(2, minmax(0, 1fr));
 
303
 
304
  /* Responsive */
305
  @media (min-width: 900px) {
306
+ .htitle {
307
  font-size: 28px;
308
  }
309
  }
 
323
  }
324
 
325
  @media (max-width: 600px) {
326
+ .htitle {
327
  font-size: 18px;
328
  }
329