mirror of
				https://github.com/telekom-security/tpotce.git
				synced 2025-07-02 01:27:27 -04:00 
			
		
		
		
	
		
			
	
	
		
			195 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			195 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | (function($) { | ||
|  | 	$.widget('oc.ocdialog', { | ||
|  | 		options: { | ||
|  | 			closeButton: true, | ||
|  | 			closeOnEscape: true, | ||
|  | 			modal: false | ||
|  | 		}, | ||
|  | 		_create: function() { | ||
|  | 			var self = this; | ||
|  | 
 | ||
|  | 			this.originalTitle = this.element.attr('title'); | ||
|  | 			this.options.title = this.options.title || this.originalTitle; | ||
|  | 
 | ||
|  | 			this.$dialog = $('<div class="oc-dialog" />') | ||
|  | 				.attr({ | ||
|  | 					// Setting tabIndex makes the div focusable | ||
|  | 					tabIndex: -1, | ||
|  | 					role: 'dialog' | ||
|  | 				}) | ||
|  | 				.insertBefore(this.element); | ||
|  | 			this.$dialog.append(this.element.detach()); | ||
|  | 			this.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog); | ||
|  | 
 | ||
|  | 			$(document).on('keydown keyup', function(event) { | ||
|  | 				if ( | ||
|  | 					event.target !== self.$dialog.get(0) && | ||
|  | 					self.$dialog.find($(event.target)).length === 0 | ||
|  | 				) { | ||
|  | 					return; | ||
|  | 				} | ||
|  | 				// Escape | ||
|  | 				if ( | ||
|  | 					event.keyCode === 27 && | ||
|  | 					event.type === 'keydown' && | ||
|  | 					self.options.closeOnEscape | ||
|  | 				) { | ||
|  | 					event.stopImmediatePropagation(); | ||
|  | 					self.close(); | ||
|  | 					return false; | ||
|  | 				} | ||
|  | 				// Enter | ||
|  | 				if (event.keyCode === 13) { | ||
|  | 					event.stopImmediatePropagation(); | ||
|  | 					if (event.type === 'keyup') { | ||
|  | 						event.preventDefault(); | ||
|  | 						return false; | ||
|  | 					} | ||
|  | 					// If no button is selected we trigger the primary | ||
|  | 					if ( | ||
|  | 						self.$buttonrow && | ||
|  | 						self.$buttonrow.find($(event.target)).length === 0 | ||
|  | 					) { | ||
|  | 						var $button = self.$buttonrow.find('button.primary'); | ||
|  | 						if ($button) { | ||
|  | 							$button.trigger('click'); | ||
|  | 						} | ||
|  | 					} else if (self.$buttonrow) { | ||
|  | 						$(event.target).trigger('click'); | ||
|  | 					} | ||
|  | 					return false; | ||
|  | 				} | ||
|  | 			}); | ||
|  | 			this._setOptions(this.options); | ||
|  | 			this._createOverlay(); | ||
|  | 		}, | ||
|  | 		_init: function() { | ||
|  | 			this.$dialog.focus(); | ||
|  | 			this._trigger('open'); | ||
|  | 		}, | ||
|  | 		_setOption: function(key, value) { | ||
|  | 			var self = this; | ||
|  | 			switch (key) { | ||
|  | 				case 'title': | ||
|  | 					if (this.$title) { | ||
|  | 						this.$title.text(value); | ||
|  | 					} else { | ||
|  | 						var $title = $('<h3 class="oc-dialog-title">' + | ||
|  | 							value + | ||
|  | 							'</h3>'); | ||
|  | 						this.$title = $title.prependTo(this.$dialog); | ||
|  | 					} | ||
|  | 					break; | ||
|  | 				case 'buttons': | ||
|  | 					if (this.$buttonrow) { | ||
|  | 						this.$buttonrow.empty(); | ||
|  | 					} else { | ||
|  | 						var $buttonrow = $('<div class="oc-dialog-buttonrow" />'); | ||
|  | 						this.$buttonrow = $buttonrow.appendTo(this.$dialog); | ||
|  | 					} | ||
|  | 					if (value.length === 1) { | ||
|  | 						this.$buttonrow.addClass('onebutton'); | ||
|  | 					} else if (value.length === 2) { | ||
|  | 						this.$buttonrow.addClass('twobuttons'); | ||
|  | 					} else if (value.length === 3) { | ||
|  | 						this.$buttonrow.addClass('threebuttons'); | ||
|  | 					} | ||
|  | 					$.each(value, function(idx, val) { | ||
|  | 						var $button = $('<button>').text(val.text); | ||
|  | 						if (val.classes) { | ||
|  | 							$button.addClass(val.classes); | ||
|  | 						} | ||
|  | 						if (val.defaultButton) { | ||
|  | 							$button.addClass('primary'); | ||
|  | 							self.$defaultButton = $button; | ||
|  | 						} | ||
|  | 						self.$buttonrow.append($button); | ||
|  | 						$button.click(function() { | ||
|  | 							val.click.apply(self.element[0], arguments); | ||
|  | 						}); | ||
|  | 					}); | ||
|  | 					this.$buttonrow.find('button') | ||
|  | 						.on('focus', function(event) { | ||
|  | 							self.$buttonrow.find('button').removeClass('primary'); | ||
|  | 							$(this).addClass('primary'); | ||
|  | 						}); | ||
|  | 					break; | ||
|  | 				case 'closeButton': | ||
|  | 					if (value) { | ||
|  | 						var $closeButton = $('<a class="oc-dialog-close"></a>'); | ||
|  | 						this.$dialog.prepend($closeButton); | ||
|  | 						$closeButton.on('click', function() { | ||
|  | 							self.close(); | ||
|  | 						}); | ||
|  | 					} else { | ||
|  | 						this.$dialog.find('.oc-dialog-close').remove(); | ||
|  | 					} | ||
|  | 					break; | ||
|  | 				case 'close': | ||
|  | 					this.closeCB = value; | ||
|  | 					break; | ||
|  | 			} | ||
|  | 			//this._super(key, value); | ||
|  | 			$.Widget.prototype._setOption.apply(this, arguments); | ||
|  | 		}, | ||
|  | 		_setOptions: function(options) { | ||
|  | 			//this._super(options); | ||
|  | 			$.Widget.prototype._setOptions.apply(this, arguments); | ||
|  | 		}, | ||
|  | 		_createOverlay: function() { | ||
|  | 			if (!this.options.modal) { | ||
|  | 				return; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			var self = this; | ||
|  | 			this.overlay = $('<div>') | ||
|  | 				.addClass('oc-dialog-dim') | ||
|  | 				.appendTo($('#content')); | ||
|  | 			this.overlay.on('click keydown keyup', function(event) { | ||
|  | 				if (event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) { | ||
|  | 					event.preventDefault(); | ||
|  | 					event.stopPropagation(); | ||
|  | 					return; | ||
|  | 				} | ||
|  | 			}); | ||
|  | 		}, | ||
|  | 		_destroyOverlay: function() { | ||
|  | 			if (!this.options.modal) { | ||
|  | 				return; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if (this.overlay) { | ||
|  | 				this.overlay.off('click keydown keyup'); | ||
|  | 				this.overlay.remove(); | ||
|  | 				this.overlay = null; | ||
|  | 			} | ||
|  | 		}, | ||
|  | 		widget: function() { | ||
|  | 			return this.$dialog; | ||
|  | 		}, | ||
|  | 		close: function() { | ||
|  | 			this._destroyOverlay(); | ||
|  | 			var self = this; | ||
|  | 			// Ugly hack to catch remaining keyup events. | ||
|  | 			setTimeout(function() { | ||
|  | 				self._trigger('close', self); | ||
|  | 				self.$dialog.hide(); | ||
|  | 			}, 200); | ||
|  | 		}, | ||
|  | 		destroy: function() { | ||
|  | 			if (this.$title) { | ||
|  | 				this.$title.remove(); | ||
|  | 			} | ||
|  | 			if (this.$buttonrow) { | ||
|  | 				this.$buttonrow.remove(); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if (this.originalTitle) { | ||
|  | 				this.element.attr('title', this.originalTitle); | ||
|  | 			} | ||
|  | 			this.element.removeClass('oc-dialog-content').detach().insertBefore(this.$dialog); | ||
|  | 			this.$dialog.remove(); | ||
|  | 		} | ||
|  | 	}); | ||
|  | }(jQuery)); |