diff --git a/controllers/script.js b/controllers/script.js index c41e67a42..51f202ec8 100644 --- a/controllers/script.js +++ b/controllers/script.js @@ -11,7 +11,6 @@ var isDbg = require('../libs/debug').isDbg; var async = require('async'); var _ = require('underscore'); var SPDX = require('spdx-license-ids'); -var SPDXOSI = require('spdx-osi'); // NOTE: Sub-dep of `spdx-is-osi` //--- Model inclusions var Discussion = require('../models/discussion').Discussion; @@ -43,8 +42,6 @@ var pageMetadata = require('../libs/templateHelpers').pageMetadata; //--- Configuration inclusions var removeReasons = require('../views/includes/scriptModals.json').removeReasons; -var blockSPDX = require('./blockSPDX'); - //--- // Let controllers know this is a `new` route @@ -400,15 +397,6 @@ exports.view = function (aReq, aRes, aNext) { script.scriptPermalinkMetaPageUrl = 'https://' + aReq.get('host') + script.scriptMetaPageUrl; - script.scriptAcceptableOSILicense = []; - SPDXOSI.forEach(function (aElement, aIndex, aArray) { - if (blockSPDX.indexOf(aElement) === -1) { - script.scriptAcceptableOSILicense.push({ - shortIdSPDX: aElement - }); - } - }); - // Page metadata pageMetadata(options, ['About', script.name, (script.isLib ? 'Libraries' : 'Userscripts')], script.description); diff --git a/controllers/user.js b/controllers/user.js index 70d6658c5..4c5d51e99 100644 --- a/controllers/user.js +++ b/controllers/user.js @@ -15,6 +15,9 @@ var async = require('async'); var _ = require('underscore'); var util = require('util'); +var SPDX = require('spdx-license-ids'); +var SPDXOSI = require('spdx-osi'); // NOTE: Sub-dep of `spdx-is-osi` + //--- Model inclusions var Comment = require('../models/comment').Comment; var Script = require('../models/script').Script; @@ -56,6 +59,8 @@ var settings = require('../models/settings.json'); var removeReasons = require('../views/includes/userModals.json').removeReasons; +var blockSPDX = require('./blockSPDX'); + //--- // WARNING: **Near** duplicate in scriptStorage.js for installName @@ -1869,6 +1874,9 @@ exports.editScript = function (aReq, aRes, aNext) { // var script = null; var scriptOpenIssueCountQuery = null; + var collaborators = null; + var licenses = null; + var licensePrimary = null; //--- if (aErr || !aScript) { @@ -1878,7 +1886,22 @@ exports.editScript = function (aReq, aRes, aNext) { // Script options.script = script = modelParser.parseScript(aScript); - options.isOwner = authedUser && authedUser._id == script._authorId; + + collaborators = scriptStorage.findMeta(aScript.meta, 'OpenUserJS.collaborator.value'); + if (!collaborators) { + collaborators = []; // NOTE: Watchpoint + } + + licenses = scriptStorage.findMeta(aScript.meta, 'UserScript.license.value'); + if (licenses) { + licensePrimary = licenses[licenses.length - 1]; + script.licensePrimary = licensePrimary.substr(0, (licensePrimary.indexOf(';') > -1 + ? licensePrimary.indexOf(';') + : undefined)).replace(/\+$/, ''); + } + + options.isOwner = authedUser && (authedUser._id == script._authorId + || collaborators.indexOf(authedUser.name) > -1); modelParser.renderScript(script); script.installNameSlug = installNameBase; script.scriptPermalinkInstallPageUrl = 'https://' + aReq.get('host') + @@ -1891,6 +1914,22 @@ exports.editScript = function (aReq, aRes, aNext) { script.scriptRawPageXUrl = '/src/' + (isLib ? 'libs' : 'scripts') + '/' + scriptStorage.getInstallNameBase(aReq, { encoding: 'uri' }) + (isLib ? '.min.js#' : '.min.user.js#'); + script.scriptPermalinkMetaPageUrl = 'https://' + aReq.get('host') + + script.scriptMetaPageUrl; + + script.scriptAcceptableOSILicense = []; + SPDXOSI.forEach(function (aElement, aIndex, aArray) { + if (blockSPDX.indexOf(aElement) === -1) { + script.scriptAcceptableOSILicense.push({ + shortIdSPDX: aElement + }); + } + }); + + // User + if (options.isOwner) { + options.authorTools = {}; + } // Page metadata pageMetadata(options); @@ -1908,6 +1947,20 @@ exports.editScript = function (aReq, aRes, aNext) { async.parallel(tasks, asyncComplete); }); } else { + options.authorTools = {}; + options.isScriptViewSourcePage = true; + + options.script = {}; + options.script.licensePrimary = 'MIT'; // NOTE: Site default + options.script.scriptAcceptableOSILicense = []; + SPDXOSI.forEach(function (aElement, aIndex, aArray) { + if (blockSPDX.indexOf(aElement) === -1) { + options.script.scriptAcceptableOSILicense.push({ + shortIdSPDX: aElement + }); + } + }); + //--- async.parallel(tasks, asyncComplete); } diff --git a/views/includes/scriptAuthorToolsPanel.html b/views/includes/scriptAuthorToolsPanel.html index 4c2fa3564..1230bec57 100644 --- a/views/includes/scriptAuthorToolsPanel.html +++ b/views/includes/scriptAuthorToolsPanel.html @@ -4,11 +4,15 @@
Author Tools
+ {{^isScriptViewSourcePage}} + {{/isScriptViewSourcePage}} + {{#isScriptViewSourcePage}} {{^script.isLib}} + {{^newScript}}
@@ -24,6 +28,7 @@
+ {{/newScript}} {{/script.isLib}}
@@ -44,12 +49,16 @@
+ {{/isScriptViewSourcePage}} + {{^isScriptViewSourcePage}} {{^script.isLib}}

Installs per Version effective

{{script.meta.version}}{{^script.meta.version}}Current{{/script.meta.version}} {{script.installsSinceUpdate}} installs

{{/script.isLib}} + {{/isScriptViewSourcePage}}
+{{^isScriptViewSourcePage}}
Danger Zone
@@ -60,4 +69,5 @@

Installs per Version effective

+{{/isScriptViewSourcePage}} {{/authorTools}} diff --git a/views/includes/scripts/selectSPDX.html b/views/includes/scripts/selectSPDX.html index 77503e352..7f0383573 100644 --- a/views/includes/scripts/selectSPDX.html +++ b/views/includes/scripts/selectSPDX.html @@ -37,9 +37,9 @@ for (i = 0; thisOSISPDX = listOSISPDX[i++];) { thisOSISPDX.addEventListener('click', onClick); - if (thisOSISPDX.textContent === 'MIT') { - // NOTE: Site default + if (thisOSISPDX.textContent === '{{script.licensePrimary}}') { thisOSISPDX.classList.add('active'); + thisOSISPDX.click(); } } } diff --git a/views/pages/scriptPage.html b/views/pages/scriptPage.html index 39ccb6dac..c84ca973f 100644 --- a/views/pages/scriptPage.html +++ b/views/pages/scriptPage.html @@ -119,8 +119,5 @@

Userscripts Using This Library

{{> includes/footer.html }} {{> includes/scripts/lazyIconScript.html }} {{> includes/scripts/clipboard.html }} - {{#authorTools}} - {{ > includes/scripts/selectSPDX.html}} - {{/authorTools}} diff --git a/views/pages/scriptViewSourcePage.html b/views/pages/scriptViewSourcePage.html index 93e151d1e..0dd3fcb87 100644 --- a/views/pages/scriptViewSourcePage.html +++ b/views/pages/scriptViewSourcePage.html @@ -23,7 +23,12 @@ {{> includes/header.html }}
+ {{#owner}} +
+ {{/owner}} + {{^owner}}
+ {{/owner}} {{^newScript}}{{> includes/scriptPageHeader.html }}{{/newScript}}
{{source}}
{{^readOnly}} @@ -35,10 +40,19 @@ {{/readOnly}}
+ {{#owner}} +
+ {{> includes/scriptAuthorToolsPanel.html }} +
+ {{/owner}}
{{> includes/footer.html }} {{> includes/scripts/lazyIconScript.html }} + {{> includes/scripts/clipboard.html }} + {{#authorTools}} + {{ > includes/scripts/selectSPDX.html}} + {{/authorTools}} {{> includes/scripts/scriptEditor.html }}