diff --git a/demo/demo.js b/demo/demo.js index cd70a622..49e91f0f 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -153,6 +153,7 @@ exports.launch = function(env) { docs.textile.setUndoManager(new UndoManager()); var container = document.getElementById("editor"); + var cockpitInput = document.getElementById("cockpitInput"); env.editor = new Editor(new Renderer(container, theme)); var modes = { @@ -336,7 +337,9 @@ exports.launch = function(env) { } function onResize() { - container.style.width = (document.documentElement.clientWidth - 180) + "px"; + var width = (document.documentElement.clientWidth - 300); + container.style.width = width + "px"; + cockpitInput.style.width = width + "px"; container.style.height = (document.documentElement.clientHeight - 22) + "px"; env.editor.resize(); }; @@ -373,8 +376,8 @@ exports.launch = function(env) { mode = "python"; } else if (/^.*\.php$/i.test(file.name)) { mode = "php"; - } else if (/^.*\.cs$/i.test(file.name)) { - mode = "csharp"; + } else if (/^.*\.cs$/i.test(file.name)) { + mode = "csharp"; } else if (/^.*\.java$/i.test(file.name)) { mode = "java"; } else if (/^.*\.rb$/i.test(file.name)) { @@ -471,28 +474,58 @@ exports.launch = function(env) { mac: "Alt-L", sender: "editor" }, - exec: function() { - var session = env.editor.session, - range = env.editor.selection.getRange(), - placeHolder = session.getTextRange(range).substring(0, 3) + "..."; - - session.addFold(placeHolder, range); + exec: function(env) { + toggleFold(env, false) } }); canon.addCommand({ - name: "undfold", + name: "unfold", bindKey: { win: "Alt-Shift-L", mac: "Alt-Shift-L", sender: "editor" }, - exec: function() { - var session = env.editor.session, - range = env.editor.selection.getRange(); - session.expandFolds(session.getFoldsInRange(range)); + exec: function(env) { + toggleFold(env, true) } }); + + function toggleFold(env, tryToUnfold) { + var session = env.editor.session, + selection = env.editor.selection, + range = selection.getRange(), addFold; + + if(range.isEmpty()) { + var br = session.findMatchingBracket(range.start); + var fold = session.getFoldAt(range.start.row, range.start.column) + if(fold) { + session.expandFold(fold); + selection.setSelectionRange(fold.range) + } else if(br) { + if(range.compare(br.row,br.column) == 1) + range.end = br; + else + range.start = br; + addFold = true; + } + } else { + var folds = session.getFoldsInRange(range); + if(tryToUnfold && folds.length) + session.expandFolds(folds); + else if(folds.length == 1 && folds[0].range.compare(range) == 0) + session.expandFolds(folds); + else + addFold = true; + } + if(addFold) { + var placeHolder = session.getTextRange(range); + if(placeHolder.length < 3) + return; + placeHolder = placeHolder.trim().substring(0, 3).replace(' ','','g') + "..."; + session.addFold(placeHolder, range); + } + } }; }); diff --git a/demo/styles.css b/demo/styles.css index 6b774db3..4be33b19 100644 --- a/demo/styles.css +++ b/demo/styles.css @@ -1,5 +1,6 @@ html { height: 100%; + width: 100%; overflow: hidden; } @@ -18,7 +19,7 @@ body { #editor { position: absolute; top: 0px; - left: 180px; + left: 300px; bottom: 0px; right: 0px; background: white; @@ -28,9 +29,17 @@ body { padding: 5px; } +#controls td { + text-align: right; +} + +#controls td + td { + text-align: left; +} + #cockpitInput { position: absolute; - left: 180px; + left: 300px; right: 0px; bottom: 0; diff --git a/index.html b/index.html index 01b9ae1e..59752466 100644 --- a/index.html +++ b/index.html @@ -9,15 +9,16 @@