add context menu opener
This commit is contained in:
		
							parent
							
								
									9cf8abee70
								
							
						
					
					
						commit
						4146e9f337
					
				
					 1 changed files with 67 additions and 0 deletions
				
			
		
							
								
								
									
										67
									
								
								scripts/GUI/context_menus.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								scripts/GUI/context_menus.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,67 @@ | |||
| /* context_menus.js */ | ||||
| 
 | ||||
| export default class Menu { | ||||
|      #options; | ||||
| 
 | ||||
|      constructor (ID, title, contexts, event, type, icon) { | ||||
|           if ((typeof ID).includes(`obj`) && !Array.isArray(ID) && ID.hasOwnProperty(`ID`)) { | ||||
|                (Object.keys(ID)).forEach((key) => { | ||||
|                     this[key] = ID[key]; | ||||
|                }) | ||||
|           } else { | ||||
|                this.ID = String((ID) ? ID : (Math.random() / Math.random() * 100)); | ||||
|                this.title = (title) ? title : `Menu`; | ||||
|                this.contexts = (Array.isArray(contexts)) ? contexts : [`all`]; | ||||
|                this.event = (event) ? event : function() {}; | ||||
|                this.type = (((typeof type).includes(`str`) && type) ? type.trim() : false) ? type : `normal`; | ||||
| 
 | ||||
|                if (icon) { | ||||
|                     this.icon = icon; | ||||
|                }; | ||||
|           }; | ||||
| 
 | ||||
|           this.#options = { | ||||
|                id: this.ID, | ||||
|                title: this.title, | ||||
|                contexts: this.contexts, | ||||
|                type: this.type, | ||||
|                onclick: this.event | ||||
|           }; | ||||
|           (this.icon) ? this.#options.icon = this.icon : null; | ||||
| 
 | ||||
|           chrome.contextMenus.create(this.#options); | ||||
|           delete this.#options.id; | ||||
|      }; | ||||
| 
 | ||||
|      remove() { | ||||
|           chrome.contextMenus.remove(this.ID); | ||||
|      }; | ||||
| 
 | ||||
|      /* Update the context menu.  | ||||
|       | ||||
|      @param {Object} options The new options for the context menu. | ||||
|      */ | ||||
|      update(options) { | ||||
|           if ((typeof options).includes(`obj`) && options != null && !Array.isArray(options)) { | ||||
|                (Object.keys(options)).forEach((key) => { | ||||
|                     (options[key] != null && options[key] != undefined) ? this[key] = options[key] : delete this[key]; | ||||
|                }); | ||||
|           } | ||||
| 
 | ||||
|           this.#options = { | ||||
|                title: this.title, | ||||
|                contexts: this.contexts, | ||||
|                type: this.type, | ||||
|                onclick: this.event | ||||
|           }; | ||||
|           (this.icon) ? this.#options.icon = this.icon : null; | ||||
| 
 | ||||
|           chrome.contextMenus.update(this.ID, this.#options); | ||||
|      } | ||||
| 
 | ||||
|      /* Run a new function when triggered. */ | ||||
|      onclick(callback) { | ||||
|           this.event = callback; | ||||
|           this.update(); | ||||
|      } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue