fx-compat: Correct create[XUL]Element[NS]() calls

This fixes the dictionary manager and various other places where a XUL
element was being created with createElement(), and also simplifies a lot
of createElementNS(HTML_NS, ...) calls.

This might cause some minor regressions but everything tested has
worked. Not touching preferences (#2659) or bindings.
This commit is contained in:
Abe Jellinek 2022-06-29 10:16:49 -04:00
parent 8b7d959781
commit f81b4b071f
26 changed files with 103 additions and 110 deletions

View file

@ -124,7 +124,7 @@ var Scaffold = new function () {
var primaryTypes = ['book', 'bookSection', 'conferencePaper', 'journalArticle', 'magazineArticle', 'newspaperArticle'];
for (let type of types) {
if (primaryTypes.includes(type)) continue;
var menuitem = document.createElement('menuitem');
var menuitem = document.createXULElement('menuitem');
menuitem.setAttribute('label', type);
menuitem.addEventListener('command', () => {
Scaffold.addTemplate('templateNewItem', type);

View file

@ -223,7 +223,7 @@ var CollectionTree = class CollectionTree extends LibraryTree {
const treeRow = this.getRow(index);
// Div creation and content
let div = oldDiv || document.createElementNS("http://www.w3.org/1999/xhtml", 'div');
let div = oldDiv || document.createElement('div');
div.innerHTML = "";
// Classes
@ -245,13 +245,13 @@ var CollectionTree = class CollectionTree extends LibraryTree {
div.style.paddingInlineStart = (CHILD_INDENT * depth) + 'px';
// Create a single-cell for the row (for the single-column layout)
let cell = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let cell = document.createElement('span');
cell.className = "cell label primary";
// Twisty/spacer
let twisty;
if (this.isContainerEmpty(index)) {
twisty = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
twisty = document.createElement('span');
if (Zotero.isMac && treeRow.isHeader()) {
twisty.classList.add("spacer-header");
}
@ -275,14 +275,14 @@ var CollectionTree = class CollectionTree extends LibraryTree {
icon.classList.add('cell-icon');
// Label
let label = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let label = document.createElement('span');
label.innerText = treeRow.getName();
label.className = 'cell-text';
// Editing input
div.classList.toggle('editing', treeRow == this._editing);
if (treeRow == this._editing) {
label = document.createElementNS("http://www.w3.org/1999/xhtml", 'input');
label = document.createElement('input');
label.className = 'cell-text';
label.setAttribute("size", 5);
label.value = treeRow.editingName;
@ -2116,12 +2116,12 @@ var CollectionTree = class CollectionTree extends LibraryTree {
iconClsName = iconClsName || "IconTreesource" + collectionType;
if (collectionType == 'Separator') {
return document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
return document.createElement('span');
}
var icon = getDOMIcon(iconClsName);
if (!icon) {
return document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
return document.createElement('span');
}
return icon;
}

View file

@ -211,7 +211,7 @@ module.exports.getDOMElement = function (icon) {
Zotero.debug(`Attempting to get non-existant icon ${icon}`);
return "";
}
let div = document.createElementNS("http://www.w3.org/1999/xhtml", 'div');
let div = document.createElement('div');
div.innerHTML = renderToStaticMarkup(React.createElement(module.exports[icon]));
domElementCache[icon] = div.firstChild;
return domElementCache[icon].cloneNode(true);

View file

@ -41,7 +41,7 @@ function getImageByStatus(status) {
else if (status === Zotero.ProgressQueue.ROW_SUCCEEDED) {
return getDOMElement('IconTick');
}
return document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
return document.createElement('span');
}
const ProgressQueueTable = ({ onActivate = noop, progressQueue }) => {
@ -59,7 +59,7 @@ const ProgressQueueTable = ({ onActivate = noop, progressQueue }) => {
div.innerHTML = "";
}
else {
div = document.createElementNS("http://www.w3.org/1999/xhtml", 'div');
div = document.createElement('div');
div.className = "row";
}
@ -67,7 +67,7 @@ const ProgressQueueTable = ({ onActivate = noop, progressQueue }) => {
for (let column of columns) {
if (column.dataKey === 'success') {
let span = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let span = document.createElement('span');
span.className = `cell icon ${column.className}`;
span.appendChild(getImageByStatus(row.status));
div.appendChild(span);

View file

@ -1009,7 +1009,7 @@ class VirtualizedTable extends React.Component {
xulElem.setAttribute('tooltip', 'html-tooltip');
}
if (document.querySelector('tooltip#html-tooltip')) return;
let tooltip = document.createElement('tooltip');
let tooltip = document.createXULElement('tooltip');
tooltip.id = 'html-tooltip';
tooltip.addEventListener('popupshowing', function(e) {
let tooltipTitleNode = document.tooltipNode.closest('div *[title], iframe *[title], browser *[title]');
@ -1019,7 +1019,13 @@ class VirtualizedTable extends React.Component {
}
e.preventDefault();
});
document.documentElement.appendChild(tooltip);
let popupset = document.querySelector('popupset');
if (!popupset) {
popupset = document.createXULElement('popupset');
document.documentElement.appendChild(popupset);
}
popupset.appendChild(tooltip);
}
_setAlternatingRows() {
@ -1246,7 +1252,7 @@ class VirtualizedTable extends React.Component {
}
_getRenderedTextHeight() {
let div = document.createElementNS("http://www.w3.org/1999/xhtml", 'div');
let div = document.createElement('div');
div.style.visibility = "hidden";
div.textContent = "Zotero";
document.documentElement.appendChild(div);
@ -1419,7 +1425,7 @@ var Columns = class {
this._columnStyleMap[column.dataKey] = ruleIndex;
}
} else {
this._stylesheet = document.createElementNS("http://www.w3.org/1999/xhtml", 'style');
this._stylesheet = document.createElement('style');
this._stylesheet.className = stylesheetClass;
document.children[0].appendChild(this._stylesheet);
this._columnStyleMap = {};
@ -1579,14 +1585,14 @@ var Columns = class {
};
function renderCell(index, data, column) {
let span = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let span = document.createElement('span');
span.className = `cell ${column.className}`;
span.innerText = data;
return span;
}
function renderCheckboxCell(index, data, column) {
let span = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let span = document.createElement('span');
span.className = `cell checkbox ${column.className}`;
span.setAttribute('role', 'checkbox');
span.setAttribute('aria-checked', data);
@ -1604,7 +1610,7 @@ function makeRowRenderer(getRowData) {
div.innerHTML = "";
}
else {
div = document.createElementNS("http://www.w3.org/1999/xhtml", 'div');
div = document.createElement('div');
div.className = "row";
}

View file

@ -68,7 +68,7 @@ module.exports = class {
*/
initialize() {
const { targetElement } = this;
this.innerElem = document.createElementNS("http://www.w3.org/1999/xhtml", 'div');
this.innerElem = document.createElement('div');
this.innerElem.className = "windowed-list";
targetElement.appendChild(this.innerElem);

View file

@ -345,7 +345,7 @@ Zotero.TagSelector = class TagSelectorContainer extends React.PureComponent {
}
getFontInfo() {
var elem = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
var elem = document.createElement("div");
elem.className = 'tag-selector-item';
elem.style.position = 'absolute';
elem.style.opacity = 0;
@ -381,7 +381,7 @@ Zotero.TagSelector = class TagSelectorContainer extends React.PureComponent {
*/
getTextWidth(text, font) {
// re-use canvas object for better performance
var canvas = this.canvas || (this.canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"));
var canvas = this.canvas || (this.canvas = document.createElement("canvas"));
var context = canvas.getContext("2d");
context.font = font;
// Add a little more to make sure we don't crop

View file

@ -30,8 +30,6 @@ var ReactDOM = require('react-dom');
var NotesList = require('components/itemPane/notesList').default;
var ZoteroContextPane = new function () {
const HTML_NS = 'http://www.w3.org/1999/xhtml';
var _tabCover;
var _contextPane;
var _contextPaneInner;
@ -489,7 +487,7 @@ var ZoteroContextPane = new function () {
var listBox = document.createXULElement('vbox');
listBox.style.display = 'flex';
listBox.setAttribute('flex', '1');
var listInner = document.createElementNS(HTML_NS, 'div');
var listInner = document.createElement('div');
listInner.className = 'notes-list-container';
// Otherwise it can be focused with tab
listInner.tabIndex = -1;
@ -742,11 +740,11 @@ var ZoteroContextPane = new function () {
node.querySelector('.zotero-context-pane-editor-parent-line').innerHTML = '';
var parentItem = item.parentItem;
if (parentItem) {
var container = document.createElementNS(HTML_NS, 'div');
var img = document.createElementNS(HTML_NS, 'img');
var container = document.createElement('div');
var img = document.createElement('img');
img.src = Zotero.ItemTypes.getImageSrc(parentItem.itemType);
img.className = 'parent-item-type';
var title = document.createElementNS(HTML_NS, 'div');
var title = document.createElement('div');
title.append(parentItem.getDisplayTitle());
title.className = 'parent-title';
container.append(img, title);

View file

@ -27,8 +27,6 @@
// eslint-disable-next-line camelcase, no-unused-vars
var Zotero_Dictionary_Manager = new function () {
const HTML_NS = 'http://www.w3.org/1999/xhtml';
var installed;
var updateMap;
@ -72,10 +70,10 @@ var Zotero_Dictionary_Manager = new function () {
var listbox = document.getElementById('dictionaries');
for (let d of list) {
let name = d.name;
let li = document.createElement('richlistitem');
let div = document.createElementNS(HTML_NS, 'div');
let li = document.createXULElement('richlistitem');
let div = document.createElement('div');
let checkbox = document.createElementNS(HTML_NS, 'input');
let checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.id = d.locale;
// Store properties on element
@ -91,7 +89,7 @@ var Zotero_Dictionary_Manager = new function () {
}
checkbox.setAttribute('tabindex', -1);
let label = document.createElementNS(HTML_NS, 'label');
let label = document.createElement('label');
label.setAttribute('for', d.locale);
// Add " (update available)"
if (updateMap.has(d.id)) {

View file

@ -79,7 +79,7 @@ window.addEventListener(
);
function createContentAreaContextMenuItem(name) {
let item = document.createElement('menuitem');
let item = document.createXULElement('menuitem');
item.id = 'context-' + name.toLowerCase();
item.setAttribute('label', Zotero.Intl.strings[name + 'Cmd.label']);
item.setAttribute('accesskey', Zotero.Intl.strings[name + 'Cmd.accesskey']);
@ -88,18 +88,18 @@ function createContentAreaContextMenuItem(name) {
}
function createContentAreaContextMenu() {
let menupopup = document.createElement('menupopup');
let menupopup = document.createXULElement('menupopup');
menupopup.id = 'contentAreaContextMenu';
menupopup.appendChild(createContentAreaContextMenuItem('undo'));
let undoSep = document.createElement('menuseparator');
let undoSep = document.createXULElement('menuseparator');
undoSep.id = 'context-sep-undo';
menupopup.appendChild(undoSep);
menupopup.appendChild(createContentAreaContextMenuItem('cut'));
menupopup.appendChild(createContentAreaContextMenuItem('copy'));
menupopup.appendChild(createContentAreaContextMenuItem('paste'));
menupopup.appendChild(createContentAreaContextMenuItem('delete'));
let pasteSep = document.createElement('menuseparator');
let pasteSep = document.createXULElement('menuseparator');
pasteSep.id = 'context-sep-paste';
menupopup.appendChild(pasteSep);
menupopup.appendChild(createContentAreaContextMenuItem('selectAll'));

View file

@ -2331,8 +2331,6 @@
// don't overlap.
if (!this._updateRetracted) {
this._updateRetracted = Zotero.serial(async function (item) {
var htmlNS = 'http://www.w3.org/1999/xhtml';
var show = Zotero.Retractions.isRetracted(item);
if (!show) {
this._id('retraction-box').hidden = true;
@ -2363,8 +2361,8 @@
elem.hidden = false;
elem.textContent = '';
for (let reason of data.reasons) {
let dt = document.createElementNS(htmlNS, 'dt');
let dd = document.createElementNS(htmlNS, 'dd');
let dt = document.createElement('dt');
let dd = document.createElement('dd');
dt.textContent = reason;
dd.textContent = Zotero.Retractions.getReasonDescription(reason);
@ -2385,7 +2383,7 @@
if (data.doi || data.pmid) {
let div = this._id('retraction-notice');
div.textContent = '';
let a = document.createElementNS(htmlNS, 'a');
let a = document.createElement('a');
a.textContent = Zotero.getString('retraction.notice');
if (data.doi) {
a.href = 'https://doi.org/' + data.doi;
@ -2405,13 +2403,13 @@
div.hidden = false;
div.textContent = '';
let p = document.createElementNS(htmlNS, 'p');
let p = document.createElement('p');
p.textContent = Zotero.getString('retraction.details');
let ul = document.createElementNS(htmlNS, 'ul');
let ul = document.createElement('ul');
for (let url of data.urls) {
let li = document.createElementNS(htmlNS, 'li');
let a = document.createElementNS(htmlNS, 'a');
let li = document.createElement('li');
let a = document.createElement('a');
url = url.replace(/^http:/, 'https:');
a.href = url;
a.textContent = url;
@ -2438,7 +2436,7 @@
creditElem.appendChild(document.createTextNode(part.text));
}
else if (part.type == 'link') {
let a = document.createElementNS(htmlNS, 'a');
let a = document.createElement('a');
a.href = part.attributes.href;
a.textContent = part.text;
creditElem.appendChild(a);

View file

@ -286,7 +286,7 @@
var label = this.createValueElement(name, tabindex);
if (this.editable) {
var remove = document.createElement("label");
var remove = document.createXULElement("label");
remove.setAttribute('value', '-');
remove.setAttribute('class', 'zotero-clicky zotero-clicky-minus');
remove.setAttribute('tabindex', -1);
@ -371,7 +371,7 @@
createValueElement(valueText, tabindex) {
var valueElement = document.createElement("label");
var valueElement = document.createXULElement("label");
valueElement.setAttribute('fieldname', 'tag');
valueElement.setAttribute('flex', 1);
valueElement.className = 'zotero-box-label';

View file

@ -256,8 +256,7 @@ var Zotero_Import_Wizard = {
catch (e) {
if (e.message == 'Encrypted Mendeley database') {
let url = 'https://www.zotero.org/support/kb/mendeley_import';
let HTML_NS = 'http://www.w3.org/1999/xhtml'
let elem = document.createElementNS(HTML_NS, 'div');
let elem = document.createElement('div');
elem.innerHTML = `The selected Mendeley database cannot be read, likely because it `
+ `is encrypted. See <a href="${url}" class="text-link">How do I import a `
+ `Mendeley library into Zotero?</a> for more information.`

View file

@ -117,7 +117,7 @@ var Zotero_Citation_Dialog = new function () {
var locator = locators[value];
var locatorLabel = Zotero.getString('citation.locator.'+locator.replace(/\s/g,''));
// add to list of labels
var child = document.createElement("menuitem");
var child = document.createXULElement("menuitem");
child.setAttribute("value", value);
child.setAttribute("label", locatorLabel);
label_list.appendChild(child);

View file

@ -122,7 +122,7 @@ var Zotero_QuickFormat = new function () {
var locatorLabel = Zotero.getString('citation.locator.'+locator.replace(/\s/g,''));
// add to list of labels
var child = document.createElement("menuitem");
var child = document.createXULElement("menuitem");
child.setAttribute("value", locator);
child.setAttribute("label", locatorLabel);
labelList.appendChild(child);
@ -620,7 +620,7 @@ var Zotero_QuickFormat = new function () {
var publicationTitle = item.getField("publicationTitle", false, true);
if(publicationTitle) {
var label = document.createElement("label");
var label = document.createXULElement("label");
label.setAttribute("value", publicationTitle);
label.setAttribute("crop", "end");
label.style.fontStyle = "italic";
@ -652,7 +652,7 @@ var Zotero_QuickFormat = new function () {
if(i != 0) str += ", ";
if(typeof node === "object") {
var label = document.createElement("label");
var label = document.createXULElement("label");
label.setAttribute("value", str);
label.setAttribute("crop", "end");
infoHbox.appendChild(label);
@ -666,7 +666,7 @@ var Zotero_QuickFormat = new function () {
if(nodes.length && (!str.length || str[str.length-1] !== ".")) str += ".";
}
var label = document.createElement("label");
var label = document.createXULElement("label");
label.setAttribute("value", str);
label.setAttribute("crop", "end");
label.setAttribute("flex", "1");
@ -677,13 +677,13 @@ var Zotero_QuickFormat = new function () {
* Creates an item to be added to the item list
*/
function _buildListItem(item) {
var titleNode = document.createElement("label");
var titleNode = document.createXULElement("label");
titleNode.setAttribute("class", "citation-dialog title");
titleNode.setAttribute("flex", "1");
titleNode.setAttribute("crop", "end");
titleNode.setAttribute("value", item.getDisplayTitle());
var infoNode = document.createElement("hbox");
var infoNode = document.createXULElement("hbox");
infoNode.setAttribute("class", "citation-dialog info");
_buildItemDescription(item, infoNode);
@ -703,7 +703,7 @@ var Zotero_QuickFormat = new function () {
* Creates a list separator to be added to the item list
*/
function _buildListSeparator(labelText, loading) {
var titleNode = document.createElement("label");
var titleNode = document.createXULElement("label");
titleNode.setAttribute("class", "citation-dialog separator-title");
titleNode.setAttribute("flex", "1");
titleNode.setAttribute("crop", "end");

View file

@ -41,7 +41,6 @@ const CHILD_INDENT = 12;
const COLORED_TAGS_RE = new RegExp("^[0-" + Zotero.Tags.MAX_COLORED_TAGS + "]{1}$");
const COLUMN_PREFS_FILEPATH = OS.Path.join(Zotero.Profile.dir, "treePrefs.json");
const EMOJI_RE = /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
const HTML_NS = "http://www.w3.org/1999/xhtml";
const ATTACHMENT_STATE_LOAD_DELAY = 150; //ms
var ItemTree = class ItemTree extends LibraryTree {
@ -132,7 +131,7 @@ var ItemTree = class ItemTree extends LibraryTree {
this._itemTreeLoadingDeferred.resolve();
// Create an element where we can create drag images to be displayed next to the cursor while dragging
// since for multiple item drags we need to display all the elements
let elem = this._dragImageContainer = document.createElementNS(HTML_NS, "div");
let elem = this._dragImageContainer = document.createElement("div");
elem.style.width = "100%";
elem.style.height = "2000px";
elem.style.position = "absolute";
@ -2621,7 +2620,7 @@ var ItemTree = class ItemTree extends LibraryTree {
if (this._titleMarkup.hasOwnProperty(token)) {
let markup = this._titleMarkup[token];
if (markup.beginsTag) {
let node = document.createElementNS(HTML_NS, markup.beginsTag);
let node = document.createElement(markup.beginsTag);
if (markup.style) {
Object.assign(node.style, markup.style);
}
@ -2663,14 +2662,14 @@ var ItemTree = class ItemTree extends LibraryTree {
}
_renderPrimaryCell(index, data, column) {
let span = document.createElementNS(HTML_NS, 'span');
let span = document.createElement('span');
span.className = `cell ${column.className}`;
span.classList.add('primary');
// Add twisty, icon, tag swatches and retraction indicator
let twisty;
if (this.isContainerEmpty(index)) {
twisty = document.createElementNS(HTML_NS, 'span');
twisty = document.createElement('span');
twisty.classList.add("spacer-twisty");
}
else {
@ -2716,7 +2715,7 @@ var ItemTree = class ItemTree extends LibraryTree {
Zotero.debug(e, 1);
}
let textSpan = document.createElementNS(HTML_NS, 'span');
let textSpan = document.createElement('span');
let textWithFullStop = this._renderItemTitle(data, textSpan);
if (!textWithFullStop.match(/\.$/)) {
textWithFullStop += '.';
@ -2735,7 +2734,7 @@ var ItemTree = class ItemTree extends LibraryTree {
}
_renderHasAttachmentCell(index, data, column) {
let span = document.createElementNS(HTML_NS, 'span');
let span = document.createElement('span');
span.className = `cell ${column.className}`;
if (this.collectionTreeRow.isTrash()) return span;
@ -2865,7 +2864,7 @@ var ItemTree = class ItemTree extends LibraryTree {
div.innerHTML = "";
}
else {
div = document.createElementNS(HTML_NS, 'div');
div = document.createElement('div');
div.className = "row";
}
@ -2878,7 +2877,7 @@ var ItemTree = class ItemTree extends LibraryTree {
if (this._dropRow == index) {
let span;
if (Zotero.DragDrop.currentOrientation != 0) {
span = document.createElementNS(HTML_NS, 'span');
span = document.createElement('span');
span.className = Zotero.DragDrop.currentOrientation < 0 ? "drop-before" : "drop-after";
div.appendChild(span);
} else {
@ -3252,13 +3251,12 @@ var ItemTree = class ItemTree extends LibraryTree {
if (this.collectionTreeRow && !this.rowCount) {
let doc = this._ownerDocument;
let ns = 'http://www.w3.org/1999/xhtml';
let div;
// My Library and no groups
if (this.collectionTreeRow.isLibrary() && !Zotero.Groups.getAll().length) {
div = doc.createElementNS(ns, 'div');
let p = doc.createElementNS(ns, 'p');
div = doc.createElement('div');
let p = doc.createElement('p');
let html = Zotero.getString(
'pane.items.intro.text1',
[
@ -3271,7 +3269,7 @@ var ItemTree = class ItemTree extends LibraryTree {
p.innerHTML = html;
div.appendChild(p);
p = doc.createElementNS(ns, 'p');
p = doc.createElement('p');
html = Zotero.getString(
'pane.items.intro.text2',
[
@ -3290,7 +3288,7 @@ var ItemTree = class ItemTree extends LibraryTree {
p.innerHTML = html;
div.appendChild(p);
p = doc.createElementNS(ns, 'p');
p = doc.createElement('p');
html = Zotero.getString('pane.items.intro.text3', [Zotero.clientName]);
// Encode special chars, which shouldn't exist
html = Zotero.Utilities.htmlSpecialChars(html);
@ -3323,17 +3321,17 @@ var ItemTree = class ItemTree extends LibraryTree {
}
// My Publications
else if (this.collectionTreeRow.isPublications()) {
div = doc.createElementNS(ns, 'div');
div = doc.createElement('div');
div.className = 'publications';
let p = doc.createElementNS(ns, 'p');
let p = doc.createElement('p');
p.textContent = Zotero.getString('publications.intro.text1', window.ZOTERO_CONFIG.DOMAIN_NAME);
div.appendChild(p);
p = doc.createElementNS(ns, 'p');
p = doc.createElement('p');
p.textContent = Zotero.getString('publications.intro.text2');
div.appendChild(p);
p = doc.createElementNS(ns, 'p');
p = doc.createElement('p');
let html = Zotero.getString('publications.intro.text3');
// Convert <b> tags to placeholders
html = html.replace('<b>', ':b:').replace('</b>', ':/b:');
@ -3821,7 +3819,7 @@ var ItemTree = class ItemTree extends LibraryTree {
var icon = getDOMElement(iconClsName);
if (!icon) {
Zotero.debug('Could not find tree icon for "' + itemType + '"');
return document.createElementNS(HTML_NS, 'span');
return document.createElement('span');
}
return icon;
}
@ -3832,7 +3830,7 @@ var ItemTree = class ItemTree extends LibraryTree {
}
_getTagSwatch(tag, color) {
let span = document.createElementNS(HTML_NS, 'span');
let span = document.createElement('span');
span.className = 'tag-swatch';
// If only emoji, display directly
//

View file

@ -280,21 +280,21 @@ var Zotero_Publications_Dialog = new function () {
var div = currentPage.getElementsByAttribute('class', 'license-description')[0];
}
else {
let hbox = document.createElement('hbox');
let hbox = document.createXULElement('hbox');
hbox.align = "center";
groupbox.appendChild(hbox);
var icon = document.createElement('image');
var icon = document.createXULElement('image');
icon.className = 'license-icon';
icon.setAttribute('style', 'width: 88px');
hbox.appendChild(icon);
let sep = document.createElement('separator');
let sep = document.createXULElement('separator');
sep.orient = 'vertical';
sep.setAttribute('style', 'width: 10px');
hbox.appendChild(sep);
var div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
var div = document.createElement('div');
div.className = 'license-description';
div.setAttribute('style', 'width: 400px');
hbox.appendChild(div);

View file

@ -702,7 +702,7 @@ var Zotero_RTFScan = new function() {
div.innerHTML = "";
}
else {
div = document.createElementNS("http://www.w3.org/1999/xhtml", 'div');
div = document.createElement('div');
div.className = "row";
}
@ -721,15 +721,15 @@ var Zotero_RTFScan = new function() {
{ passive: true });
}
else {
twisty = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
twisty = document.createElement('span');
twisty.classList.add("spacer-twisty");
}
let textSpan = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let textSpan = document.createElement('span');
textSpan.className = "cell-text";
textSpan.innerText = row[column.dataKey] || "";
let span = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let span = document.createElement('span');
span.className = `cell primary ${column.className}`;
span.appendChild(twisty);
span.appendChild(textSpan);
@ -737,7 +737,7 @@ var Zotero_RTFScan = new function() {
div.appendChild(span);
}
else if (column.dataKey == 'action') {
let span = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let span = document.createElement('span');
span.className = `cell action ${column.className}`;
if (row.parent) {
if (row.action) {
@ -753,7 +753,7 @@ var Zotero_RTFScan = new function() {
div.appendChild(span);
}
else {
let span = document.createElementNS("http://www.w3.org/1999/xhtml", 'span');
let span = document.createElement('span');
span.className = `cell ${column.className}`;
span.innerText = row[column.dataKey] || "";
div.appendChild(span);

View file

@ -128,7 +128,7 @@ var Zotero_Tag_Color_Chooser = new function() {
var msg = Zotero.getString('tagColorChooser.numberKeyInstructions');
var matches = msg.match(/(.+)\$NUMBER(.+)/);
var num = document.createElement('label');
var num = document.createXULElement('label');
num.id = 'number-key';
num.setAttribute('value', parseInt(tagPosition.value) + 1);

View file

@ -826,7 +826,7 @@ Zotero.Tags = new function() {
.getService(Components.interfaces.nsIAppShellService)
.hiddenDOMWindow;
var doc = win.document;
var canvas = doc.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
var canvas = doc.createElement('canvas');
var width = extraImageWidth
+ (retracted

View file

@ -475,7 +475,7 @@ class PDFRenderer {
return new Promise((resolve) => {
this._browser = Zotero.Browser.createHiddenBrowser();
let doc = this._browser.ownerDocument;
let container = doc.createElement('hbox');
let container = doc.createXULElement('hbox');
container.style.position = 'fixed';
container.style.zIndex = '-1';
container.append(this._browser);

View file

@ -32,7 +32,6 @@ if (!Zotero.Sync) {
// Initialized as Zotero.Sync.Runner in zotero.js
Zotero.Sync.Runner_Module = function (options = {}) {
const stopOnError = false;
const HTML_NS = 'http://www.w3.org/1999/xhtml';
Zotero.defineProperty(this, 'enabled', {
get: () => {
@ -1692,7 +1691,7 @@ Zotero.Sync.Runner_Module = function (options = {}) {
if (_tooltipMessages.length) {
_currentTooltipMessages.textContent = '';
for (let message of _tooltipMessages) {
let elem = _currentTooltipMessages.ownerDocument.createElementNS(HTML_NS, 'p');
let elem = _currentTooltipMessages.ownerDocument.createElement('p');
elem.textContent = message;
_currentTooltipMessages.appendChild(elem);
}

View file

@ -1678,7 +1678,7 @@ Zotero.Utilities.Internal = {
var selectedIndex = 0;
var i = 0;
for (let library of libraries) {
let menuitem = menulist.ownerDocument.createElement('menuitem');
let menuitem = menulist.ownerDocument.createXULElement('menuitem');
menuitem.value = library.libraryID;
menuitem.setAttribute('label', library.name);
menupopup.appendChild(menuitem);
@ -1694,14 +1694,13 @@ Zotero.Utilities.Internal = {
buildLibraryMenuHTML: function (select, libraries, selectedLibraryID) {
var namespaceURI = 'http://www.w3.org/1999/xhtml';
while (select.hasChildNodes()) {
select.removeChild(select.firstChild);
}
var selectedIndex = 0;
var i = 0;
for (let library of libraries) {
let option = select.ownerDocument.createElementNS(namespaceURI, 'option');
let option = select.ownerDocument.createElement('option');
option.setAttribute('value', library.libraryID);
option.setAttribute('data-editable', library.editable ? 'true' : 'false');
option.setAttribute('data-filesEditable', library.filesEditable ? 'true' : 'false');

View file

@ -1453,8 +1453,6 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
* @return void
*/
this.showZoteroPaneProgressMeter = function (msg, determinate, icon, modalOnly) {
const HTML_NS = "http://www.w3.org/1999/xhtml"
// If msg is undefined, keep any existing message. If false/null/"", clear.
// The message is also cleared when the meters are hidden.
_progressMessage = msg = (msg === undefined ? _progressMessage : msg) || "";
@ -1489,7 +1487,7 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
let id = 'zotero-pane-progressmeter';
let progressMeter = doc.getElementById(id);
if (!progressMeter) {
progressMeter = doc.createElementNS(HTML_NS, 'progress');
progressMeter = doc.createElement('progress');
progressMeter.id = id;
}
if (determinate) {
@ -1647,10 +1645,10 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
button.id = 'zotero-tb-search-menu-button';
button.setAttribute('type', 'menu');
var menupopup = document.createElement('menupopup');
var menupopup = document.createXULElement('menupopup');
for (var i in modes) {
var menuitem = document.createElement('menuitem');
var menuitem = document.createXULElement('menuitem');
menuitem.setAttribute('id', prefix + i);
menuitem.setAttribute('label', modes[i].label);
menuitem.setAttribute('name', 'searchMode');

View file

@ -3248,7 +3248,7 @@ var ZoteroPane = new function()
if (eligibleAttachments.length > 1) {
show.add(m.createNoteFromAnnotationsMenu);
for (let attachment of attachmentsWithAnnotations) {
let menuitem = document.createElement('menuitem');
let menuitem = document.createXULElement('menuitem');
menuitem.setAttribute('label', attachment.getDisplayTitle());
menuitem.onclick = () => {
ZoteroPane.createNoteFromAnnotationsForAttachment(attachment);
@ -3626,7 +3626,7 @@ var ZoteroPane = new function()
if (typeof content == 'string') {
let contentParts = content.split("\n\n");
for (let part of contentParts) {
let desc = document.createElement('description');
let desc = document.createXULElement('description');
desc.appendChild(document.createTextNode(part));
elem.appendChild(desc);
}

View file

@ -191,14 +191,14 @@ ZoteroPluginInstaller.prototype = {
showPreferences: function(document) {
this.prefPaneDoc = document;
var isInstalled = this.isInstalled(),
groupbox = document.createElement("groupbox");
groupbox = document.createXULElement("groupbox");
groupbox.id = this._addon.EXTENSION_DIR;
var caption = document.createElement("caption");
var caption = document.createXULElement("caption");
caption.setAttribute("label", this._addon.APP);
groupbox.appendChild(caption);
var description = document.createElement("description");
var description = document.createXULElement("description");
description.style.width = "45em";
description.appendChild(document.createTextNode(
isInstalled ?
@ -206,9 +206,9 @@ ZoteroPluginInstaller.prototype = {
Zotero.getString('zotero.preferences.wordProcessors.notInstalled', this._addon.APP)));
groupbox.appendChild(description);
var hbox = document.createElement("hbox");
var hbox = document.createXULElement("hbox");
hbox.setAttribute("pack", "center");
var button = document.createElement("button"),
var button = document.createXULElement("button"),
addon = this._addon;
button.setAttribute("label",
(isInstalled ?