diff options
author | NastuzziSamy <samy@nastuzzi.fr> | 2018-05-02 13:42:17 +0300 |
---|---|---|
committer | NastuzziSamy <samy@nastuzzi.fr> | 2018-05-02 13:42:17 +0300 |
commit | 1cf0a44a31901b00b86a65d119d73dcfbf7253e1 (patch) | |
tree | f82403ebd81948be7b80f976b84c80696e5d3c60 /js | |
parent | 5d084e0a703d8bca76f34db9798f4bef2be911d6 (diff) |
Add z-index et disabled options compatibility
Diffstat (limited to 'js')
-rw-r--r-- | js/files.js | 5 | ||||
-rw-r--r-- | js/script.js | 71 |
2 files changed, 55 insertions, 21 deletions
diff --git a/js/files.js b/js/files.js index 8699414..10516e0 100644 --- a/js/files.js +++ b/js/files.js @@ -18,9 +18,6 @@ var RightClick = RightClick || {}; if ($('tbody').has(event.target).length === 0) return; - event.stopPropagation(); - event.preventDefault(); - var appName = 'files_rightclick'; var currentFile = $(event.target).closest('tr'); var leftToRemove = currentFile.find('.selection').width(); @@ -203,5 +200,5 @@ var RightClick = RightClick || {}; } return options; - }); + }, $('#controls').css('z-index') - 1); })(window, jQuery, RightClick); diff --git a/js/script.js b/js/script.js index 1cadc12..aa15816 100644 --- a/js/script.js +++ b/js/script.js @@ -48,6 +48,14 @@ var RightClick = RightClick || {}; return ul; } + this.isDisabled = function () { + for (var name in this.options) { + if (!this.options[name].isDisabled()) + return false; + } + + return true; + } this.add(options); } @@ -59,36 +67,58 @@ var RightClick = RightClick || {}; this.subOptions = subOptions; this.generate = function () { + var a = $('<a>'); + var iconSpan = $('<span>', { + 'class': this.icon + }); + var textSpan = $('<span>', { + 'text': this.text + }); + + if (this.callback === undefined) { + a.attr('disabled', true).css({ + 'cursor': 'default', + 'background-color': '#AAA' + }); + + iconSpan.css('cursor', 'default'); + textSpan.css('cursor', 'default'); + } + return $('<li>', { - 'onClick': callback - }).append( - $('<a>').append( - $('<span>', { - 'class': this.icon - }) - ).append( - $('<span>', { - 'text': this.text - }) - ) - ) + 'onClick': this.callback + }).append(a.append(iconSpan).append(textSpan)); }; + + this.isDisabled = function () { + return this.callback === undefined; + } } - exports.ContextMenu = function (context, options) { + exports.ContextMenu = function (context, options, zIndex) { this.context = context; this.options = options || new exports.Options(); + this.params = { + 'z-index': zIndex || 100 + }; if (context === undefined) return undefined; var onClick = function (event) { + event.stopPropagation(); + event.preventDefault(); + var $this = $(this); - options = $.data($this[0], 'right_click-options'); + var options = $.data($this[0], 'right_click-options'); + var params = $.data($this[0], 'right_click-params'); if (typeof options === "function") options = options(event); + if (options.nbr === 0) + return; + var div = $('<div>', { 'class': 'bubble open rightClickMenu' }).append(options.generate()); @@ -96,20 +126,27 @@ var RightClick = RightClick || {}; div.appendTo($this); var top = event.pageY + $this.position().top - $this.offset().top + 15; - var left = event.pageX + $this.position().left - $this.offset().left - (div.width() / 2); + var left = event.pageX + $this.position().left - $this.offset().left - (div.width() / 2) - 5; div.css({ 'top': top, 'left': left, - 'right': 'auto' + 'right': 'auto', + 'z-index': params['z-index'] }); - $('style.rightClickStyle').text('.rightClickMenu:after{transform:translateX(-50%);left:' + (div.width() / 2) + 'px}'); + var optionsDisabled = options.isDisabled(); + + if (optionsDisabled) + div.css('background-color', '#AAA'); + + $('style.rightClickStyle').text('.rightClickMenu:after{transform:translateX(-50%);left:' + (div.width() / 2) + 'px;' + (optionsDisabled ? 'border-bottom-color:#AAA;' : '') + '}'); return false; } $.data(this.context[0], 'right_click-options', this.options); + $.data(this.context[0], 'right_click-params', this.params); this.context.contextmenu(onClick); }; |