Я большой любитель jQuery, но даже я вынужден признать убогость jQueryUI по сравнению например с YUI. Чего стоит только невозможность убрать [x] (кнопка закрыть) стандартными средствами в виджете Dialog. Но YUI тоже был написан не за день и прежде чем он стал таким как мы видем его сейчас к нему было написано множество хаков поэтому я считаю что нет ничего плохого чтобы хачить JUI не лазя в его код.
Как убирать [x] я уже описывал в своем блоге, а сейчас я хочу поговорить о виджете Calendar или как он называется в JUI — Datepicker. Идея приспособить его к календарю WP не нова но вот незадача на Datepicker'e нельзя отмечать даты. То есть вообще нельзя выделить день кроме текущего и выходных. Это большой минус, и сейчас я вам покажу как этот минус превратить в плюс.
Все что нужно сделать это заврапить два метода календаря — конструктор и генератор таблицы.
На то что там в коде особо не замарачиваемся а рассматриваем пример использования
Добаляем новый класс в CSS
И создаем датапикер с новыми параметрами
В действии можно посмотреть на моем блоге
Как убирать [x] я уже описывал в своем блоге, а сейчас я хочу поговорить о виджете Calendar или как он называется в JUI — Datepicker. Идея приспособить его к календарю WP не нова но вот незадача на Datepicker'e нельзя отмечать даты. То есть вообще нельзя выделить день кроме текущего и выходных. Это большой минус, и сейчас я вам покажу как этот минус превратить в плюс.
Все что нужно сделать это заврапить два метода календаря — конструктор и генератор таблицы.
- (function($) {
-
- /**
- * autor: CTAPbIu_MABP
- * email: ctapbiumabp@gmail.com
- * site: mabp.kiev.ua/2009/08/11/customized-datepicker
- * license: MIT & GPL
- * last update: 11.08.2009
- * version: 1.0
- */
-
- // сохраняем старые функции
- var old_datepicker = $.fn.datepicker;
- var old_generateHTML = $.datepicker._generateHTML;
-
- // и делигируем их новым
- $.datepicker._generateHTML = function(inst) {
- // получаем календарь ввиде raw-html
- var _generateHTML = old_generateHTML.apply(this, arguments),
- // выгребаем даты для этого календаря
- dates = inst.settings.hightlight.values;
- titles = inst.settings.hightlight.titles;
-
- // и начинаем расскрашивать
- for (var i in dates){
- if (dates[i].getFullYear() == inst.drawYear && dates[i].getMonth() == inst.drawMonth){
- _generateHTML = _generateHTML.replace(
- // магия регулярок
- new RegExp('<a class="([^"]+)" href="#">' + dates[i].getDate() + '</a>','i'),
- function(link, classes){
- // еще больше магии
- return link.replace(classes, classes + ' ui-state-custom' +
- (titles[i] ? '" title="'+ titles[i] : ''));
- });
- }
- }
- return _generateHTML;
- };
-
- // делегируем конструктор
- $.fn.datepicker = function(options){
- // новые опции преобразовываем к объекту
- options.hightlight = $.extend(
- {format:$.datepicker._defaults.dateFormat, values:[], titles:[], settings:{}},
- options.hightlight
- );
-
- // сразу превращаем даты в объекты типа Date для того чтобы сохранить
- options.hightlight.values = $.map(options.hightlight.values, function(value){
- return $.datepicker.parseDate(options.hightlight.format, value, options.hightlight.settings);
- });
-
- return old_datepicker.apply(this, [options]);
- };
- })(jQuery);
* This source code was highlighted with Source Code Highlighter.
На то что там в коде особо не замарачиваемся а рассматриваем пример использования
Добаляем новый класс в CSS
.ui-state-custom {
border: 1px solid #f0f !important;
}
И создаем датапикер с новыми параметрами
- $("div#datepicker").datepicker({ // inline datepicker
- firstDay: 1 , // первый день понедельник
- hightlight : { // подсвечиваем
- format:"dd/mm/yy", // формат в котором указаны даты, понимает все форматы которые понимает datepicker, по умолчанию равен $.datepicker._defaults.dateFormat или mm/dd/yy
- values:["1/08/2009","5/08/2009","15/08/2009"], // список дат в том формате который мы тока что указали в прошлом параметре
- titles:["Рас","Два","Три"], // если хотите можно указать список всплывающих подсказок для дат
- settings:{} // дополнительные параметры для функции преобразования строк в дату можно посмотреть в комментариях к коду датапикера
- }
- });
* This source code was highlighted with Source Code Highlighter.
В действии можно посмотреть на моем блоге