UNPKG

jquery-grid

Version:

jQuery Grid by Gijgo.com is a plug-in for the jQuery Javascript library. It is a very fast and extandable datagrid, and will add advanced interaction controls to any HTML table. This plugin has build-in integration with Bootstrap and Material Design. Free

492 lines (448 loc) 18.4 kB
/* * Gijgo Editor v1.9.13 * http://gijgo.com/editor * * Copyright 2014, 2019 gijgo.com * Released under the MIT license */ /* global window alert jQuery */ /** */ gj.editor = { plugins: {}, messages: {} }; gj.editor.config = { base: { /** The height of the editor. Numeric values are treated as pixels. */ height: 300, /** The width of the editor. Numeric values are treated as pixels. */ width: undefined, /** The name of the UI library that is going to be in use. Currently we support only Material Design and Bootstrap. */ uiLibrary: 'materialdesign', /** The name of the icons library that is going to be in use. Currently we support Material Icons and Font Awesome. */ iconsLibrary: 'materialicons', /** The language that needs to be in use. */ locale: 'en-us', buttons: undefined, style: { wrapper: 'gj-editor gj-editor-md', buttonsGroup: 'gj-button-md-group', button: 'gj-button-md', buttonActive: 'active' } }, bootstrap: { style: { wrapper: 'gj-editor gj-editor-bootstrap', buttonsGroup: 'btn-group', button: 'btn btn-default gj-cursor-pointer', buttonActive: 'active' } }, bootstrap4: { style: { wrapper: 'gj-editor gj-editor-bootstrap', buttonsGroup: 'btn-group', button: 'btn btn-outline-secondary gj-cursor-pointer', buttonActive: 'active' } }, materialicons: { icons: { bold: '<i class="gj-icon bold" />', italic: '<i class="gj-icon italic" />', strikethrough: '<i class="gj-icon strikethrough" />', underline: '<i class="gj-icon underlined" />', listBulleted: '<i class="gj-icon list-bulleted" />', listNumbered: '<i class="gj-icon list-numbered" />', indentDecrease: '<i class="gj-icon indent-decrease" />', indentIncrease: '<i class="gj-icon indent-increase" />', alignLeft: '<i class="gj-icon align-left" />', alignCenter: '<i class="gj-icon align-center" />', alignRight: '<i class="gj-icon align-right" />', alignJustify: '<i class="gj-icon align-justify" />', undo: '<i class="gj-icon undo" />', redo: '<i class="gj-icon redo" />' } }, fontawesome: { icons: { bold: '<i class="fa fa-bold" aria-hidden="true"></i>', italic: '<i class="fa fa-italic" aria-hidden="true"></i>', strikethrough: '<i class="fa fa-strikethrough" aria-hidden="true"></i>', underline: '<i class="fa fa-underline" aria-hidden="true"></i>', listBulleted: '<i class="fa fa-list-ul" aria-hidden="true"></i>', listNumbered: '<i class="fa fa-list-ol" aria-hidden="true"></i>', indentDecrease: '<i class="fa fa-indent" aria-hidden="true"></i>', indentIncrease: '<i class="fa fa-outdent" aria-hidden="true"></i>', alignLeft: '<i class="fa fa-align-left" aria-hidden="true"></i>', alignCenter: '<i class="fa fa-align-center" aria-hidden="true"></i>', alignRight: '<i class="fa fa-align-right" aria-hidden="true"></i>', alignJustify: '<i class="fa fa-align-justify" aria-hidden="true"></i>', undo: '<i class="fa fa-undo" aria-hidden="true"></i>', redo: '<i class="fa fa-repeat" aria-hidden="true"></i>' } } }; gj.editor.methods = { init: function (jsConfig) { gj.widget.prototype.init.call(this, jsConfig, 'editor'); this.attr('data-editor', 'true'); gj.editor.methods.initialize(this); return this; }, initialize: function ($editor) { var self = this, data = $editor.data(), $group, $btn, wrapper, $body, $toolbar; $editor.hide(); if ($editor[0].parentElement.attributes.role !== 'wrapper') { wrapper = document.createElement('div'); wrapper.setAttribute('role', 'wrapper'); $editor[0].parentNode.insertBefore(wrapper, $editor[0]); wrapper.appendChild($editor[0]); } gj.editor.methods.localization(data); $(wrapper).addClass(data.style.wrapper); if (data.width) { $(wrapper).width(data.width); } $body = $(wrapper).children('div[role="body"]'); if ($body.length === 0) { $body = $('<div role="body"></div>'); $(wrapper).append($body); if ($editor[0].innerText) { $body[0].innerHTML = $editor[0].innerText; } } $body.attr('contenteditable', true); $body.on('keydown', function (e) { var key = event.keyCode || event.charCode; if (gj.editor.events.changing($editor) === false && key !== 8 && key !== 46) { e.preventDefault(); } }); $body.on('mouseup keyup mouseout cut paste', function (e) { self.updateToolbar($editor, $toolbar); gj.editor.events.changed($editor); $editor.html($body.html()); }); $toolbar = $(wrapper).children('div[role="toolbar"]'); if ($toolbar.length === 0) { $toolbar = $('<div role="toolbar"></div>'); $body.before($toolbar); for (var group in data.buttons) { $group = $('<div />').addClass(data.style.buttonsGroup); for (var btn in data.buttons[group]) { $btn = $(data.buttons[group][btn]); $btn.on('click', function () { gj.editor.methods.executeCmd($editor, $body, $toolbar, $(this)); }); $group.append($btn); } $toolbar.append($group); } } $body.height(data.height - gj.core.height($toolbar[0], true)); }, localization: function (data) { var msg = gj.editor.messages[data.locale]; if (typeof (data.buttons) === 'undefined') { data.buttons = [ [ '<button type="button" class="' + data.style.button + '" title="' + msg.bold + '" role="bold">' + data.icons.bold + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.italic + '" role="italic">' + data.icons.italic + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.strikethrough + '" role="strikethrough">' + data.icons.strikethrough + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.underline + '" role="underline">' + data.icons.underline + '</button>' ], [ '<button type="button" class="' + data.style.button + '" title="' + msg.listBulleted + '" role="insertunorderedlist">' + data.icons.listBulleted + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.listNumbered + '" role="insertorderedlist">' + data.icons.listNumbered + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.indentDecrease + '" role="outdent">' + data.icons.indentDecrease + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.indentIncrease + '" role="indent">' + data.icons.indentIncrease + '</button>' ], [ '<button type="button" class="' + data.style.button + '" title="' + msg.alignLeft + '" role="justifyleft">' + data.icons.alignLeft + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.alignCenter + '" role="justifycenter">' + data.icons.alignCenter + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.alignRight + '" role="justifyright">' + data.icons.alignRight + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.alignJustify + '" role="justifyfull">' + data.icons.alignJustify + '</button>' ], [ '<button type="button" class="' + data.style.button + '" title="' + msg.undo + '" role="undo">' + data.icons.undo + '</button>', '<button type="button" class="' + data.style.button + '" title="' + msg.redo + '" role="redo">' + data.icons.redo + '</button>' ] ]; } }, updateToolbar: function ($editor, $toolbar) { var data = $editor.data(); $buttons = $toolbar.find('[role]').each(function() { var $btn = $(this), cmd = $btn.attr('role'); if (cmd && document.queryCommandEnabled(cmd) && document.queryCommandValue(cmd) === "true") { $btn.addClass(data.style.buttonActive); } else { $btn.removeClass(data.style.buttonActive); } }); }, executeCmd: function ($editor, $body, $toolbar, $btn) { $body.focus(); document.execCommand($btn.attr('role'), false); gj.editor.methods.updateToolbar($editor, $toolbar); }, content: function ($editor, html) { var $body = $editor.parent().children('div[role="body"]'); if (typeof (html) === "undefined") { return $body.html(); } else { return $body.html(html); } }, destroy: function ($editor) { var $wrapper; if ($editor.attr('data-editor') === 'true') { $wrapper = $editor.parent(); $wrapper.children('div[role="body"]').remove(); $wrapper.children('div[role="toolbar"]').remove(); $editor.unwrap(); $editor.removeData(); $editor.removeAttr('data-guid'); $editor.removeAttr('data-editor'); $editor.off(); $editor.show(); } return $editor; } }; gj.editor.events = { /** * Event fires before change of text in the editor. * */ changing: function ($editor) { return $editor.triggerHandler('changing'); }, /** * Event fires after change of text in the editor. * */ changed: function ($editor) { return $editor.triggerHandler('changed'); } }; gj.editor.widget = function ($element, jsConfig) { var self = this, methods = gj.editor.methods; /** Get or set html content in the body. */ self.content = function (html) { return methods.content(this, html); }; /** Remove editor functionality from the element. */ self.destroy = function () { return methods.destroy(this); }; $.extend($element, self); if ('true' !== $element.attr('data-editor')) { methods.init.call($element, jsConfig); } return $element; }; gj.editor.widget.prototype = new gj.widget(); gj.editor.widget.constructor = gj.editor.widget; (function ($) { $.fn.editor = function (method) { var $widget; if (this && this.length) { if (typeof method === 'object' || !method) { return new gj.editor.widget(this, method); } else { $widget = new gj.editor.widget(this, null); if ($widget[method]) { return $widget[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else { throw 'Method ' + method + ' does not exist.'; } } } }; })(jQuery); gj.editor.messages['en-us'] = { bold: 'Bold', italic: 'Italic', strikethrough: 'Strikethrough', underline: 'Underline', listBulleted: 'List Bulleted', listNumbered: 'List Numbered', indentDecrease: 'Indent Decrease', indentIncrease: 'Indent Increase', alignLeft: 'Align Left', alignCenter: 'Align Center', alignRight: 'Align Right', alignJustify: 'Align Justify', undo: 'Undo', redo: 'Redo' }; gj.editor.messages['bg-bg'] = { bold: 'Удебеляване', italic: 'Накланяне', strikethrough: 'Зачертаване', underline: 'Подчертаване', listBulleted: 'Списък', listNumbered: 'Номериран Списък', indentDecrease: 'Намаляване на абзаца', indentIncrease: 'Увеличаване на абзаца', alignLeft: 'Подравняване в ляво', alignCenter: 'Центриране', alignRight: 'Подравняване в дясно', alignJustify: 'Изравняване', undo: 'Назад', redo: 'Напред' }; gj.editor.messages['fr-fr'] = { bold: 'Gras', italic: 'Italique', strikethrough: 'Barr\u00e9', underline: 'Soulign\u00e9', listBulleted: 'Puces', listNumbered: 'Num\u00e9rotation', indentDecrease: 'Diminuer le retrait', indentIncrease: 'Augmenter le retrait', alignLeft: 'Aligner \u00e0 gauche', alignCenter: 'Centrer', alignRight: 'Aligner \u00e0 droite', alignJustify: 'Justifier', undo: 'Annuler', redo: 'R\u00e9tablir' }; gj.editor.messages['de-de'] = { bold: 'Fett', italic: 'Kursiv', strikethrough: 'Durchgestrichen', underline: 'Unterstrichen', listBulleted: 'Aufz\u00e4hlung', listNumbered: 'Nummerierte Liste', indentDecrease: 'Einzug verkleinern', indentIncrease: 'Einzug vergr\u00f6\u00dfern', alignLeft: 'Linksb\u00fcndig ausrichten', alignCenter: 'Zentriert ausrichten', alignRight: 'Rechtsb\u00fcndig ausrichten', alignJustify: 'Blocksatz', undo: 'R\u00fcckg\u00e4ngig', redo: 'Wiederholen' }; gj.editor.messages['pt-br'] = { bold: 'Negrito', italic: 'It\u00e1lico', strikethrough: 'Riscar', underline: 'Sublinhar', listBulleted: 'Lista n\u00e3o ordenada', listNumbered: 'Lista ordenada', indentDecrease: 'Diminuir recuo', indentIncrease: 'Aumentar recuo', alignLeft: 'Alinhar \u00e0 esquerda', alignCenter: 'Centralizar', alignRight: 'Alinhar \u00e0 direita', alignJustify: 'Justificar', undo: 'Desfazer', redo: 'Refazer' }; gj.editor.messages['ru-ru'] = { bold: 'Жирный', italic: 'Курсив', strikethrough: 'Зачеркнутый', underline: 'Подчеркнутый', listBulleted: 'Список', listNumbered: 'Нумерованный список', indentDecrease: 'Уменьшить отступ', indentIncrease: 'Увеличить отступ', alignLeft: 'Выровнять по левому краю', alignCenter: 'Выровнять по центру', alignRight: 'Выровнять по правому краю', alignJustify: 'Выровнять по ширине', undo: 'Назад', redo: 'Вперед' }; gj.editor.messages['es-es'] = { bold: 'Negrita', italic: 'Italica', strikethrough: 'Tachado', underline: 'Subrayado', listBulleted: 'Puntos', listNumbered: 'Lista numerada', indentDecrease: 'Disminuir indentacion', indentIncrease: 'Aumentar indentacion', alignLeft: 'Alineación izquierda', alignCenter: 'Alineación centrada', alignRight: 'Alineación derecha', alignJustify: 'Alineación justificada', undo: 'Deshacer', redo: 'Repetir' }; gj.editor.messages['it-it'] = { bold: 'Grassetto', italic: 'Corsivo', strikethrough: 'Barrato', underline: 'Sottolineato', listBulleted: 'Lista puntata', listNumbered: 'Lista numerata', indentDecrease: 'sposta testo a sinistra', indentIncrease: 'sposta testo a destra', alignLeft: 'Allineamento a sinistra', alignCenter: 'Centrato', alignRight: 'Allineamento a destra', alignJustify: 'Giustificato', undo: 'Annulla', redo: 'Ripeti' }; gj.editor.messages['tr-tr'] = { bold: 'Kalın', italic: 'İtalik', strikethrough: 'Çok Kalın', underline: 'Altı Çizgili', listBulleted: 'Noktalı', listNumbered: 'Rakamlı', indentDecrease: 'Girintiyi Azalt', indentIncrease: 'Girintiyi Çoğalt', alignLeft: 'Sola Yasla', alignCenter: 'Ortala', alignRight: 'Sağ Yasla', alignJustify: 'Yay', undo: 'Geri Al', redo: 'İleri Al' }; gj.editor.messages['ja-jp'] = { bold: '太字', italic: '斜体', strikethrough: '打消し線', underline: '下線', listBulleted: '箇条書き', listNumbered: '番号付き箇条書き', indentDecrease: 'インデントを減らす', indentIncrease: 'インデントを増やす', alignLeft: '左揃え', alignCenter: '中央揃え', alignRight: '右揃え', alignJustify: '両端揃え', undo: '元に戻す', redo: 'やり直し' }; gj.editor.messages['zh-cn'] = { bold: '粗体', italic: '斜体', strikethrough: '删除线', underline: '下划线', listBulleted: '无序列表', listNumbered: '有序列表', indentDecrease: '减少缩进', indentIncrease: '增加缩进', alignLeft: '左对齐', alignCenter: '居中', alignRight: '右对齐', alignJustify: '两端对齐', undo: '撤销', redo: '重做' }; gj.editor.messages['zh-tw'] = { bold: '粗體', italic: '斜體', strikethrough: '刪除線', underline: '下劃線', listBulleted: '無序列表', listNumbered: '有序列表', indentDecrease: '減少縮進', indentIncrease: '增加縮進', alignLeft: '左對齊', alignCenter: '居中', alignRight: '右對齊', alignJustify: '兩端對齊', undo: '撤銷', redo: '重做' };