UNPKG

suneditor

Version:

Vanilla JavaScript based WYSIWYG web editor

122 lines (109 loc) 4.13 kB
import { dom } from '../../../../helper'; import { _DragHandle } from '../../../../modules/ui'; import { BORDER_LIST, BORDER_FORMATS } from '../shared/table.constants'; /** * @description Creates the split menu items. * @param {Object} lang - Language object. * @returns {{items: string[], menus: NodeListOf<Element>}} */ export function CreateSplitMenu(lang) { const menus = dom.utils.createElement( 'DIV', null, /*html*/ ` <div title="${lang.verticalSplit}" aria-label="${lang.verticalSplit}"> ${lang.verticalSplit} </div> <div title="${lang.horizontalSplit}" aria-label="${lang.horizontalSplit}"> ${lang.horizontalSplit} </div>`, ); return { items: ['vertical', 'horizontal'], menus: menus.querySelectorAll('div') }; } /** * @description Creates the column menu items. * @param {Object} lang - Language object. * @param {Object} icons - Icons object. * @returns {{items: string[], menus: NodeListOf<Element>}} */ export function CreateColumnMenu(lang, icons) { const menus = dom.utils.createElement( 'DIV', null, /*html*/ ` <div title="${lang.insertColumnBefore}" aria-label="${lang.insertColumnBefore}"> <span class="se-list-icon">${icons.insert_column_left}</span><span class="se-txt">${lang.insertColumnBefore}</span> </div> <div title="${lang.insertColumnAfter}" aria-label="${lang.insertColumnAfter}"> <span class="se-list-icon">${icons.insert_column_right}</span><span class="se-txt">${lang.insertColumnAfter}</span> </div> <div title="${lang.deleteColumn}" aria-label="${lang.deleteColumn}"> <span class="se-list-icon">${icons.delete_column}</span><span class="se-txt">${lang.deleteColumn}</span> </div>`, ); return { items: ['insert-left', 'insert-right', 'delete'], menus: menus.querySelectorAll('div') }; } /** * @description Creates the row menu items. * @param {Object} lang - Language object. * @param {Object} icons - Icons object. * @returns {{items: string[], menus: NodeListOf<Element>}} */ export function CreateRowMenu(lang, icons) { const menus = dom.utils.createElement( 'DIV', null, /*html*/ ` <div title="${lang.insertRowAbove}" aria-label="${lang.insertRowAbove}"> <span class="se-list-icon">${icons.insert_row_above}</span><span class="se-txt">${lang.insertRowAbove}</span> </div> <div title="${lang.insertRowBelow}" aria-label="${lang.insertRowBelow}"> <span class="se-list-icon">${icons.insert_row_below}</span><span class="se-txt">${lang.insertRowBelow}</span> </div> <div title="${lang.deleteRow}" aria-label="${lang.deleteRow}"> <span class="se-list-icon">${icons.delete_row}</span><span class="se-txt">${lang.deleteRow}</span> </div>`, ); return { items: ['insert-above', 'insert-below', 'delete'], menus: menus.querySelectorAll('div') }; } /** * @description Creates the border style menu items. * @returns {{items: string[], menus: NodeListOf<Element>}} */ export function CreateBorderMenu() { let html = ''; for (let i = 0, len = BORDER_LIST.length, s; i < len; i++) { s = BORDER_LIST[i]; html += /*html*/ ` <div title="${s}" aria-label="${s}" style="padding: 0 12px;"> <span class="se-txt">${s}</span> </div>`; } const menus = dom.utils.createElement('DIV', null, html); return { items: BORDER_LIST, menus: menus.querySelectorAll('div') }; } /** * @description Creates the border format menu items. * @param {Object} langs - Language object. * @param {Object} icons - Icons object. * @param {string[]} indideFormats - Formats to exclude. * @returns {{items: string[], menus: NodeListOf<Element>}} */ export function CreateBorderFormatMenu(langs, icons, indideFormats) { const items = []; let html = ''; for (const k in BORDER_FORMATS) { if (indideFormats.includes(k)) continue; const s = BORDER_FORMATS[k]; items.push(k); html += /*html*/ ` <button type="button" class="se-btn se-tooltip"> ${icons[s]} <span class="se-tooltip-inner"> <span class="se-tooltip-text">${langs[s]}</span> </span> </button>`; } const menus = dom.utils.createElement('DIV', null, html); return { items, menus: menus.querySelectorAll('button') }; }