Restore focus after switching mode. Fixed z-index issue with context menu.

This commit is contained in:
josdejong 2013-08-28 15:01:05 +02:00
parent 5a7a76cf0b
commit a33bc3e119
8 changed files with 53 additions and 17 deletions

2
jsoneditor-min.css vendored

File diff suppressed because one or more lines are too long

6
jsoneditor-min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -224,6 +224,7 @@ div.jsoneditor {
.jsoneditor-contextmenu { .jsoneditor-contextmenu {
position: absolute; position: absolute;
z-index: 999;
} }
.jsoneditor-contextmenu ul { .jsoneditor-contextmenu ul {
@ -236,7 +237,6 @@ div.jsoneditor {
border: 1px solid #d3d3d3; border: 1px solid #d3d3d3;
box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3); box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);
z-index: 1;
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;

View File

@ -28,7 +28,7 @@
* *
* @author Jos de Jong, <wjosdejong@gmail.com> * @author Jos de Jong, <wjosdejong@gmail.com>
* @version 2.3.0-SNAPSHOT * @version 2.3.0-SNAPSHOT
* @date 2013-08-27 * @date 2013-08-28
*/ */
(function () { (function () {
@ -819,6 +819,7 @@ TreeEditor.prototype._createFrame = function () {
if (this.options && this.options.modes && this.options.modes.length) { if (this.options && this.options.modes && this.options.modes.length) {
var modeBox = createModeBox(this, this.options.modes, this.options.mode); var modeBox = createModeBox(this, this.options.modes, this.options.mode);
this.menu.appendChild(modeBox); this.menu.appendChild(modeBox);
this.dom.modeBox = modeBox;
} }
// create search box // create search box
@ -1075,6 +1076,7 @@ TextEditor.prototype._create = function (container, options, json) {
var me = this; var me = this;
this.container = container; this.container = container;
this.dom = {};
this.editor = undefined; // ace code editor this.editor = undefined; // ace code editor
this.textarea = undefined; // plain text editor (fallback when Ace is not available) this.textarea = undefined; // plain text editor (fallback when Ace is not available)
@ -1125,6 +1127,7 @@ TextEditor.prototype._create = function (container, options, json) {
if (this.options && this.options.modes && this.options.modes.length) { if (this.options && this.options.modes && this.options.modes.length) {
var modeBox = createModeBox(this, this.options.modes, this.options.mode); var modeBox = createModeBox(this, this.options.modes, this.options.mode);
this.menu.appendChild(modeBox); this.menu.appendChild(modeBox);
this.dom.modeBox = modeBox;
} }
this.content = document.createElement('div'); this.content = document.createElement('div');
@ -5072,41 +5075,56 @@ History.prototype.redo = function () {
* @returns {HTMLElement} box * @returns {HTMLElement} box
*/ */
function createModeBox(editor, modes, current) { function createModeBox(editor, modes, current) {
/**
* Switch the mode of the editor
* @param {String} mode
*/
function switchMode(mode) {
// switch mode
editor.setMode(mode);
// restore focus on mode box
var modeBox = editor.dom && editor.dom.modeBox;
if (modeBox) {
modeBox.focus();
}
}
// available modes // available modes
var availableModes = { var availableModes = {
code: { code: {
'text': 'Code', 'text': 'Code',
'title': 'Switch to code highlighter', 'title': 'Switch to code highlighter',
'click': function () { 'click': function () {
editor.setMode('code'); switchMode('code')
} }
}, },
form: { form: {
'text': 'Form', 'text': 'Form',
'title': 'Switch to form editor', 'title': 'Switch to form editor',
'click': function () { 'click': function () {
editor.setMode('form'); switchMode('form');
} }
}, },
text: { text: {
'text': 'Text', 'text': 'Text',
'title': 'Switch to plain text editor', 'title': 'Switch to plain text editor',
'click': function () { 'click': function () {
editor.setMode('text'); switchMode('text');
} }
}, },
tree: { tree: {
'text': 'Tree', 'text': 'Tree',
'title': 'Switch to tree editor', 'title': 'Switch to tree editor',
'click': function () { 'click': function () {
editor.setMode('tree'); switchMode('tree');
} }
}, },
view: { view: {
'text': 'View', 'text': 'View',
'title': 'Switch to tree view', 'title': 'Switch to tree view',
'click': function () { 'click': function () {
editor.setMode('view'); switchMode('view');
} }
} }
}; };

View File

@ -3,6 +3,7 @@
.jsoneditor-contextmenu { .jsoneditor-contextmenu {
position: absolute; position: absolute;
z-index: 999;
} }
.jsoneditor-contextmenu ul { .jsoneditor-contextmenu ul {
@ -15,7 +16,6 @@
border: 1px solid #d3d3d3; border: 1px solid #d3d3d3;
box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3); box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);
z-index: 1;
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;

View File

@ -6,41 +6,56 @@
* @returns {HTMLElement} box * @returns {HTMLElement} box
*/ */
function createModeBox(editor, modes, current) { function createModeBox(editor, modes, current) {
/**
* Switch the mode of the editor
* @param {String} mode
*/
function switchMode(mode) {
// switch mode
editor.setMode(mode);
// restore focus on mode box
var modeBox = editor.dom && editor.dom.modeBox;
if (modeBox) {
modeBox.focus();
}
}
// available modes // available modes
var availableModes = { var availableModes = {
code: { code: {
'text': 'Code', 'text': 'Code',
'title': 'Switch to code highlighter', 'title': 'Switch to code highlighter',
'click': function () { 'click': function () {
editor.setMode('code'); switchMode('code')
} }
}, },
form: { form: {
'text': 'Form', 'text': 'Form',
'title': 'Switch to form editor', 'title': 'Switch to form editor',
'click': function () { 'click': function () {
editor.setMode('form'); switchMode('form');
} }
}, },
text: { text: {
'text': 'Text', 'text': 'Text',
'title': 'Switch to plain text editor', 'title': 'Switch to plain text editor',
'click': function () { 'click': function () {
editor.setMode('text'); switchMode('text');
} }
}, },
tree: { tree: {
'text': 'Tree', 'text': 'Tree',
'title': 'Switch to tree editor', 'title': 'Switch to tree editor',
'click': function () { 'click': function () {
editor.setMode('tree'); switchMode('tree');
} }
}, },
view: { view: {
'text': 'View', 'text': 'View',
'title': 'Switch to tree view', 'title': 'Switch to tree view',
'click': function () { 'click': function () {
editor.setMode('view'); switchMode('view');
} }
} }
}; };

View File

@ -62,6 +62,7 @@ TextEditor.prototype._create = function (container, options, json) {
var me = this; var me = this;
this.container = container; this.container = container;
this.dom = {};
this.editor = undefined; // ace code editor this.editor = undefined; // ace code editor
this.textarea = undefined; // plain text editor (fallback when Ace is not available) this.textarea = undefined; // plain text editor (fallback when Ace is not available)
@ -112,6 +113,7 @@ TextEditor.prototype._create = function (container, options, json) {
if (this.options && this.options.modes && this.options.modes.length) { if (this.options && this.options.modes && this.options.modes.length) {
var modeBox = createModeBox(this, this.options.modes, this.options.mode); var modeBox = createModeBox(this, this.options.modes, this.options.mode);
this.menu.appendChild(modeBox); this.menu.appendChild(modeBox);
this.dom.modeBox = modeBox;
} }
this.content = document.createElement('div'); this.content = document.createElement('div');

View File

@ -578,6 +578,7 @@ TreeEditor.prototype._createFrame = function () {
if (this.options && this.options.modes && this.options.modes.length) { if (this.options && this.options.modes && this.options.modes.length) {
var modeBox = createModeBox(this, this.options.modes, this.options.mode); var modeBox = createModeBox(this, this.options.modes, this.options.mode);
this.menu.appendChild(modeBox); this.menu.appendChild(modeBox);
this.dom.modeBox = modeBox;
} }
// create search box // create search box