widgets/colorpickerdialog.js

/*
 * This file is part of AUX.
 *
 * AUX is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * AUX 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
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General
 * Public License along with this program; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301  USA
 */

import { defineChildWidget } from '../child_widget.js';
import { Dialog } from './dialog.js';
import { ColorPicker } from './colorpicker.js';
import { addClass } from '../utils/dom.js';

function cancel() {
  const self = this.parent;
  self.emit.call(self, 'cancel');
  self.close();
}

function apply(color) {
  const self = this.parent;
  self.emit.call(self, 'apply', color);
  self.close();
}

/**
 * A {@link Dialog} window containing a {@link ColorPicker}. It can be opened
 * programatically and closes automatically on the appropriate user
 * interactions like hitting ESC or clicking `apply`. ColorPickerDialog
 * inherits all options of ColorPicker.
 *
 * @class ColorPickerDialog
 *
 * @extends Dialog
 *
 */

export class ColorPickerDialog extends Dialog {
  initialize(options) {
    super.initialize(options);
    /** @member {HTMLDivElement} ColorPickerDialog#element - The main DIV container.
     * Has class <code>.aux-colorpickerdialog</code>.
     */
  }

  draw(O, element) {
    addClass(element, 'aux-colorpickerdialog');

    super.draw(O, element);
  }
}

/**
 * @member {ColorPicker} ColorPickerDialog#colorpicker - The {@link ColorPicker} widget.
 */
defineChildWidget(ColorPickerDialog, 'colorpicker', {
  create: ColorPicker,
  show: true,
  inherit_options: true,
  userset_delegate: true,
  static_events: {
    cancel: cancel,
    apply: apply,
  },
});