zotero/chrome/content/zotero/publicationsDialog.js

426 lines
12 KiB
JavaScript

/*
***** BEGIN LICENSE BLOCK *****
Copyright © 2015 Center for History and New Media
George Mason University, Fairfax, Virginia, USA
https://www.zotero.org
This file is part of Zotero.
Zotero is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Zotero is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Zotero. If not, see <http://www.gnu.org/licenses/>.
***** END LICENSE BLOCK *****
*/
var Zotero_Publications_Dialog = new function () {
var _initialized = false;
var _io;
var _hasFiles = false;
var _hasNotes = false;
var _hasRights = null;
var _includeFiles = true;
var _includeNotes = true;
var _keepRights = true;
var _shareSettings = {
sharing: 'reserved', // 'reserved', 'cc', 'cc0'
adaptations: 'no',
commercial: 'no'
};
var _license = null;
function _init() {
try {
var wizard = document.getElementById('zotero-publications-wizard');
wizard.getButton('finish').label =
Zotero.getString('publications.buttons.addToMyPublications');
if (window.arguments && window.arguments.length) {
_io = window.arguments[0];
_hasFiles = _io.hasFiles;
_hasNotes = _io.hasNotes;
_hasRights = _io.hasRights;
if (_hasRights == 'none') _keepRights = false;
delete _io.hasFiles;
delete _io.hasNotes;
delete _io.hasRights;
}
_initialized = true;
}
catch (e) {
window.close();
throw e;
}
}
this.updatePage = function () {
if (!_initialized) {
_init();
this.updateInclude();
}
var wizard = document.getElementById('zotero-publications-wizard');
var currentPage = wizard.currentPage;
var pageid = currentPage.pageid;
if (pageid == 'intro') {
let str = 'publications.authorship.checkbox';
let filesCheckbox = document.getElementById('include-files');
let notesCheckbox = document.getElementById('include-notes')
// Enable the checkboxes only when relevant
filesCheckbox.disabled = !_hasFiles;
filesCheckbox.checked = _hasFiles && _includeFiles;
notesCheckbox.disabled = !_hasNotes;
notesCheckbox.checked = _hasNotes && _includeNotes;
// Adjust the checkbox text based on whether there are files or notes
if (filesCheckbox.checked || notesCheckbox.checked) {
if (filesCheckbox.checked && notesCheckbox.checked) {
str += '.filesNotes';
}
else if (filesCheckbox.checked) {
str += '.files';
}
else {
str += '.notes';
}
}
}
else if (pageid == 'choose-sharing') {
let keepRightsBox = document.getElementById('keep-rights');
let keepRightsCheckbox = document.getElementById('keep-rights-checkbox');
if (_hasRights == 'none') {
keepRightsBox.hidden = true;
document.getElementById('sharing-radiogroup').focus();
}
else {
let str = 'publications.sharing.keepRightsField';
if (_hasRights == 'some') {
str += 'WhereAvailable';
}
keepRightsCheckbox.label = Zotero.getString(str);
keepRightsCheckbox.checked = _keepRights;
this.updateKeepRights(keepRightsCheckbox.checked);
}
}
// Select appropriate radio button from current license
else if (pageid == 'choose-license') {
document.getElementById('adaptations-' + _shareSettings.adaptations).selected = true;
document.getElementById('commercial-' + _shareSettings.commercial).selected = true;
}
_updateLicense();
this.updateNextButton();
};
this.updateNextButton = function () {
var wizard = document.getElementById('zotero-publications-wizard');
var currentPage = wizard.currentPage;
var nextPage = wizard.wizardPages[wizard.pageIndex + 1];
var nextButton = wizard.getButton('next');
// Require authorship checkbox on first page to be checked to advance
wizard.canAdvance = document.getElementById('confirm-authorship-checkbox').checked;
if (!nextPage) {
return;
}
if (_hasFiles
&& _includeFiles
&& (currentPage.pageid == 'intro' ||
// If CC selected on sharing page and we're not using existing rights for all
// items, go to license chooser next
(currentPage.pageid == 'choose-sharing'
&& _shareSettings.sharing == 'cc'
&& !(_hasRights == 'all' && _keepRights)))) {
this.lastPage = false;
nextButton.label = Zotero.getString(
'publications.buttons.next',
Zotero.getString('publications.buttons.' + nextPage.pageid)
);
}
// Otherwise this is the last page
else {
this.lastPage = true;
// Due to issues with linux not handling finish button hiding correctly
// we just set the next button label to be the one for the finish button
// and leave visibility handling up to mr wizard
nextButton.label = Zotero.getString('publications.buttons.addToMyPublications');
}
}
/**
* Update files/notes settings from checkboxes
*/
this.updateInclude = function () {
var filesCheckbox = document.getElementById('include-files');
var notesCheckbox = document.getElementById('include-notes')
var authorshipCheckbox = document.getElementById('confirm-authorship-checkbox');
_includeFiles = filesCheckbox.checked;
_includeNotes = notesCheckbox.checked;
authorshipCheckbox.label = Zotero.getString(
'publications.intro.authorship' + (_includeFiles ? '.files' : '')
);
this.updateNextButton();
}
/**
* Update rights setting from checkbox and hide sharing setting if necessary
*/
this.updateKeepRights = function (keepRights) {
_keepRights = keepRights;
// If all items have rights and we're using them, the sharing page is the last page
document.getElementById('choose-sharing-options').hidden = _hasRights == 'all' && keepRights;
this.updateNextButton();
}
/**
* Update sharing and license settings
*/
this.updateSharing = function (id) {
var matches = id.match(/^(sharing|adaptations|commercial)-(.+)$/);
var setting = matches[1];
var value = matches[2];
_shareSettings[setting] = value;
_updateLicense();
this.updateNextButton();
}
this.onAdvance = function () {
if (this.lastPage) {
this.finish();
return false;
}
return true;
}
this.onFinish = function () {
_io.includeFiles = document.getElementById('include-files').checked;
_io.includeNotes = document.getElementById('include-notes').checked;
_io.keepRights = _keepRights;
_io.license = _license;
_io.licenseName = _getLicenseName(_license);
}
this.finish = function () {
this.onFinish();
window.close();
}
/**
* Update the calculated license and image
*
* Possible licenses:
*
* 'cc-by'
* 'cc-by-sa'
* 'cc-by-nd'
* 'cc-by-nc'
* 'cc-by-nc-sa'
* 'cc-by-nc-nd'
* 'cc0'
* 'reserved'
*/
function _updateLicense() {
var s = _shareSettings.sharing;
var a = _shareSettings.adaptations;
var c = _shareSettings.commercial;
if (s == 'cc0' || s == 'reserved') {
_license = s;
}
else {
_license = 'cc-by';
if (c == 'no') {
_license += '-nc';
}
if (a == 'no') {
_license += '-nd';
}
else if (a == 'sharealike') {
_license += '-sa';
}
}
_updateLicenseSummary();
}
/**
*
*/
function _updateLicenseSummary() {
var wizard = document.getElementById('zotero-publications-wizard');
var currentPage = wizard.currentPage;
var groupbox = currentPage.getElementsByAttribute('class', 'license-info')[0];
if (!groupbox) return;
if (groupbox.hasChildNodes()) {
let hbox = groupbox.lastChild;
var icon = currentPage.getElementsByAttribute('class', 'license-icon')[0];
var div = currentPage.getElementsByAttribute('class', 'license-description')[0];
}
else {
let hbox = document.createElement('hbox');
hbox.align = "center";
groupbox.appendChild(hbox);
var icon = document.createElement('image');
icon.className = 'license-icon';
icon.setAttribute('style', 'width: 88px');
hbox.appendChild(icon);
let sep = document.createElement('separator');
sep.orient = 'vertical';
sep.setAttribute('style', 'width: 10px');
hbox.appendChild(sep);
var div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
div.className = 'license-description';
div.setAttribute('style', 'width: 400px');
hbox.appendChild(div);
}
// Show generic CC icon on sharing page
if (currentPage.pageid == 'choose-sharing' && _shareSettings.sharing == 'cc') {
var license = 'cc';
}
else {
var license = _license;
}
icon.src = _getLicenseImage(license);
var url = _getLicenseURL(license);
if (url) {
icon.setAttribute('tooltiptext', url);
icon.style.cursor = 'pointer';
icon.onclick = function () {
try {
let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
let win = wm.getMostRecentWindow("navigator:browser");
win.ZoteroPane_Local.loadURI(url, { shiftKey: true })
}
catch (e) {
Zotero.logError(e);
}
return false;
};
}
else {
icon.removeAttribute('tooltiptext');
icon.style.cursor = 'auto';
}
div.innerHTML = _getLicenseHTML(license);
Zotero.Utilities.Internal.updateHTMLInXUL(div, { linkEvent: { shiftKey: true } });
_updateLicenseMoreInfo();
}
function _getLicenseImage(license) {
// Use generic "Some Rights Reserved" image
if (license == 'cc') {
return "chrome://zotero/skin/licenses/cc-srr.png";
}
else if (license == 'reserved') {
return "chrome://zotero/skin/licenses/reserved.png";
}
return "chrome://zotero/skin/licenses/" + license + ".svg";
}
function _getLicenseHTML(license) {
switch (license) {
case 'cc':
return '<a href="' + _getLicenseURL(license) + '">Creative Commons</a>';
case 'reserved':
return "All rights reserved";
case 'cc0':
return '<a href="' + _getLicenseURL(license) + '">CC0 1.0 Universal Public Domain Dedication</a>';
default:
return '<a href="' + _getLicenseURL(license) + '">'
+ Zotero.getString('licenses.' + license) + "</a>";
}
}
function _getLicenseName(license) {
switch (license) {
case 'reserved':
return "All rights reserved";
case 'cc0':
return 'CC0 1.0 Universal Public Domain Dedication';
default:
return Zotero.getString('licenses.' + license) + " (" + license.toUpperCase() + ")";
}
}
function _getLicenseURL(license) {
switch (license) {
case 'reserved':
return "";
case 'cc':
return 'https://creativecommons.org/';
case 'cc0':
return "https://creativecommons.org/publicdomain/zero/1.0/";
default:
return "https://creativecommons.org/licenses/" + license.replace(/^cc-/, '') + "/4.0/"
}
}
function _updateLicenseMoreInfo() {
var wizard = document.getElementById('zotero-publications-wizard');
var currentPage = wizard.currentPage;
var s = _shareSettings.sharing;
var div = currentPage.getElementsByAttribute('class', 'license-more-info')[0];
if (s == 'cc0' || currentPage.pageid == 'choose-license') {
let links = {
cc: 'https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees',
cc0: 'https://wiki.creativecommons.org/CC0_FAQ'
};
div.innerHTML = Zotero.getString(
'publications.' + s + '.moreInfo.text',
// Add link to localized string
'<a href="' + links[s] + '">'
+ Zotero.getString('publications.' + s + '.moreInfo.linkText')
+ '</a>'
);
Zotero.Utilities.Internal.updateHTMLInXUL(div, { linkEvent: { shiftKey: true } });
}
else {
div.innerHTML = "";
}
}
}