Skip to content

Commit 475bf74

Browse files
committed
Add Javascript licence information automatically (#5297)
2 parents 50e0a43 + 20cf913 commit 475bf74

File tree

2 files changed

+59
-209
lines changed

2 files changed

+59
-209
lines changed

scripts/generate_js_licenses.cr

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# This file automatically generates Crystal strings of rows within an HTML Javascript licenses table
2+
#
3+
# These strings will then be placed within a `<%= %>` statement in licenses.ecr at compile time which
4+
# will be interpolated at run-time. This interpolation is only for the translation of the "source" string
5+
# so maybe we can just switch to a non-translated string to simplify the logic here.
6+
#
7+
# The Javascript Web Labels table defined at https://www.gnu.org/software/librejs/free-your-javascript.html#step3
8+
# for example just reiterates the name of the source file rather than use a "source" string.
9+
all_javascript_files = Dir.glob("assets/**/*.js")
10+
11+
videojs_js = [] of String
12+
invidious_js = [] of String
13+
14+
all_javascript_files.each do |js_path|
15+
if js_path.starts_with?("assets/videojs/")
16+
videojs_js << js_path[7..]
17+
else
18+
invidious_js << js_path[7..]
19+
end
20+
end
21+
22+
def create_licence_tr(path, file_name, licence_name, licence_link, source_location)
23+
tr = <<-HTML
24+
"<tr>
25+
<td><a href=\\"/#{path}\\">#{file_name}</a></td>
26+
<td><a href=\\"#{licence_link}\\">#{licence_name}</a></td>
27+
<td><a href=\\"#{source_location}\\">\#{translate(locale, "source")}</a></td>
28+
</tr>"
29+
HTML
30+
31+
# New lines are removed as to allow for using String.join and StringLiteral.split
32+
# to get a clean list of each table row.
33+
tr.gsub('\n', "")
34+
end
35+
36+
# TODO Use videojs-dependencies.yml to generate license info for videojs javascript
37+
jslicence_table_rows = [] of String
38+
39+
invidious_js.each do |path|
40+
file_name = path.split('/')[-1]
41+
42+
# A couple non Invidious JS files are also shipped alongside Invidious due to various reasons
43+
next if {
44+
"sse.js", "silvermine-videojs-quality-selector.min.js", "videojs-youtube-annotations.min.js",
45+
}.includes?(file_name)
46+
47+
jslicence_table_rows << create_licence_tr(
48+
path: path,
49+
file_name: file_name,
50+
licence_name: "AGPL-3.0",
51+
licence_link: "https://www.gnu.org/licenses/agpl-3.0.html",
52+
source_location: path
53+
)
54+
end
55+
56+
puts jslicence_table_rows.join("\n")

src/invidious/views/licenses.ecr

Lines changed: 3 additions & 209 deletions
Original file line numberDiff line numberDiff line change
@@ -9,90 +9,6 @@
99
<body>
1010
<h1><%= translate(locale, "JavaScript license information") %></h1>
1111
<table id="jslicense-labels1">
12-
<tr>
13-
<td>
14-
<a href="/js/_helpers.js?v=<%= ASSET_COMMIT %>">_helpers.js</a>
15-
</td>
16-
17-
<td>
18-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
19-
</td>
20-
21-
<td>
22-
<a href="/js/_helpers.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
23-
</td>
24-
</tr>
25-
26-
<tr>
27-
<td>
28-
<a href="/js/handlers.js?v=<%= ASSET_COMMIT %>">handlers.js</a>
29-
</td>
30-
31-
<td>
32-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
33-
</td>
34-
35-
<td>
36-
<a href="/js/handlers.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
37-
</td>
38-
</tr>
39-
40-
<tr>
41-
<td>
42-
<a href="/js/community.js?v=<%= ASSET_COMMIT %>">community.js</a>
43-
</td>
44-
45-
<td>
46-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
47-
</td>
48-
49-
<td>
50-
<a href="/js/community.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
51-
</td>
52-
</tr>
53-
54-
<tr>
55-
<td>
56-
<a href="/js/embed.js?v=<%= ASSET_COMMIT %>">embed.js</a>
57-
</td>
58-
59-
<td>
60-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
61-
</td>
62-
63-
<td>
64-
<a href="/js/embed.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
65-
</td>
66-
</tr>
67-
68-
<tr>
69-
<td>
70-
<a href="/js/notifications.js?v=<%= ASSET_COMMIT %>">notifications.js</a>
71-
</td>
72-
73-
<td>
74-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
75-
</td>
76-
77-
<td>
78-
<a href="/js/notifications.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
79-
</td>
80-
</tr>
81-
82-
<tr>
83-
<td>
84-
<a href="/js/player.js?v=<%= ASSET_COMMIT %>">player.js</a>
85-
</td>
86-
87-
<td>
88-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
89-
</td>
90-
91-
<td>
92-
<a href="/js/player.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
93-
</td>
94-
</tr>
95-
9612
<tr>
9713
<td>
9814
<a href="/js/silvermine-videojs-quality-selector.min.js?v=<%= ASSET_COMMIT %>">silvermine-videojs-quality-selector.min.js</a>
@@ -121,34 +37,6 @@
12137
</td>
12238
</tr>
12339

124-
<tr>
125-
<td>
126-
<a href="/js/subscribe_widget.js?v=<%= ASSET_COMMIT %>">subscribe_widget.js</a>
127-
</td>
128-
129-
<td>
130-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
131-
</td>
132-
133-
<td>
134-
<a href="/js/subscribe_widget.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
135-
</td>
136-
</tr>
137-
138-
<tr>
139-
<td>
140-
<a href="/js/themes.js?v=<%= ASSET_COMMIT %>">themes.js</a>
141-
</td>
142-
143-
<td>
144-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
145-
</td>
146-
147-
<td>
148-
<a href="/js/themes.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
149-
</td>
150-
</tr>
151-
15240
<tr>
15341
<td>
15442
<a href="/videojs/videojs-contrib-quality-levels/videojs-contrib-quality-levels.js?v=<%= ASSET_COMMIT %>">videojs-contrib-quality-levels.js</a>
@@ -289,103 +177,9 @@
289177
</td>
290178
</tr>
291179

292-
<tr>
293-
<td>
294-
<a href="/js/watch.js?v=<%= ASSET_COMMIT %>">watch.js</a>
295-
</td>
296-
297-
<td>
298-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
299-
</td>
300-
301-
<td>
302-
<a href="/js/watch.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
303-
</td>
304-
</tr>
305-
306-
<tr>
307-
<td>
308-
<a href="/js/comments.js?v=<%= ASSET_COMMIT %>">comments.js</a>
309-
</td>
310-
311-
<td>
312-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
313-
</td>
314-
315-
<td>
316-
<a href="/js/comments.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
317-
</td>
318-
</tr>
319-
320-
<tr>
321-
<td>
322-
<a href="/js/pagination.js?v=<%= ASSET_COMMIT %>">pagination.js</a>
323-
</td>
324-
325-
<td>
326-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
327-
</td>
328-
329-
<td>
330-
<a href="/js/pagination.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
331-
</td>
332-
</tr>
333-
334-
<tr>
335-
<td>
336-
<a href="/js/playlist_widget.js?v=<%= ASSET_COMMIT %>">playlist_widget.js</a>
337-
</td>
338-
339-
<td>
340-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
341-
</td>
342-
343-
<td>
344-
<a href="/js/playlist_widget.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
345-
</td>
346-
</tr>
347-
348-
<tr>
349-
<td>
350-
<a href="/js/post.js?v=<%= ASSET_COMMIT %>">post.js</a>
351-
</td>
352-
353-
<td>
354-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
355-
</td>
356-
357-
<td>
358-
<a href="/js/post.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
359-
</td>
360-
</tr>
361-
362-
<tr>
363-
<td>
364-
<a href="/js/watched_indicator.js?v=<%= ASSET_COMMIT %>">watched_indicator.js</a>
365-
</td>
366-
367-
<td>
368-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
369-
</td>
370-
371-
<td>
372-
<a href="/js/watched_indicator.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
373-
</td>
374-
</tr>
375-
376-
<tr>
377-
<td>
378-
<a href="/js/watched_widget.js?v=<%= ASSET_COMMIT %>">watched_widget.js</a>
379-
</td>
380-
381-
<td>
382-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0</a>
383-
</td>
384-
385-
<td>
386-
<a href="/js/watched_widget.js?v=<%= ASSET_COMMIT %>"><%= translate(locale, "source") %></a>
387-
</td>
388-
</tr>
180+
<%- {% for row in run("../../../scripts/generate_js_licenses.cr").stringify.split('\n') %} %>
181+
<%-= {{row.id}} -%>
182+
<% {% end %} -%>
389183
</table>
390184
</body>
391185
</html>

0 commit comments

Comments
 (0)