js/vercengen/features/PageMenuWindow.js

/**
 * Refer to <span color = "yellow">{@link ve.Feature}</span> for methods or fields inherited from the parent, such as automatic destructuring.
 * 
 * Represents a PageMenuWindow Feature that contains a page_obj type directly analogous to that used in {@link ve.PageMenu}. The associated {@link ve.Window} is stored in `.window`.
 * - Functional binding: <span color=00ffff>vePageMenuWindow</span>().
 * 
 * ##### Constructor:
 * - `arg0_page_obj`: {@link Object}
 *   - `<page_key>`: {@link Object}
 *     - `.name`: {@link string} - '<page_key>' by default.
 *     - `.components_obj:` {@link Object}<{@link ve.Component}>
 *     - `.options`: {@link Object} - Options for the {@link ve.Interface} .components_obj will be wrapped inside.
 * - `arg1_options`: {@link Object} - Superset of `.options` for {@link ve.Window}.
 *   - `anchor="top_left"` - Either 'bottom_left'/'bottom_right'/'top_left'/'top_right'.
 *   - `height="12rem"`: {@link number}
 *   - `width="12rem"`: {@link number}
 *   - `x=HTML.mouse_x`: {@link number}
 *   - `y=HTML.mouse_y`: {@link number}
 *   -
 *   - `mode="window"`: {@link string} - Either 'static_ui'/'static_window'/'window'.
 *   - `name=""`: {@link string} - Auto-resolves to 'Window' instead if `.can_rename=true`.
 *   - `theme`: {@link string} - The CSS theme to apply to the Feature.
 *   -
 *   - `can_close`: {@link boolean}
 *   - `can_rename`: {@link boolean}
 *   - `draggable`: {@link boolean}
 *   - `headless`: {@link boolean}
 *   - `resizeable`: {@link boolean}
 *   - Inherited from {@link ve.PageMenu|ve.PageMenu.options}
 *   - `.page_menu_options`: {@link Object}
 *     - `.attributes`: {@link Object}
 *       - `<attribute_key>`: {@link string}
 *     - `.name`: {@link string} - Refers to the name of the current page.
 *     - `.onchange`: {@link function}(this:{@link ve.PageMenu})
 *     - `.style`: {@link Object}
 *       - `<style_key>`: {@link string}
 *
 * @augments ve.Feature
 * @augments {@link ve.Feature}
 * @memberof ve.Feature
 * @type {ve.PageMenuWindow}
 */
ve.PageMenuWindow = class extends ve.Feature {
	constructor (arg0_page_obj, arg1_options) {
		//Convert from parameters
		let page_obj = arg0_page_obj;
		let options = (arg1_options) ? arg1_options : {};
			super(page_obj, options);
		
		//Initialise options
		options.page_menu_options = (options.page_menu_options) ? options.page_menu_options : {};
		
		//Declare local instance variables
		this.page_menu = new ve.PageMenu(page_obj, options.page_menu_options);
		this.window = new ve.Window({ page_menu_obj: this.page_menu }, options);
	}
};

//Functional binding

/**
 * @returns {ve.PageMenuWindow}
 */
vePageMenuWindow = function () {
	//Return statement
	return new ve.PageMenuWindow(...arguments);
};