diff --git a/chrome/content/zotero/components/createParent/createParent.jsx b/chrome/content/zotero/components/createParent/createParent.jsx new file mode 100644 index 0000000000..7ce4ba0c27 --- /dev/null +++ b/chrome/content/zotero/components/createParent/createParent.jsx @@ -0,0 +1,91 @@ +/* + ***** BEGIN LICENSE BLOCK ***** + + Copyright © 2020 Corporation for Digital Scholarship + Vienna, Virginia, USA + https://digitalscholar.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 . + + ***** END LICENSE BLOCK ***** +*/ + +'use strict'; + +import React, { memo } from 'react'; +import ReactDOM from "react-dom"; +import PropTypes from 'prop-types'; +import cx from 'classnames'; +import { IntlProvider } from "react-intl"; + +function CreateParent({ loading, item, toggleAccept }) { + // When the input has/does not have characters toggle the accept button on the dialog + const handleInput = (e) => { + if (e.target.value.trim() !== '') { + toggleAccept(true); + } + else { + toggleAccept(false); + } + }; + + return ( + +
+ + { item.attachmentFilename } + +
+ +
+
+
+
+
+
+ ); +} + + +CreateParent.propTypes = { + loading: PropTypes.bool, + item: PropTypes.object, + toggleAccept: PropTypes.func +}; + +Zotero.CreateParent = memo(CreateParent); + + +Zotero.CreateParent.destroy = (domEl) => { + ReactDOM.unmountComponentAtNode(domEl); +}; + + +Zotero.CreateParent.render = (domEl, props) => { + ReactDOM.render(, domEl); +}; diff --git a/chrome/content/zotero/createParentDialog.js b/chrome/content/zotero/createParentDialog.js new file mode 100644 index 0000000000..2253f7da05 --- /dev/null +++ b/chrome/content/zotero/createParentDialog.js @@ -0,0 +1,80 @@ +/* + ***** BEGIN LICENSE BLOCK ***** + + Copyright © 2009 Center for History and New Media + George Mason University, Fairfax, Virginia, USA + http://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 . + + ***** END LICENSE BLOCK ***** +*/ + +"use strict"; + +var io; +let createParent; + +function toggleAccept(enabled) { + document.documentElement.getButton("accept").disabled = !enabled; +} + +function doLoad() { + // Set font size from pref + let sbc = document.getElementById('zotero-create-parent-container'); + Zotero.setFontSize(sbc); + + io = window.arguments[0]; + + createParent = document.getElementById('create-parent'); + Zotero.CreateParent.render(createParent, { + loading: false, + item: io.dataIn.item, + toggleAccept + }); +} + +function doUnload() { + Zotero.CreateParent.destroy(createParent); +} + +async function doAccept() { + let textBox = document.getElementById('parent-item-identifier'); + let childItem = io.dataIn.item; + let newItems = await Zotero_Lookup.addItemsFromIdentifier( + textBox, + childItem, + (on) => { + // Render react again with correct loading value + Zotero.CreateParent.render(createParent, { + loading: on, + item: childItem, + toggleAccept + }); + } + ); + + // If we successfully created a parent, return it + if (newItems) { + io.dataOut = { parent: newItems[0] }; + window.close(); + } +} + +function doManualEntry() { + io.dataOut = { parent: false }; + window.close(); +} diff --git a/chrome/content/zotero/createParentDialog.xul b/chrome/content/zotero/createParentDialog.xul new file mode 100644 index 0000000000..e92707d6cf --- /dev/null +++ b/chrome/content/zotero/createParentDialog.xul @@ -0,0 +1,34 @@ + + + + + + + + + + + +