Estoy usando el editor Ace dentro del diseño de jquery. Funciona muy bien. Sin embargo, he implementado una funcionalidad de pantalla completa y en el modo de pantalla completa, la ventana emergente de autocompletar no aparece ya que se aplica al cuerpo, mientras que en mi caso <div id="main-container">
está en modo de pantalla completa.
En el modo de pantalla completa, presiono ctrl+espacio y luego muevo manualmente <div class=" ace_editor ace_autocomplete ace-tomorrow">
dentro <div id="main-container">
y parece funcionar bien con la posición correcta.
¿Es posible definir un contenedor para la ventana emergente de autocompletar para que pueda darle <div id="main-container">
como contenedor en lugar de cuerpo que resolverá este problema en mi opinión?
Código completo: (guardar como .html)
use el botón de pantalla completa en el panel central
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ACE Autocompletion demo</title>
<style type="text/css" media="screen">
body {
overflow: hidden;
}
#editor {
margin: 0;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
</style>
</head>
<body>
<!-- html -->
<div class="myDiv" style="height:800px">
<div class="ui-layout-center">Center
<button id="fullscreenButton" type="button">Full-Screen</button>
</div>
<div class="ui-layout-north">North</div>
<div class="ui-layout-south">South</div>
<div class="ui-layout-east"> code Mirror
<div id="main-container">
<div id="editor">Type in a word like "will" below and press ctrl+space or alt+space to get "rhyme completion"</div>
</div>
</div>
<div class="ui-layout-west">West</div>
</div>
<!-- ace-plugin -->
<script src="https://rawgithub.com/ajaxorg/ace-builds/master/src/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="https://rawgithub.com/ajaxorg/ace-builds/master/src/ext-language_tools.js" type="text/javascript" charset="utf-8"></script>
<!-- layout.jquery-plugin -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://layout.jquery-dev.com/lib/css/layout-default-latest.css" />
<script type="text/javascript" src="http://layout.jquery-dev.com/lib/js/jquery-ui-latest.js"></script>
<script type="text/javascript" src="http://layout.jquery-dev.com/lib/js/jquery.layout-1.3.0.rc30.80.js"></script>
<!-- jquery-fullscreen-plugin -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-fullscreen-plugin/1.1.4/jquery.fullscreen-min.js"></script>
<script>
//
// setup ace editor
function setupAce() {
// trigger extension
ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");
editor.session.setMode("ace/mode/html");
editor.setTheme("ace/theme/tomorrow");
// enable autocompletion and snippets
editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true,
enableLiveAutocompletion: false
});
$("#fullscreenButton").click(function(event) {
$("#main-container").toggleFullScreen();
});
}
// init layout
$('.myDiv').layout({
resizeWhileDragging: true,
resizable: true,
east: {
size: 800
},
onload_end: function() {
setupAce();
}
});
//
</script>
</body>
</html>
+1
¿Hay una solución para este problema?
Una solución que funciona con la versión actual de Ace es agregar
function getPopup() {
if (!editor.completer) {
var Autocomplete = ace.require("ace/autocomplete").Autocomplete
editor.completer = new Autocomplete()
}
editor.completer.editor = editor
editor.completer.$init()
return editor.completer.popup.container;
}
document.onfullscreenchange = function(event) {
var popup = getPopup();
if (document.fullscreen)
$("#main-container")[0].appendChild(popup);
else
document.body.appendChild(popup);
}
Gracias @nightwing
tal vez moverse
editor.completer.editor = editor
editor.completer.$init()
dentro de la declaración if
if (!editor.completer) {
ya que de esta manera instanciará múltiples autocompletadores (y terminaría con varios de ellos en el DOM).
Comentario más útil
Una solución que funciona con la versión actual de Ace es agregar