本文整理汇总了TypeScript中@ephox/alloy.Keying类的典型用法代码示例。如果您正苦于以下问题:TypeScript Keying类的具体用法?TypeScript Keying怎么用?TypeScript Keying使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Keying类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1:
const renderSpinner = (providerBackstage: UiFactoryBackstageProviders): AlloySpec => {
return {
dom: {
tag: 'div',
attributes: {
'aria-label': providerBackstage.translate('Loading...')
},
classes: [ 'tox-throbber__busy-spinner' ]
},
components: [
{
dom: DomFactory.fromHtml(`<div class="tox-spinner"><div></div><div></div><div></div></div>`)
}
],
behaviours: Behaviour.derive([
// Trap the "Tab" key and don't let it escape.
Keying.config({
mode: 'special',
onTab: () => Option.some(true),
onShiftTab: () => Option.some(true)
}),
Focusing.config({ })
])
};
};
示例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:
export const renderLabel = (spec: Types.Label.Label, backstageShared: UiFactoryBackstageShared): SimpleSpec => {
const label = {
dom: {
tag: 'label',
innerHtml: backstageShared.providers.translate(spec.label),
classes: ['tox-label']
}
} as AlloySpec;
const comps = Arr.map(spec.items, backstageShared.interpreter);
return {
dom: {
tag: 'div',
classes: ['tox-form__group']
},
components: [
label
].concat(comps),
behaviours: Behaviour.derive([
ComposingConfigs.self(),
Replacing.config({}),
RepresentingConfigs.domHtml(Option.none()),
Keying.config({
mode: 'acyclic'
}),
])
};
};
示例4: 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"]'
})
])
})]
};
}
示例5: generate
const renderContextForm = (ctx: Toolbar.ContextForm, backstage: UiFactoryBackstage) => {
// Cannot use the FormField.sketch, because the DOM structure doesn't have a wrapping group
const inputAttributes = ctx.label.fold(
() => ({ }),
(label) => ({ 'aria-label': label })
);
const memInput = Memento.record(
Input.sketch({
inputClasses: [ 'tox-toolbar-textfield', 'tox-toolbar-nav-js' ],
data: ctx.initValue(),
inputAttributes,
selectOnFocus: true,
inputBehaviours: Behaviour.derive([
Keying.config({
mode: 'special',
onEnter: (input) => {
return commands.findPrimary(input).map((primary) => {
AlloyTriggers.emitExecute(primary);
return true;
});
},
// These two lines need to be tested. They are about left and right bypassing
// any keyboard handling, and allowing left and right to be processed by the input
// Maybe this should go in an alloy sketch for Input?
onLeft: (comp, se) => {
se.cut();
return Option.none();
},
onRight: (comp, se) => {
se.cut();
return Option.none();
}
})
])
})
);
const commands = generate(memInput, ctx.commands, backstage.shared.providers);
return renderToolbar({
uid: Id.generate('context-toolbar'),
initGroups: [
{
title: Option.none(),
items: [ memInput.asSpec() ]
},
{
title: Option.none(),
items: commands.asSpecs() as AlloySpec[]
}
],
onEscape: Option.none,
cyclicKeying: true,
backstage,
getSink: () => Result.error('')
});
};
示例6:
memOverflow.getOpt(sink).fold(() => {
// overflow isn't there yet ... so add it, and return the built thing
const builtoverFlow = GuiFactory.build(memOverflow.asSpec());
Attachment.attach(sink, builtoverFlow);
Positioning.position(sink, toolbarSpec.backstage.shared.anchors.toolbarOverflow(), builtoverFlow);
SplitAlloyToolbar.refresh(toolbar);
SplitAlloyToolbar.getMoreButton(toolbar).each(Focusing.focus);
Keying.focusIn(builtoverFlow);
// return builtoverFlow;
}, (builtOverflow) => {
示例7:
Step.sync(() => {
const groups = Arr.map([
{
title: Option.none(), items: Arr.map([ 'A', 'B' ], makeButton)
},
{
title: Option.none(), items: Arr.map([ 'C' ], makeButton)
}
], renderToolbarGroup);
Toolbar.setGroups(toolbar, groups);
Keying.focusIn(toolbar);
})
示例8: interpretInForm
const renderBodyPanel = <I>(spec: BodyPanelFoo<I>, backstage: UiFactoryBackstage): SimpleSpec => {
const memForm = Memento.record(
AlloyForm.sketch((parts) => {
return {
dom: {
tag: 'div',
classes: [ 'tox-form' ]
},
// All of the items passed through the form need to be put through the interpreter
// with their form part preserved.
components: Arr.map(spec.items, (item) => {
return interpretInForm(parts, item, backstage);
})
};
})
);
return {
dom: {
tag: 'div',
classes: [ 'tox-dialog__body' ]
},
components: [
{
dom: {
tag: 'div',
classes: ['tox-dialog__body-content']
},
components: [
memForm.asSpec()
]
}
],
behaviours: Behaviour.derive([
Keying.config({
mode: 'acyclic',
useTabstopAt: Fun.not(NavigableObject.isPseudoStop)
}),
ComposingConfigs.memento(memForm),
RepresentingConfigs.memento(memForm, {
postprocess: (formValue) => FormValues.toValidValues(formValue).fold(
(err) => {
console.error(err);
return { };
},
(vals) => vals
)
})
])
};
};
示例9: closeWindow
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;
};
示例10: menuDom
export const renderWidgetMenu = (spec: WidgetMenuFoo): Partial<MenuTypes.MenuSpec> => {
const memWidget = Memento.record(spec.widget as SimpleOrSketchSpec);
return {
value: spec.value,
items: [
{
type: 'widget',
data: {
// FIX: Widgets.
value: Id.generate('widget-id')
},
autofocus: true,
// FIX: widget classes.
dom: {
tag: 'div'
},
components: [
ItemWidget.parts().widget(
{
dom: {
tag: 'div',
classes: [ 'tox-menu-widget-js' ]
},
components: [ memWidget.asSpec() ],
behaviours: Behaviour.derive([
Keying.config({
mode: 'special',
focusIn: (comp) => {
memWidget.getOpt(comp).each(Keying.focusIn);
return Option.some(true);
}
})
])
}
)
],
}
],
dom: menuDom(false, 1, 'normal'),
components: [
Menu.parts().items({ })
]
};
};