moveTo: (x: number, y: number) => { InlineView.showAt(notificationWrapper, { anchor: 'makeshift', x, y }, GuiFactory.premade(notification)); },
AlloyEvents.runOnSource<SugarEvent>(NativeEvents.transitionend(), (comp, se) => { InlineView.getContent(comp).each((c) => { // Css.remove(c.element(), 'opacity'); }); Class.remove(comp.element(), resizingClass); Css.remove(comp.element(), 'width'); }),
const factory = (contents: Types.Dialog.Dialog<T>, internalInitialData: T, dataValidator: Processor): Types.Dialog.DialogInstanceApi<T> => { const initialData = validateData<T>(internalInitialData, dataValidator); const dialogInit = { dataValidator, initialData, internalDialog: contents }; const dialogUi = renderInlineDialog<T>( dialogInit, { redial: DialogManager.DialogManager.redial, closeWindow: () => { InlineView.hide(inlineDialog); closeWindow(dialogUi.instanceApi); } }, extras.backstage, ariaAttrs ); const inlineDialog = GuiFactory.build(InlineView.sketch({ lazySink: extras.backstage.shared.getSink, dom: { tag: 'div', classes: [ ] }, // Fires the default dismiss event. fireDismissalEventInstead: { }, inlineBehaviours: Behaviour.derive([ AddEventsBehaviour.config('window-manager-inline-events', [ // Can't just fireDimissalEvent formCloseEvent, because it is on the parent component of the dialog AlloyEvents.run(SystemEvents.dismissRequested(), (comp, se) => { AlloyTriggers.emit(dialogUi.dialog, formCancelEvent); }) ]) ]) })); InlineView.showAt( inlineDialog, anchor, GuiFactory.premade(dialogUi.dialog) ); dialogUi.instanceApi.setData(initialData); Keying.focusIn(dialogUi.dialog); return dialogUi.instanceApi; };
onShow: (comp) => { stack.set([ ]); InlineView.getContent(comp).each((c) => { Css.remove(c.element(), 'visibility'); }); Class.remove(comp.element(), resizingClass); Css.remove(comp.element(), 'width'); },
export const setup = (editor: Editor, lazySink: () => Result<AlloyComponent, Error>, backstage: UiFactoryBackstage) => { const contextmenu = GuiFactory.build( InlineView.sketch({ dom: { tag: 'div', }, lazySink, onEscape: () => editor.focus(), fireDismissalEventInstead: { }, inlineBehaviours: Behaviour.derive([ AddEventsBehaviour.config('dismissContextMenu', [ AlloyEvents.run(SystemEvents.dismissRequested(), (comp, se) => { Sandboxing.close(comp); editor.focus(); }) ]) ]) }), ); editor.on('init', () => { editor.on('contextmenu', (e) => { if (isNativeOverrideKeyEvent(editor, e)) { return; } // Different browsers trigger the context menu from keyboards differently, so need to check both the button and target here // Chrome: button = 0 & target = the selection range node // Firefox: button = 0 & target = body // IE: button = 2 & target = body // Safari: N/A (Mac's don't expose a contextmenu keyboard shortcut) const isTriggeredByKeyboardEvent = e.button !== 2 || e.target === editor.getBody(); const anchorSpec = isTriggeredByKeyboardEvent ? getNodeAnchor(editor) : getPointAnchor(editor, e); const registry = editor.ui.registry.getAll(); const menuConfig = Settings.getContextMenu(editor); // Use the event target element for mouse clicks, otherwise fallback to the current selection const selectedElement = isTriggeredByKeyboardEvent ? editor.selection.getStart(true) : e.target as Element; const items = generateContextMenu(registry.contextMenus, menuConfig, selectedElement); NestedMenus.build(items, ItemResponse.CLOSE_ON_EXECUTE, backstage).map((menuData) => { e.preventDefault(); // show the context menu, with items set to close on click InlineView.showMenuAt(contextmenu, anchorSpec, { menu: { markers: MenuParts.markers('normal') }, data: menuData }); }); }); }); };
const launchContext = (toolbarApi: Toolbar.ContextToolbar | Toolbar.ContextForm, elem: Option<DomElement>) => { clearTimer(); const toolbarSpec = buildToolbar(toolbarApi); const sElem = elem.map(Element.fromDom); const anchor = getAnchor(toolbarApi.position, sElem); lastAnchor.set(Option.some((anchor))); lastElement.set(elem); InlineView.showWithin(contextbar, anchor, wrapInPopDialog(toolbarSpec), getBoxElement()); Css.remove(contextbar.element(), 'display'); };
NestedMenus.build(items, ItemResponse.CLOSE_ON_EXECUTE, backstage).map((menuData) => { e.preventDefault(); // show the context menu, with items set to close on click InlineView.showMenuAt(contextmenu, anchorSpec, { menu: { markers: MenuParts.markers('normal') }, data: menuData }); });
AlloyEvents.run<ChangeSlideEvent>(changeSlideEvent, (comp, se) => { // If it was partially through a slide, clear that and measure afresh Css.remove(comp.element(), 'width'); const currentWidth = Width.get(comp.element()); InlineView.setContent(comp, se.event().contents()); Class.add(comp.element(), resizingClass); const newWidth = Width.get(comp.element()); Css.set(comp.element(), 'width', currentWidth + 'px'); InlineView.getContent(comp).each((newContents) => { se.event().focus().bind((f) => { Focus.focus(f); return Focus.search(comp.element()); }).orThunk(() => { Keying.focusIn(newContents); return Focus.active(); }); }); Delay.setTimeout(() => { Css.set(comp.element(), 'width', newWidth + 'px'); }, 0); }),
AlloyEvents.run<ForwardSlideEvent>(forwardSlideEvent, (comp, se) => { InlineView.getContent(comp).each((oldContents) => { stack.set(stack.get().concat([ { bar: oldContents, // TODO: Not working focus: Focus.active() } ])); }); AlloyTriggers.emitWith(comp, changeSlideEvent, { contents: se.event().forwardContents(), focus: Option.none() }); }),
lookupInfo.lookupData.then((lookupData) => { const combinedItems = getCombinedItems(lookupInfo.triggerChar, lookupData); // Only open the autocompleter if there are items to show if (combinedItems.length > 0) { const columns: Types.ColumnTypes = Options.findMap(lookupData, (ld) => Option.from(ld.columns)).getOr(1); InlineView.showAt( autocompleter, { anchor: 'selection', root: Element.fromDom(editor.getBody()), getSelection: () => { return Option.some({ start: () => Element.fromDom(lookupInfo.range.startContainer), soffset: () => lookupInfo.range.startOffset, finish: () => Element.fromDom(lookupInfo.range.endContainer), foffset: () => lookupInfo.range.endOffset }); } }, Menu.sketch( createMenuFrom( createPartialMenuWithAlloyItems('autocompleter-value', true, combinedItems, columns, 'normal'), columns, FocusMode.ContentFocus, // Use the constant. 'normal' ) ) ); InlineView.getContent(autocompleter).each(Highlighting.highlightFirst); } else { closeIfNecessary(); } });