本文整理汇总了TypeScript中@ephox/alloy.Keying.config方法的典型用法代码示例。如果您正苦于以下问题:TypeScript Keying.config方法的具体用法?TypeScript Keying.config怎么用?TypeScript Keying.config使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类@ephox/alloy.Keying
的用法示例。
在下文中一共展示了Keying.config方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1:
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'
}),
])
};
};
示例2:
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({ })
])
};
};
示例3: 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);
})
])
])
})
};
};
示例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: renderToolbar
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: 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
)
})
])
};
};
示例7: 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({ })
]
};
};
示例8:
const renderIframeBody = (spec: Types.UrlDialog.UrlDialog) => {
const bodySpec = {
dom: {
tag: 'div',
classes: [ 'tox-dialog__content-js' ]
},
components: [
{
dom: {
tag: 'div',
classes: [ 'tox-dialog__body-iframe' ]
},
components: [
NavigableObject.craft({
dom: {
tag: 'iframe',
attributes: {
src: spec.url
}
},
behaviours: Behaviour.derive([
Tabstopping.config({ }),
Focusing.config({ })
])
})
]
}
],
behaviours: Behaviour.derive([
Keying.config({
mode: 'acyclic',
useTabstopAt: Fun.not(NavigableObject.isPseudoStop)
})
])
};
return ModalDialog.parts().body(
bodySpec
);
};
示例9:
const getToolbarbehaviours = (toolbarSpec, modeName, overflowOpt) => {
const onAttached = AlloyEvents.runOnAttached(function (component) {
const groups = Arr.map(toolbarSpec.initGroups, renderToolbarGroup);
AlloyToolbar.setGroups(component, groups);
});
const eventBehaviours = overflowOpt.fold(() => [
onAttached
],
(memOverflow) => [
onAttached,
AlloyEvents.run('alloy.toolbar.toggle', (toolbar, se) => {
toolbarSpec.getSink().toOption().each((sink) => {
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) => {
Attachment.detach(builtOverflow);
});
});
})
]
);
return Behaviour.derive([
Keying.config({
// Tabs between groups
mode: modeName,
onEscape: toolbarSpec.onEscape,
selector: '.tox-toolbar__group'
}),
AddEventsBehaviour.config('toolbar-events', eventBehaviours)
]);
};
示例10:
const wrapInPopDialog = (toolbarSpec: AlloySpec) => {
return {
dom: {
tag: 'div',
classes: ['tox-pop__dialog'],
},
components: [toolbarSpec],
behaviours: Behaviour.derive([
Keying.config({
mode: 'acyclic'
}),
AddEventsBehaviour.config('pop-dialog-wrap-events', [
AlloyEvents.runOnAttached((comp) => {
editor.shortcuts.add('ctrl+F9', 'focus statusbar', () => Keying.focusIn(comp));
}),
AlloyEvents.runOnDetached((comp) => {
editor.shortcuts.remove('ctrl+F9');
})
])
])
};
};