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 @@
{{script.meta.version}}{{^script.meta.version}}Current{{/script.meta.version}}
{{script.installsSinceUpdate}} installs