Mam dość złożoną stronę, na której mam wiele instancji CodeMirror w ukrytych zakładkach w kartach. Aby to uczynić jeszcze bardziej złożonym, pamiętam ostatnie aktywne zakładki.Zakładka Bootstrap z CodeMirror
jakie udało się uzyskać to połowa pracy (http://codepen.io/anon/pen/LheaF) są problemy z kartami drugie Redaktor:
- Jego załadunek drugim wypustki przed głównymi kartami codemirror został wciśnięty. Po kliknięciu zakładki Kopiuj kod nie ładuje się poprawnie edytora, dopóki nie klikniesz dwa razy.
- Chcę, aby drugie zakładki wywoływały metodę
refresh()
, jeśli już została zainicjowana, tak jak robię to dla głównego edytora. - Bug, gdzie jego powielania wtórnego redaktorów
(function($) {
var mainEditor;
function initMainCodeEditor() {
if (mainEditor instanceof CodeMirror) {
mainEditor.refresh();
} else {
// Load main editor
var el = document.getElementById("codifyme");
mainEditor = CodeMirror.fromTextArea(el, {
lineNumbers: true
});
mainEditor.setSize('100%', 50);
}
}
function initSecondaryCodeEditor() {
var $active = $('#code_mirror_editors > .active > a');
var $sec_tab = $($active.data('target'));
CodeMirror.fromTextArea($sec_tab.find('textarea')[0], {
lineNumbers: true
});
}
$(document).ready(function() {
// Only load editors if tab has been clicked
$('#maintabs > li > a[data-target="#codemirror"]').on('shown.bs.tab', function(e) {
initMainCodeEditor();
});
$('#code_mirror_editors > li > a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
initSecondaryCodeEditor();
});
// Remember tabs
var json, tabsState;
$('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
tabsState = localStorage.getItem("tabs-state");
json = JSON.parse(tabsState || "{}");
json[$(e.target).parents("ul.nav.nav-pills, ul.nav.nav-tabs").attr("id")] = $(e.target).data('target');
localStorage.setItem("tabs-state", JSON.stringify(json));
});
tabsState = localStorage.getItem("tabs-state");
json = JSON.parse(tabsState || "{}");
$.each(json, function(containerId, target) {
return $("#" + containerId + " a[data-target=" + target + "]").tab('show');
});
$("ul.nav.nav-pills, ul.nav.nav-tabs").each(function() {
var $this = $(this);
if (!json[$this.attr("id")]) {
return $this.find("a[data-toggle=tab]:first, a[data-toggle=pill]:first").tab("show");
}
});
}); // doc.ready
})(jQuery);