/* * @copyright 2018 Christoph Wurst * * @author 2018 Christoph Wurst * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import $ from 'jquery' $.widget('oc.ocdialog', { options: { width: 'auto', height: 'auto', closeButton: true, closeOnEscape: true, modal: false }, _create: function () { var self = this; this.originalCss = { display: this.element[0].style.display, width: this.element[0].style.width, height: this.element[0].style.height }; this.originalTitle = this.element.attr('title'); this.options.title = this.options.title || this.originalTitle; this.$dialog = $('
') .attr({ // Setting tabIndex makes the div focusable tabIndex: -1, role: 'dialog' }) .insertBefore(this.element); this.$dialog.append(this.element.detach()); this.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog); this.$dialog.css({ display: 'inline-block', position: 'fixed' }); this.enterCallback = null; $(document).on('keydown keyup', function (event) { if ( event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0 ) { return; } // Escape if ( event.keyCode === 27 && event.type === 'keydown' && self.options.closeOnEscape ) { event.stopImmediatePropagation(); self.close(); return false; } // Enter if (event.keyCode === 13) { event.stopImmediatePropagation(); if (self.enterCallback !== null) { self.enterCallback(); event.preventDefault(); return false; } if (event.type === 'keyup') { event.preventDefault(); return false; } // If no button is selected we trigger the primary if ( self.$buttonrow && self.$buttonrow.find($(event.target)).length === 0 ) { var $button = self.$buttonrow.find('button.primary'); if ($button && !$button.prop('disabled')) { $button.trigger('click'); } } else if (self.$buttonrow) { $(event.target).trigger('click'); } return false; } }); this._setOptions(this.options); this._createOverlay(); }, _init: function () { this.$dialog.focus(); this._trigger('open'); }, _setOption: function (key, value) { var self = this; switch (key) { case 'title': if (this.$title) { this.$title.text(value); } else { var $title = $('

' + value + '

'); this.$title = $title.prependTo(this.$dialog); } this._setSizes(); break; case 'buttons': if (this.$buttonrow) { this.$buttonrow.empty(); } else { var $buttonrow = $('
'); this.$buttonrow = $buttonrow.appendTo(this.$dialog); } if (value.length === 1) { this.$buttonrow.addClass('onebutton'); } else if (value.length === 2) { this.$buttonrow.addClass('twobuttons'); } else if (value.length === 3) { this.$buttonrow.addClass('threebuttons'); } $.each(value, function (idx, val) { var $button = $('