本文整理匯總了TypeScript中@ephox/alloy.AddEventsBehaviour類的典型用法代碼示例。如果您正苦於以下問題:TypeScript AddEventsBehaviour類的具體用法?TypeScript AddEventsBehaviour怎麽用?TypeScript AddEventsBehaviour使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了AddEventsBehaviour類的10個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1:
const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom, components) => {
const action = actionOpt.fold(() => {
return {};
}, (action) => {
return {
action
};
});
const common = {
buttonBehaviours: Behaviour.derive([
DisablingConfigs.button(spec.disabled),
Tabstopping.config({}),
AddEventsBehaviour.config('button press', [
AlloyEvents.preventDefault('click'),
AlloyEvents.preventDefault('mousedown')
])
].concat(extraBehaviours)),
eventOrder: {
click: ['button press', 'alloy.base.behaviour'],
mousedown: ['button press', 'alloy.base.behaviour']
},
...action
};
const domFinal = Merger.deepMerge(common, { dom });
return Merger.deepMerge(domFinal, { components });
};
示例2: function
const field = function (name, placeholder) {
const inputSpec = Memento.record(Input.sketch({
placeholder,
onSetValue (input, data) {
// If the value changes, inform the container so that it can update whether the "x" is visible
AlloyTriggers.emit(input, NativeEvents.input());
},
inputBehaviours: Behaviour.derive([
Composing.config({
find: Option.some
}),
Tabstopping.config({ }),
Keying.config({
mode: 'execution'
})
]),
selectOnFocus: false
}));
const buttonSpec = Memento.record(
Button.sketch({
dom: UiDomFactory.dom('<button class="${prefix}-input-container-x ${prefix}-icon-cancel-circle ${prefix}-icon"></button>'),
action (button) {
const input = inputSpec.get(button);
Representing.setValue(input, '');
}
})
);
return {
name,
spec: Container.sketch({
dom: UiDomFactory.dom('<div class="${prefix}-input-container"></div>'),
components: [
inputSpec.asSpec(),
buttonSpec.asSpec()
],
containerBehaviours: Behaviour.derive([
Toggling.config({
toggleClass: Styles.resolve('input-container-empty')
}),
Composing.config({
find (comp) {
return Option.some(inputSpec.get(comp));
}
}),
AddEventsBehaviour.config(clearInputBehaviour, [
// INVESTIGATE: Because this only happens on input,
// it won't reset unless it has an initial value
AlloyEvents.run(NativeEvents.input(), function (iContainer) {
const input = inputSpec.get(iContainer);
const val = Representing.getValue(input);
const f = val.length > 0 ? Toggling.off : Toggling.on;
f(iContainer);
})
])
])
})
};
};
示例3: function
const makeGroup = function (gSpec) {
const scrollClass = gSpec.scrollable === true ? '${prefix}-toolbar-scrollable-group' : '';
return {
dom: UiDomFactory.dom('<div aria-label="' + gSpec.label + '" class="${prefix}-toolbar-group ' + scrollClass + '"></div>'),
tgroupBehaviours: Behaviour.derive([
AddEventsBehaviour.config('adhoc-scrollable-toolbar', gSpec.scrollable === true ? [
AlloyEvents.runOnInit(function (component, simulatedEvent) {
Css.set(component.element(), 'overflow-x', 'auto');
Scrollables.markAsHorizontal(component.element());
Scrollable.register(component.element());
})
] : [ ])
]),
components: [
Container.sketch({
components: [
ToolbarGroup.parts().items({ })
]
})
],
markers: {
itemClass: Styles.resolve('toolbar-group-item')
},
items: gSpec.items
};
};
示例4:
const makeCell = (row, col, labelId) => {
const emitCellOver = (c) => AlloyTriggers.emitWith(c, cellOverEvent, {row, col} );
const emitExecute = (c) => AlloyTriggers.emitWith(c, cellExecuteEvent, {row, col} );
return GuiFactory.build({
dom: {
tag: 'div',
attributes: {
role: 'button',
['aria-labelledby']: labelId
}
},
behaviours: Behaviour.derive([
AddEventsBehaviour.config('insert-table-picker-cell', [
AlloyEvents.run(NativeEvents.mouseover(), Focusing.focus),
AlloyEvents.run(SystemEvents.execute(), emitExecute),
AlloyEvents.run(SystemEvents.tapOrClick(), emitExecute)
]),
Toggling.config({
toggleClass: 'tox-insert-table-picker__selected',
toggleOnExecute: false
}),
Focusing.config({onFocus: emitCellOver})
])
});
};
示例5: function
const makeGroup = function (gSpec) {
const scrollClass = gSpec.scrollable === true ? '${prefix}-toolbar-scrollable-group' : '';
return {
dom: UiDomFactory.dom('<div aria-label="' + gSpec.label + '" class="${prefix}-toolbar-group ' + scrollClass + '"></div>'),
tgroupBehaviours: Behaviour.derive([
AddEventsBehaviour.config('adhoc-scrollable-toolbar', gSpec.scrollable === true ? [
AlloyEvents.runOnInit(function (component, simulatedEvent) {
Css.set(component.element(), 'overflow-x', 'auto');
Scrollables.markAsHorizontal(component.element());
Scrollable.register(component.element());
})
] : [ ])
]),
components: [
Container.sketch({
components: [
ToolbarGroup.parts().items({ })
]
})
],
markers: {
// TODO: Now that alloy isn't marking the items with the old
// itemClass here, this navigation probably doesn't work. But
// it's mobile. However, bluetooth keyboards will need to be fixed
// Essentially, all items put in the toolbar will need to be given
// this class if they are to be part of keyboard navigation
itemSelector: '.' + Styles.resolve('toolbar-group-item')
},
items: gSpec.items
};
};
示例6: renderInsertTableMenuItem
export function renderInsertTableMenuItem(spec: Menu.FancyMenuItem): ItemTypes.WidgetItemSpec {
const numRows = 10;
const numColumns = 10;
const sizeLabelId = Id.generate('size-label');
const cells = makeCells(sizeLabelId, numRows, numColumns);
const memLabel = Memento.record({
dom: {
tag: 'span',
classes: ['tox-insert-table-picker__label'],
attributes: {
id: sizeLabelId
}
},
components: [GuiFactory.text('0x0')],
behaviours: Behaviour.derive([
Replacing.config({})
])
});
return {
type: 'widget',
data: { value: Id.generate('widget-id')},
dom: {
tag: 'div',
classes: ['tox-fancymenuitem'],
},
autofocus: true,
components: [ItemWidget.parts().widget({
dom: {
tag: 'div',
classes: ['tox-insert-table-picker']
},
components: makeComponents(cells).concat(memLabel.asSpec()),
behaviours: Behaviour.derive([
AddEventsBehaviour.config('insert-table-picker', [
AlloyEvents.runWithTarget<CellEvent>(cellOverEvent, (c, t, e) => {
const row = e.event().row();
const col = e.event().col();
selectCells(cells, row, col, numRows, numColumns);
Replacing.set(memLabel.get(c), [makeLabelText(row, col)]);
}),
AlloyEvents.runWithTarget<CellEvent>(cellExecuteEvent, (c, _, e) => {
spec.onAction({numRows: e.event().row() + 1, numColumns: e.event().col() + 1});
AlloyTriggers.emit(c, SystemEvents.sandboxClose());
})
]),
Keying.config({
initSize: {
numRows,
numColumns
},
mode: 'flatgrid',
selector: '[role="button"]'
})
])
})]
};
}
示例7: getNodeAnchor
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
});
});
});
});
};
示例8: renderCommonToolbarButton
const renderToolbarButtonWith = (spec: Toolbar.ToolbarButton, providersBackstage: UiFactoryBackstageProviders, bonusEvents: AlloyEvents.AlloyEventKeyAndHandler<any>[]) => {
return renderCommonToolbarButton(spec, {
toolbarButtonBehaviours: [ ].concat(bonusEvents.length > 0 ? [
// TODO: May have to pass through eventOrder if events start clashing
AddEventsBehaviour.config('toolbarButtonWith', bonusEvents)
] : [ ]) ,
getApi: getButtonApi,
onSetup: spec.onSetup
}, providersBackstage);
};
示例9: renderLabel
export const renderSelectBox = (spec: Types.SelectBox.SelectBox, providersBackstage: UiFactoryBackstageProviders): SketchSpec => {
const translatedOptions = Arr.map(spec.items, (item) => {
return {
text: providersBackstage.translate(item.text),
value: item.value
};
});
// DUPE with TextField.
const pLabel = spec.label.map((label) => renderLabel(label, providersBackstage));
const pField = AlloyFormField.parts().field({
// TODO: Alloy should not allow dom changing of an HTML select!
dom: { },
selectAttributes: {
size: spec.size
},
options: translatedOptions,
factory: AlloyHtmlSelect,
selectBehaviours: Behaviour.derive([
Tabstopping.config({ }),
AddEventsBehaviour.config('selectbox-change', [
AlloyEvents.run(NativeEvents.change(), (component, _) => {
AlloyTriggers.emitWith(component, formChangeEvent, { name: spec.name } );
})
])
])
});
const chevron = spec.size > 1 ? Option.none() :
Option.some({
dom: {
tag: 'div',
classes: ['tox-selectfield__icon-js'],
innerHtml: Icons.get('chevron-down', providersBackstage.icons)
}
});
const selectWrap: SimpleSpec = {
dom: {
tag: 'div',
classes: ['tox-selectfield']
},
components: Arr.flatten([[pField], chevron.toArray()])
};
return AlloyFormField.sketch({
dom: {
tag: 'div',
classes: ['tox-form__group']
},
components: Arr.flatten<AlloySpec>([pLabel.toArray(), [selectWrap]])
});
};
示例10:
const renderDialog = (spec: DialogFoo) => {
return ModalDialog.sketch(
{
lazySink: spec.lazySink,
onEscape: () => {
spec.onCancel();
// TODO: Make a strong type for Handled KeyEvent
return Option.some(true);
},
dom: {
tag: 'div',
classes: [ 'tox-dialog' ].concat(spec.extraClasses)
},
components: [
{
dom: {
tag: 'div',
classes: [ 'tox-dialog__header' ]
},
components: [
spec.partSpecs.title,
spec.partSpecs.close
]
},
spec.partSpecs.body,
spec.partSpecs.footer
],
parts: {
blocker: {
dom: DomFactory.fromHtml('<div class="tox-dialog-wrap"></div>'),
components: [
{
dom: {
tag: 'div',
classes: [ 'tox-dialog-wrap__backdrop' ]
}
}
]
}
},
modalBehaviours: Behaviour.derive([
// Dupe warning.
AddEventsBehaviour.config('basic-dialog-events', [
AlloyEvents.run<FormCancelEvent>(formCancelEvent, (comp, se) => {
spec.onCancel();
}),
AlloyEvents.run<FormSubmitEvent>(formSubmitEvent, (comp, se) => {
spec.onSubmit();
}),
])
])
}
);
};