rewrite the window creation to use Chrome APIs
Add properties to show and hide the window. The object is set to have the configuration of that window.
This commit is contained in:
		
							parent
							
								
									093511e738
								
							
						
					
					
						commit
						780b99785e
					
				
					 1 changed files with 51 additions and 28 deletions
				
			
		|  | @ -1,41 +1,64 @@ | ||||||
| /* different from windowman.js, just creates window management. */ | /* different from windowman.js, just creates window management. */ | ||||||
| 
 | 
 | ||||||
| export default class Window { | export default class Window { | ||||||
|      #features; | 	#options; | ||||||
| 
 | 
 | ||||||
|      constructor(url, name, options) { | 	constructor(url, options) { | ||||||
|           this.url = url; | 		this.url = url; | ||||||
|           this.name = name;  |  | ||||||
| 
 | 
 | ||||||
|           if ((typeof options).includes(`obj`)) { | 		if ((typeof options).includes(`obj`) && options != null) { | ||||||
|                this.options = options; | 			this.#options = options; | ||||||
|                this.#features = ``; | 			(Object.keys(options)).forEach((OPTION) => { | ||||||
|  | 				this[OPTION] = options[OPTION]; | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
|                let FEATURES = Object.keys(options); | 		// Check if the URL starts with a valid protocol. If not, it is most likely an extension page. 
 | ||||||
|                for (let i = 0; i < FEATURES.length; i++) { | 		if (!(this.url.startsWith(`http`) && this.url.contains(`://`))) { | ||||||
|                     this.#features = this.#features.concat(`${FEATURES[i]}=${options[FEATURES[i]]}`).concat((i == Object.keys(options).length - 1) ? `` : `,`); | 			this.url = chrome.runtime.getURL(this.url); | ||||||
|                } | 		} | ||||||
|           } |  | ||||||
| 
 | 
 | ||||||
|           this.options = options; | 		this.#options = (this.#options) ? this.#options : {}; | ||||||
|  | 		this.#options[`url`] = (this.url != this.#options[`url`]) ? this.url : this.#options[`url`]; | ||||||
| 
 | 
 | ||||||
|           this.show(); | 		// Remove options only readable here and not in the API. 
 | ||||||
|      } | 		(this.hidden != null) ? delete this.#options.hidden : this.hidden = false; | ||||||
| 
 | 
 | ||||||
|      show() { | 		// Show the window if it's not hidden.
 | ||||||
|           this.window = window.open(this.url, this.name, this.options); | 		(!this.hidden) ? this.show() : false; | ||||||
|      }; | 	} | ||||||
| 
 | 
 | ||||||
|      /* Create an action listener.  | 	/* | ||||||
|  | 	Show the window. | ||||||
|  | 	*/ | ||||||
|  | 	show() { | ||||||
|  | 		chrome.windows.create(this.#options, (window) => { | ||||||
|  | 			this.ID = window.id; | ||||||
|  | 		}); | ||||||
|  | 	}; | ||||||
| 
 | 
 | ||||||
|      @param {string} event the event to listen for |  | ||||||
|      @param {function} callback the callback function |  | ||||||
|      */ |  | ||||||
|      static addActionListener(event, callback) { |  | ||||||
|           // Correct possible syntax error on "on" prefix.
 |  | ||||||
|           event = (!event.includes(`on`)) ? `on${event}` : event; |  | ||||||
| 
 | 
 | ||||||
|           // Add the event. 
 | 	/* | ||||||
|           chrome.windows[event].addListener(callback); | 	Hide the window.  | ||||||
|      } | 	*/ | ||||||
|  | 	hide() { | ||||||
|  | 		// Close the window if it is still defined. 
 | ||||||
|  | 		(this.ID) ? chrome.windows.remove(this.ID) : false; | ||||||
|  | 
 | ||||||
|  | 		// Remove the ID. 
 | ||||||
|  | 		delete this.ID; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* Create an action listener.  | ||||||
|  | 
 | ||||||
|  | 	@param {string} event the event to listen for | ||||||
|  | 	@param {function} callback the callback function | ||||||
|  | 	*/ | ||||||
|  | 	static addActionListener(event, callback) { | ||||||
|  | 		// Correct possible syntax error on "on" prefix.
 | ||||||
|  | 		event = (!event.includes(`on`)) ? `on${event}` : event; | ||||||
|  | 
 | ||||||
|  | 		// Add the event. 
 | ||||||
|  | 		chrome.windows[event].addListener(callback); | ||||||
|  | 	} | ||||||
| }; | }; | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue