diff --git a/mixins/Editing.spec.ts b/editing.spec.ts similarity index 96% rename from mixins/Editing.spec.ts rename to editing.spec.ts index dc12e3a..dbb1fe2 100644 --- a/mixins/Editing.spec.ts +++ b/editing.spec.ts @@ -17,10 +17,6 @@ import { webUrl, } from 'fast-check'; -import { LitElement } from 'lit'; - -import { customElement } from 'lit/decorators.js'; - import { Edit, Insert, @@ -30,8 +26,11 @@ import { newOpenEvent, Remove, Update, -} from '../foundation.js'; -import { Editing } from './Editing.js'; +} from './foundation.js'; + +import './open-scd.js'; + +import type { OpenSCD } from './open-scd.js'; export namespace util { export const xmlAttributeName = @@ -183,19 +182,14 @@ export namespace util { ) ); } - - @customElement('editing-element') - export class EditingElement extends Editing(LitElement) {} } describe('Editing Element', () => { - let editor: util.EditingElement; + let editor: OpenSCD; let sclDoc: XMLDocument; beforeEach(async () => { - editor = ( - await fixture(html``) - ); + editor = await fixture(html``); sclDoc = new DOMParser().parseFromString( util.sclDocString, 'application/xml' diff --git a/mixins/Editing.ts b/mixins/Editing.ts deleted file mode 100644 index a14850a..0000000 --- a/mixins/Editing.ts +++ /dev/null @@ -1,214 +0,0 @@ -import { LitElement } from 'lit'; - -import { property, state } from 'lit/decorators.js'; - -import { - AttributeValue, - Edit, - EditEvent, - Insert, - isComplex, - isInsert, - isNamespaced, - isRemove, - isUpdate, - LitElementConstructor, - OpenEvent, - Remove, - Update, -} from '../foundation.js'; - -function localAttributeName(attribute: string): string { - return attribute.includes(':') ? attribute.split(':', 2)[1] : attribute; -} - -function handleInsert({ - parent, - node, - reference, -}: Insert): Insert | Remove | [] { - try { - const { parentNode, nextSibling } = node; - parent.insertBefore(node, reference); - if (parentNode) - return { - node, - parent: parentNode, - reference: nextSibling, - }; - return { node }; - } catch (e) { - // do nothing if insert doesn't work on these nodes - return []; - } -} - -function handleUpdate({ element, attributes }: Update): Update { - const oldAttributes = { ...attributes }; - Object.entries(attributes) - .reverse() - .forEach(([name, value]) => { - let oldAttribute: AttributeValue; - if (isNamespaced(value!)) - oldAttribute = { - value: element.getAttributeNS( - value.namespaceURI, - localAttributeName(name) - ), - namespaceURI: value.namespaceURI, - }; - else - oldAttribute = element.getAttributeNode(name)?.namespaceURI - ? { - value: element.getAttribute(name), - namespaceURI: element.getAttributeNode(name)!.namespaceURI!, - } - : element.getAttribute(name); - oldAttributes[name] = oldAttribute; - }); - for (const entry of Object.entries(attributes)) { - try { - const [attribute, value] = entry as [string, AttributeValue]; - if (isNamespaced(value)) { - if (value.value === null) - element.removeAttributeNS( - value.namespaceURI, - localAttributeName(attribute) - ); - else element.setAttributeNS(value.namespaceURI, attribute, value.value); - } else if (value === null) element.removeAttribute(attribute); - else element.setAttribute(attribute, value); - } catch (e) { - // do nothing if update doesn't work on this attribute - delete oldAttributes[entry[0]]; - } - } - return { - element, - attributes: oldAttributes, - }; -} - -function handleRemove({ node }: Remove): Insert | [] { - const { parentNode: parent, nextSibling: reference } = node; - node.parentNode?.removeChild(node); - if (parent) - return { - node, - parent, - reference, - }; - return []; -} - -function handleEdit(edit: Edit): Edit { - if (isInsert(edit)) return handleInsert(edit); - if (isUpdate(edit)) return handleUpdate(edit); - if (isRemove(edit)) return handleRemove(edit); - if (isComplex(edit)) return edit.map(handleEdit).reverse(); - return []; -} - -export type LogEntry = { undo: Edit; redo: Edit }; - -export interface EditingMixin { - doc: XMLDocument; - history: LogEntry[]; - editCount: number; - last: number; - canUndo: boolean; - canRedo: boolean; - docs: Record; - docName: string; - handleOpenDoc(evt: OpenEvent): void; - handleEditEvent(evt: EditEvent): void; - undo(n?: number): void; - redo(n?: number): void; -} - -type ReturnConstructor = new (...args: any[]) => LitElement & EditingMixin; - -/** A mixin for editing a set of [[docs]] using [[EditEvent]]s */ -export function Editing( - Base: TBase -): TBase & ReturnConstructor { - class EditingElement extends Base { - @state() - /** The `XMLDocument` currently being edited */ - get doc(): XMLDocument { - return this.docs[this.docName]; - } - - @state() - history: LogEntry[] = []; - - @state() - editCount: number = 0; - - @state() - get last(): number { - return this.editCount - 1; - } - - @state() - get canUndo(): boolean { - return this.last >= 0; - } - - @state() - get canRedo(): boolean { - return this.editCount < this.history.length; - } - - /** - * The set of `XMLDocument`s currently loaded - * - * @prop {Record} docs - Record of loaded XML documents - */ - @state() - docs: Record = {}; - - /** - * The name of the [[`doc`]] currently being edited - * - * @prop {String} docName - name of the document that is currently being edited - */ - @property({ type: String, reflect: true }) docName = ''; - - handleOpenDoc({ detail: { docName, doc } }: OpenEvent) { - this.docName = docName; - this.docs[this.docName] = doc; - } - - handleEditEvent(event: EditEvent) { - const edit = event.detail; - this.history.splice(this.editCount); - this.history.push({ undo: handleEdit(edit), redo: edit }); - this.editCount += 1; - } - - /** Undo the last `n` [[Edit]]s committed */ - undo(n = 1) { - if (!this.canUndo || n < 1) return; - handleEdit(this.history[this.last!].undo); - this.editCount -= 1; - if (n > 1) this.undo(n - 1); - } - - /** Redo the last `n` [[Edit]]s that have been undone */ - redo(n = 1) { - if (!this.canRedo || n < 1) return; - handleEdit(this.history[this.editCount].redo); - this.editCount += 1; - if (n > 1) this.redo(n - 1); - } - - constructor(...args: any[]) { - super(...args); - - this.addEventListener('oscd-open', this.handleOpenDoc); - this.addEventListener('oscd-edit', event => this.handleEditEvent(event)); - } - } - return EditingElement; -} diff --git a/mixins/Plugging.ts b/mixins/Plugging.ts deleted file mode 100644 index 24930ad..0000000 --- a/mixins/Plugging.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { LitElement } from 'lit'; - -import { property, state } from 'lit/decorators.js'; - -import { cyrb64, LitElementConstructor } from '../foundation.js'; -import { targetLocales } from '../locales.js'; - -export type Plugin = { - name: string; - translations?: Record; - src: string; - icon: string; - requireDoc?: boolean; - active?: boolean; -}; -export type PluginSet = { menu: Plugin[]; editor: Plugin[] }; - -const pluginTags = new Map(); - -/** @returns a valid customElement tagName containing the URI hash. */ -export function pluginTag(uri: string): string { - if (!pluginTags.has(uri)) pluginTags.set(uri, `oscd-p${cyrb64(uri)}`); - return pluginTags.get(uri)!; -} - -export interface PluginMixin { - loadedPlugins: Map; - plugins: Partial; -} - -type ReturnConstructor = new (...args: any[]) => LitElement & PluginMixin; - -export function Plugging( - Base: TBase -): TBase & ReturnConstructor { - class PluggingElement extends Base { - #loadedPlugins = new Map(); - - @state() - get loadedPlugins(): Map { - return this.#loadedPlugins; - } - - #plugins: PluginSet = { menu: [], editor: [] }; - - /** - * @prop {PluginSet} plugins - Set of plugins that are used by OpenSCD - */ - @property({ type: Object }) - get plugins(): PluginSet { - return this.#plugins; - } - - set plugins(plugins: Partial) { - Object.values(plugins).forEach(kind => - kind.forEach(plugin => { - const tagName = pluginTag(plugin.src); - if (this.loadedPlugins.has(tagName)) return; - this.#loadedPlugins.set(tagName, plugin); - if (customElements.get(tagName)) return; - const url = new URL(plugin.src, window.location.href).toString(); - import(url).then(mod => customElements.define(tagName, mod.default)); - }) - ); - - this.#plugins = { menu: [], editor: [], ...plugins }; - this.requestUpdate(); - } - } - return PluggingElement; -} diff --git a/open-scd.ts b/open-scd.ts index 4389460..af8adde 100644 --- a/open-scd.ts +++ b/open-scd.ts @@ -20,13 +20,46 @@ import type { Drawer } from '@material/mwc-drawer'; import { allLocales, sourceLocale, targetLocales } from './locales.js'; -import { isComplex, isInsert, isRemove, isUpdate } from './foundation.js'; +import { + AttributeValue, + cyrb64, + Edit, + EditEvent, + Insert, + isComplex, + isInsert, + isNamespaced, + isRemove, + isUpdate, + OpenEvent, + Remove, + Update, +} from './foundation.js'; + +export type LogEntry = { undo: Edit; redo: Edit }; + +export type Plugin = { + name: string; + translations?: Record; + src: string; + icon: string; + requireDoc?: boolean; + active?: boolean; +}; +export type PluginSet = { menu: Plugin[]; editor: Plugin[] }; -import { Editing, LogEntry } from './mixins/Editing.js'; -import { Plugging, Plugin, pluginTag } from './mixins/Plugging.js'; +const pluginTags = new Map(); + +/** @returns a valid customElement tagName containing the URI hash. */ +export function pluginTag(uri: string): string { + if (!pluginTags.has(uri)) pluginTags.set(uri, `oscd-p${cyrb64(uri)}`); + return pluginTags.get(uri)!; +} -export { Plugging } from './mixins/Plugging.js'; -export { Editing } from './mixins/Editing.js'; +export interface PluginMixin { + loadedPlugins: Map; + plugins: Partial; +} type Control = { icon: string; @@ -85,6 +118,97 @@ function renderMenuItem(control: Control): TemplateResult { `; } +function localAttributeName(attribute: string): string { + return attribute.includes(':') ? attribute.split(':', 2)[1] : attribute; +} + +function handleInsert({ + parent, + node, + reference, +}: Insert): Insert | Remove | [] { + try { + const { parentNode, nextSibling } = node; + parent.insertBefore(node, reference); + if (parentNode) + return { + node, + parent: parentNode, + reference: nextSibling, + }; + return { node }; + } catch (e) { + // do nothing if insert doesn't work on these nodes + return []; + } +} + +function handleUpdate({ element, attributes }: Update): Update { + const oldAttributes = { ...attributes }; + Object.entries(attributes) + .reverse() + .forEach(([name, value]) => { + let oldAttribute: AttributeValue; + if (isNamespaced(value!)) + oldAttribute = { + value: element.getAttributeNS( + value.namespaceURI, + localAttributeName(name) + ), + namespaceURI: value.namespaceURI, + }; + else + oldAttribute = element.getAttributeNode(name)?.namespaceURI + ? { + value: element.getAttribute(name), + namespaceURI: element.getAttributeNode(name)!.namespaceURI!, + } + : element.getAttribute(name); + oldAttributes[name] = oldAttribute; + }); + for (const entry of Object.entries(attributes)) { + try { + const [attribute, value] = entry as [string, AttributeValue]; + if (isNamespaced(value)) { + if (value.value === null) + element.removeAttributeNS( + value.namespaceURI, + localAttributeName(attribute) + ); + else element.setAttributeNS(value.namespaceURI, attribute, value.value); + } else if (value === null) element.removeAttribute(attribute); + else element.setAttribute(attribute, value); + } catch (e) { + // do nothing if update doesn't work on this attribute + delete oldAttributes[entry[0]]; + } + } + return { + element, + attributes: oldAttributes, + }; +} + +function handleRemove({ node }: Remove): Insert | [] { + const { parentNode: parent, nextSibling: reference } = node; + node.parentNode?.removeChild(node); + if (parent) + return { + node, + parent, + reference, + }; + return []; +} + +function handleEdit(edit: Edit): Edit { + if (isInsert(edit)) return handleInsert(edit); + if (isUpdate(edit)) return handleUpdate(edit); + if (isRemove(edit)) return handleRemove(edit); + if (isComplex(edit)) return edit.map(handleEdit).reverse(); + return []; +} + /** * * @description Outer Shell for OpenSCD. @@ -96,7 +220,7 @@ function renderMenuItem(control: Control): TemplateResult { */ @customElement('open-scd') @localized() -export class OpenSCD extends Plugging(Editing(LitElement)) { +export class OpenSCD extends LitElement { @query('#log') logUI!: Dialog; @@ -217,10 +341,115 @@ export class OpenSCD extends Plugging(Editing(LitElement)) { e.preventDefault(); } + @state() + /** The `XMLDocument` currently being edited */ + get doc(): XMLDocument { + return this.docs[this.docName]; + } + + @state() + history: LogEntry[] = []; + + @state() + editCount: number = 0; + + @state() + get last(): number { + return this.editCount - 1; + } + + @state() + get canUndo(): boolean { + return this.last >= 0; + } + + @state() + get canRedo(): boolean { + return this.editCount < this.history.length; + } + + /** + * The set of `XMLDocument`s currently loaded + * + * @prop {Record} docs - Record of loaded XML documents + */ + @state() + docs: Record = {}; + + /** + * The name of the [[`doc`]] currently being edited + * + * @prop {String} docName - name of the document that is currently being edited + */ + @property({ type: String, reflect: true }) docName = ''; + + handleOpenDoc({ detail: { docName, doc } }: OpenEvent) { + this.docName = docName; + this.docs[this.docName] = doc; + } + + handleEditEvent(event: EditEvent) { + const edit = event.detail; + this.history.splice(this.editCount); + this.history.push({ undo: handleEdit(edit), redo: edit }); + this.editCount += 1; + } + + /** Undo the last `n` [[Edit]]s committed */ + undo(n = 1) { + if (!this.canUndo || n < 1) return; + handleEdit(this.history[this.last!].undo); + this.editCount -= 1; + if (n > 1) this.undo(n - 1); + } + + /** Redo the last `n` [[Edit]]s that have been undone */ + redo(n = 1) { + if (!this.canRedo || n < 1) return; + handleEdit(this.history[this.editCount].redo); + this.editCount += 1; + if (n > 1) this.redo(n - 1); + } + + #loadedPlugins = new Map(); + + @state() + get loadedPlugins(): Map { + return this.#loadedPlugins; + } + + #plugins: PluginSet = { menu: [], editor: [] }; + + /** + * @prop {PluginSet} plugins - Set of plugins that are used by OpenSCD + */ + @property({ type: Object }) + get plugins(): PluginSet { + return this.#plugins; + } + + set plugins(plugins: Partial) { + Object.values(plugins).forEach(kind => + kind.forEach(plugin => { + const tagName = pluginTag(plugin.src); + if (this.loadedPlugins.has(tagName)) return; + this.#loadedPlugins.set(tagName, plugin); + if (customElements.get(tagName)) return; + const url = new URL(plugin.src, window.location.href).toString(); + import(url).then(mod => customElements.define(tagName, mod.default)); + }) + ); + + this.#plugins = { menu: [], editor: [], ...plugins }; + this.requestUpdate(); + } + constructor() { super(); this.handleKeyPress = this.handleKeyPress.bind(this); document.addEventListener('keydown', this.handleKeyPress); + this.addEventListener('oscd-open', this.handleOpenDoc); + this.addEventListener('oscd-edit', event => this.handleEditEvent(event)); } private renderLogEntry(entry: LogEntry) { diff --git a/package-lock.json b/package-lock.json index 3b3ace0..6e1f57f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@openscd/open-scd-core", - "version": "1.0.1", + "version": "0.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@openscd/open-scd-core", - "version": "1.0.1", + "version": "0.0.2", "license": "Apache-2.0", "dependencies": { "@lit/localize": "^0.11.4", diff --git a/package.json b/package.json index 4798581..132f11a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@openscd/open-scd-core", - "version": "1.0.1", + "version": "0.0.2", "description": "The core editor component of open-scd, without any extensions pre-installed.", "author": "Open-SCD", "license": "Apache-2.0", diff --git a/mixins/Plugging.spec.ts b/plugin.spec.ts similarity index 83% rename from mixins/Plugging.spec.ts rename to plugin.spec.ts index 1aedaed..90643ca 100644 --- a/mixins/Plugging.spec.ts +++ b/plugin.spec.ts @@ -1,22 +1,16 @@ import { expect, fixture } from '@open-wc/testing'; -import { html, LitElement } from 'lit'; -import { customElement } from 'lit/decorators.js'; +import { html } from 'lit'; -import { Plugging } from './Plugging.js'; +import './open-scd.js'; -namespace util { - @customElement('plugging-element') - export class PluggingElement extends Plugging(LitElement) {} -} +import type { OpenSCD } from './open-scd.js'; describe('Plugging Element', () => { - let editor: util.PluggingElement; + let editor: OpenSCD; beforeEach(async () => { - editor = ( - await fixture(html``) - ); + editor = await fixture(html``); }); it('loads menu plugins', () => { diff --git a/screenshots/Chromium/baseline/app-bar-de.png b/screenshots/Chromium/baseline/app-bar-de.png index 5cbe9f2..a315ea0 100644 Binary files a/screenshots/Chromium/baseline/app-bar-de.png and b/screenshots/Chromium/baseline/app-bar-de.png differ diff --git a/screenshots/Chromium/baseline/app-bar-en.png b/screenshots/Chromium/baseline/app-bar-en.png index 5cbe9f2..a315ea0 100644 Binary files a/screenshots/Chromium/baseline/app-bar-en.png and b/screenshots/Chromium/baseline/app-bar-en.png differ diff --git a/screenshots/Chromium/baseline/document-name-de.png b/screenshots/Chromium/baseline/document-name-de.png index a5e0446..86d0f2f 100644 Binary files a/screenshots/Chromium/baseline/document-name-de.png and b/screenshots/Chromium/baseline/document-name-de.png differ diff --git a/screenshots/Chromium/baseline/document-name-en.png b/screenshots/Chromium/baseline/document-name-en.png index a5e0446..86d0f2f 100644 Binary files a/screenshots/Chromium/baseline/document-name-en.png and b/screenshots/Chromium/baseline/document-name-en.png differ diff --git a/screenshots/Chromium/baseline/editor-plugins-de.png b/screenshots/Chromium/baseline/editor-plugins-de.png index fa8da73..1e1a216 100644 Binary files a/screenshots/Chromium/baseline/editor-plugins-de.png and b/screenshots/Chromium/baseline/editor-plugins-de.png differ diff --git a/screenshots/Chromium/baseline/editor-plugins-en.png b/screenshots/Chromium/baseline/editor-plugins-en.png index d291672..effadf2 100644 Binary files a/screenshots/Chromium/baseline/editor-plugins-en.png and b/screenshots/Chromium/baseline/editor-plugins-en.png differ diff --git a/screenshots/Chromium/baseline/editor-plugins-selected-de.png b/screenshots/Chromium/baseline/editor-plugins-selected-de.png index 51cd610..3696035 100644 Binary files a/screenshots/Chromium/baseline/editor-plugins-selected-de.png and b/screenshots/Chromium/baseline/editor-plugins-selected-de.png differ diff --git a/screenshots/Chromium/baseline/editor-plugins-selected-en.png b/screenshots/Chromium/baseline/editor-plugins-selected-en.png index d418fe8..1ca4451 100644 Binary files a/screenshots/Chromium/baseline/editor-plugins-selected-en.png and b/screenshots/Chromium/baseline/editor-plugins-selected-en.png differ diff --git a/screenshots/Chromium/baseline/editor-plugins-with-doc-de.png b/screenshots/Chromium/baseline/editor-plugins-with-doc-de.png index a1c1e09..5685922 100644 Binary files a/screenshots/Chromium/baseline/editor-plugins-with-doc-de.png and b/screenshots/Chromium/baseline/editor-plugins-with-doc-de.png differ diff --git a/screenshots/Chromium/baseline/editor-plugins-with-doc-en.png b/screenshots/Chromium/baseline/editor-plugins-with-doc-en.png index bd17c3c..dd41979 100644 Binary files a/screenshots/Chromium/baseline/editor-plugins-with-doc-en.png and b/screenshots/Chromium/baseline/editor-plugins-with-doc-en.png differ diff --git a/screenshots/Chromium/baseline/log-entries-de.png b/screenshots/Chromium/baseline/log-entries-de.png index c430b53..8b0635b 100644 Binary files a/screenshots/Chromium/baseline/log-entries-de.png and b/screenshots/Chromium/baseline/log-entries-de.png differ diff --git a/screenshots/Chromium/baseline/log-entries-en.png b/screenshots/Chromium/baseline/log-entries-en.png index c959cf7..787d722 100644 Binary files a/screenshots/Chromium/baseline/log-entries-en.png and b/screenshots/Chromium/baseline/log-entries-en.png differ diff --git a/screenshots/Chromium/baseline/log-entries-redone-de.png b/screenshots/Chromium/baseline/log-entries-redone-de.png index ee9c11a..1f11667 100644 Binary files a/screenshots/Chromium/baseline/log-entries-redone-de.png and b/screenshots/Chromium/baseline/log-entries-redone-de.png differ diff --git a/screenshots/Chromium/baseline/log-entries-redone-en.png b/screenshots/Chromium/baseline/log-entries-redone-en.png index 76f5f94..db6238b 100644 Binary files a/screenshots/Chromium/baseline/log-entries-redone-en.png and b/screenshots/Chromium/baseline/log-entries-redone-en.png differ diff --git a/screenshots/Chromium/baseline/log-entries-undone-de.png b/screenshots/Chromium/baseline/log-entries-undone-de.png index bf09a12..73f3775 100644 Binary files a/screenshots/Chromium/baseline/log-entries-undone-de.png and b/screenshots/Chromium/baseline/log-entries-undone-de.png differ diff --git a/screenshots/Chromium/baseline/log-entries-undone-en.png b/screenshots/Chromium/baseline/log-entries-undone-en.png index f6c4857..31206d7 100644 Binary files a/screenshots/Chromium/baseline/log-entries-undone-en.png and b/screenshots/Chromium/baseline/log-entries-undone-en.png differ diff --git a/screenshots/Chromium/baseline/log-screen-de.png b/screenshots/Chromium/baseline/log-screen-de.png index 5b26457..4473fd6 100644 Binary files a/screenshots/Chromium/baseline/log-screen-de.png and b/screenshots/Chromium/baseline/log-screen-de.png differ diff --git a/screenshots/Chromium/baseline/log-screen-en.png b/screenshots/Chromium/baseline/log-screen-en.png index 6b822f1..b180baf 100644 Binary files a/screenshots/Chromium/baseline/log-screen-en.png and b/screenshots/Chromium/baseline/log-screen-en.png differ diff --git a/screenshots/Chromium/baseline/menu-drawer-de.png b/screenshots/Chromium/baseline/menu-drawer-de.png index 221e522..130c47b 100644 Binary files a/screenshots/Chromium/baseline/menu-drawer-de.png and b/screenshots/Chromium/baseline/menu-drawer-de.png differ diff --git a/screenshots/Chromium/baseline/menu-drawer-en.png b/screenshots/Chromium/baseline/menu-drawer-en.png index 1c4f07a..61b17f9 100644 Binary files a/screenshots/Chromium/baseline/menu-drawer-en.png and b/screenshots/Chromium/baseline/menu-drawer-en.png differ diff --git a/screenshots/Chromium/baseline/menu-plugins-de.png b/screenshots/Chromium/baseline/menu-plugins-de.png index d1b4233..09e5d8e 100644 Binary files a/screenshots/Chromium/baseline/menu-plugins-de.png and b/screenshots/Chromium/baseline/menu-plugins-de.png differ diff --git a/screenshots/Chromium/baseline/menu-plugins-en.png b/screenshots/Chromium/baseline/menu-plugins-en.png index c2ef260..6803aee 100644 Binary files a/screenshots/Chromium/baseline/menu-plugins-en.png and b/screenshots/Chromium/baseline/menu-plugins-en.png differ diff --git a/screenshots/Chromium/baseline/menu-plugins-triggered-de.png b/screenshots/Chromium/baseline/menu-plugins-triggered-de.png index 844b97f..c082f08 100644 Binary files a/screenshots/Chromium/baseline/menu-plugins-triggered-de.png and b/screenshots/Chromium/baseline/menu-plugins-triggered-de.png differ diff --git a/screenshots/Chromium/baseline/menu-plugins-triggered-en.png b/screenshots/Chromium/baseline/menu-plugins-triggered-en.png index ac66aef..215210b 100644 Binary files a/screenshots/Chromium/baseline/menu-plugins-triggered-en.png and b/screenshots/Chromium/baseline/menu-plugins-triggered-en.png differ diff --git a/screenshots/Firefox/baseline/app-bar-de.png b/screenshots/Firefox/baseline/app-bar-de.png index 513b4c2..10319b5 100644 Binary files a/screenshots/Firefox/baseline/app-bar-de.png and b/screenshots/Firefox/baseline/app-bar-de.png differ diff --git a/screenshots/Firefox/baseline/app-bar-en.png b/screenshots/Firefox/baseline/app-bar-en.png index 513b4c2..10319b5 100644 Binary files a/screenshots/Firefox/baseline/app-bar-en.png and b/screenshots/Firefox/baseline/app-bar-en.png differ diff --git a/screenshots/Firefox/baseline/document-name-de.png b/screenshots/Firefox/baseline/document-name-de.png index 2cca746..95f8edc 100644 Binary files a/screenshots/Firefox/baseline/document-name-de.png and b/screenshots/Firefox/baseline/document-name-de.png differ diff --git a/screenshots/Firefox/baseline/document-name-en.png b/screenshots/Firefox/baseline/document-name-en.png index 2cca746..95f8edc 100644 Binary files a/screenshots/Firefox/baseline/document-name-en.png and b/screenshots/Firefox/baseline/document-name-en.png differ diff --git a/screenshots/Firefox/baseline/editor-plugins-de.png b/screenshots/Firefox/baseline/editor-plugins-de.png index ae22d80..2ca99c9 100644 Binary files a/screenshots/Firefox/baseline/editor-plugins-de.png and b/screenshots/Firefox/baseline/editor-plugins-de.png differ diff --git a/screenshots/Firefox/baseline/editor-plugins-en.png b/screenshots/Firefox/baseline/editor-plugins-en.png index 673dfd3..29b3687 100644 Binary files a/screenshots/Firefox/baseline/editor-plugins-en.png and b/screenshots/Firefox/baseline/editor-plugins-en.png differ diff --git a/screenshots/Firefox/baseline/editor-plugins-selected-de.png b/screenshots/Firefox/baseline/editor-plugins-selected-de.png index b3af653..d400d3e 100644 Binary files a/screenshots/Firefox/baseline/editor-plugins-selected-de.png and b/screenshots/Firefox/baseline/editor-plugins-selected-de.png differ diff --git a/screenshots/Firefox/baseline/editor-plugins-selected-en.png b/screenshots/Firefox/baseline/editor-plugins-selected-en.png index 3e5e3b9..a3f32ca 100644 Binary files a/screenshots/Firefox/baseline/editor-plugins-selected-en.png and b/screenshots/Firefox/baseline/editor-plugins-selected-en.png differ diff --git a/screenshots/Firefox/baseline/editor-plugins-with-doc-de.png b/screenshots/Firefox/baseline/editor-plugins-with-doc-de.png index abfa1ce..e94d1ac 100644 Binary files a/screenshots/Firefox/baseline/editor-plugins-with-doc-de.png and b/screenshots/Firefox/baseline/editor-plugins-with-doc-de.png differ diff --git a/screenshots/Firefox/baseline/editor-plugins-with-doc-en.png b/screenshots/Firefox/baseline/editor-plugins-with-doc-en.png index 72aa740..2a31cc4 100644 Binary files a/screenshots/Firefox/baseline/editor-plugins-with-doc-en.png and b/screenshots/Firefox/baseline/editor-plugins-with-doc-en.png differ diff --git a/screenshots/Firefox/baseline/log-entries-de.png b/screenshots/Firefox/baseline/log-entries-de.png index 9d37311..14a29f2 100644 Binary files a/screenshots/Firefox/baseline/log-entries-de.png and b/screenshots/Firefox/baseline/log-entries-de.png differ diff --git a/screenshots/Firefox/baseline/log-entries-en.png b/screenshots/Firefox/baseline/log-entries-en.png index 6d8a106..54e8a18 100644 Binary files a/screenshots/Firefox/baseline/log-entries-en.png and b/screenshots/Firefox/baseline/log-entries-en.png differ diff --git a/screenshots/Firefox/baseline/log-entries-redone-de.png b/screenshots/Firefox/baseline/log-entries-redone-de.png index fa6e993..2f461cc 100644 Binary files a/screenshots/Firefox/baseline/log-entries-redone-de.png and b/screenshots/Firefox/baseline/log-entries-redone-de.png differ diff --git a/screenshots/Firefox/baseline/log-entries-redone-en.png b/screenshots/Firefox/baseline/log-entries-redone-en.png index 31abb9b..573647e 100644 Binary files a/screenshots/Firefox/baseline/log-entries-redone-en.png and b/screenshots/Firefox/baseline/log-entries-redone-en.png differ diff --git a/screenshots/Firefox/baseline/log-entries-undone-de.png b/screenshots/Firefox/baseline/log-entries-undone-de.png index 4d2e899..48805dd 100644 Binary files a/screenshots/Firefox/baseline/log-entries-undone-de.png and b/screenshots/Firefox/baseline/log-entries-undone-de.png differ diff --git a/screenshots/Firefox/baseline/log-entries-undone-en.png b/screenshots/Firefox/baseline/log-entries-undone-en.png index a2f44b9..ad13216 100644 Binary files a/screenshots/Firefox/baseline/log-entries-undone-en.png and b/screenshots/Firefox/baseline/log-entries-undone-en.png differ diff --git a/screenshots/Firefox/baseline/log-screen-de.png b/screenshots/Firefox/baseline/log-screen-de.png index 0b3757d..c5bec5f 100644 Binary files a/screenshots/Firefox/baseline/log-screen-de.png and b/screenshots/Firefox/baseline/log-screen-de.png differ diff --git a/screenshots/Firefox/baseline/log-screen-en.png b/screenshots/Firefox/baseline/log-screen-en.png index 2d9cfc5..8b0fcad 100644 Binary files a/screenshots/Firefox/baseline/log-screen-en.png and b/screenshots/Firefox/baseline/log-screen-en.png differ diff --git a/screenshots/Firefox/baseline/menu-drawer-de.png b/screenshots/Firefox/baseline/menu-drawer-de.png index eef44c6..121c100 100644 Binary files a/screenshots/Firefox/baseline/menu-drawer-de.png and b/screenshots/Firefox/baseline/menu-drawer-de.png differ diff --git a/screenshots/Firefox/baseline/menu-drawer-en.png b/screenshots/Firefox/baseline/menu-drawer-en.png index 6e478cf..eec0499 100644 Binary files a/screenshots/Firefox/baseline/menu-drawer-en.png and b/screenshots/Firefox/baseline/menu-drawer-en.png differ diff --git a/screenshots/Firefox/baseline/menu-plugins-de.png b/screenshots/Firefox/baseline/menu-plugins-de.png index 3bde884..acd57f7 100644 Binary files a/screenshots/Firefox/baseline/menu-plugins-de.png and b/screenshots/Firefox/baseline/menu-plugins-de.png differ diff --git a/screenshots/Firefox/baseline/menu-plugins-en.png b/screenshots/Firefox/baseline/menu-plugins-en.png index 9096804..d4cf4bc 100644 Binary files a/screenshots/Firefox/baseline/menu-plugins-en.png and b/screenshots/Firefox/baseline/menu-plugins-en.png differ diff --git a/screenshots/Firefox/baseline/menu-plugins-triggered-de.png b/screenshots/Firefox/baseline/menu-plugins-triggered-de.png index e2134e5..e69284f 100644 Binary files a/screenshots/Firefox/baseline/menu-plugins-triggered-de.png and b/screenshots/Firefox/baseline/menu-plugins-triggered-de.png differ diff --git a/screenshots/Firefox/baseline/menu-plugins-triggered-en.png b/screenshots/Firefox/baseline/menu-plugins-triggered-en.png index 3556bc5..d649dce 100644 Binary files a/screenshots/Firefox/baseline/menu-plugins-triggered-en.png and b/screenshots/Firefox/baseline/menu-plugins-triggered-en.png differ diff --git a/screenshots/Webkit/baseline/app-bar-de.png b/screenshots/Webkit/baseline/app-bar-de.png index e5235de..026fc7e 100644 Binary files a/screenshots/Webkit/baseline/app-bar-de.png and b/screenshots/Webkit/baseline/app-bar-de.png differ diff --git a/screenshots/Webkit/baseline/app-bar-en.png b/screenshots/Webkit/baseline/app-bar-en.png index e5235de..026fc7e 100644 Binary files a/screenshots/Webkit/baseline/app-bar-en.png and b/screenshots/Webkit/baseline/app-bar-en.png differ diff --git a/screenshots/Webkit/baseline/document-name-de.png b/screenshots/Webkit/baseline/document-name-de.png index d59a8dc..dce829f 100644 Binary files a/screenshots/Webkit/baseline/document-name-de.png and b/screenshots/Webkit/baseline/document-name-de.png differ diff --git a/screenshots/Webkit/baseline/document-name-en.png b/screenshots/Webkit/baseline/document-name-en.png index d59a8dc..dce829f 100644 Binary files a/screenshots/Webkit/baseline/document-name-en.png and b/screenshots/Webkit/baseline/document-name-en.png differ diff --git a/screenshots/Webkit/baseline/editor-plugins-de.png b/screenshots/Webkit/baseline/editor-plugins-de.png index 13e25df..b324435 100644 Binary files a/screenshots/Webkit/baseline/editor-plugins-de.png and b/screenshots/Webkit/baseline/editor-plugins-de.png differ diff --git a/screenshots/Webkit/baseline/editor-plugins-en.png b/screenshots/Webkit/baseline/editor-plugins-en.png index 0e0cfaa..b7132c9 100644 Binary files a/screenshots/Webkit/baseline/editor-plugins-en.png and b/screenshots/Webkit/baseline/editor-plugins-en.png differ diff --git a/screenshots/Webkit/baseline/editor-plugins-selected-de.png b/screenshots/Webkit/baseline/editor-plugins-selected-de.png index 70877a1..636d8af 100644 Binary files a/screenshots/Webkit/baseline/editor-plugins-selected-de.png and b/screenshots/Webkit/baseline/editor-plugins-selected-de.png differ diff --git a/screenshots/Webkit/baseline/editor-plugins-selected-en.png b/screenshots/Webkit/baseline/editor-plugins-selected-en.png index db52988..19c41b0 100644 Binary files a/screenshots/Webkit/baseline/editor-plugins-selected-en.png and b/screenshots/Webkit/baseline/editor-plugins-selected-en.png differ diff --git a/screenshots/Webkit/baseline/editor-plugins-with-doc-de.png b/screenshots/Webkit/baseline/editor-plugins-with-doc-de.png index fddfb6d..4b79731 100644 Binary files a/screenshots/Webkit/baseline/editor-plugins-with-doc-de.png and b/screenshots/Webkit/baseline/editor-plugins-with-doc-de.png differ diff --git a/screenshots/Webkit/baseline/editor-plugins-with-doc-en.png b/screenshots/Webkit/baseline/editor-plugins-with-doc-en.png index b2f5ca3..5d5657c 100644 Binary files a/screenshots/Webkit/baseline/editor-plugins-with-doc-en.png and b/screenshots/Webkit/baseline/editor-plugins-with-doc-en.png differ diff --git a/screenshots/Webkit/baseline/log-entries-de.png b/screenshots/Webkit/baseline/log-entries-de.png index a34370f..a530619 100644 Binary files a/screenshots/Webkit/baseline/log-entries-de.png and b/screenshots/Webkit/baseline/log-entries-de.png differ diff --git a/screenshots/Webkit/baseline/log-entries-en.png b/screenshots/Webkit/baseline/log-entries-en.png index 17e1906..b9eb756 100644 Binary files a/screenshots/Webkit/baseline/log-entries-en.png and b/screenshots/Webkit/baseline/log-entries-en.png differ diff --git a/screenshots/Webkit/baseline/log-entries-redone-de.png b/screenshots/Webkit/baseline/log-entries-redone-de.png index e6affd9..55d9318 100644 Binary files a/screenshots/Webkit/baseline/log-entries-redone-de.png and b/screenshots/Webkit/baseline/log-entries-redone-de.png differ diff --git a/screenshots/Webkit/baseline/log-entries-redone-en.png b/screenshots/Webkit/baseline/log-entries-redone-en.png index 4564770..3d52c29 100644 Binary files a/screenshots/Webkit/baseline/log-entries-redone-en.png and b/screenshots/Webkit/baseline/log-entries-redone-en.png differ diff --git a/screenshots/Webkit/baseline/log-entries-undone-de.png b/screenshots/Webkit/baseline/log-entries-undone-de.png index 3100203..beeb640 100644 Binary files a/screenshots/Webkit/baseline/log-entries-undone-de.png and b/screenshots/Webkit/baseline/log-entries-undone-de.png differ diff --git a/screenshots/Webkit/baseline/log-entries-undone-en.png b/screenshots/Webkit/baseline/log-entries-undone-en.png index f9c5fd2..9745d9c 100644 Binary files a/screenshots/Webkit/baseline/log-entries-undone-en.png and b/screenshots/Webkit/baseline/log-entries-undone-en.png differ diff --git a/screenshots/Webkit/baseline/log-screen-de.png b/screenshots/Webkit/baseline/log-screen-de.png index 89f1969..72c6728 100644 Binary files a/screenshots/Webkit/baseline/log-screen-de.png and b/screenshots/Webkit/baseline/log-screen-de.png differ diff --git a/screenshots/Webkit/baseline/log-screen-en.png b/screenshots/Webkit/baseline/log-screen-en.png index b91bb81..9e68382 100644 Binary files a/screenshots/Webkit/baseline/log-screen-en.png and b/screenshots/Webkit/baseline/log-screen-en.png differ diff --git a/screenshots/Webkit/baseline/menu-drawer-de.png b/screenshots/Webkit/baseline/menu-drawer-de.png index 7666411..55e15b7 100644 Binary files a/screenshots/Webkit/baseline/menu-drawer-de.png and b/screenshots/Webkit/baseline/menu-drawer-de.png differ diff --git a/screenshots/Webkit/baseline/menu-drawer-en.png b/screenshots/Webkit/baseline/menu-drawer-en.png index 8c5e29e..4923c03 100644 Binary files a/screenshots/Webkit/baseline/menu-drawer-en.png and b/screenshots/Webkit/baseline/menu-drawer-en.png differ diff --git a/screenshots/Webkit/baseline/menu-plugins-de.png b/screenshots/Webkit/baseline/menu-plugins-de.png index c2c676a..8d423bc 100644 Binary files a/screenshots/Webkit/baseline/menu-plugins-de.png and b/screenshots/Webkit/baseline/menu-plugins-de.png differ diff --git a/screenshots/Webkit/baseline/menu-plugins-en.png b/screenshots/Webkit/baseline/menu-plugins-en.png index 62d6028..0054561 100644 Binary files a/screenshots/Webkit/baseline/menu-plugins-en.png and b/screenshots/Webkit/baseline/menu-plugins-en.png differ diff --git a/screenshots/Webkit/baseline/menu-plugins-triggered-de.png b/screenshots/Webkit/baseline/menu-plugins-triggered-de.png index 6b8e777..897390c 100644 Binary files a/screenshots/Webkit/baseline/menu-plugins-triggered-de.png and b/screenshots/Webkit/baseline/menu-plugins-triggered-de.png differ diff --git a/screenshots/Webkit/baseline/menu-plugins-triggered-en.png b/screenshots/Webkit/baseline/menu-plugins-triggered-en.png index a6c1e84..9a8b885 100644 Binary files a/screenshots/Webkit/baseline/menu-plugins-triggered-en.png and b/screenshots/Webkit/baseline/menu-plugins-triggered-en.png differ