Код решает проблему и легко встраивается, но из-за разной структуры HTML в логике табов, например в ../templates/application.html и ../templates/pages.html, нельзя его назвать однозначно универсальным.
Собственно код для ../templates/application.html:
Код: Выделить всё
var tab_array = {};
$(document).ready(function() {
$('.ui-tabs-anchor').click(function(){
var dataControl = $(this).parent().attr('aria-controls');
var targetWrapper = $('#'+dataControl).first();
var frameChanged = targetWrapper.hasClass('is-changed');
var lastFrame = $('#tabs iframe').first();
var lastFrameWrapper = lastFrame.parent();
var lastId = lastFrameWrapper.attr('id');
var lastSrc = lastFrame.attr('src');
tab_array[lastId] = lastSrc;
lastFrame.remove();
lastFrameWrapper.addClass('is-changed');
if(frameChanged) {
targetWrapper.html('<iframe src="'+ tab_array[dataControl]
+ '" width=100% height="'
+ iFrameHeight
+ '" border="0" frameborder="0"></iframe>');
}
});
});
И для для ../templates/pages.html:
Код: Выделить всё
var tab_array = {};
$(document).ready(function() {
$('.tab_table_cell').click(function(){
var dataControl = 'tab-' + $(this).attr('id').substr(4);
var targetWrapper = $('#'+dataControl).first();
var frameChanged = targetWrapper.hasClass('is-changed');
var lastFrame = $('#container iframe').first();
var lastFrameWrapper = lastFrame.parent();
var lastId = lastFrameWrapper.attr('id');
var lastSrc = lastFrame.attr('src');
lastFrame.remove();
lastFrameWrapper.addClass('is-changed');
tab_array[lastId] = lastSrc;
console.log(tab_array);
if(frameChanged) {
targetWrapper.html('<iframe src="'+ tab_array[dataControl]
+ '" width=100% height="'
+ iFrameHeight
+ '" border="0" frameborder="0"></iframe>');
}
});
});
Потому выкладываю саму идею на случай, если кому-то подойдет моя реализация, либо кто-то захочет сделать полноценный плагин.
Конфигурация на котором тестировалась данная реализация:
ПО линия и Majordomo
Стандартная установка
Ubuntu 18.04.1 LTS bionic
PHP 7.2.10
Mysql 14.14 Distrib 5.7.25
Apache/2.4.29 (Ubuntu)