From 63ad63f41e32f3e538608e3663179c4253243b88 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Thu, 19 Sep 2019 10:33:42 -0700 Subject: [PATCH 1/2] Fixes context menu hit test to deal with svg nodes. Fixes #7224 --- packages/application/src/frontend.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/application/src/frontend.ts b/packages/application/src/frontend.ts index 8ab9f3d44134..7027b5a9cd2d 100644 --- a/packages/application/src/frontend.ts +++ b/packages/application/src/frontend.ts @@ -105,8 +105,8 @@ export abstract class JupyterFrontEnd< /** * Walks up the DOM hierarchy of the target of the active `contextmenu` - * event, testing the nodes for a user-supplied funcion. This can - * be used to find a node on which to operate, given a context menu click. + * event, testing each HTMLElement ancestor for a user-supplied funcion. This can + * be used to find an HTMLElement on which to operate, given a context menu click. * * @param test - a function that takes an `HTMLElement` and returns a * boolean for whether it is the element the requester is seeking. @@ -118,16 +118,16 @@ export abstract class JupyterFrontEnd< ): HTMLElement | undefined { if ( !this._contextMenuEvent || - !(this._contextMenuEvent.target instanceof HTMLElement) + !(this._contextMenuEvent.target instanceof Node) ) { return undefined; } - let node = this._contextMenuEvent.target as HTMLElement; + let node = this._contextMenuEvent.target; do { - if (test(node)) { + if (node instanceof HTMLElement && test(node)) { return node; } - node = node.parentNode as HTMLElement; + node = node.parentNode; } while (node && node.parentNode && node !== node.parentNode); return undefined; From cf5bca9e4271b24650fc6a188e8f5868546295aa Mon Sep 17 00:00:00 2001 From: telamonian Date: Mon, 23 Sep 2019 20:16:57 -0400 Subject: [PATCH 2/2] refactored sidebar tab icon styling, fixed right sidebar tab icons --- packages/ui-components/src/style/icon.ts | 57 +++++++++++++++--------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/packages/ui-components/src/style/icon.ts b/packages/ui-components/src/style/icon.ts index f509f2a0da93..774dd1fe8cc3 100644 --- a/packages/ui-components/src/style/icon.ts +++ b/packages/ui-components/src/style/icon.ts @@ -1,7 +1,7 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. -import { cssRule, style } from 'typestyle/lib'; +import { style } from 'typestyle/lib'; import { NestedCSSProperties } from 'typestyle/lib/types'; /** @@ -66,6 +66,7 @@ const iconCSSBreadCrumb: NestedCSSProperties = { height: '16px', width: '16px', verticalAlign: 'middle', + // `&` will be substituted for the generated classname (interpolation) $nest: { '&:hover': { backgroundColor: 'var(--jp-layout-color2)' @@ -73,7 +74,7 @@ const iconCSSBreadCrumb: NestedCSSProperties = { '&:first-child': { marginLeft: '0px' }, - ['.jp-mod-dropTarget']: { + ['.jp-mod-dropTarget&']: { backgroundColor: 'var(--jp-brand-color2)', opacity: 0.7 } @@ -175,7 +176,36 @@ const containerCSSSettingsEditor: NestedCSSProperties = { }; const containerCSSSideBar: NestedCSSProperties = { - transform: 'rotate(90deg)' + // `&` will be substituted for the generated classname (interpolation) + $nest: { + // left sidebar tab divs + '.jp-SideBar.jp-mod-left .p-TabBar-tab &': { + transform: 'rotate(90deg)' + }, + // left sidebar currently selected tab div + '.jp-SideBar.jp-mod-left .p-TabBar-tab.p-mod-current &': { + transform: + 'rotate(90deg)\n' + + ' translate(\n' + + ' calc(-0.5 * var(--jp-border-width)),\n' + + ' calc(-0.5 * var(--jp-border-width))\n' + + ' )' + }, + + // right sidebar tab divs + '.jp-SideBar.jp-mod-right .p-TabBar-tab &': { + transform: 'rotate(-90deg)' + }, + // right sidebar currently selected tab div + '.jp-SideBar.jp-mod-right .p-TabBar-tab.p-mod-current &': { + transform: + 'rotate(-90deg)\n' + + ' translate(\n' + + ' calc(0.5 * var(--jp-border-width)),\n' + + ' calc(-0.5 * var(--jp-border-width))\n' + + ' )' + } + } }; const containerCSSSplash: NestedCSSProperties = { @@ -236,9 +266,12 @@ function containerCSS(props: IIconStyle): NestedCSSProperties { * for setting the style on the container of an svg node representing an icon */ export const iconStyle = (props: IIconStyle): string => { + const conCSS = containerCSS(props); + return style({ - ...containerCSS(props), + ...conCSS, $nest: { + ...conCSS.$nest, ['svg']: iconCSS(props) } }); @@ -250,19 +283,3 @@ export const iconStyle = (props: IIconStyle): string => { export const iconStyleFlat = (props: IIconStyle): string => { return style(iconCSS(props)); }; - -// TODO: Figure out a better cludge for styling current sidebar tab selection -cssRule( - `.p-TabBar-tab.p-mod-current .${iconStyle({ - center: true, - kind: 'sideBar' - })}`, - { - transform: - 'rotate(90deg)\n' + - ' translate(\n' + - ' calc(-0.5 * var(--jp-border-width)),\n' + - ' calc(-0.5 * var(--jp-border-width))\n' + - ' )' - } -);