Тэг base и jquery tabs

Сегодня мне вынес мозг стандартный плагин jquery. Казалось бы, какие с ним-то могут быть трудности, давно все сколько-нибудь возможные баги выловлены, все пользуются, у всех все нормально.
У меня, в принципе, тоже. Было. До сегодняшнего дня.
На странице уже есть один tabs с тремя вкладками, контент в которые загружаются по аяксу. Все работает как положено.
И тут понадобился мне переключатель для двух табов. Аякс был не нужен, всего лишь нужно было, чтобы открывался по клику на вкладку див со сгенерированным яваскриптом графиком. Один график желательно, чтобы всегда был под рукой, а другой связанный с ним по смыслу, должен быть легкодоступным. То есть строим график в первой вкладке после загрузки страницы, а второй только после того, как открыли вторую вкладку по ивенту activate. Все довольно банально, делов на пару минут.
«А вот хрен тебе» — сказал мне плагин… И загрузил и вставил мне перед первым графиком главную страницу сайта.
Думаю, что это за хрень такая? Лезу проверять: ссылки в списке указывают на якоря, совпадают с идэшниками у дивов. Структура идентичная указанной в примере на jqueryui. На всякий случай вставляю в href идэшники копипастом, чтобы исключить ошибку по этой причине.
Обновляю страницу — перед контентом первой вкладки загружается аяксом главная страница сайта ( Смотрю в дебагер: в контейнере добавлены к моим двум дивам еще два дива, в один из которых загружена главная страница сайта.
Копипащу со страницы примера html код

tab1
tab2

их рыбу заменил на текст покороче, чтобы глаза не мозолил.
И что бы вы думали? Перед tab1 загрузилась главная страница.
Добавляю в li аттрибут aria-controls с указателями на ид дивов-контейнеров, дополнительные дивы перестали создаваться, главная страница загружается в первую вкладку и заменяет собой контент, который там был %)
Копирую исоlный код страницы в отдельный файл оставляю только head со стилями, только div#tabs в body и script с загрузкой jquery и jquery из cdn яндекса. Все тот же идиотский прикол…
Сношу к хренам все стили, заменяю загрузку скриптов на cdn jquery. Нифига..
Остается только несколько записей в head, кодировка страницы, метатеги, автор, ссылки на иконку сайта, стандартная все, вроде, лабуда. Начинаю сносить уже и все оставшееся по одной строчке, потому что хрен его уже знает, что бы еще сделать, бустраповский табулятор не вариант вешать, нет нужных мне плюшек, допиливать неохота, кодить свой тем более лень.
И тут: о чудо! Табулятор заработал как надо. И во всем был виноват какой бы вы думали тэг?
Правильно,


Как только проблема вылечилась, сразу и понятно стало, как так получилось. ссылка <li><a href="#tabs-1" из-за тега base выглядит для скрипта как href="http://mysite.ru/#tabs-1", которую он и пытается загрузить в заботливо созданный им новый контейнер.
Тэг base добавил из-за того, что тема была покупная, пути к картинкам в некоторых js и css файлах были прописаны относительные, но без предваряющего ./ Добавление тега base проблему с такими путями решило, но, как оказалось добавило более интересную. Пришлось убрать <base и поправить пути к картинкам. Надо только будет просмотреть логи на предмет не найденных путей и поправить неправильные пропущенные.

Расстановка переносов в html тексте на русском языке

Существует серия правил css для разных браузеров hyphens, -moz-hyphens, -webkit-hyphens, -ms-hyphens

К сожалению эти правила не работают в chrome, поэтому пришлось искать выход.
Я не сторонник нагрузок на сервер, которых можно избежать, поэтому начал искать нет ли уже готового решения на javascript — пусть работу, которую можно переложить на браузер — делает браузер. Плюс к тому, на стороне сервера пришлось бы изменять текст, который попадет в браузер, что может плохо сказаться на индексации поисковиками. и как быть?

Сортировка по русской дате в dataTable

Для этой цели нам потребуется написать так называемый плагин, хоть на самом деле это означает что мы должны написать 2 отдельных функции для сортировки по возрастанию и убыванию

$.fn.dataTableExt.oSort['ru-date-asc']  = function(a, b) {
	a = a.split(/\D+/).reverse().join('');
	b = b.split(/\D+/).reverse().join('');
	return ((a < b) ? -1 : ((a > b) ?  1 : 0));
};
$.fn.dataTableExt.oSort['ru-date-desc']  = function(a, b) {
	a = a.split(/\D+/).reverse().join('');
	b = b.split(/\D+/).reverse().join('');
	return ((a > b) ? -1 : ((a < b) ?  1 : 0));
};

Не очень, конечно, понятно почему было не сделать одну функцию, в которую бы передавался порядок сортировки, ну да ладно.
И после объявления можно использовать сортировку для нужных столбцов:

$('#tasks_table').dataTable({
    ...
    aaSorting : [[2, 'desc']],
    aoColumnDefs: [ 
        {
            sType : 'ru-date',
            aTargets : [2]
        }
    ]
    ...
});