UNPKG

gridstack

Version:

TypeScript/JS lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Vue, Ember, knockout...)

140 lines 5.9 kB
"use strict"; /** * gridstack-dd-native.ts 5.0 * Copyright (c) 2021 Alain Dumesny - see GridStack root license */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.GridStackDDNative = void 0; const dd_manager_1 = require("./dd-manager"); const dd_element_1 = require("./dd-element"); const gridstack_dd_1 = require("../gridstack-dd"); const utils_1 = require("../utils"); // export our base class (what user should use) and all associated types __exportStar(require("../gridstack-dd"), exports); /** * HTML 5 Native DragDrop based drag'n'drop plugin. */ class GridStackDDNative extends gridstack_dd_1.GridStackDD { resizable(el, opts, key, value) { this._getDDElements(el).forEach(dEl => { if (opts === 'disable' || opts === 'enable') { dEl.ddResizable && dEl.ddResizable[opts](); // can't create DD as it requires options for setupResizable() } else if (opts === 'destroy') { dEl.ddResizable && dEl.cleanResizable(); } else if (opts === 'option') { dEl.setupResizable({ [key]: value }); } else { const grid = dEl.el.gridstackNode.grid; let handles = dEl.el.getAttribute('gs-resize-handles') ? dEl.el.getAttribute('gs-resize-handles') : grid.opts.resizable.handles; dEl.setupResizable(Object.assign(Object.assign(Object.assign({}, grid.opts.resizable), { handles: handles }), { start: opts.start, stop: opts.stop, resize: opts.resize })); } }); return this; } draggable(el, opts, key, value) { this._getDDElements(el).forEach(dEl => { if (opts === 'disable' || opts === 'enable') { dEl.ddDraggable && dEl.ddDraggable[opts](); // can't create DD as it requires options for setupDraggable() } else if (opts === 'destroy') { dEl.ddDraggable && dEl.cleanDraggable(); } else if (opts === 'option') { dEl.setupDraggable({ [key]: value }); } else { const grid = dEl.el.gridstackNode.grid; dEl.setupDraggable(Object.assign(Object.assign({}, grid.opts.draggable), { containment: (grid.opts._isNested && !grid.opts.dragOut) ? grid.el.parentElement : (grid.opts.draggable.containment || null), start: opts.start, stop: opts.stop, drag: opts.drag })); } }); return this; } dragIn(el, opts) { this._getDDElements(el).forEach(dEl => dEl.setupDraggable(opts)); return this; } droppable(el, opts, key, value) { if (typeof opts.accept === 'function' && !opts._accept) { opts._accept = opts.accept; opts.accept = (el) => opts._accept(el); } this._getDDElements(el).forEach(dEl => { if (opts === 'disable' || opts === 'enable') { dEl.ddDroppable && dEl.ddDroppable[opts](); } else if (opts === 'destroy') { if (dEl.ddDroppable) { // error to call destroy if not there dEl.cleanDroppable(); } } else if (opts === 'option') { dEl.setupDroppable({ [key]: value }); } else { dEl.setupDroppable(opts); } }); return this; } /** true if element is droppable */ isDroppable(el) { return !!(el && el.ddElement && el.ddElement.ddDroppable && !el.ddElement.ddDroppable.disabled); } /** true if element is draggable */ isDraggable(el) { return !!(el && el.ddElement && el.ddElement.ddDraggable && !el.ddElement.ddDraggable.disabled); } /** true if element is draggable */ isResizable(el) { return !!(el && el.ddElement && el.ddElement.ddResizable && !el.ddElement.ddResizable.disabled); } on(el, name, callback) { this._getDDElements(el).forEach(dEl => dEl.on(name, (event) => { callback(event, dd_manager_1.DDManager.dragElement ? dd_manager_1.DDManager.dragElement.el : event.target, dd_manager_1.DDManager.dragElement ? dd_manager_1.DDManager.dragElement.helper : null); })); return this; } off(el, name) { this._getDDElements(el).forEach(dEl => dEl.off(name)); return this; } /** @internal returns a list of DD elements, creating them on the fly by default */ _getDDElements(els, create = true) { let hosts = utils_1.Utils.getElements(els); if (!hosts.length) return []; let list = hosts.map(e => e.ddElement || (create ? dd_element_1.DDElement.init(e) : null)); if (!create) { list.filter(d => d); } // remove nulls return list; } } exports.GridStackDDNative = GridStackDDNative; // finally register ourself gridstack_dd_1.GridStackDD.registerPlugin(GridStackDDNative); //# sourceMappingURL=gridstack-dd-native.js.map