From 423c752f06eeebaa1d190751ac91ca3fdcd9cf8d Mon Sep 17 00:00:00 2001 From: hackademix Date: Sat, 29 Sep 2018 01:54:22 +0200 Subject: Lenient WebLabels matching (by URL, by id, by name). --- bg/ExternalLicenses.js | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'bg/ExternalLicenses.js') diff --git a/bg/ExternalLicenses.js b/bg/ExternalLicenses.js index 27d9223..058b651 100644 --- a/bg/ExternalLicenses.js +++ b/bg/ExternalLicenses.js @@ -26,10 +26,27 @@ "use strict"; let licensesByLabel = new Map(); +let licensesByUrl = new Map(); { let {licenses} = require("../license_definitions"); - for (let l of Object.values(licenses).filter(l => l.identifier)) { - licensesByLabel.set(l.identifier, l); + for (let [id, l] of Object.entries(licenses)) { + let {identifier, canonicalUrl, licenseName} = l; + if (identifier) { + licensesByLabel.set(identifier, l); + } else { + l.identifier = id; + } + if (id !== identifier) { + licensesByLabel.set(id, l); + } + if (licenseName) { + licensesByLabel.set(licenseName, l); + } + if (Array.isArray(canonicalUrl)) { + for (let url of canonicalUrl) { + licensesByUrl.set(url, l); + } + } } } @@ -55,23 +72,26 @@ var ExternalLicenses = { return null; } scriptInfo.licenses = new Set(); - scriptInfo.allFree = true; scriptInfo.toString = function() { let licenseIds = [...this.licenses].map(l => l.identifier).sort().join(", "); return licenseIds - ? (this.allFree ? `Free license${this.licenses.length > 1 ? "s" : ""} (${licenseIds})` - : `Mixed free (${licenseIds}) and unknown licenses`) + ? `Free license${this.licenses.size > 1 ? "s" : ""} (${licenseIds})` : "Unknown license(s)"; } - - for (let {label} of scriptInfo.licenseLinks) { - if (licensesByLabel.has(label)) { - scriptInfo.licenses.add(licensesByLabel.get(label)); - } else { - scriptInfo.allFree = false; - break; + let match = (map, key) => { + if (map.has(key)) { + scriptInfo.licenses.add(map.get(key)); + return true; } + return false; + }; + + for (let {label, url} of scriptInfo.licenseLinks) { + match(licensesByLabel, label = label.trim()) || + match(licensesByUrl, url) || + match(licensesByLabel, label.replace(/^GNU-|-(?:or-later|only)$/i, '')); } + scriptInfo.free = scriptInfo.licenses.size > 0; return scriptInfo; }, -- cgit v1.2.3 From ffe9a7ab8625aba7a60e21f4c7f2c39081414697 Mon Sep 17 00:00:00 2001 From: hackademix Date: Sun, 30 Sep 2018 00:12:17 +0200 Subject: WebLabels matching by id made case-insensitive. --- bg/ExternalLicenses.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'bg/ExternalLicenses.js') diff --git a/bg/ExternalLicenses.js b/bg/ExternalLicenses.js index 058b651..33bcbf6 100644 --- a/bg/ExternalLicenses.js +++ b/bg/ExternalLicenses.js @@ -29,18 +29,19 @@ let licensesByLabel = new Map(); let licensesByUrl = new Map(); { let {licenses} = require("../license_definitions"); + let mapByLabel = (label, license) => licensesByLabel.set(label.toUpperCase(), license); for (let [id, l] of Object.entries(licenses)) { let {identifier, canonicalUrl, licenseName} = l; if (identifier) { - licensesByLabel.set(identifier, l); + mapByLabel(identifier, l); } else { l.identifier = id; } if (id !== identifier) { - licensesByLabel.set(id, l); + mapByLabel(id, l); } if (licenseName) { - licensesByLabel.set(licenseName, l); + mapByLabel(licenseName, l); } if (Array.isArray(canonicalUrl)) { for (let url of canonicalUrl) { @@ -87,9 +88,9 @@ var ExternalLicenses = { }; for (let {label, url} of scriptInfo.licenseLinks) { - match(licensesByLabel, label = label.trim()) || + match(licensesByLabel, label = label.trim().toUpperCase()) || match(licensesByUrl, url) || - match(licensesByLabel, label.replace(/^GNU-|-(?:or-later|only)$/i, '')); + match(licensesByLabel, label.replace(/^GNU-|-(?:OR-LATER|ONLY)$/, '')); } scriptInfo.free = scriptInfo.licenses.size > 0; return scriptInfo; -- cgit v1.2.3