diff --git a/__tests__/integration/mirador/plugins/add.html b/__tests__/integration/mirador/plugins/add.html new file mode 100644 index 0000000000000000000000000000000000000000..e9614e60cd4e3ebd77e9f13387343fd725b94ae7 --- /dev/null +++ b/__tests__/integration/mirador/plugins/add.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html lang="en" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="theme-color" content="#000000"> + <title>Mirador</title> + </head> + <body> + <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> + <script src="../../../../node_modules/react/umd/react.development.js"></script> + <script src="../../../../node_modules/react-dom/umd/react-dom.development.js"></script> + <script>document.write("<script type='text/javascript' src='../../../../dist/mirador.min.js?v=" + Date.now() + "'><\/script>");</script> + <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> + <script type="text/babel"> + + const config = { id: 'mirador' }; + + function AddPluginComponentA(props) { + return ( + <div id="add-plugin-component-a"> + Plugin A + </div> + ); + } + + function AddPluginComponentB(props) { + return ( + <div id="add-plugin-component-b"> + Plugin B + </div> + ); + } + + const addPluginA = { + target: 'WorkspaceControlPanelButtons', + mode: 'add', + component: AddPluginComponentA, + }; + + const addPluginB = { + target: 'WorkspaceControlPanelButtons', + mode: 'add', + component: AddPluginComponentB, + }; + + const miradorInstance = Mirador.viewer(config, [addPluginA, addPluginB]); + + </script> + </body> +</html> diff --git a/__tests__/integration/mirador/plugins/add.test.js b/__tests__/integration/mirador/plugins/add.test.js new file mode 100644 index 0000000000000000000000000000000000000000..bf91b2f68e8147c8babebaefe99c3aa241732e74 --- /dev/null +++ b/__tests__/integration/mirador/plugins/add.test.js @@ -0,0 +1,13 @@ + +describe('"add" mode plugins', () => { + beforeAll(async () => { + await page.goto('http://127.0.0.1:4488/__tests__/integration/mirador/plugins/add.html'); + await expect(page).toMatchElement('.mirador-viewer'); + await page.waitFor(1000); + }); + + it('adds to <WorkspaceControlPanelButtons />', async () => { + await expect(page).toMatchElement('.mirador-workspace-control-panel-buttons #add-plugin-component-a'); + await expect(page).toMatchElement('.mirador-workspace-control-panel-buttons #add-plugin-component-b'); + }); +}); diff --git a/__tests__/integration/mirador/plugins/delete.html b/__tests__/integration/mirador/plugins/delete.html new file mode 100644 index 0000000000000000000000000000000000000000..de1148229b2cb746949104f7189e8b5406a5e022 --- /dev/null +++ b/__tests__/integration/mirador/plugins/delete.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html lang="en" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="theme-color" content="#000000"> + <title>Mirador</title> + </head> + <body> + <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> + <script src="../../../../node_modules/react/umd/react.development.js"></script> + <script src="../../../../node_modules/react-dom/umd/react-dom.development.js"></script> + <script>document.write("<script type='text/javascript' src='../../../../dist/mirador.min.js?v=" + Date.now() + "'><\/script>");</script> + <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> + <script type="text/babel"> + + const config = { id: 'mirador' }; + + const deletePlugin = { + target: 'WorkspaceControlPanelButtons', + mode: 'delete', + } + + Mirador.viewer(config, [deletePlugin]); + + </script> + </body> +</html> diff --git a/__tests__/integration/mirador/plugins/delete.test.js b/__tests__/integration/mirador/plugins/delete.test.js new file mode 100644 index 0000000000000000000000000000000000000000..6d4d487a97cdc37835a00edf2afd17744c6a3484 --- /dev/null +++ b/__tests__/integration/mirador/plugins/delete.test.js @@ -0,0 +1,12 @@ + +describe('"delete" mode plugin', () => { + beforeAll(async () => { + await page.goto('http://127.0.0.1:4488/__tests__/integration/mirador/plugins/delete.html'); + await expect(page).toMatchElement('.mirador-viewer'); + await page.waitFor(1000); + }); + + it('deletes <WorkspaceControlPanelButtons />', async () => { + await expect(page).not.toMatchElement('.mirador-workspace-control-panel-buttons'); + }); +}); diff --git a/__tests__/integration/mirador/plugins/replace.html b/__tests__/integration/mirador/plugins/replace.html new file mode 100644 index 0000000000000000000000000000000000000000..e6de84252b553c2fd2a5f4648f0580dba175f7b8 --- /dev/null +++ b/__tests__/integration/mirador/plugins/replace.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html lang="en" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="theme-color" content="#000000"> + <title>Mirador</title> + </head> + <body> + <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> + <script src="../../../../node_modules/react/umd/react.development.js"></script> + <script src="../../../../node_modules/react-dom/umd/react-dom.development.js"></script> + <script>document.write("<script type='text/javascript' src='../../../../dist/mirador.min.js?v=" + Date.now() + "'><\/script>");</script> + <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> + <script type="text/babel"> + + const config = { id: 'mirador' }; + + function ReplacePluginComponent(props) { + return ( + <div id="replace-plugin-component"> + </div> + ); + } + + const replacePlugin = { + target: 'WorkspaceControlPanelButtons', + mode: 'replace', + component: ReplacePluginComponent, + }; + + const miradorInstance = Mirador.viewer(config, [replacePlugin]); + + </script> + </body> +</html> diff --git a/__tests__/integration/mirador/plugins/replace.test.js b/__tests__/integration/mirador/plugins/replace.test.js new file mode 100644 index 0000000000000000000000000000000000000000..196c6408bfc75c1643a97ffc3277dcd9bef68e89 --- /dev/null +++ b/__tests__/integration/mirador/plugins/replace.test.js @@ -0,0 +1,13 @@ + +describe('"replace" mode plugin', () => { + beforeAll(async () => { + await page.goto('http://127.0.0.1:4488/__tests__/integration/mirador/plugins/replace.html'); + await expect(page).toMatchElement('.mirador-viewer'); + await page.waitFor(1000); + }); + + it('replaces <WorkspaceControlPanelButtons />', async () => { + await expect(page).not.toMatchElement('.mirador-workspace-panel-buttons'); + await expect(page).toMatchElement('#replace-plugin-component'); + }); +}); diff --git a/__tests__/integration/mirador/plugins/wrap.html b/__tests__/integration/mirador/plugins/wrap.html new file mode 100644 index 0000000000000000000000000000000000000000..9e0ed69d357c26f40968bb0b8be7c3d4be96abf6 --- /dev/null +++ b/__tests__/integration/mirador/plugins/wrap.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html lang="en" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="theme-color" content="#000000"> + <title>Mirador</title> + </head> + <body> + <div id="mirador" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"></div> + <script src="../../../../node_modules/react/umd/react.development.js"></script> + <script src="../../../../node_modules/react-dom/umd/react-dom.development.js"></script> + <script>document.write("<script type='text/javascript' src='../../../../dist/mirador.min.js?v=" + Date.now() + "'><\/script>");</script> + <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> + <script type="text/babel"> + + const config = { id: 'mirador' }; + + function WrapPluginComponent(props) { + return ( + <div id="wrap-plugin-component"> + <props.TargetComponent {...props} /> + </div> + ); + } + + const wrapPlugin = { + target: 'WorkspaceControlPanelButtons', + mode: 'wrap', + component: WrapPluginComponent, + }; + + const miradorInstance = Mirador.viewer(config, [wrapPlugin]); + + </script> + </body> +</html> diff --git a/__tests__/integration/mirador/plugins/wrap.test.js b/__tests__/integration/mirador/plugins/wrap.test.js new file mode 100644 index 0000000000000000000000000000000000000000..20c927a6107c88098c2b8cf304bb7e896a36011e --- /dev/null +++ b/__tests__/integration/mirador/plugins/wrap.test.js @@ -0,0 +1,12 @@ + +describe('"wrap" mode plugin', () => { + beforeAll(async () => { + await page.goto('http://127.0.0.1:4488/__tests__/integration/mirador/plugins/wrap.html'); + await expect(page).toMatchElement('.mirador-viewer'); + await page.waitFor(1000); + }); + + it('wraps <WorkspaceControlPanelButtons />', async () => { + await expect(page).toMatchElement('#wrap-plugin-component .mirador-workspace-control-panel-buttons'); + }); +}); diff --git a/src/components/WorkspaceControlPanelButtons.js b/src/components/WorkspaceControlPanelButtons.js index b4150e929e2316cab7eb3ce5f10483547b24b4ec..0aaf8af86c2daa5043b40ab34856aa4af61bf7c0 100644 --- a/src/components/WorkspaceControlPanelButtons.js +++ b/src/components/WorkspaceControlPanelButtons.js @@ -1,4 +1,5 @@ import React, { Component } from 'react'; +import ns from '../config/css-ns'; import WorkspaceFullScreenButton from '../containers/WorkspaceFullScreenButton'; import WorkspaceAddButton from '../containers/WorkspaceAddButton'; import WorkspaceMenuButton from '../containers/WorkspaceMenuButton'; @@ -25,12 +26,12 @@ export class WorkspaceControlPanelButtons extends Component { */ render() { return ( - <> + <div className={ns('workspace-control-panel-buttons')}> <WorkspaceAddButton /> <WorkspaceMenuButton /> <WorkspaceFullScreenButton /> <PluginHook {...this.props} /> - </> + </div> ); } }