import { Arr } from '@ephox/katamari';
import { Compare, Element, Node, PredicateFind } from '@ephox/sugar';
import * as UiDomFactory from '../util/UiDomFactory';
import SizeSlider from './SizeSlider';
import * as ToolbarWidgets from './ToolbarWidgets';
import { SketchSpec } from '@ephox/alloy';
const headings = [ 'p', 'h3', 'h2', 'h1' ];
const makeSlider = function (spec) {
return SizeSlider.sketch({
category: 'heading',
sizes: headings,
onChange: spec.onChange,
getInitialValue: spec.getInitialValue
});
};
const sketch = function (realm, editor): SketchSpec {
const spec = {
onChange (value) {
editor.execCommand('FormatBlock', null, headings[value].toLowerCase());
},
getInitialValue () {
const node = editor.selection.getStart();
const elem = Element.fromDom(node);
const heading = PredicateFind.closest(elem, (e) => {
const nodeName = Node.name(e);
return Arr.contains(headings, nodeName);
}, function (e) {
return Compare.eq(e, Element.fromDom(editor.getBody()));
});
return heading.bind((elm) => Arr.indexOf(headings, Node.name(elm))).getOr(0);
}
};
return ToolbarWidgets.button(realm, 'heading', function () {
return [
UiDomFactory.spec(''),
makeSlider(spec),
UiDomFactory.spec('')
];
});
};
export {
sketch
};