113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import Theme from './theme.js'
 | 
						|
import AbstractPopup from './abstractpopup.js'
 | 
						|
import Tooltip from './tooltip.js'
 | 
						|
 | 
						|
/**
 | 
						|
 * Class that represents a PixiJS Badge.
 | 
						|
 *
 | 
						|
 * @example
 | 
						|
 * // Create the app
 | 
						|
 * const app = new PIXIApp({
 | 
						|
 *     view: canvas,
 | 
						|
 *     width: 900,
 | 
						|
 *     height: 250
 | 
						|
 * }).setup().run()
 | 
						|
 *
 | 
						|
 * // Add an DisplayObject to the app
 | 
						|
 * const circle = new PIXI.Graphics()
 | 
						|
 * circle.beginFill(0x5251a3)
 | 
						|
 * circle.drawCircle(50, 50, 40)
 | 
						|
 * app.scene.addChild(circle)
 | 
						|
 *
 | 
						|
 * const badge1 = new Badge({
 | 
						|
 *     object: circle,
 | 
						|
 *     container: app.scene,
 | 
						|
 *     content: 'Das Gesetz ist der Freund des Schwachen.'
 | 
						|
 * })
 | 
						|
 *
 | 
						|
 * @class
 | 
						|
 * @extends AbstractPopup
 | 
						|
 * @see {@link https://www.iwm-tuebingen.de/iwmbrowser/lib/pixi/badge.html|DocTest}
 | 
						|
 */
 | 
						|
export default class Badge extends AbstractPopup {
 | 
						|
    /**
 | 
						|
     * Creates an instance of a Badge.
 | 
						|
     *
 | 
						|
     * @constructor
 | 
						|
     * @param {object} [opts] - An options object to specify to style and behaviour of the badge.
 | 
						|
     * @param {number} [opts.minWidth=0] - The minimum width of the badge.
 | 
						|
     * @param {number} [opts.minHeight=0] - The minimum height of the badge.
 | 
						|
     * @param {number} [opts.padding=Theme.padding / 2] - The inner spacing of the badge.
 | 
						|
     * @param {string|object} [opts.tooltip] - A string for the label of the tooltip or an object to configure the tooltip
 | 
						|
     *     to display.
 | 
						|
     */
 | 
						|
    constructor(opts = {}) {
 | 
						|
        const theme = Theme.fromString(opts.theme)
 | 
						|
 | 
						|
        opts = Object.assign(
 | 
						|
            {},
 | 
						|
            {
 | 
						|
                minWidth: 0,
 | 
						|
                minHeight: 0,
 | 
						|
                padding: theme.padding / 2,
 | 
						|
                tooltip: null,
 | 
						|
            },
 | 
						|
            opts
 | 
						|
        )
 | 
						|
 | 
						|
        super(opts)
 | 
						|
 | 
						|
        this.tooltip = null
 | 
						|
 | 
						|
        // setup
 | 
						|
        //-----------------
 | 
						|
        this.setup()
 | 
						|
 | 
						|
        // layout
 | 
						|
        //-----------------
 | 
						|
        this.layout()
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates children and instantiates everything.
 | 
						|
     *
 | 
						|
     * @private
 | 
						|
     * @override
 | 
						|
     * @return {Badge} A reference to the badge for chaining.
 | 
						|
     */
 | 
						|
    setup() {
 | 
						|
        super.setup()
 | 
						|
 | 
						|
        // tooltip
 | 
						|
        //-----------------
 | 
						|
        if (this.opts.tooltip) {
 | 
						|
            if (typeof this.opts.tooltip === 'string') {
 | 
						|
                this.tooltip = new Tooltip({
 | 
						|
                    object: this,
 | 
						|
                    content: this.opts.tooltip,
 | 
						|
                })
 | 
						|
            } else {
 | 
						|
                this.opts.tooltip = Object.assign({}, { object: this }, this.opts.tooltip)
 | 
						|
                this.tooltip = new Tooltip(this.opts.tooltip)
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return this
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Should be called to refresh the layout of the badge. Can be used after resizing.
 | 
						|
     *
 | 
						|
     * @override
 | 
						|
     * @return {Badge} A reference to the badge for chaining.
 | 
						|
     */
 | 
						|
    layout() {
 | 
						|
        super.layout()
 | 
						|
 | 
						|
        this.content.x = this.width / 2 - this.content.width / 2 - this.opts.strokeWidth / 2
 | 
						|
        this.content.y = this.height / 2 - this.content.height / 2 - this.opts.strokeWidth / 2
 | 
						|
 | 
						|
        return this
 | 
						|
    }
 | 
						|
}
 |