136 changed files with 18468 additions and 0 deletions
			
			
		| @ -0,0 +1,23 @@ | |||||||
|  | /* Afrikaans initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Renier Pretorius. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['af'] = { | ||||||
|  | 		closeText: 'Selekteer', | ||||||
|  | 		prevText: 'Vorige', | ||||||
|  | 		nextText: 'Volgende', | ||||||
|  | 		currentText: 'Vandag', | ||||||
|  | 		monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', | ||||||
|  | 		'Julie','Augustus','September','Oktober','November','Desember'], | ||||||
|  | 		monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', | ||||||
|  | 		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], | ||||||
|  | 		dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], | ||||||
|  | 		dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], | ||||||
|  | 		dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['af']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ | ||||||
|  | /* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ | ||||||
|  | 
 | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ar-DZ'] = { | ||||||
|  | 		closeText: 'إغلاق', | ||||||
|  | 		prevText: '<السابق', | ||||||
|  | 		nextText: 'التالي>', | ||||||
|  | 		currentText: 'اليوم', | ||||||
|  | 		monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', | ||||||
|  | 		'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], | ||||||
|  | 		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], | ||||||
|  | 		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], | ||||||
|  | 		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], | ||||||
|  | 		dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], | ||||||
|  | 		weekHeader: 'أسبوع', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 6, | ||||||
|  |   		isRTL: true, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ar-DZ']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Arabic Translation for jQuery UI date picker plugin. */ | ||||||
|  | /* Khaled Alhourani -- me@khaledalhourani.com */ | ||||||
|  | /* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ar'] = { | ||||||
|  | 		closeText: 'إغلاق', | ||||||
|  | 		prevText: '<السابق', | ||||||
|  | 		nextText: 'التالي>', | ||||||
|  | 		currentText: 'اليوم', | ||||||
|  | 		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران', | ||||||
|  | 		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], | ||||||
|  | 		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], | ||||||
|  | 		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], | ||||||
|  | 		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], | ||||||
|  | 		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'], | ||||||
|  | 		weekHeader: 'أسبوع', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 6, | ||||||
|  |   		isRTL: true, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ar']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Jamil Najafov (necefov33@gmail.com). */ | ||||||
|  | jQuery(function($) { | ||||||
|  | 	$.datepicker.regional['az'] = { | ||||||
|  | 		closeText: 'Bağla', | ||||||
|  | 		prevText: '<Geri', | ||||||
|  | 		nextText: 'İrəli>', | ||||||
|  | 		currentText: 'Bugün', | ||||||
|  | 		monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', | ||||||
|  | 		'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], | ||||||
|  | 		monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', | ||||||
|  | 		'İyul','Avq','Sen','Okt','Noy','Dek'], | ||||||
|  | 		dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], | ||||||
|  | 		dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], | ||||||
|  | 		dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], | ||||||
|  | 		weekHeader: 'Hf', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['az']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Belarusian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Pavel Selitskas <p.selitskas@gmail.com> */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['be'] = { | ||||||
|  | 		closeText: 'Зачыніць', | ||||||
|  | 		prevText: '←Папяр.', | ||||||
|  | 		nextText: 'Наст.→', | ||||||
|  | 		currentText: 'Сёньня', | ||||||
|  | 		monthNames: ['Студзень','Люты','Сакавік','Красавік','Травень','Чэрвень', | ||||||
|  | 		'Ліпень','Жнівень','Верасень','Кастрычнік','Лістапад','Сьнежань'], | ||||||
|  | 		monthNamesShort: ['Сту','Лют','Сак','Кра','Тра','Чэр', | ||||||
|  | 		'Ліп','Жні','Вер','Кас','Ліс','Сьн'], | ||||||
|  | 		dayNames: ['нядзеля','панядзелак','аўторак','серада','чацьвер','пятніца','субота'], | ||||||
|  | 		dayNamesShort: ['ндз','пнд','аўт','срд','чцв','птн','сбт'], | ||||||
|  | 		dayNamesMin: ['Нд','Пн','Аў','Ср','Чц','Пт','Сб'], | ||||||
|  | 		weekHeader: 'Тд', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['be']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | /* Bulgarian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Stoyan Kyosev (http://svest.org). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['bg'] = { | ||||||
|  | 		closeText: 'затвори', | ||||||
|  | 		prevText: '<назад', | ||||||
|  | 		nextText: 'напред>', | ||||||
|  | 		nextBigText: '>>', | ||||||
|  | 		currentText: 'днес', | ||||||
|  | 		monthNames: ['Януари','Февруари','Март','Април','Май','Юни', | ||||||
|  | 		'Юли','Август','Септември','Октомври','Ноември','Декември'], | ||||||
|  | 		monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', | ||||||
|  | 		'Юли','Авг','Сеп','Окт','Нов','Дек'], | ||||||
|  | 		dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], | ||||||
|  | 		dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], | ||||||
|  | 		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['bg']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Bosnian i18n for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Kenan Konjo. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['bs'] = { | ||||||
|  | 		closeText: 'Zatvori', | ||||||
|  | 		prevText: '<', | ||||||
|  | 		nextText: '>', | ||||||
|  | 		currentText: 'Danas', | ||||||
|  | 		monthNames: ['Januar','Februar','Mart','April','Maj','Juni', | ||||||
|  | 		'Juli','August','Septembar','Oktobar','Novembar','Decembar'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', | ||||||
|  | 		'Jul','Aug','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], | ||||||
|  | 		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], | ||||||
|  | 		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['bs']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */ | ||||||
|  | /* Writers: (joan.leon@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ca'] = { | ||||||
|  | 		closeText: 'Tanca', | ||||||
|  | 		prevText: 'Anterior', | ||||||
|  | 		nextText: 'Següent', | ||||||
|  | 		currentText: 'Avui', | ||||||
|  | 		monthNames: ['gener','febrer','març','abril','maig','juny', | ||||||
|  | 		'juliol','agost','setembre','octubre','novembre','desembre'], | ||||||
|  | 		monthNamesShort: ['gen','feb','març','abr','maig','juny', | ||||||
|  | 		'jul','ag','set','oct','nov','des'], | ||||||
|  | 		dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'], | ||||||
|  | 		dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'], | ||||||
|  | 		dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'], | ||||||
|  | 		weekHeader: 'Set', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ca']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Czech initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Tomas Muller (tomas@tomas-muller.net). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['cs'] = { | ||||||
|  | 		closeText: 'Zavřít', | ||||||
|  | 		prevText: '<Dříve', | ||||||
|  | 		nextText: 'Později>', | ||||||
|  | 		currentText: 'Nyní', | ||||||
|  | 		monthNames: ['leden','únor','březen','duben','květen','červen', | ||||||
|  | 		'červenec','srpen','září','říjen','listopad','prosinec'], | ||||||
|  | 		monthNamesShort: ['led','úno','bře','dub','kvě','čer', | ||||||
|  | 		'čvc','srp','zář','říj','lis','pro'], | ||||||
|  | 		dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], | ||||||
|  | 		dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], | ||||||
|  | 		dayNamesMin: ['ne','po','út','st','čt','pá','so'], | ||||||
|  | 		weekHeader: 'Týd', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['cs']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Welsh/UK initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by William Griffiths. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['cy-GB'] = { | ||||||
|  | 		closeText: 'Done', | ||||||
|  | 		prevText: 'Prev', | ||||||
|  | 		nextText: 'Next', | ||||||
|  | 		currentText: 'Today', | ||||||
|  | 		monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin', | ||||||
|  | 		'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'], | ||||||
|  | 		monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh', | ||||||
|  | 		'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'], | ||||||
|  | 		dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'], | ||||||
|  | 		dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'], | ||||||
|  | 		dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'], | ||||||
|  | 		weekHeader: 'Wy', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['cy-GB']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Danish initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Jan Christensen ( deletestuff@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['da'] = { | ||||||
|  | 		closeText: 'Luk', | ||||||
|  | 		prevText: '<Forrige', | ||||||
|  | 		nextText: 'Næste>', | ||||||
|  | 		currentText: 'Idag', | ||||||
|  | 		monthNames: ['Januar','Februar','Marts','April','Maj','Juni', | ||||||
|  | 		'Juli','August','September','Oktober','November','December'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', | ||||||
|  | 		'Jul','Aug','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], | ||||||
|  | 		dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], | ||||||
|  | 		dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], | ||||||
|  | 		weekHeader: 'Uge', | ||||||
|  | 		dateFormat: 'dd-mm-yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['da']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* German initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Milian Wolff (mail@milianw.de). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['de'] = { | ||||||
|  | 		closeText: 'Schließen', | ||||||
|  | 		prevText: '<Zurück', | ||||||
|  | 		nextText: 'Vor>', | ||||||
|  | 		currentText: 'Heute', | ||||||
|  | 		monthNames: ['Januar','Februar','März','April','Mai','Juni', | ||||||
|  | 		'Juli','August','September','Oktober','November','Dezember'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', | ||||||
|  | 		'Jul','Aug','Sep','Okt','Nov','Dez'], | ||||||
|  | 		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], | ||||||
|  | 		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], | ||||||
|  | 		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], | ||||||
|  | 		weekHeader: 'KW', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['de']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Greek (el) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Alex Cicovic (http://www.alexcicovic.com) */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['el'] = { | ||||||
|  | 		closeText: 'Κλείσιμο', | ||||||
|  | 		prevText: 'Προηγούμενος', | ||||||
|  | 		nextText: 'Επόμενος', | ||||||
|  | 		currentText: 'Τρέχων Μήνας', | ||||||
|  | 		monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', | ||||||
|  | 		'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], | ||||||
|  | 		monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', | ||||||
|  | 		'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], | ||||||
|  | 		dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], | ||||||
|  | 		dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], | ||||||
|  | 		dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], | ||||||
|  | 		weekHeader: 'Εβδ', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['el']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* English/Australia initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Based on the en-GB initialisation. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['en-AU'] = { | ||||||
|  | 		closeText: 'Done', | ||||||
|  | 		prevText: 'Prev', | ||||||
|  | 		nextText: 'Next', | ||||||
|  | 		currentText: 'Today', | ||||||
|  | 		monthNames: ['January','February','March','April','May','June', | ||||||
|  | 		'July','August','September','October','November','December'], | ||||||
|  | 		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', | ||||||
|  | 		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], | ||||||
|  | 		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], | ||||||
|  | 		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], | ||||||
|  | 		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['en-AU']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* English/UK initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Stuart. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['en-GB'] = { | ||||||
|  | 		closeText: 'Done', | ||||||
|  | 		prevText: 'Prev', | ||||||
|  | 		nextText: 'Next', | ||||||
|  | 		currentText: 'Today', | ||||||
|  | 		monthNames: ['January','February','March','April','May','June', | ||||||
|  | 		'July','August','September','October','November','December'], | ||||||
|  | 		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', | ||||||
|  | 		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], | ||||||
|  | 		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], | ||||||
|  | 		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], | ||||||
|  | 		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['en-GB']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* English/New Zealand initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Based on the en-GB initialisation. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['en-NZ'] = { | ||||||
|  | 		closeText: 'Done', | ||||||
|  | 		prevText: 'Prev', | ||||||
|  | 		nextText: 'Next', | ||||||
|  | 		currentText: 'Today', | ||||||
|  | 		monthNames: ['January','February','March','April','May','June', | ||||||
|  | 		'July','August','September','October','November','December'], | ||||||
|  | 		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', | ||||||
|  | 		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], | ||||||
|  | 		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], | ||||||
|  | 		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], | ||||||
|  | 		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['en-NZ']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Esperanto initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Olivier M. (olivierweb@ifrance.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['eo'] = { | ||||||
|  | 		closeText: 'Fermi', | ||||||
|  | 		prevText: '<Anta', | ||||||
|  | 		nextText: 'Sekv>', | ||||||
|  | 		currentText: 'Nuna', | ||||||
|  | 		monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', | ||||||
|  | 		'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', | ||||||
|  | 		'Jul','Aŭg','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], | ||||||
|  | 		dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], | ||||||
|  | 		dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], | ||||||
|  | 		weekHeader: 'Sb', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['eo']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Inicialización en español para la extensión 'UI date picker' para jQuery. */ | ||||||
|  | /* Traducido por Vester (xvester@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['es'] = { | ||||||
|  | 		closeText: 'Cerrar', | ||||||
|  | 		prevText: '<Ant', | ||||||
|  | 		nextText: 'Sig>', | ||||||
|  | 		currentText: 'Hoy', | ||||||
|  | 		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', | ||||||
|  | 		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], | ||||||
|  | 		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', | ||||||
|  | 		'Jul','Ago','Sep','Oct','Nov','Dic'], | ||||||
|  | 		dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], | ||||||
|  | 		dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], | ||||||
|  | 		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], | ||||||
|  | 		weekHeader: 'Sm', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['es']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Estonian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['et'] = { | ||||||
|  | 		closeText: 'Sulge', | ||||||
|  | 		prevText: 'Eelnev', | ||||||
|  | 		nextText: 'Järgnev', | ||||||
|  | 		currentText: 'Täna', | ||||||
|  | 		monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', | ||||||
|  | 		'Juuli','August','September','Oktoober','November','Detsember'], | ||||||
|  | 		monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', | ||||||
|  | 		'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], | ||||||
|  | 		dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], | ||||||
|  | 		dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], | ||||||
|  | 		dayNamesMin: ['P','E','T','K','N','R','L'], | ||||||
|  | 		weekHeader: 'näd', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['et']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ | ||||||
|  | /* Karrikas-ek itzulia (karrikas@karrikas.com) */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['eu'] = { | ||||||
|  | 		closeText: 'Egina', | ||||||
|  | 		prevText: '<Aur', | ||||||
|  | 		nextText: 'Hur>', | ||||||
|  | 		currentText: 'Gaur', | ||||||
|  | 		monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina', | ||||||
|  | 			'uztaila','abuztua','iraila','urria','azaroa','abendua'], | ||||||
|  | 		monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.', | ||||||
|  | 			'uzt.','abu.','ira.','urr.','aza.','abe.'], | ||||||
|  | 		dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'], | ||||||
|  | 		dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'], | ||||||
|  | 		dayNamesMin: ['ig','al','ar','az','og','ol','lr'], | ||||||
|  | 		weekHeader: 'As', | ||||||
|  | 		dateFormat: 'yy-mm-dd', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['eu']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Finnish initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Harri Kilpiö (harrikilpio@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['fi'] = { | ||||||
|  | 		closeText: 'Sulje', | ||||||
|  | 		prevText: '«Edellinen', | ||||||
|  | 		nextText: 'Seuraava»', | ||||||
|  | 		currentText: 'Tänään', | ||||||
|  | 		monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', | ||||||
|  | 		'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], | ||||||
|  | 		monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', | ||||||
|  | 		'Heinä','Elo','Syys','Loka','Marras','Joulu'], | ||||||
|  | 		dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'], | ||||||
|  | 		dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], | ||||||
|  | 		dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], | ||||||
|  | 		weekHeader: 'Vk', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['fi']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Faroese initialisation for the jQuery UI date picker plugin */ | ||||||
|  | /* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['fo'] = { | ||||||
|  | 		closeText: 'Lat aftur', | ||||||
|  | 		prevText: '<Fyrra', | ||||||
|  | 		nextText: 'Næsta>', | ||||||
|  | 		currentText: 'Í dag', | ||||||
|  | 		monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', | ||||||
|  | 		'Juli','August','September','Oktober','November','Desember'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', | ||||||
|  | 		'Jul','Aug','Sep','Okt','Nov','Des'], | ||||||
|  | 		dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], | ||||||
|  | 		dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], | ||||||
|  | 		dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], | ||||||
|  | 		weekHeader: 'Vk', | ||||||
|  | 		dateFormat: 'dd-mm-yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['fo']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Canadian-French initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | jQuery(function ($) { | ||||||
|  | 	$.datepicker.regional['fr-CA'] = { | ||||||
|  | 		closeText: 'Fermer', | ||||||
|  | 		prevText: 'Précédent', | ||||||
|  | 		nextText: 'Suivant', | ||||||
|  | 		currentText: 'Aujourd\'hui', | ||||||
|  | 		monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', | ||||||
|  | 			'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'], | ||||||
|  | 		monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin', | ||||||
|  | 			'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'], | ||||||
|  | 		dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'], | ||||||
|  | 		dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'], | ||||||
|  | 		dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'], | ||||||
|  | 		weekHeader: 'Sem.', | ||||||
|  | 		dateFormat: 'yy-mm-dd', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: '' | ||||||
|  | 	}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['fr-CA']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Swiss-French initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['fr-CH'] = { | ||||||
|  | 		closeText: 'Fermer', | ||||||
|  | 		prevText: '<Préc', | ||||||
|  | 		nextText: 'Suiv>', | ||||||
|  | 		currentText: 'Courant', | ||||||
|  | 		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', | ||||||
|  | 		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], | ||||||
|  | 		monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', | ||||||
|  | 		'Jul','Aoû','Sep','Oct','Nov','Déc'], | ||||||
|  | 		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], | ||||||
|  | 		dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], | ||||||
|  | 		dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], | ||||||
|  | 		weekHeader: 'Sm', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['fr-CH']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | /* French initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Keith Wood (kbwood{at}iinet.com.au), | ||||||
|  | 			  Stéphane Nahmani (sholby@sholby.net), | ||||||
|  | 			  Stéphane Raimbault <stephane.raimbault@gmail.com> */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['fr'] = { | ||||||
|  | 		closeText: 'Fermer', | ||||||
|  | 		prevText: 'Précédent', | ||||||
|  | 		nextText: 'Suivant', | ||||||
|  | 		currentText: 'Aujourd\'hui', | ||||||
|  | 		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', | ||||||
|  | 		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], | ||||||
|  | 		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', | ||||||
|  | 		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], | ||||||
|  | 		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], | ||||||
|  | 		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], | ||||||
|  | 		dayNamesMin: ['D','L','M','M','J','V','S'], | ||||||
|  | 		weekHeader: 'Sem.', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['fr']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Galician localization for 'UI date picker' jQuery extension. */ | ||||||
|  | /* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['gl'] = { | ||||||
|  | 		closeText: 'Pechar', | ||||||
|  | 		prevText: '<Ant', | ||||||
|  | 		nextText: 'Seg>', | ||||||
|  | 		currentText: 'Hoxe', | ||||||
|  | 		monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', | ||||||
|  | 		'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], | ||||||
|  | 		monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', | ||||||
|  | 		'Xul','Ago','Set','Out','Nov','Dec'], | ||||||
|  | 		dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], | ||||||
|  | 		dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], | ||||||
|  | 		dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], | ||||||
|  | 		weekHeader: 'Sm', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['gl']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Hebrew initialisation for the UI Datepicker extension. */ | ||||||
|  | /* Written by Amir Hardon (ahardon at gmail dot com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['he'] = { | ||||||
|  | 		closeText: 'סגור', | ||||||
|  | 		prevText: '<הקודם', | ||||||
|  | 		nextText: 'הבא>', | ||||||
|  | 		currentText: 'היום', | ||||||
|  | 		monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', | ||||||
|  | 		'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], | ||||||
|  | 		monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני', | ||||||
|  | 		'יולי','אוג','ספט','אוק','נוב','דצמ'], | ||||||
|  | 		dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], | ||||||
|  | 		dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], | ||||||
|  | 		dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: true, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['he']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Croatian i18n for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Vjekoslav Nesek. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['hr'] = { | ||||||
|  | 		closeText: 'Zatvori', | ||||||
|  | 		prevText: '<', | ||||||
|  | 		nextText: '>', | ||||||
|  | 		currentText: 'Danas', | ||||||
|  | 		monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', | ||||||
|  | 		'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], | ||||||
|  | 		monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', | ||||||
|  | 		'Srp','Kol','Ruj','Lis','Stu','Pro'], | ||||||
|  | 		dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], | ||||||
|  | 		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], | ||||||
|  | 		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], | ||||||
|  | 		weekHeader: 'Tje', | ||||||
|  | 		dateFormat: 'dd.mm.yy.', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['hr']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Hungarian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['hu'] = { | ||||||
|  | 		closeText: 'bezár', | ||||||
|  | 		prevText: 'vissza', | ||||||
|  | 		nextText: 'előre', | ||||||
|  | 		currentText: 'ma', | ||||||
|  | 		monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', | ||||||
|  | 		'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], | ||||||
|  | 		monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', | ||||||
|  | 		'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], | ||||||
|  | 		dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], | ||||||
|  | 		dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], | ||||||
|  | 		dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], | ||||||
|  | 		weekHeader: 'Hét', | ||||||
|  | 		dateFormat: 'yy.mm.dd.', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: true, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['hu']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['hy'] = { | ||||||
|  | 		closeText: 'Փակել', | ||||||
|  | 		prevText: '<Նախ.', | ||||||
|  | 		nextText: 'Հաջ.>', | ||||||
|  | 		currentText: 'Այսօր', | ||||||
|  | 		monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', | ||||||
|  | 		'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], | ||||||
|  | 		monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', | ||||||
|  | 		'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], | ||||||
|  | 		dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], | ||||||
|  | 		dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], | ||||||
|  | 		dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], | ||||||
|  | 		weekHeader: 'ՇԲՏ', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['hy']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Indonesian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Deden Fathurahman (dedenf@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['id'] = { | ||||||
|  | 		closeText: 'Tutup', | ||||||
|  | 		prevText: '<mundur', | ||||||
|  | 		nextText: 'maju>', | ||||||
|  | 		currentText: 'hari ini', | ||||||
|  | 		monthNames: ['Januari','Februari','Maret','April','Mei','Juni', | ||||||
|  | 		'Juli','Agustus','September','Oktober','Nopember','Desember'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', | ||||||
|  | 		'Jul','Agus','Sep','Okt','Nop','Des'], | ||||||
|  | 		dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], | ||||||
|  | 		dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], | ||||||
|  | 		dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], | ||||||
|  | 		weekHeader: 'Mg', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['id']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Icelandic initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Haukur H. Thorsson (haukur@eskill.is). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['is'] = { | ||||||
|  | 		closeText: 'Loka', | ||||||
|  | 		prevText: '< Fyrri', | ||||||
|  | 		nextText: 'Næsti >', | ||||||
|  | 		currentText: 'Í dag', | ||||||
|  | 		monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', | ||||||
|  | 		'Júlí','Ágúst','September','Október','Nóvember','Desember'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', | ||||||
|  | 		'Júl','Ágú','Sep','Okt','Nóv','Des'], | ||||||
|  | 		dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], | ||||||
|  | 		dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], | ||||||
|  | 		dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], | ||||||
|  | 		weekHeader: 'Vika', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['is']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Italian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Antonello Pasella (antonello.pasella@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['it'] = { | ||||||
|  | 		closeText: 'Chiudi', | ||||||
|  | 		prevText: '<Prec', | ||||||
|  | 		nextText: 'Succ>', | ||||||
|  | 		currentText: 'Oggi', | ||||||
|  | 		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', | ||||||
|  | 			'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], | ||||||
|  | 		monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', | ||||||
|  | 			'Lug','Ago','Set','Ott','Nov','Dic'], | ||||||
|  | 		dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], | ||||||
|  | 		dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], | ||||||
|  | 		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], | ||||||
|  | 		weekHeader: 'Sm', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['it']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Japanese initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Kentaro SATO (kentaro@ranvis.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ja'] = { | ||||||
|  | 		closeText: '閉じる', | ||||||
|  | 		prevText: '<前', | ||||||
|  | 		nextText: '次>', | ||||||
|  | 		currentText: '今日', | ||||||
|  | 		monthNames: ['1月','2月','3月','4月','5月','6月', | ||||||
|  | 		'7月','8月','9月','10月','11月','12月'], | ||||||
|  | 		monthNamesShort: ['1月','2月','3月','4月','5月','6月', | ||||||
|  | 		'7月','8月','9月','10月','11月','12月'], | ||||||
|  | 		dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], | ||||||
|  | 		dayNamesShort: ['日','月','火','水','木','金','土'], | ||||||
|  | 		dayNamesMin: ['日','月','火','水','木','金','土'], | ||||||
|  | 		weekHeader: '週', | ||||||
|  | 		dateFormat: 'yy/mm/dd', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: true, | ||||||
|  | 		yearSuffix: '年'}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ja']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,21 @@ | |||||||
|  | /* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Lado Lomidze (lado.lomidze@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ka'] = { | ||||||
|  | 		closeText: 'დახურვა', | ||||||
|  | 		prevText: '< წინა', | ||||||
|  | 		nextText: 'შემდეგი >', | ||||||
|  | 		currentText: 'დღეს', | ||||||
|  | 		monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'], | ||||||
|  | 		monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'], | ||||||
|  | 		dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'], | ||||||
|  | 		dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], | ||||||
|  | 		dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], | ||||||
|  | 		weekHeader: 'კვირა', | ||||||
|  | 		dateFormat: 'dd-mm-yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ka']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['kk'] = { | ||||||
|  | 		closeText: 'Жабу', | ||||||
|  | 		prevText: '<Алдыңғы', | ||||||
|  | 		nextText: 'Келесі>', | ||||||
|  | 		currentText: 'Бүгін', | ||||||
|  | 		monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', | ||||||
|  | 		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], | ||||||
|  | 		monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', | ||||||
|  | 		'Шіл','Там','Қыр','Қаз','Қар','Жел'], | ||||||
|  | 		dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], | ||||||
|  | 		dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], | ||||||
|  | 		dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], | ||||||
|  | 		weekHeader: 'Не', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['kk']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Korean initialisation for the jQuery calendar extension. */ | ||||||
|  | /* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ko'] = { | ||||||
|  | 		closeText: '닫기', | ||||||
|  | 		prevText: '이전달', | ||||||
|  | 		nextText: '다음달', | ||||||
|  | 		currentText: '오늘', | ||||||
|  | 		monthNames: ['1월','2월','3월','4월','5월','6월', | ||||||
|  | 		'7월','8월','9월','10월','11월','12월'], | ||||||
|  | 		monthNamesShort: ['1월','2월','3월','4월','5월','6월', | ||||||
|  | 		'7월','8월','9월','10월','11월','12월'], | ||||||
|  | 		dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'], | ||||||
|  | 		dayNamesShort: ['일','월','화','수','목','금','토'], | ||||||
|  | 		dayNamesMin: ['일','월','화','수','목','금','토'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'yy-mm-dd', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: true, | ||||||
|  | 		yearSuffix: '년'}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ko']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | /* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Sergey Kartashov (ebishkek@yandex.ru). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ky'] = { | ||||||
|  | 		closeText: 'Жабуу', | ||||||
|  | 		prevText: '<Мур', | ||||||
|  | 		nextText: 'Кий>', | ||||||
|  | 		currentText: 'Бүгүн', | ||||||
|  | 		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', | ||||||
|  | 		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], | ||||||
|  | 		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', | ||||||
|  | 		'Июл','Авг','Сен','Окт','Ноя','Дек'], | ||||||
|  | 		dayNames: ['жекшемби', 'дүйшөмбү', 'шейшемби', 'шаршемби', 'бейшемби', 'жума', 'ишемби'], | ||||||
|  | 		dayNamesShort: ['жек', 'дүй', 'шей', 'шар', 'бей', 'жум', 'ише'], | ||||||
|  | 		dayNamesMin: ['Жк','Дш','Шш','Шр','Бш','Жм','Иш'], | ||||||
|  | 		weekHeader: 'Жум', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: '' | ||||||
|  | 	}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ky']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Luxembourgish initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Michel Weimerskirch <michel@weimerskirch.net> */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['lb'] = { | ||||||
|  | 		closeText: 'Fäerdeg', | ||||||
|  | 		prevText: 'Zréck', | ||||||
|  | 		nextText: 'Weider', | ||||||
|  | 		currentText: 'Haut', | ||||||
|  | 		monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni', | ||||||
|  | 		'Juli','August','September','Oktober','November','Dezember'], | ||||||
|  | 		monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun', | ||||||
|  | 		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'], | ||||||
|  | 		dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'], | ||||||
|  | 		dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'], | ||||||
|  | 		dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'], | ||||||
|  | 		weekHeader: 'W', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['lb']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* @author Arturas Paleicikas <arturas@avalon.lt> */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['lt'] = { | ||||||
|  | 		closeText: 'Uždaryti', | ||||||
|  | 		prevText: '<Atgal', | ||||||
|  | 		nextText: 'Pirmyn>', | ||||||
|  | 		currentText: 'Šiandien', | ||||||
|  | 		monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', | ||||||
|  | 		'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], | ||||||
|  | 		monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', | ||||||
|  | 		'Lie','Rugp','Rugs','Spa','Lap','Gru'], | ||||||
|  | 		dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], | ||||||
|  | 		dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], | ||||||
|  | 		dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'yy-mm-dd', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['lt']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['lv'] = { | ||||||
|  | 		closeText: 'Aizvērt', | ||||||
|  | 		prevText: 'Iepr', | ||||||
|  | 		nextText: 'Nāka', | ||||||
|  | 		currentText: 'Šodien', | ||||||
|  | 		monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', | ||||||
|  | 		'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', | ||||||
|  | 		'Jūl','Aug','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], | ||||||
|  | 		dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], | ||||||
|  | 		dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], | ||||||
|  | 		weekHeader: 'Nav', | ||||||
|  | 		dateFormat: 'dd-mm-yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['lv']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Macedonian i18n for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Stojce Slavkovski. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['mk'] = { | ||||||
|  | 		closeText: 'Затвори', | ||||||
|  | 		prevText: '<', | ||||||
|  | 		nextText: '>', | ||||||
|  | 		currentText: 'Денес', | ||||||
|  | 		monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни', | ||||||
|  | 		'Јули','Август','Септември','Октомври','Ноември','Декември'], | ||||||
|  | 		monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун', | ||||||
|  | 		'Јул','Авг','Сеп','Окт','Ное','Дек'], | ||||||
|  | 		dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'], | ||||||
|  | 		dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'], | ||||||
|  | 		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'], | ||||||
|  | 		weekHeader: 'Сед', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['mk']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Malaysian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ms'] = { | ||||||
|  | 		closeText: 'Tutup', | ||||||
|  | 		prevText: '<Sebelum', | ||||||
|  | 		nextText: 'Selepas>', | ||||||
|  | 		currentText: 'hari ini', | ||||||
|  | 		monthNames: ['Januari','Februari','Mac','April','Mei','Jun', | ||||||
|  | 		'Julai','Ogos','September','Oktober','November','Disember'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', | ||||||
|  | 		'Jul','Ogo','Sep','Okt','Nov','Dis'], | ||||||
|  | 		dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], | ||||||
|  | 		dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], | ||||||
|  | 		dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], | ||||||
|  | 		weekHeader: 'Mg', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ms']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | /* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Bjørn Johansen (post@bjornjohansen.no). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['nb'] = { | ||||||
|  | 		closeText: 'Lukk', | ||||||
|  | 		prevText: '«Forrige', | ||||||
|  | 		nextText: 'Neste»', | ||||||
|  | 		currentText: 'I dag', | ||||||
|  | 		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], | ||||||
|  | 		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], | ||||||
|  | 		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], | ||||||
|  | 		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], | ||||||
|  | 		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], | ||||||
|  | 		weekHeader: 'Uke', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: '' | ||||||
|  | 	}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['nb']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* David De Sloovere @DavidDeSloovere */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['nl-BE'] = { | ||||||
|  | 		closeText: 'Sluiten', | ||||||
|  | 		prevText: '←', | ||||||
|  | 		nextText: '→', | ||||||
|  | 		currentText: 'Vandaag', | ||||||
|  | 		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', | ||||||
|  | 		'juli', 'augustus', 'september', 'oktober', 'november', 'december'], | ||||||
|  | 		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', | ||||||
|  | 		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], | ||||||
|  | 		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], | ||||||
|  | 		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], | ||||||
|  | 		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['nl-BE']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Mathias Bynens <http://mathiasbynens.be/> */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional.nl = { | ||||||
|  | 		closeText: 'Sluiten', | ||||||
|  | 		prevText: '←', | ||||||
|  | 		nextText: '→', | ||||||
|  | 		currentText: 'Vandaag', | ||||||
|  | 		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', | ||||||
|  | 		'juli', 'augustus', 'september', 'oktober', 'november', 'december'], | ||||||
|  | 		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', | ||||||
|  | 		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], | ||||||
|  | 		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], | ||||||
|  | 		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], | ||||||
|  | 		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], | ||||||
|  | 		weekHeader: 'Wk', | ||||||
|  | 		dateFormat: 'dd-mm-yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional.nl); | ||||||
|  | }); | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | /* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Bjørn Johansen (post@bjornjohansen.no). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['nn'] = { | ||||||
|  | 		closeText: 'Lukk', | ||||||
|  | 		prevText: '«Førre', | ||||||
|  | 		nextText: 'Neste»', | ||||||
|  | 		currentText: 'I dag', | ||||||
|  | 		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], | ||||||
|  | 		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], | ||||||
|  | 		dayNamesShort: ['sun','mån','tys','ons','tor','fre','lau'], | ||||||
|  | 		dayNames: ['sundag','måndag','tysdag','onsdag','torsdag','fredag','laurdag'], | ||||||
|  | 		dayNamesMin: ['su','må','ty','on','to','fr','la'], | ||||||
|  | 		weekHeader: 'Veke', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: '' | ||||||
|  | 	}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['nn']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Norwegian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ | ||||||
|  | 
 | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['no'] = { | ||||||
|  | 		closeText: 'Lukk', | ||||||
|  | 		prevText: '«Forrige', | ||||||
|  | 		nextText: 'Neste»', | ||||||
|  | 		currentText: 'I dag', | ||||||
|  | 		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], | ||||||
|  | 		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], | ||||||
|  | 		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], | ||||||
|  | 		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], | ||||||
|  | 		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], | ||||||
|  | 		weekHeader: 'Uke', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: '' | ||||||
|  | 	}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['no']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Polish initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['pl'] = { | ||||||
|  | 		closeText: 'Zamknij', | ||||||
|  | 		prevText: '<Poprzedni', | ||||||
|  | 		nextText: 'Następny>', | ||||||
|  | 		currentText: 'Dziś', | ||||||
|  | 		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', | ||||||
|  | 		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], | ||||||
|  | 		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', | ||||||
|  | 		'Lip','Sie','Wrz','Pa','Lis','Gru'], | ||||||
|  | 		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], | ||||||
|  | 		dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], | ||||||
|  | 		dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], | ||||||
|  | 		weekHeader: 'Tydz', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['pl']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Brazilian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['pt-BR'] = { | ||||||
|  | 		closeText: 'Fechar', | ||||||
|  | 		prevText: '<Anterior', | ||||||
|  | 		nextText: 'Próximo>', | ||||||
|  | 		currentText: 'Hoje', | ||||||
|  | 		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', | ||||||
|  | 		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], | ||||||
|  | 		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', | ||||||
|  | 		'Jul','Ago','Set','Out','Nov','Dez'], | ||||||
|  | 		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], | ||||||
|  | 		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], | ||||||
|  | 		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], | ||||||
|  | 		weekHeader: 'Sm', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['pt-BR']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | /* Portuguese initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['pt'] = { | ||||||
|  | 		closeText: 'Fechar', | ||||||
|  | 		prevText: '<Anterior', | ||||||
|  | 		nextText: 'Seguinte', | ||||||
|  | 		currentText: 'Hoje', | ||||||
|  | 		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', | ||||||
|  | 		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], | ||||||
|  | 		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', | ||||||
|  | 		'Jul','Ago','Set','Out','Nov','Dez'], | ||||||
|  | 		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], | ||||||
|  | 		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], | ||||||
|  | 		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], | ||||||
|  | 		weekHeader: 'Sem', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['pt']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,21 @@ | |||||||
|  | /* Romansh initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['rm'] = { | ||||||
|  | 		closeText: 'Serrar', | ||||||
|  | 		prevText: '<Suandant', | ||||||
|  | 		nextText: 'Precedent>', | ||||||
|  | 		currentText: 'Actual', | ||||||
|  | 		monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], | ||||||
|  | 		monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], | ||||||
|  | 		dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], | ||||||
|  | 		dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], | ||||||
|  | 		dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], | ||||||
|  | 		weekHeader: 'emna', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['rm']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,26 @@ | |||||||
|  | /* Romanian initialisation for the jQuery UI date picker plugin. | ||||||
|  |  * | ||||||
|  |  * Written by Edmond L. (ll_edmond@walla.com) | ||||||
|  |  * and Ionut G. Stan (ionut.g.stan@gmail.com) | ||||||
|  |  */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ro'] = { | ||||||
|  | 		closeText: 'Închide', | ||||||
|  | 		prevText: '« Luna precedentă', | ||||||
|  | 		nextText: 'Luna următoare »', | ||||||
|  | 		currentText: 'Azi', | ||||||
|  | 		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', | ||||||
|  | 		'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], | ||||||
|  | 		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', | ||||||
|  | 		'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], | ||||||
|  | 		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], | ||||||
|  | 		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], | ||||||
|  | 		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], | ||||||
|  | 		weekHeader: 'Săpt', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ro']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Andrew Stromnov (stromnov@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['ru'] = { | ||||||
|  | 		closeText: 'Закрыть', | ||||||
|  | 		prevText: '<Пред', | ||||||
|  | 		nextText: 'След>', | ||||||
|  | 		currentText: 'Сегодня', | ||||||
|  | 		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', | ||||||
|  | 		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], | ||||||
|  | 		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', | ||||||
|  | 		'Июл','Авг','Сен','Окт','Ноя','Дек'], | ||||||
|  | 		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], | ||||||
|  | 		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], | ||||||
|  | 		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], | ||||||
|  | 		weekHeader: 'Нед', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['ru']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Slovak initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Vojtech Rinik (vojto@hmm.sk). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['sk'] = { | ||||||
|  | 		closeText: 'Zavrieť', | ||||||
|  | 		prevText: '<Predchádzajúci', | ||||||
|  | 		nextText: 'Nasledujúci>', | ||||||
|  | 		currentText: 'Dnes', | ||||||
|  | 		monthNames: ['január','február','marec','apríl','máj','jún', | ||||||
|  | 		'júl','august','september','október','november','december'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', | ||||||
|  | 		'Júl','Aug','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNames: ['nedeľa','pondelok','utorok','streda','štvrtok','piatok','sobota'], | ||||||
|  | 		dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], | ||||||
|  | 		dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], | ||||||
|  | 		weekHeader: 'Ty', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['sk']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | /* Slovenian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Jaka Jancar (jaka@kubje.org). */ | ||||||
|  | /* c = č, s = š z = ž C = Č S = Š Z = Ž */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['sl'] = { | ||||||
|  | 		closeText: 'Zapri', | ||||||
|  | 		prevText: '<Prejšnji', | ||||||
|  | 		nextText: 'Naslednji>', | ||||||
|  | 		currentText: 'Trenutni', | ||||||
|  | 		monthNames: ['Januar','Februar','Marec','April','Maj','Junij', | ||||||
|  | 		'Julij','Avgust','September','Oktober','November','December'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', | ||||||
|  | 		'Jul','Avg','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], | ||||||
|  | 		dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], | ||||||
|  | 		dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], | ||||||
|  | 		weekHeader: 'Teden', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['sl']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Albanian initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Flakron Bytyqi (flakron@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['sq'] = { | ||||||
|  | 		closeText: 'mbylle', | ||||||
|  | 		prevText: '<mbrapa', | ||||||
|  | 		nextText: 'Përpara>', | ||||||
|  | 		currentText: 'sot', | ||||||
|  | 		monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', | ||||||
|  | 		'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], | ||||||
|  | 		monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', | ||||||
|  | 		'Kor','Gus','Sht','Tet','Nën','Dhj'], | ||||||
|  | 		dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], | ||||||
|  | 		dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], | ||||||
|  | 		dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], | ||||||
|  | 		weekHeader: 'Ja', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['sq']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Serbian i18n for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Dejan Dimić. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['sr-SR'] = { | ||||||
|  | 		closeText: 'Zatvori', | ||||||
|  | 		prevText: '<', | ||||||
|  | 		nextText: '>', | ||||||
|  | 		currentText: 'Danas', | ||||||
|  | 		monthNames: ['Januar','Februar','Mart','April','Maj','Jun', | ||||||
|  | 		'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', | ||||||
|  | 		'Jul','Avg','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], | ||||||
|  | 		dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], | ||||||
|  | 		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], | ||||||
|  | 		weekHeader: 'Sed', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['sr-SR']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Serbian i18n for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Dejan Dimić. */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['sr'] = { | ||||||
|  | 		closeText: 'Затвори', | ||||||
|  | 		prevText: '<', | ||||||
|  | 		nextText: '>', | ||||||
|  | 		currentText: 'Данас', | ||||||
|  | 		monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', | ||||||
|  | 		'Јул','Август','Септембар','Октобар','Новембар','Децембар'], | ||||||
|  | 		monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', | ||||||
|  | 		'Јул','Авг','Сеп','Окт','Нов','Дец'], | ||||||
|  | 		dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], | ||||||
|  | 		dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], | ||||||
|  | 		dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], | ||||||
|  | 		weekHeader: 'Сед', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['sr']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Swedish initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Anders Ekdahl ( anders@nomadiz.se). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['sv'] = { | ||||||
|  | 		closeText: 'Stäng', | ||||||
|  | 		prevText: '«Förra', | ||||||
|  | 		nextText: 'Nästa»', | ||||||
|  | 		currentText: 'Idag', | ||||||
|  | 		monthNames: ['Januari','Februari','Mars','April','Maj','Juni', | ||||||
|  | 		'Juli','Augusti','September','Oktober','November','December'], | ||||||
|  | 		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', | ||||||
|  | 		'Jul','Aug','Sep','Okt','Nov','Dec'], | ||||||
|  | 		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], | ||||||
|  | 		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], | ||||||
|  | 		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], | ||||||
|  | 		weekHeader: 'Ve', | ||||||
|  | 		dateFormat: 'yy-mm-dd', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['sv']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Abdurahmon Saidov (saidovab@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['tj'] = { | ||||||
|  | 		closeText: 'Идома', | ||||||
|  | 		prevText: '<Қафо', | ||||||
|  | 		nextText: 'Пеш>', | ||||||
|  | 		currentText: 'Имрӯз', | ||||||
|  | 		monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', | ||||||
|  | 		'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], | ||||||
|  | 		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', | ||||||
|  | 		'Июл','Авг','Сен','Окт','Ноя','Дек'], | ||||||
|  | 		dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], | ||||||
|  | 		dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], | ||||||
|  | 		dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], | ||||||
|  | 		weekHeader: 'Хф', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['tj']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Turkish initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Izzet Emre Erkan (kara@karalamalar.net). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['tr'] = { | ||||||
|  | 		closeText: 'kapat', | ||||||
|  | 		prevText: '<geri', | ||||||
|  | 		nextText: 'ileri>', | ||||||
|  | 		currentText: 'bugün', | ||||||
|  | 		monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', | ||||||
|  | 		'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], | ||||||
|  | 		monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', | ||||||
|  | 		'Tem','Ağu','Eyl','Eki','Kas','Ara'], | ||||||
|  | 		dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], | ||||||
|  | 		dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], | ||||||
|  | 		dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], | ||||||
|  | 		weekHeader: 'Hf', | ||||||
|  | 		dateFormat: 'dd.mm.yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['tr']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | /* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ | ||||||
|  | /* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['uk'] = { | ||||||
|  | 		closeText: 'Закрити', | ||||||
|  | 		prevText: '<', | ||||||
|  | 		nextText: '>', | ||||||
|  | 		currentText: 'Сьогодні', | ||||||
|  | 		monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', | ||||||
|  | 		'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], | ||||||
|  | 		monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', | ||||||
|  | 		'Лип','Сер','Вер','Жов','Лис','Гру'], | ||||||
|  | 		dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], | ||||||
|  | 		dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], | ||||||
|  | 		dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], | ||||||
|  | 		weekHeader: 'Тиж', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['uk']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Vietnamese initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['vi'] = { | ||||||
|  | 		closeText: 'Đóng', | ||||||
|  | 		prevText: '<Trước', | ||||||
|  | 		nextText: 'Tiếp>', | ||||||
|  | 		currentText: 'Hôm nay', | ||||||
|  | 		monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', | ||||||
|  | 		'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], | ||||||
|  | 		monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', | ||||||
|  | 		'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], | ||||||
|  | 		dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], | ||||||
|  | 		dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], | ||||||
|  | 		dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], | ||||||
|  | 		weekHeader: 'Tu', | ||||||
|  | 		dateFormat: 'dd/mm/yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: false, | ||||||
|  | 		yearSuffix: ''}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['vi']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Chinese initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Cloudream (cloudream@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['zh-CN'] = { | ||||||
|  | 		closeText: '关闭', | ||||||
|  | 		prevText: '<上月', | ||||||
|  | 		nextText: '下月>', | ||||||
|  | 		currentText: '今天', | ||||||
|  | 		monthNames: ['一月','二月','三月','四月','五月','六月', | ||||||
|  | 		'七月','八月','九月','十月','十一月','十二月'], | ||||||
|  | 		monthNamesShort: ['一月','二月','三月','四月','五月','六月', | ||||||
|  | 		'七月','八月','九月','十月','十一月','十二月'], | ||||||
|  | 		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], | ||||||
|  | 		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], | ||||||
|  | 		dayNamesMin: ['日','一','二','三','四','五','六'], | ||||||
|  | 		weekHeader: '周', | ||||||
|  | 		dateFormat: 'yy-mm-dd', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: true, | ||||||
|  | 		yearSuffix: '年'}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['zh-CN']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Chinese initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by SCCY (samuelcychan@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['zh-HK'] = { | ||||||
|  | 		closeText: '關閉', | ||||||
|  | 		prevText: '<上月', | ||||||
|  | 		nextText: '下月>', | ||||||
|  | 		currentText: '今天', | ||||||
|  | 		monthNames: ['一月','二月','三月','四月','五月','六月', | ||||||
|  | 		'七月','八月','九月','十月','十一月','十二月'], | ||||||
|  | 		monthNamesShort: ['一月','二月','三月','四月','五月','六月', | ||||||
|  | 		'七月','八月','九月','十月','十一月','十二月'], | ||||||
|  | 		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], | ||||||
|  | 		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], | ||||||
|  | 		dayNamesMin: ['日','一','二','三','四','五','六'], | ||||||
|  | 		weekHeader: '周', | ||||||
|  | 		dateFormat: 'dd-mm-yy', | ||||||
|  | 		firstDay: 0, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: true, | ||||||
|  | 		yearSuffix: '年'}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['zh-HK']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | /* Chinese initialisation for the jQuery UI date picker plugin. */ | ||||||
|  | /* Written by Ressol (ressol@gmail.com). */ | ||||||
|  | jQuery(function($){ | ||||||
|  | 	$.datepicker.regional['zh-TW'] = { | ||||||
|  | 		closeText: '關閉', | ||||||
|  | 		prevText: '<上月', | ||||||
|  | 		nextText: '下月>', | ||||||
|  | 		currentText: '今天', | ||||||
|  | 		monthNames: ['一月','二月','三月','四月','五月','六月', | ||||||
|  | 		'七月','八月','九月','十月','十一月','十二月'], | ||||||
|  | 		monthNamesShort: ['一月','二月','三月','四月','五月','六月', | ||||||
|  | 		'七月','八月','九月','十月','十一月','十二月'], | ||||||
|  | 		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], | ||||||
|  | 		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], | ||||||
|  | 		dayNamesMin: ['日','一','二','三','四','五','六'], | ||||||
|  | 		weekHeader: '周', | ||||||
|  | 		dateFormat: 'yy/mm/dd', | ||||||
|  | 		firstDay: 1, | ||||||
|  | 		isRTL: false, | ||||||
|  | 		showMonthAfterYear: true, | ||||||
|  | 		yearSuffix: '年'}; | ||||||
|  | 	$.datepicker.setDefaults($.datepicker.regional['zh-TW']); | ||||||
|  | }); | ||||||
| @ -0,0 +1,572 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Accordion 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/accordion/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | var uid = 0, | ||||||
|  | 	hideProps = {}, | ||||||
|  | 	showProps = {}; | ||||||
|  | 
 | ||||||
|  | hideProps.height = hideProps.paddingTop = hideProps.paddingBottom = | ||||||
|  | 	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide"; | ||||||
|  | showProps.height = showProps.paddingTop = showProps.paddingBottom = | ||||||
|  | 	showProps.borderTopWidth = showProps.borderBottomWidth = "show"; | ||||||
|  | 
 | ||||||
|  | $.widget( "ui.accordion", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	options: { | ||||||
|  | 		active: 0, | ||||||
|  | 		animate: {}, | ||||||
|  | 		collapsible: false, | ||||||
|  | 		event: "click", | ||||||
|  | 		header: "> li > :first-child,> :not(li):even", | ||||||
|  | 		heightStyle: "auto", | ||||||
|  | 		icons: { | ||||||
|  | 			activeHeader: "ui-icon-triangle-1-s", | ||||||
|  | 			header: "ui-icon-triangle-1-e" | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
|  | 		// callbacks
 | ||||||
|  | 		activate: null, | ||||||
|  | 		beforeActivate: null | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_create: function() { | ||||||
|  | 		var options = this.options; | ||||||
|  | 		this.prevShow = this.prevHide = $(); | ||||||
|  | 		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" ) | ||||||
|  | 			// ARIA
 | ||||||
|  | 			.attr( "role", "tablist" ); | ||||||
|  | 
 | ||||||
|  | 		// don't allow collapsible: false and active: false / null
 | ||||||
|  | 		if ( !options.collapsible && (options.active === false || options.active == null) ) { | ||||||
|  | 			options.active = 0; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._processPanels(); | ||||||
|  | 		// handle negative values
 | ||||||
|  | 		if ( options.active < 0 ) { | ||||||
|  | 			options.active += this.headers.length; | ||||||
|  | 		} | ||||||
|  | 		this._refresh(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_getCreateEventData: function() { | ||||||
|  | 		return { | ||||||
|  | 			header: this.active, | ||||||
|  | 			panel: !this.active.length ? $() : this.active.next(), | ||||||
|  | 			content: !this.active.length ? $() : this.active.next() | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_createIcons: function() { | ||||||
|  | 		var icons = this.options.icons; | ||||||
|  | 		if ( icons ) { | ||||||
|  | 			$( "<span>" ) | ||||||
|  | 				.addClass( "ui-accordion-header-icon ui-icon " + icons.header ) | ||||||
|  | 				.prependTo( this.headers ); | ||||||
|  | 			this.active.children( ".ui-accordion-header-icon" ) | ||||||
|  | 				.removeClass( icons.header ) | ||||||
|  | 				.addClass( icons.activeHeader ); | ||||||
|  | 			this.headers.addClass( "ui-accordion-icons" ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroyIcons: function() { | ||||||
|  | 		this.headers | ||||||
|  | 			.removeClass( "ui-accordion-icons" ) | ||||||
|  | 			.children( ".ui-accordion-header-icon" ) | ||||||
|  | 				.remove(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		var contents; | ||||||
|  | 
 | ||||||
|  | 		// clean up main element
 | ||||||
|  | 		this.element | ||||||
|  | 			.removeClass( "ui-accordion ui-widget ui-helper-reset" ) | ||||||
|  | 			.removeAttr( "role" ); | ||||||
|  | 
 | ||||||
|  | 		// clean up headers
 | ||||||
|  | 		this.headers | ||||||
|  | 			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) | ||||||
|  | 			.removeAttr( "role" ) | ||||||
|  | 			.removeAttr( "aria-selected" ) | ||||||
|  | 			.removeAttr( "aria-controls" ) | ||||||
|  | 			.removeAttr( "tabIndex" ) | ||||||
|  | 			.each(function() { | ||||||
|  | 				if ( /^ui-accordion/.test( this.id ) ) { | ||||||
|  | 					this.removeAttribute( "id" ); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		this._destroyIcons(); | ||||||
|  | 
 | ||||||
|  | 		// clean up content panels
 | ||||||
|  | 		contents = this.headers.next() | ||||||
|  | 			.css( "display", "" ) | ||||||
|  | 			.removeAttr( "role" ) | ||||||
|  | 			.removeAttr( "aria-expanded" ) | ||||||
|  | 			.removeAttr( "aria-hidden" ) | ||||||
|  | 			.removeAttr( "aria-labelledby" ) | ||||||
|  | 			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" ) | ||||||
|  | 			.each(function() { | ||||||
|  | 				if ( /^ui-accordion/.test( this.id ) ) { | ||||||
|  | 					this.removeAttribute( "id" ); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		if ( this.options.heightStyle !== "content" ) { | ||||||
|  | 			contents.css( "height", "" ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function( key, value ) { | ||||||
|  | 		if ( key === "active" ) { | ||||||
|  | 			// _activate() will handle invalid values and update this.options
 | ||||||
|  | 			this._activate( value ); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "event" ) { | ||||||
|  | 			if ( this.options.event ) { | ||||||
|  | 				this._off( this.headers, this.options.event ); | ||||||
|  | 			} | ||||||
|  | 			this._setupEvents( value ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._super( key, value ); | ||||||
|  | 
 | ||||||
|  | 		// setting collapsible: false while collapsed; open first panel
 | ||||||
|  | 		if ( key === "collapsible" && !value && this.options.active === false ) { | ||||||
|  | 			this._activate( 0 ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "icons" ) { | ||||||
|  | 			this._destroyIcons(); | ||||||
|  | 			if ( value ) { | ||||||
|  | 				this._createIcons(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// #5332 - opacity doesn't cascade to positioned elements in IE
 | ||||||
|  | 		// so we need to add the disabled class to the headers and panels
 | ||||||
|  | 		if ( key === "disabled" ) { | ||||||
|  | 			this.headers.add( this.headers.next() ) | ||||||
|  | 				.toggleClass( "ui-state-disabled", !!value ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_keydown: function( event ) { | ||||||
|  | 		/*jshint maxcomplexity:15*/ | ||||||
|  | 		if ( event.altKey || event.ctrlKey ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		var keyCode = $.ui.keyCode, | ||||||
|  | 			length = this.headers.length, | ||||||
|  | 			currentIndex = this.headers.index( event.target ), | ||||||
|  | 			toFocus = false; | ||||||
|  | 
 | ||||||
|  | 		switch ( event.keyCode ) { | ||||||
|  | 			case keyCode.RIGHT: | ||||||
|  | 			case keyCode.DOWN: | ||||||
|  | 				toFocus = this.headers[ ( currentIndex + 1 ) % length ]; | ||||||
|  | 				break; | ||||||
|  | 			case keyCode.LEFT: | ||||||
|  | 			case keyCode.UP: | ||||||
|  | 				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; | ||||||
|  | 				break; | ||||||
|  | 			case keyCode.SPACE: | ||||||
|  | 			case keyCode.ENTER: | ||||||
|  | 				this._eventHandler( event ); | ||||||
|  | 				break; | ||||||
|  | 			case keyCode.HOME: | ||||||
|  | 				toFocus = this.headers[ 0 ]; | ||||||
|  | 				break; | ||||||
|  | 			case keyCode.END: | ||||||
|  | 				toFocus = this.headers[ length - 1 ]; | ||||||
|  | 				break; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( toFocus ) { | ||||||
|  | 			$( event.target ).attr( "tabIndex", -1 ); | ||||||
|  | 			$( toFocus ).attr( "tabIndex", 0 ); | ||||||
|  | 			toFocus.focus(); | ||||||
|  | 			event.preventDefault(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_panelKeyDown : function( event ) { | ||||||
|  | 		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { | ||||||
|  | 			$( event.currentTarget ).prev().focus(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	refresh: function() { | ||||||
|  | 		var options = this.options; | ||||||
|  | 		this._processPanels(); | ||||||
|  | 
 | ||||||
|  | 		// was collapsed or no panel
 | ||||||
|  | 		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) { | ||||||
|  | 			options.active = false; | ||||||
|  | 			this.active = $(); | ||||||
|  | 		// active false only when collapsible is true
 | ||||||
|  | 		} else if ( options.active === false ) { | ||||||
|  | 			this._activate( 0 ); | ||||||
|  | 		// was active, but active panel is gone
 | ||||||
|  | 		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { | ||||||
|  | 			// all remaining panel are disabled
 | ||||||
|  | 			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) { | ||||||
|  | 				options.active = false; | ||||||
|  | 				this.active = $(); | ||||||
|  | 			// activate previous panel
 | ||||||
|  | 			} else { | ||||||
|  | 				this._activate( Math.max( 0, options.active - 1 ) ); | ||||||
|  | 			} | ||||||
|  | 		// was active, active panel still exists
 | ||||||
|  | 		} else { | ||||||
|  | 			// make sure active index is correct
 | ||||||
|  | 			options.active = this.headers.index( this.active ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._destroyIcons(); | ||||||
|  | 
 | ||||||
|  | 		this._refresh(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_processPanels: function() { | ||||||
|  | 		this.headers = this.element.find( this.options.header ) | ||||||
|  | 			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" ); | ||||||
|  | 
 | ||||||
|  | 		this.headers.next() | ||||||
|  | 			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ) | ||||||
|  | 			.filter(":not(.ui-accordion-content-active)") | ||||||
|  | 			.hide(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_refresh: function() { | ||||||
|  | 		var maxHeight, | ||||||
|  | 			options = this.options, | ||||||
|  | 			heightStyle = options.heightStyle, | ||||||
|  | 			parent = this.element.parent(), | ||||||
|  | 			accordionId = this.accordionId = "ui-accordion-" + | ||||||
|  | 				(this.element.attr( "id" ) || ++uid); | ||||||
|  | 
 | ||||||
|  | 		this.active = this._findActive( options.active ) | ||||||
|  | 			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ) | ||||||
|  | 			.removeClass( "ui-corner-all" ); | ||||||
|  | 		this.active.next() | ||||||
|  | 			.addClass( "ui-accordion-content-active" ) | ||||||
|  | 			.show(); | ||||||
|  | 
 | ||||||
|  | 		this.headers | ||||||
|  | 			.attr( "role", "tab" ) | ||||||
|  | 			.each(function( i ) { | ||||||
|  | 				var header = $( this ), | ||||||
|  | 					headerId = header.attr( "id" ), | ||||||
|  | 					panel = header.next(), | ||||||
|  | 					panelId = panel.attr( "id" ); | ||||||
|  | 				if ( !headerId ) { | ||||||
|  | 					headerId = accordionId + "-header-" + i; | ||||||
|  | 					header.attr( "id", headerId ); | ||||||
|  | 				} | ||||||
|  | 				if ( !panelId ) { | ||||||
|  | 					panelId = accordionId + "-panel-" + i; | ||||||
|  | 					panel.attr( "id", panelId ); | ||||||
|  | 				} | ||||||
|  | 				header.attr( "aria-controls", panelId ); | ||||||
|  | 				panel.attr( "aria-labelledby", headerId ); | ||||||
|  | 			}) | ||||||
|  | 			.next() | ||||||
|  | 				.attr( "role", "tabpanel" ); | ||||||
|  | 
 | ||||||
|  | 		this.headers | ||||||
|  | 			.not( this.active ) | ||||||
|  | 			.attr({ | ||||||
|  | 				"aria-selected": "false", | ||||||
|  | 				tabIndex: -1 | ||||||
|  | 			}) | ||||||
|  | 			.next() | ||||||
|  | 				.attr({ | ||||||
|  | 					"aria-expanded": "false", | ||||||
|  | 					"aria-hidden": "true" | ||||||
|  | 				}) | ||||||
|  | 				.hide(); | ||||||
|  | 
 | ||||||
|  | 		// make sure at least one header is in the tab order
 | ||||||
|  | 		if ( !this.active.length ) { | ||||||
|  | 			this.headers.eq( 0 ).attr( "tabIndex", 0 ); | ||||||
|  | 		} else { | ||||||
|  | 			this.active.attr({ | ||||||
|  | 				"aria-selected": "true", | ||||||
|  | 				tabIndex: 0 | ||||||
|  | 			}) | ||||||
|  | 			.next() | ||||||
|  | 				.attr({ | ||||||
|  | 					"aria-expanded": "true", | ||||||
|  | 					"aria-hidden": "false" | ||||||
|  | 				}); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._createIcons(); | ||||||
|  | 
 | ||||||
|  | 		this._setupEvents( options.event ); | ||||||
|  | 
 | ||||||
|  | 		if ( heightStyle === "fill" ) { | ||||||
|  | 			maxHeight = parent.height(); | ||||||
|  | 			this.element.siblings( ":visible" ).each(function() { | ||||||
|  | 				var elem = $( this ), | ||||||
|  | 					position = elem.css( "position" ); | ||||||
|  | 
 | ||||||
|  | 				if ( position === "absolute" || position === "fixed" ) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				maxHeight -= elem.outerHeight( true ); | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 			this.headers.each(function() { | ||||||
|  | 				maxHeight -= $( this ).outerHeight( true ); | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 			this.headers.next() | ||||||
|  | 				.each(function() { | ||||||
|  | 					$( this ).height( Math.max( 0, maxHeight - | ||||||
|  | 						$( this ).innerHeight() + $( this ).height() ) ); | ||||||
|  | 				}) | ||||||
|  | 				.css( "overflow", "auto" ); | ||||||
|  | 		} else if ( heightStyle === "auto" ) { | ||||||
|  | 			maxHeight = 0; | ||||||
|  | 			this.headers.next() | ||||||
|  | 				.each(function() { | ||||||
|  | 					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); | ||||||
|  | 				}) | ||||||
|  | 				.height( maxHeight ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_activate: function( index ) { | ||||||
|  | 		var active = this._findActive( index )[ 0 ]; | ||||||
|  | 
 | ||||||
|  | 		// trying to activate the already active panel
 | ||||||
|  | 		if ( active === this.active[ 0 ] ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// trying to collapse, simulate a click on the currently active header
 | ||||||
|  | 		active = active || this.active[ 0 ]; | ||||||
|  | 
 | ||||||
|  | 		this._eventHandler({ | ||||||
|  | 			target: active, | ||||||
|  | 			currentTarget: active, | ||||||
|  | 			preventDefault: $.noop | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_findActive: function( selector ) { | ||||||
|  | 		return typeof selector === "number" ? this.headers.eq( selector ) : $(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setupEvents: function( event ) { | ||||||
|  | 		var events = { | ||||||
|  | 			keydown: "_keydown" | ||||||
|  | 		}; | ||||||
|  | 		if ( event ) { | ||||||
|  | 			$.each( event.split(" "), function( index, eventName ) { | ||||||
|  | 				events[ eventName ] = "_eventHandler"; | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._off( this.headers.add( this.headers.next() ) ); | ||||||
|  | 		this._on( this.headers, events ); | ||||||
|  | 		this._on( this.headers.next(), { keydown: "_panelKeyDown" }); | ||||||
|  | 		this._hoverable( this.headers ); | ||||||
|  | 		this._focusable( this.headers ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_eventHandler: function( event ) { | ||||||
|  | 		var options = this.options, | ||||||
|  | 			active = this.active, | ||||||
|  | 			clicked = $( event.currentTarget ), | ||||||
|  | 			clickedIsActive = clicked[ 0 ] === active[ 0 ], | ||||||
|  | 			collapsing = clickedIsActive && options.collapsible, | ||||||
|  | 			toShow = collapsing ? $() : clicked.next(), | ||||||
|  | 			toHide = active.next(), | ||||||
|  | 			eventData = { | ||||||
|  | 				oldHeader: active, | ||||||
|  | 				oldPanel: toHide, | ||||||
|  | 				newHeader: collapsing ? $() : clicked, | ||||||
|  | 				newPanel: toShow | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 		event.preventDefault(); | ||||||
|  | 
 | ||||||
|  | 		if ( | ||||||
|  | 				// click on active header, but not collapsible
 | ||||||
|  | 				( clickedIsActive && !options.collapsible ) || | ||||||
|  | 				// allow canceling activation
 | ||||||
|  | 				( this._trigger( "beforeActivate", event, eventData ) === false ) ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		options.active = collapsing ? false : this.headers.index( clicked ); | ||||||
|  | 
 | ||||||
|  | 		// when the call to ._toggle() comes after the class changes
 | ||||||
|  | 		// it causes a very odd bug in IE 8 (see #6720)
 | ||||||
|  | 		this.active = clickedIsActive ? $() : clicked; | ||||||
|  | 		this._toggle( eventData ); | ||||||
|  | 
 | ||||||
|  | 		// switch classes
 | ||||||
|  | 		// corner classes on the previously active header stay after the animation
 | ||||||
|  | 		active.removeClass( "ui-accordion-header-active ui-state-active" ); | ||||||
|  | 		if ( options.icons ) { | ||||||
|  | 			active.children( ".ui-accordion-header-icon" ) | ||||||
|  | 				.removeClass( options.icons.activeHeader ) | ||||||
|  | 				.addClass( options.icons.header ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( !clickedIsActive ) { | ||||||
|  | 			clicked | ||||||
|  | 				.removeClass( "ui-corner-all" ) | ||||||
|  | 				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ); | ||||||
|  | 			if ( options.icons ) { | ||||||
|  | 				clicked.children( ".ui-accordion-header-icon" ) | ||||||
|  | 					.removeClass( options.icons.header ) | ||||||
|  | 					.addClass( options.icons.activeHeader ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			clicked | ||||||
|  | 				.next() | ||||||
|  | 				.addClass( "ui-accordion-content-active" ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_toggle: function( data ) { | ||||||
|  | 		var toShow = data.newPanel, | ||||||
|  | 			toHide = this.prevShow.length ? this.prevShow : data.oldPanel; | ||||||
|  | 
 | ||||||
|  | 		// handle activating a panel during the animation for another activation
 | ||||||
|  | 		this.prevShow.add( this.prevHide ).stop( true, true ); | ||||||
|  | 		this.prevShow = toShow; | ||||||
|  | 		this.prevHide = toHide; | ||||||
|  | 
 | ||||||
|  | 		if ( this.options.animate ) { | ||||||
|  | 			this._animate( toShow, toHide, data ); | ||||||
|  | 		} else { | ||||||
|  | 			toHide.hide(); | ||||||
|  | 			toShow.show(); | ||||||
|  | 			this._toggleComplete( data ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		toHide.attr({ | ||||||
|  | 			"aria-expanded": "false", | ||||||
|  | 			"aria-hidden": "true" | ||||||
|  | 		}); | ||||||
|  | 		toHide.prev().attr( "aria-selected", "false" ); | ||||||
|  | 		// if we're switching panels, remove the old header from the tab order
 | ||||||
|  | 		// if we're opening from collapsed state, remove the previous header from the tab order
 | ||||||
|  | 		// if we're collapsing, then keep the collapsing header in the tab order
 | ||||||
|  | 		if ( toShow.length && toHide.length ) { | ||||||
|  | 			toHide.prev().attr( "tabIndex", -1 ); | ||||||
|  | 		} else if ( toShow.length ) { | ||||||
|  | 			this.headers.filter(function() { | ||||||
|  | 				return $( this ).attr( "tabIndex" ) === 0; | ||||||
|  | 			}) | ||||||
|  | 			.attr( "tabIndex", -1 ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		toShow | ||||||
|  | 			.attr({ | ||||||
|  | 				"aria-expanded": "true", | ||||||
|  | 				"aria-hidden": "false" | ||||||
|  | 			}) | ||||||
|  | 			.prev() | ||||||
|  | 				.attr({ | ||||||
|  | 					"aria-selected": "true", | ||||||
|  | 					tabIndex: 0 | ||||||
|  | 				}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_animate: function( toShow, toHide, data ) { | ||||||
|  | 		var total, easing, duration, | ||||||
|  | 			that = this, | ||||||
|  | 			adjust = 0, | ||||||
|  | 			down = toShow.length && | ||||||
|  | 				( !toHide.length || ( toShow.index() < toHide.index() ) ), | ||||||
|  | 			animate = this.options.animate || {}, | ||||||
|  | 			options = down && animate.down || animate, | ||||||
|  | 			complete = function() { | ||||||
|  | 				that._toggleComplete( data ); | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 		if ( typeof options === "number" ) { | ||||||
|  | 			duration = options; | ||||||
|  | 		} | ||||||
|  | 		if ( typeof options === "string" ) { | ||||||
|  | 			easing = options; | ||||||
|  | 		} | ||||||
|  | 		// fall back from options to animation in case of partial down settings
 | ||||||
|  | 		easing = easing || options.easing || animate.easing; | ||||||
|  | 		duration = duration || options.duration || animate.duration; | ||||||
|  | 
 | ||||||
|  | 		if ( !toHide.length ) { | ||||||
|  | 			return toShow.animate( showProps, duration, easing, complete ); | ||||||
|  | 		} | ||||||
|  | 		if ( !toShow.length ) { | ||||||
|  | 			return toHide.animate( hideProps, duration, easing, complete ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		total = toShow.show().outerHeight(); | ||||||
|  | 		toHide.animate( hideProps, { | ||||||
|  | 			duration: duration, | ||||||
|  | 			easing: easing, | ||||||
|  | 			step: function( now, fx ) { | ||||||
|  | 				fx.now = Math.round( now ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 		toShow | ||||||
|  | 			.hide() | ||||||
|  | 			.animate( showProps, { | ||||||
|  | 				duration: duration, | ||||||
|  | 				easing: easing, | ||||||
|  | 				complete: complete, | ||||||
|  | 				step: function( now, fx ) { | ||||||
|  | 					fx.now = Math.round( now ); | ||||||
|  | 					if ( fx.prop !== "height" ) { | ||||||
|  | 						adjust += fx.now; | ||||||
|  | 					} else if ( that.options.heightStyle !== "content" ) { | ||||||
|  | 						fx.now = Math.round( total - toHide.outerHeight() - adjust ); | ||||||
|  | 						adjust = 0; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_toggleComplete: function( data ) { | ||||||
|  | 		var toHide = data.oldPanel; | ||||||
|  | 
 | ||||||
|  | 		toHide | ||||||
|  | 			.removeClass( "ui-accordion-content-active" ) | ||||||
|  | 			.prev() | ||||||
|  | 				.removeClass( "ui-corner-top" ) | ||||||
|  | 				.addClass( "ui-corner-all" ); | ||||||
|  | 
 | ||||||
|  | 		// Work around for rendering bug in IE (#5421)
 | ||||||
|  | 		if ( toHide.length ) { | ||||||
|  | 			toHide.parent()[0].className = toHide.parent()[0].className; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._trigger( "activate", null, data ); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | })( jQuery ); | ||||||
| @ -0,0 +1,610 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Autocomplete 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/autocomplete/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  *	jquery.ui.position.js | ||||||
|  |  *	jquery.ui.menu.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | // used to prevent race conditions with remote data sources
 | ||||||
|  | var requestIndex = 0; | ||||||
|  | 
 | ||||||
|  | $.widget( "ui.autocomplete", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	defaultElement: "<input>", | ||||||
|  | 	options: { | ||||||
|  | 		appendTo: null, | ||||||
|  | 		autoFocus: false, | ||||||
|  | 		delay: 300, | ||||||
|  | 		minLength: 1, | ||||||
|  | 		position: { | ||||||
|  | 			my: "left top", | ||||||
|  | 			at: "left bottom", | ||||||
|  | 			collision: "none" | ||||||
|  | 		}, | ||||||
|  | 		source: null, | ||||||
|  | 
 | ||||||
|  | 		// callbacks
 | ||||||
|  | 		change: null, | ||||||
|  | 		close: null, | ||||||
|  | 		focus: null, | ||||||
|  | 		open: null, | ||||||
|  | 		response: null, | ||||||
|  | 		search: null, | ||||||
|  | 		select: null | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	pending: 0, | ||||||
|  | 
 | ||||||
|  | 	_create: function() { | ||||||
|  | 		// Some browsers only repeat keydown events, not keypress events,
 | ||||||
|  | 		// so we use the suppressKeyPress flag to determine if we've already
 | ||||||
|  | 		// handled the keydown event. #7269
 | ||||||
|  | 		// Unfortunately the code for & in keypress is the same as the up arrow,
 | ||||||
|  | 		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
 | ||||||
|  | 		// events when we know the keydown event was used to modify the
 | ||||||
|  | 		// search term. #7799
 | ||||||
|  | 		var suppressKeyPress, suppressKeyPressRepeat, suppressInput, | ||||||
|  | 			nodeName = this.element[0].nodeName.toLowerCase(), | ||||||
|  | 			isTextarea = nodeName === "textarea", | ||||||
|  | 			isInput = nodeName === "input"; | ||||||
|  | 
 | ||||||
|  | 		this.isMultiLine = | ||||||
|  | 			// Textareas are always multi-line
 | ||||||
|  | 			isTextarea ? true : | ||||||
|  | 			// Inputs are always single-line, even if inside a contentEditable element
 | ||||||
|  | 			// IE also treats inputs as contentEditable
 | ||||||
|  | 			isInput ? false : | ||||||
|  | 			// All other element types are determined by whether or not they're contentEditable
 | ||||||
|  | 			this.element.prop( "isContentEditable" ); | ||||||
|  | 
 | ||||||
|  | 		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; | ||||||
|  | 		this.isNewMenu = true; | ||||||
|  | 
 | ||||||
|  | 		this.element | ||||||
|  | 			.addClass( "ui-autocomplete-input" ) | ||||||
|  | 			.attr( "autocomplete", "off" ); | ||||||
|  | 
 | ||||||
|  | 		this._on( this.element, { | ||||||
|  | 			keydown: function( event ) { | ||||||
|  | 				/*jshint maxcomplexity:15*/ | ||||||
|  | 				if ( this.element.prop( "readOnly" ) ) { | ||||||
|  | 					suppressKeyPress = true; | ||||||
|  | 					suppressInput = true; | ||||||
|  | 					suppressKeyPressRepeat = true; | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				suppressKeyPress = false; | ||||||
|  | 				suppressInput = false; | ||||||
|  | 				suppressKeyPressRepeat = false; | ||||||
|  | 				var keyCode = $.ui.keyCode; | ||||||
|  | 				switch( event.keyCode ) { | ||||||
|  | 				case keyCode.PAGE_UP: | ||||||
|  | 					suppressKeyPress = true; | ||||||
|  | 					this._move( "previousPage", event ); | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.PAGE_DOWN: | ||||||
|  | 					suppressKeyPress = true; | ||||||
|  | 					this._move( "nextPage", event ); | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.UP: | ||||||
|  | 					suppressKeyPress = true; | ||||||
|  | 					this._keyEvent( "previous", event ); | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.DOWN: | ||||||
|  | 					suppressKeyPress = true; | ||||||
|  | 					this._keyEvent( "next", event ); | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.ENTER: | ||||||
|  | 				case keyCode.NUMPAD_ENTER: | ||||||
|  | 					// when menu is open and has focus
 | ||||||
|  | 					if ( this.menu.active ) { | ||||||
|  | 						// #6055 - Opera still allows the keypress to occur
 | ||||||
|  | 						// which causes forms to submit
 | ||||||
|  | 						suppressKeyPress = true; | ||||||
|  | 						event.preventDefault(); | ||||||
|  | 						this.menu.select( event ); | ||||||
|  | 					} | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.TAB: | ||||||
|  | 					if ( this.menu.active ) { | ||||||
|  | 						this.menu.select( event ); | ||||||
|  | 					} | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.ESCAPE: | ||||||
|  | 					if ( this.menu.element.is( ":visible" ) ) { | ||||||
|  | 						this._value( this.term ); | ||||||
|  | 						this.close( event ); | ||||||
|  | 						// Different browsers have different default behavior for escape
 | ||||||
|  | 						// Single press can mean undo or clear
 | ||||||
|  | 						// Double press in IE means clear the whole form
 | ||||||
|  | 						event.preventDefault(); | ||||||
|  | 					} | ||||||
|  | 					break; | ||||||
|  | 				default: | ||||||
|  | 					suppressKeyPressRepeat = true; | ||||||
|  | 					// search timeout should be triggered before the input value is changed
 | ||||||
|  | 					this._searchTimeout( event ); | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			keypress: function( event ) { | ||||||
|  | 				if ( suppressKeyPress ) { | ||||||
|  | 					suppressKeyPress = false; | ||||||
|  | 					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { | ||||||
|  | 						event.preventDefault(); | ||||||
|  | 					} | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				if ( suppressKeyPressRepeat ) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				// replicate some key handlers to allow them to repeat in Firefox and Opera
 | ||||||
|  | 				var keyCode = $.ui.keyCode; | ||||||
|  | 				switch( event.keyCode ) { | ||||||
|  | 				case keyCode.PAGE_UP: | ||||||
|  | 					this._move( "previousPage", event ); | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.PAGE_DOWN: | ||||||
|  | 					this._move( "nextPage", event ); | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.UP: | ||||||
|  | 					this._keyEvent( "previous", event ); | ||||||
|  | 					break; | ||||||
|  | 				case keyCode.DOWN: | ||||||
|  | 					this._keyEvent( "next", event ); | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			input: function( event ) { | ||||||
|  | 				if ( suppressInput ) { | ||||||
|  | 					suppressInput = false; | ||||||
|  | 					event.preventDefault(); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				this._searchTimeout( event ); | ||||||
|  | 			}, | ||||||
|  | 			focus: function() { | ||||||
|  | 				this.selectedItem = null; | ||||||
|  | 				this.previous = this._value(); | ||||||
|  | 			}, | ||||||
|  | 			blur: function( event ) { | ||||||
|  | 				if ( this.cancelBlur ) { | ||||||
|  | 					delete this.cancelBlur; | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				clearTimeout( this.searching ); | ||||||
|  | 				this.close( event ); | ||||||
|  | 				this._change( event ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		this._initSource(); | ||||||
|  | 		this.menu = $( "<ul>" ) | ||||||
|  | 			.addClass( "ui-autocomplete ui-front" ) | ||||||
|  | 			.appendTo( this._appendTo() ) | ||||||
|  | 			.menu({ | ||||||
|  | 				// disable ARIA support, the live region takes care of that
 | ||||||
|  | 				role: null | ||||||
|  | 			}) | ||||||
|  | 			.hide() | ||||||
|  | 			.data( "ui-menu" ); | ||||||
|  | 
 | ||||||
|  | 		this._on( this.menu.element, { | ||||||
|  | 			mousedown: function( event ) { | ||||||
|  | 				// prevent moving focus out of the text field
 | ||||||
|  | 				event.preventDefault(); | ||||||
|  | 
 | ||||||
|  | 				// IE doesn't prevent moving focus even with event.preventDefault()
 | ||||||
|  | 				// so we set a flag to know when we should ignore the blur event
 | ||||||
|  | 				this.cancelBlur = true; | ||||||
|  | 				this._delay(function() { | ||||||
|  | 					delete this.cancelBlur; | ||||||
|  | 				}); | ||||||
|  | 
 | ||||||
|  | 				// clicking on the scrollbar causes focus to shift to the body
 | ||||||
|  | 				// but we can't detect a mouseup or a click immediately afterward
 | ||||||
|  | 				// so we have to track the next mousedown and close the menu if
 | ||||||
|  | 				// the user clicks somewhere outside of the autocomplete
 | ||||||
|  | 				var menuElement = this.menu.element[ 0 ]; | ||||||
|  | 				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { | ||||||
|  | 					this._delay(function() { | ||||||
|  | 						var that = this; | ||||||
|  | 						this.document.one( "mousedown", function( event ) { | ||||||
|  | 							if ( event.target !== that.element[ 0 ] && | ||||||
|  | 									event.target !== menuElement && | ||||||
|  | 									!$.contains( menuElement, event.target ) ) { | ||||||
|  | 								that.close(); | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			menufocus: function( event, ui ) { | ||||||
|  | 				// support: Firefox
 | ||||||
|  | 				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
 | ||||||
|  | 				if ( this.isNewMenu ) { | ||||||
|  | 					this.isNewMenu = false; | ||||||
|  | 					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { | ||||||
|  | 						this.menu.blur(); | ||||||
|  | 
 | ||||||
|  | 						this.document.one( "mousemove", function() { | ||||||
|  | 							$( event.target ).trigger( event.originalEvent ); | ||||||
|  | 						}); | ||||||
|  | 
 | ||||||
|  | 						return; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				var item = ui.item.data( "ui-autocomplete-item" ); | ||||||
|  | 				if ( false !== this._trigger( "focus", event, { item: item } ) ) { | ||||||
|  | 					// use value to match what will end up in the input, if it was a key event
 | ||||||
|  | 					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { | ||||||
|  | 						this._value( item.value ); | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					// Normally the input is populated with the item's value as the
 | ||||||
|  | 					// menu is navigated, causing screen readers to notice a change and
 | ||||||
|  | 					// announce the item. Since the focus event was canceled, this doesn't
 | ||||||
|  | 					// happen, so we update the live region so that screen readers can
 | ||||||
|  | 					// still notice the change and announce it.
 | ||||||
|  | 					this.liveRegion.text( item.value ); | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			menuselect: function( event, ui ) { | ||||||
|  | 				var item = ui.item.data( "ui-autocomplete-item" ), | ||||||
|  | 					previous = this.previous; | ||||||
|  | 
 | ||||||
|  | 				// only trigger when focus was lost (click on menu)
 | ||||||
|  | 				if ( this.element[0] !== this.document[0].activeElement ) { | ||||||
|  | 					this.element.focus(); | ||||||
|  | 					this.previous = previous; | ||||||
|  | 					// #6109 - IE triggers two focus events and the second
 | ||||||
|  | 					// is asynchronous, so we need to reset the previous
 | ||||||
|  | 					// term synchronously and asynchronously :-(
 | ||||||
|  | 					this._delay(function() { | ||||||
|  | 						this.previous = previous; | ||||||
|  | 						this.selectedItem = item; | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				if ( false !== this._trigger( "select", event, { item: item } ) ) { | ||||||
|  | 					this._value( item.value ); | ||||||
|  | 				} | ||||||
|  | 				// reset the term after the select event
 | ||||||
|  | 				// this allows custom select handling to work properly
 | ||||||
|  | 				this.term = this._value(); | ||||||
|  | 
 | ||||||
|  | 				this.close( event ); | ||||||
|  | 				this.selectedItem = item; | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		this.liveRegion = $( "<span>", { | ||||||
|  | 				role: "status", | ||||||
|  | 				"aria-live": "polite" | ||||||
|  | 			}) | ||||||
|  | 			.addClass( "ui-helper-hidden-accessible" ) | ||||||
|  | 			.insertBefore( this.element ); | ||||||
|  | 
 | ||||||
|  | 		// turning off autocomplete prevents the browser from remembering the
 | ||||||
|  | 		// value when navigating through history, so we re-enable autocomplete
 | ||||||
|  | 		// if the page is unloaded before the widget is destroyed. #7790
 | ||||||
|  | 		this._on( this.window, { | ||||||
|  | 			beforeunload: function() { | ||||||
|  | 				this.element.removeAttr( "autocomplete" ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		clearTimeout( this.searching ); | ||||||
|  | 		this.element | ||||||
|  | 			.removeClass( "ui-autocomplete-input" ) | ||||||
|  | 			.removeAttr( "autocomplete" ); | ||||||
|  | 		this.menu.element.remove(); | ||||||
|  | 		this.liveRegion.remove(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function( key, value ) { | ||||||
|  | 		this._super( key, value ); | ||||||
|  | 		if ( key === "source" ) { | ||||||
|  | 			this._initSource(); | ||||||
|  | 		} | ||||||
|  | 		if ( key === "appendTo" ) { | ||||||
|  | 			this.menu.element.appendTo( this._appendTo() ); | ||||||
|  | 		} | ||||||
|  | 		if ( key === "disabled" && value && this.xhr ) { | ||||||
|  | 			this.xhr.abort(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_appendTo: function() { | ||||||
|  | 		var element = this.options.appendTo; | ||||||
|  | 
 | ||||||
|  | 		if ( element ) { | ||||||
|  | 			element = element.jquery || element.nodeType ? | ||||||
|  | 				$( element ) : | ||||||
|  | 				this.document.find( element ).eq( 0 ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( !element ) { | ||||||
|  | 			element = this.element.closest( ".ui-front" ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( !element.length ) { | ||||||
|  | 			element = this.document[0].body; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return element; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_initSource: function() { | ||||||
|  | 		var array, url, | ||||||
|  | 			that = this; | ||||||
|  | 		if ( $.isArray(this.options.source) ) { | ||||||
|  | 			array = this.options.source; | ||||||
|  | 			this.source = function( request, response ) { | ||||||
|  | 				response( $.ui.autocomplete.filter( array, request.term ) ); | ||||||
|  | 			}; | ||||||
|  | 		} else if ( typeof this.options.source === "string" ) { | ||||||
|  | 			url = this.options.source; | ||||||
|  | 			this.source = function( request, response ) { | ||||||
|  | 				if ( that.xhr ) { | ||||||
|  | 					that.xhr.abort(); | ||||||
|  | 				} | ||||||
|  | 				that.xhr = $.ajax({ | ||||||
|  | 					url: url, | ||||||
|  | 					data: request, | ||||||
|  | 					dataType: "json", | ||||||
|  | 					success: function( data ) { | ||||||
|  | 						response( data ); | ||||||
|  | 					}, | ||||||
|  | 					error: function() { | ||||||
|  | 						response( [] ); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 			}; | ||||||
|  | 		} else { | ||||||
|  | 			this.source = this.options.source; | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_searchTimeout: function( event ) { | ||||||
|  | 		clearTimeout( this.searching ); | ||||||
|  | 		this.searching = this._delay(function() { | ||||||
|  | 			// only search if the value has changed
 | ||||||
|  | 			if ( this.term !== this._value() ) { | ||||||
|  | 				this.selectedItem = null; | ||||||
|  | 				this.search( null, event ); | ||||||
|  | 			} | ||||||
|  | 		}, this.options.delay ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	search: function( value, event ) { | ||||||
|  | 		value = value != null ? value : this._value(); | ||||||
|  | 
 | ||||||
|  | 		// always save the actual value, not the one passed as an argument
 | ||||||
|  | 		this.term = this._value(); | ||||||
|  | 
 | ||||||
|  | 		if ( value.length < this.options.minLength ) { | ||||||
|  | 			return this.close( event ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( this._trigger( "search", event ) === false ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return this._search( value ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_search: function( value ) { | ||||||
|  | 		this.pending++; | ||||||
|  | 		this.element.addClass( "ui-autocomplete-loading" ); | ||||||
|  | 		this.cancelSearch = false; | ||||||
|  | 
 | ||||||
|  | 		this.source( { term: value }, this._response() ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_response: function() { | ||||||
|  | 		var that = this, | ||||||
|  | 			index = ++requestIndex; | ||||||
|  | 
 | ||||||
|  | 		return function( content ) { | ||||||
|  | 			if ( index === requestIndex ) { | ||||||
|  | 				that.__response( content ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			that.pending--; | ||||||
|  | 			if ( !that.pending ) { | ||||||
|  | 				that.element.removeClass( "ui-autocomplete-loading" ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	__response: function( content ) { | ||||||
|  | 		if ( content ) { | ||||||
|  | 			content = this._normalize( content ); | ||||||
|  | 		} | ||||||
|  | 		this._trigger( "response", null, { content: content } ); | ||||||
|  | 		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { | ||||||
|  | 			this._suggest( content ); | ||||||
|  | 			this._trigger( "open" ); | ||||||
|  | 		} else { | ||||||
|  | 			// use ._close() instead of .close() so we don't cancel future searches
 | ||||||
|  | 			this._close(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	close: function( event ) { | ||||||
|  | 		this.cancelSearch = true; | ||||||
|  | 		this._close( event ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_close: function( event ) { | ||||||
|  | 		if ( this.menu.element.is( ":visible" ) ) { | ||||||
|  | 			this.menu.element.hide(); | ||||||
|  | 			this.menu.blur(); | ||||||
|  | 			this.isNewMenu = true; | ||||||
|  | 			this._trigger( "close", event ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_change: function( event ) { | ||||||
|  | 		if ( this.previous !== this._value() ) { | ||||||
|  | 			this._trigger( "change", event, { item: this.selectedItem } ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_normalize: function( items ) { | ||||||
|  | 		// assume all items have the right format when the first item is complete
 | ||||||
|  | 		if ( items.length && items[0].label && items[0].value ) { | ||||||
|  | 			return items; | ||||||
|  | 		} | ||||||
|  | 		return $.map( items, function( item ) { | ||||||
|  | 			if ( typeof item === "string" ) { | ||||||
|  | 				return { | ||||||
|  | 					label: item, | ||||||
|  | 					value: item | ||||||
|  | 				}; | ||||||
|  | 			} | ||||||
|  | 			return $.extend({ | ||||||
|  | 				label: item.label || item.value, | ||||||
|  | 				value: item.value || item.label | ||||||
|  | 			}, item ); | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_suggest: function( items ) { | ||||||
|  | 		var ul = this.menu.element.empty(); | ||||||
|  | 		this._renderMenu( ul, items ); | ||||||
|  | 		this.isNewMenu = true; | ||||||
|  | 		this.menu.refresh(); | ||||||
|  | 
 | ||||||
|  | 		// size and position menu
 | ||||||
|  | 		ul.show(); | ||||||
|  | 		this._resizeMenu(); | ||||||
|  | 		ul.position( $.extend({ | ||||||
|  | 			of: this.element | ||||||
|  | 		}, this.options.position )); | ||||||
|  | 
 | ||||||
|  | 		if ( this.options.autoFocus ) { | ||||||
|  | 			this.menu.next(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_resizeMenu: function() { | ||||||
|  | 		var ul = this.menu.element; | ||||||
|  | 		ul.outerWidth( Math.max( | ||||||
|  | 			// Firefox wraps long text (possibly a rounding bug)
 | ||||||
|  | 			// so we add 1px to avoid the wrapping (#7513)
 | ||||||
|  | 			ul.width( "" ).outerWidth() + 1, | ||||||
|  | 			this.element.outerWidth() | ||||||
|  | 		) ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_renderMenu: function( ul, items ) { | ||||||
|  | 		var that = this; | ||||||
|  | 		$.each( items, function( index, item ) { | ||||||
|  | 			that._renderItemData( ul, item ); | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_renderItemData: function( ul, item ) { | ||||||
|  | 		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_renderItem: function( ul, item ) { | ||||||
|  | 		return $( "<li>" ) | ||||||
|  | 			.append( $( "<a>" ).text( item.label ) ) | ||||||
|  | 			.appendTo( ul ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_move: function( direction, event ) { | ||||||
|  | 		if ( !this.menu.element.is( ":visible" ) ) { | ||||||
|  | 			this.search( null, event ); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		if ( this.menu.isFirstItem() && /^previous/.test( direction ) || | ||||||
|  | 				this.menu.isLastItem() && /^next/.test( direction ) ) { | ||||||
|  | 			this._value( this.term ); | ||||||
|  | 			this.menu.blur(); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		this.menu[ direction ]( event ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	widget: function() { | ||||||
|  | 		return this.menu.element; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_value: function() { | ||||||
|  | 		return this.valueMethod.apply( this.element, arguments ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_keyEvent: function( keyEvent, event ) { | ||||||
|  | 		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { | ||||||
|  | 			this._move( keyEvent, event ); | ||||||
|  | 
 | ||||||
|  | 			// prevents moving cursor to beginning/end of the text field in some browsers
 | ||||||
|  | 			event.preventDefault(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.extend( $.ui.autocomplete, { | ||||||
|  | 	escapeRegex: function( value ) { | ||||||
|  | 		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); | ||||||
|  | 	}, | ||||||
|  | 	filter: function(array, term) { | ||||||
|  | 		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); | ||||||
|  | 		return $.grep( array, function(value) { | ||||||
|  | 			return matcher.test( value.label || value.value || value ); | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // live region extension, adding a `messages` option
 | ||||||
|  | // NOTE: This is an experimental API. We are still investigating
 | ||||||
|  | // a full solution for string manipulation and internationalization.
 | ||||||
|  | $.widget( "ui.autocomplete", $.ui.autocomplete, { | ||||||
|  | 	options: { | ||||||
|  | 		messages: { | ||||||
|  | 			noResults: "No search results.", | ||||||
|  | 			results: function( amount ) { | ||||||
|  | 				return amount + ( amount > 1 ? " results are" : " result is" ) + | ||||||
|  | 					" available, use up and down arrow keys to navigate."; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	__response: function( content ) { | ||||||
|  | 		var message; | ||||||
|  | 		this._superApply( arguments ); | ||||||
|  | 		if ( this.options.disabled || this.cancelSearch ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		if ( content && content.length ) { | ||||||
|  | 			message = this.options.messages.results( content.length ); | ||||||
|  | 		} else { | ||||||
|  | 			message = this.options.messages.noResults; | ||||||
|  | 		} | ||||||
|  | 		this.liveRegion.text( message ); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | }( jQuery )); | ||||||
| @ -0,0 +1,419 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Button 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/button/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | var lastActive, startXPos, startYPos, clickDragged, | ||||||
|  | 	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", | ||||||
|  | 	stateClasses = "ui-state-hover ui-state-active ", | ||||||
|  | 	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", | ||||||
|  | 	formResetHandler = function() { | ||||||
|  | 		var form = $( this ); | ||||||
|  | 		setTimeout(function() { | ||||||
|  | 			form.find( ":ui-button" ).button( "refresh" ); | ||||||
|  | 		}, 1 ); | ||||||
|  | 	}, | ||||||
|  | 	radioGroup = function( radio ) { | ||||||
|  | 		var name = radio.name, | ||||||
|  | 			form = radio.form, | ||||||
|  | 			radios = $( [] ); | ||||||
|  | 		if ( name ) { | ||||||
|  | 			name = name.replace( /'/g, "\\'" ); | ||||||
|  | 			if ( form ) { | ||||||
|  | 				radios = $( form ).find( "[name='" + name + "']" ); | ||||||
|  | 			} else { | ||||||
|  | 				radios = $( "[name='" + name + "']", radio.ownerDocument ) | ||||||
|  | 					.filter(function() { | ||||||
|  | 						return !this.form; | ||||||
|  | 					}); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return radios; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | $.widget( "ui.button", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	defaultElement: "<button>", | ||||||
|  | 	options: { | ||||||
|  | 		disabled: null, | ||||||
|  | 		text: true, | ||||||
|  | 		label: null, | ||||||
|  | 		icons: { | ||||||
|  | 			primary: null, | ||||||
|  | 			secondary: null | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	_create: function() { | ||||||
|  | 		this.element.closest( "form" ) | ||||||
|  | 			.unbind( "reset" + this.eventNamespace ) | ||||||
|  | 			.bind( "reset" + this.eventNamespace, formResetHandler ); | ||||||
|  | 
 | ||||||
|  | 		if ( typeof this.options.disabled !== "boolean" ) { | ||||||
|  | 			this.options.disabled = !!this.element.prop( "disabled" ); | ||||||
|  | 		} else { | ||||||
|  | 			this.element.prop( "disabled", this.options.disabled ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._determineButtonType(); | ||||||
|  | 		this.hasTitle = !!this.buttonElement.attr( "title" ); | ||||||
|  | 
 | ||||||
|  | 		var that = this, | ||||||
|  | 			options = this.options, | ||||||
|  | 			toggleButton = this.type === "checkbox" || this.type === "radio", | ||||||
|  | 			activeClass = !toggleButton ? "ui-state-active" : "", | ||||||
|  | 			focusClass = "ui-state-focus"; | ||||||
|  | 
 | ||||||
|  | 		if ( options.label === null ) { | ||||||
|  | 			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html()); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._hoverable( this.buttonElement ); | ||||||
|  | 
 | ||||||
|  | 		this.buttonElement | ||||||
|  | 			.addClass( baseClasses ) | ||||||
|  | 			.attr( "role", "button" ) | ||||||
|  | 			.bind( "mouseenter" + this.eventNamespace, function() { | ||||||
|  | 				if ( options.disabled ) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				if ( this === lastActive ) { | ||||||
|  | 					$( this ).addClass( "ui-state-active" ); | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 			.bind( "mouseleave" + this.eventNamespace, function() { | ||||||
|  | 				if ( options.disabled ) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				$( this ).removeClass( activeClass ); | ||||||
|  | 			}) | ||||||
|  | 			.bind( "click" + this.eventNamespace, function( event ) { | ||||||
|  | 				if ( options.disabled ) { | ||||||
|  | 					event.preventDefault(); | ||||||
|  | 					event.stopImmediatePropagation(); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		this.element | ||||||
|  | 			.bind( "focus" + this.eventNamespace, function() { | ||||||
|  | 				// no need to check disabled, focus won't be triggered anyway
 | ||||||
|  | 				that.buttonElement.addClass( focusClass ); | ||||||
|  | 			}) | ||||||
|  | 			.bind( "blur" + this.eventNamespace, function() { | ||||||
|  | 				that.buttonElement.removeClass( focusClass ); | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		if ( toggleButton ) { | ||||||
|  | 			this.element.bind( "change" + this.eventNamespace, function() { | ||||||
|  | 				if ( clickDragged ) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				that.refresh(); | ||||||
|  | 			}); | ||||||
|  | 			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
 | ||||||
|  | 			// prevents issue where button state changes but checkbox/radio checked state
 | ||||||
|  | 			// does not in Firefox (see ticket #6970)
 | ||||||
|  | 			this.buttonElement | ||||||
|  | 				.bind( "mousedown" + this.eventNamespace, function( event ) { | ||||||
|  | 					if ( options.disabled ) { | ||||||
|  | 						return; | ||||||
|  | 					} | ||||||
|  | 					clickDragged = false; | ||||||
|  | 					startXPos = event.pageX; | ||||||
|  | 					startYPos = event.pageY; | ||||||
|  | 				}) | ||||||
|  | 				.bind( "mouseup" + this.eventNamespace, function( event ) { | ||||||
|  | 					if ( options.disabled ) { | ||||||
|  | 						return; | ||||||
|  | 					} | ||||||
|  | 					if ( startXPos !== event.pageX || startYPos !== event.pageY ) { | ||||||
|  | 						clickDragged = true; | ||||||
|  | 					} | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( this.type === "checkbox" ) { | ||||||
|  | 			this.buttonElement.bind( "click" + this.eventNamespace, function() { | ||||||
|  | 				if ( options.disabled || clickDragged ) { | ||||||
|  | 					return false; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		} else if ( this.type === "radio" ) { | ||||||
|  | 			this.buttonElement.bind( "click" + this.eventNamespace, function() { | ||||||
|  | 				if ( options.disabled || clickDragged ) { | ||||||
|  | 					return false; | ||||||
|  | 				} | ||||||
|  | 				$( this ).addClass( "ui-state-active" ); | ||||||
|  | 				that.buttonElement.attr( "aria-pressed", "true" ); | ||||||
|  | 
 | ||||||
|  | 				var radio = that.element[ 0 ]; | ||||||
|  | 				radioGroup( radio ) | ||||||
|  | 					.not( radio ) | ||||||
|  | 					.map(function() { | ||||||
|  | 						return $( this ).button( "widget" )[ 0 ]; | ||||||
|  | 					}) | ||||||
|  | 					.removeClass( "ui-state-active" ) | ||||||
|  | 					.attr( "aria-pressed", "false" ); | ||||||
|  | 			}); | ||||||
|  | 		} else { | ||||||
|  | 			this.buttonElement | ||||||
|  | 				.bind( "mousedown" + this.eventNamespace, function() { | ||||||
|  | 					if ( options.disabled ) { | ||||||
|  | 						return false; | ||||||
|  | 					} | ||||||
|  | 					$( this ).addClass( "ui-state-active" ); | ||||||
|  | 					lastActive = this; | ||||||
|  | 					that.document.one( "mouseup", function() { | ||||||
|  | 						lastActive = null; | ||||||
|  | 					}); | ||||||
|  | 				}) | ||||||
|  | 				.bind( "mouseup" + this.eventNamespace, function() { | ||||||
|  | 					if ( options.disabled ) { | ||||||
|  | 						return false; | ||||||
|  | 					} | ||||||
|  | 					$( this ).removeClass( "ui-state-active" ); | ||||||
|  | 				}) | ||||||
|  | 				.bind( "keydown" + this.eventNamespace, function(event) { | ||||||
|  | 					if ( options.disabled ) { | ||||||
|  | 						return false; | ||||||
|  | 					} | ||||||
|  | 					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) { | ||||||
|  | 						$( this ).addClass( "ui-state-active" ); | ||||||
|  | 					} | ||||||
|  | 				}) | ||||||
|  | 				// see #8559, we bind to blur here in case the button element loses
 | ||||||
|  | 				// focus between keydown and keyup, it would be left in an "active" state
 | ||||||
|  | 				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() { | ||||||
|  | 					$( this ).removeClass( "ui-state-active" ); | ||||||
|  | 				}); | ||||||
|  | 
 | ||||||
|  | 			if ( this.buttonElement.is("a") ) { | ||||||
|  | 				this.buttonElement.keyup(function(event) { | ||||||
|  | 					if ( event.keyCode === $.ui.keyCode.SPACE ) { | ||||||
|  | 						// TODO pass through original event correctly (just as 2nd argument doesn't work)
 | ||||||
|  | 						$( this ).click(); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// TODO: pull out $.Widget's handling for the disabled option into
 | ||||||
|  | 		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
 | ||||||
|  | 		// be overridden by individual plugins
 | ||||||
|  | 		this._setOption( "disabled", options.disabled ); | ||||||
|  | 		this._resetButton(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_determineButtonType: function() { | ||||||
|  | 		var ancestor, labelSelector, checked; | ||||||
|  | 
 | ||||||
|  | 		if ( this.element.is("[type=checkbox]") ) { | ||||||
|  | 			this.type = "checkbox"; | ||||||
|  | 		} else if ( this.element.is("[type=radio]") ) { | ||||||
|  | 			this.type = "radio"; | ||||||
|  | 		} else if ( this.element.is("input") ) { | ||||||
|  | 			this.type = "input"; | ||||||
|  | 		} else { | ||||||
|  | 			this.type = "button"; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( this.type === "checkbox" || this.type === "radio" ) { | ||||||
|  | 			// we don't search against the document in case the element
 | ||||||
|  | 			// is disconnected from the DOM
 | ||||||
|  | 			ancestor = this.element.parents().last(); | ||||||
|  | 			labelSelector = "label[for='" + this.element.attr("id") + "']"; | ||||||
|  | 			this.buttonElement = ancestor.find( labelSelector ); | ||||||
|  | 			if ( !this.buttonElement.length ) { | ||||||
|  | 				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings(); | ||||||
|  | 				this.buttonElement = ancestor.filter( labelSelector ); | ||||||
|  | 				if ( !this.buttonElement.length ) { | ||||||
|  | 					this.buttonElement = ancestor.find( labelSelector ); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			this.element.addClass( "ui-helper-hidden-accessible" ); | ||||||
|  | 
 | ||||||
|  | 			checked = this.element.is( ":checked" ); | ||||||
|  | 			if ( checked ) { | ||||||
|  | 				this.buttonElement.addClass( "ui-state-active" ); | ||||||
|  | 			} | ||||||
|  | 			this.buttonElement.prop( "aria-pressed", checked ); | ||||||
|  | 		} else { | ||||||
|  | 			this.buttonElement = this.element; | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	widget: function() { | ||||||
|  | 		return this.buttonElement; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		this.element | ||||||
|  | 			.removeClass( "ui-helper-hidden-accessible" ); | ||||||
|  | 		this.buttonElement | ||||||
|  | 			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) | ||||||
|  | 			.removeAttr( "role" ) | ||||||
|  | 			.removeAttr( "aria-pressed" ) | ||||||
|  | 			.html( this.buttonElement.find(".ui-button-text").html() ); | ||||||
|  | 
 | ||||||
|  | 		if ( !this.hasTitle ) { | ||||||
|  | 			this.buttonElement.removeAttr( "title" ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function( key, value ) { | ||||||
|  | 		this._super( key, value ); | ||||||
|  | 		if ( key === "disabled" ) { | ||||||
|  | 			if ( value ) { | ||||||
|  | 				this.element.prop( "disabled", true ); | ||||||
|  | 			} else { | ||||||
|  | 				this.element.prop( "disabled", false ); | ||||||
|  | 			} | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		this._resetButton(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	refresh: function() { | ||||||
|  | 		//See #8237 & #8828
 | ||||||
|  | 		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" ); | ||||||
|  | 
 | ||||||
|  | 		if ( isDisabled !== this.options.disabled ) { | ||||||
|  | 			this._setOption( "disabled", isDisabled ); | ||||||
|  | 		} | ||||||
|  | 		if ( this.type === "radio" ) { | ||||||
|  | 			radioGroup( this.element[0] ).each(function() { | ||||||
|  | 				if ( $( this ).is( ":checked" ) ) { | ||||||
|  | 					$( this ).button( "widget" ) | ||||||
|  | 						.addClass( "ui-state-active" ) | ||||||
|  | 						.attr( "aria-pressed", "true" ); | ||||||
|  | 				} else { | ||||||
|  | 					$( this ).button( "widget" ) | ||||||
|  | 						.removeClass( "ui-state-active" ) | ||||||
|  | 						.attr( "aria-pressed", "false" ); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		} else if ( this.type === "checkbox" ) { | ||||||
|  | 			if ( this.element.is( ":checked" ) ) { | ||||||
|  | 				this.buttonElement | ||||||
|  | 					.addClass( "ui-state-active" ) | ||||||
|  | 					.attr( "aria-pressed", "true" ); | ||||||
|  | 			} else { | ||||||
|  | 				this.buttonElement | ||||||
|  | 					.removeClass( "ui-state-active" ) | ||||||
|  | 					.attr( "aria-pressed", "false" ); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_resetButton: function() { | ||||||
|  | 		if ( this.type === "input" ) { | ||||||
|  | 			if ( this.options.label ) { | ||||||
|  | 				this.element.val( this.options.label ); | ||||||
|  | 			} | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		var buttonElement = this.buttonElement.removeClass( typeClasses ), | ||||||
|  | 			buttonText = $( "<span></span>", this.document[0] ) | ||||||
|  | 				.addClass( "ui-button-text" ) | ||||||
|  | 				.html( this.options.label ) | ||||||
|  | 				.appendTo( buttonElement.empty() ) | ||||||
|  | 				.text(), | ||||||
|  | 			icons = this.options.icons, | ||||||
|  | 			multipleIcons = icons.primary && icons.secondary, | ||||||
|  | 			buttonClasses = []; | ||||||
|  | 
 | ||||||
|  | 		if ( icons.primary || icons.secondary ) { | ||||||
|  | 			if ( this.options.text ) { | ||||||
|  | 				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if ( icons.primary ) { | ||||||
|  | 				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if ( icons.secondary ) { | ||||||
|  | 				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if ( !this.options.text ) { | ||||||
|  | 				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); | ||||||
|  | 
 | ||||||
|  | 				if ( !this.hasTitle ) { | ||||||
|  | 					buttonElement.attr( "title", $.trim( buttonText ) ); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			buttonClasses.push( "ui-button-text-only" ); | ||||||
|  | 		} | ||||||
|  | 		buttonElement.addClass( buttonClasses.join( " " ) ); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.widget( "ui.buttonset", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	options: { | ||||||
|  | 		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)" | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_create: function() { | ||||||
|  | 		this.element.addClass( "ui-buttonset" ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_init: function() { | ||||||
|  | 		this.refresh(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function( key, value ) { | ||||||
|  | 		if ( key === "disabled" ) { | ||||||
|  | 			this.buttons.button( "option", key, value ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._super( key, value ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	refresh: function() { | ||||||
|  | 		var rtl = this.element.css( "direction" ) === "rtl"; | ||||||
|  | 
 | ||||||
|  | 		this.buttons = this.element.find( this.options.items ) | ||||||
|  | 			.filter( ":ui-button" ) | ||||||
|  | 				.button( "refresh" ) | ||||||
|  | 			.end() | ||||||
|  | 			.not( ":ui-button" ) | ||||||
|  | 				.button() | ||||||
|  | 			.end() | ||||||
|  | 			.map(function() { | ||||||
|  | 				return $( this ).button( "widget" )[ 0 ]; | ||||||
|  | 			}) | ||||||
|  | 				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) | ||||||
|  | 				.filter( ":first" ) | ||||||
|  | 					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" ) | ||||||
|  | 				.end() | ||||||
|  | 				.filter( ":last" ) | ||||||
|  | 					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" ) | ||||||
|  | 				.end() | ||||||
|  | 			.end(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		this.element.removeClass( "ui-buttonset" ); | ||||||
|  | 		this.buttons | ||||||
|  | 			.map(function() { | ||||||
|  | 				return $( this ).button( "widget" )[ 0 ]; | ||||||
|  | 			}) | ||||||
|  | 				.removeClass( "ui-corner-left ui-corner-right" ) | ||||||
|  | 			.end() | ||||||
|  | 			.button( "destroy" ); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | }( jQuery ) ); | ||||||
| @ -0,0 +1,320 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Core 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/category/ui-core/
 | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | var uuid = 0, | ||||||
|  | 	runiqueId = /^ui-id-\d+$/; | ||||||
|  | 
 | ||||||
|  | // $.ui might exist from components with no dependencies, e.g., $.ui.position
 | ||||||
|  | $.ui = $.ui || {}; | ||||||
|  | 
 | ||||||
|  | $.extend( $.ui, { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 
 | ||||||
|  | 	keyCode: { | ||||||
|  | 		BACKSPACE: 8, | ||||||
|  | 		COMMA: 188, | ||||||
|  | 		DELETE: 46, | ||||||
|  | 		DOWN: 40, | ||||||
|  | 		END: 35, | ||||||
|  | 		ENTER: 13, | ||||||
|  | 		ESCAPE: 27, | ||||||
|  | 		HOME: 36, | ||||||
|  | 		LEFT: 37, | ||||||
|  | 		NUMPAD_ADD: 107, | ||||||
|  | 		NUMPAD_DECIMAL: 110, | ||||||
|  | 		NUMPAD_DIVIDE: 111, | ||||||
|  | 		NUMPAD_ENTER: 108, | ||||||
|  | 		NUMPAD_MULTIPLY: 106, | ||||||
|  | 		NUMPAD_SUBTRACT: 109, | ||||||
|  | 		PAGE_DOWN: 34, | ||||||
|  | 		PAGE_UP: 33, | ||||||
|  | 		PERIOD: 190, | ||||||
|  | 		RIGHT: 39, | ||||||
|  | 		SPACE: 32, | ||||||
|  | 		TAB: 9, | ||||||
|  | 		UP: 38 | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | // plugins
 | ||||||
|  | $.fn.extend({ | ||||||
|  | 	focus: (function( orig ) { | ||||||
|  | 		return function( delay, fn ) { | ||||||
|  | 			return typeof delay === "number" ? | ||||||
|  | 				this.each(function() { | ||||||
|  | 					var elem = this; | ||||||
|  | 					setTimeout(function() { | ||||||
|  | 						$( elem ).focus(); | ||||||
|  | 						if ( fn ) { | ||||||
|  | 							fn.call( elem ); | ||||||
|  | 						} | ||||||
|  | 					}, delay ); | ||||||
|  | 				}) : | ||||||
|  | 				orig.apply( this, arguments ); | ||||||
|  | 		}; | ||||||
|  | 	})( $.fn.focus ), | ||||||
|  | 
 | ||||||
|  | 	scrollParent: function() { | ||||||
|  | 		var scrollParent; | ||||||
|  | 		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { | ||||||
|  | 			scrollParent = this.parents().filter(function() { | ||||||
|  | 				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); | ||||||
|  | 			}).eq(0); | ||||||
|  | 		} else { | ||||||
|  | 			scrollParent = this.parents().filter(function() { | ||||||
|  | 				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); | ||||||
|  | 			}).eq(0); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	zIndex: function( zIndex ) { | ||||||
|  | 		if ( zIndex !== undefined ) { | ||||||
|  | 			return this.css( "zIndex", zIndex ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( this.length ) { | ||||||
|  | 			var elem = $( this[ 0 ] ), position, value; | ||||||
|  | 			while ( elem.length && elem[ 0 ] !== document ) { | ||||||
|  | 				// Ignore z-index if position is set to a value where z-index is ignored by the browser
 | ||||||
|  | 				// This makes behavior of this function consistent across browsers
 | ||||||
|  | 				// WebKit always returns auto if the element is positioned
 | ||||||
|  | 				position = elem.css( "position" ); | ||||||
|  | 				if ( position === "absolute" || position === "relative" || position === "fixed" ) { | ||||||
|  | 					// IE returns 0 when zIndex is not specified
 | ||||||
|  | 					// other browsers return a string
 | ||||||
|  | 					// we ignore the case of nested elements with an explicit value of 0
 | ||||||
|  | 					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
 | ||||||
|  | 					value = parseInt( elem.css( "zIndex" ), 10 ); | ||||||
|  | 					if ( !isNaN( value ) && value !== 0 ) { | ||||||
|  | 						return value; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				elem = elem.parent(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return 0; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	uniqueId: function() { | ||||||
|  | 		return this.each(function() { | ||||||
|  | 			if ( !this.id ) { | ||||||
|  | 				this.id = "ui-id-" + (++uuid); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	removeUniqueId: function() { | ||||||
|  | 		return this.each(function() { | ||||||
|  | 			if ( runiqueId.test( this.id ) ) { | ||||||
|  | 				$( this ).removeAttr( "id" ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | // selectors
 | ||||||
|  | function focusable( element, isTabIndexNotNaN ) { | ||||||
|  | 	var map, mapName, img, | ||||||
|  | 		nodeName = element.nodeName.toLowerCase(); | ||||||
|  | 	if ( "area" === nodeName ) { | ||||||
|  | 		map = element.parentNode; | ||||||
|  | 		mapName = map.name; | ||||||
|  | 		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 		img = $( "img[usemap=#" + mapName + "]" )[0]; | ||||||
|  | 		return !!img && visible( img ); | ||||||
|  | 	} | ||||||
|  | 	return ( /input|select|textarea|button|object/.test( nodeName ) ? | ||||||
|  | 		!element.disabled : | ||||||
|  | 		"a" === nodeName ? | ||||||
|  | 			element.href || isTabIndexNotNaN : | ||||||
|  | 			isTabIndexNotNaN) && | ||||||
|  | 		// the element and all of its ancestors must be visible
 | ||||||
|  | 		visible( element ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function visible( element ) { | ||||||
|  | 	return $.expr.filters.visible( element ) && | ||||||
|  | 		!$( element ).parents().addBack().filter(function() { | ||||||
|  | 			return $.css( this, "visibility" ) === "hidden"; | ||||||
|  | 		}).length; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | $.extend( $.expr[ ":" ], { | ||||||
|  | 	data: $.expr.createPseudo ? | ||||||
|  | 		$.expr.createPseudo(function( dataName ) { | ||||||
|  | 			return function( elem ) { | ||||||
|  | 				return !!$.data( elem, dataName ); | ||||||
|  | 			}; | ||||||
|  | 		}) : | ||||||
|  | 		// support: jQuery <1.8
 | ||||||
|  | 		function( elem, i, match ) { | ||||||
|  | 			return !!$.data( elem, match[ 3 ] ); | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
|  | 	focusable: function( element ) { | ||||||
|  | 		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	tabbable: function( element ) { | ||||||
|  | 		var tabIndex = $.attr( element, "tabindex" ), | ||||||
|  | 			isTabIndexNaN = isNaN( tabIndex ); | ||||||
|  | 		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | // support: jQuery <1.8
 | ||||||
|  | if ( !$( "<a>" ).outerWidth( 1 ).jquery ) { | ||||||
|  | 	$.each( [ "Width", "Height" ], function( i, name ) { | ||||||
|  | 		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], | ||||||
|  | 			type = name.toLowerCase(), | ||||||
|  | 			orig = { | ||||||
|  | 				innerWidth: $.fn.innerWidth, | ||||||
|  | 				innerHeight: $.fn.innerHeight, | ||||||
|  | 				outerWidth: $.fn.outerWidth, | ||||||
|  | 				outerHeight: $.fn.outerHeight | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 		function reduce( elem, size, border, margin ) { | ||||||
|  | 			$.each( side, function() { | ||||||
|  | 				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; | ||||||
|  | 				if ( border ) { | ||||||
|  | 					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; | ||||||
|  | 				} | ||||||
|  | 				if ( margin ) { | ||||||
|  | 					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 			return size; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		$.fn[ "inner" + name ] = function( size ) { | ||||||
|  | 			if ( size === undefined ) { | ||||||
|  | 				return orig[ "inner" + name ].call( this ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			return this.each(function() { | ||||||
|  | 				$( this ).css( type, reduce( this, size ) + "px" ); | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		$.fn[ "outer" + name] = function( size, margin ) { | ||||||
|  | 			if ( typeof size !== "number" ) { | ||||||
|  | 				return orig[ "outer" + name ].call( this, size ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			return this.each(function() { | ||||||
|  | 				$( this).css( type, reduce( this, size, true, margin ) + "px" ); | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 	}); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // support: jQuery <1.8
 | ||||||
|  | if ( !$.fn.addBack ) { | ||||||
|  | 	$.fn.addBack = function( selector ) { | ||||||
|  | 		return this.add( selector == null ? | ||||||
|  | 			this.prevObject : this.prevObject.filter( selector ) | ||||||
|  | 		); | ||||||
|  | 	}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
 | ||||||
|  | if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { | ||||||
|  | 	$.fn.removeData = (function( removeData ) { | ||||||
|  | 		return function( key ) { | ||||||
|  | 			if ( arguments.length ) { | ||||||
|  | 				return removeData.call( this, $.camelCase( key ) ); | ||||||
|  | 			} else { | ||||||
|  | 				return removeData.call( this ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  | 	})( $.fn.removeData ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // deprecated
 | ||||||
|  | $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); | ||||||
|  | 
 | ||||||
|  | $.support.selectstart = "onselectstart" in document.createElement( "div" ); | ||||||
|  | $.fn.extend({ | ||||||
|  | 	disableSelection: function() { | ||||||
|  | 		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + | ||||||
|  | 			".ui-disableSelection", function( event ) { | ||||||
|  | 				event.preventDefault(); | ||||||
|  | 			}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	enableSelection: function() { | ||||||
|  | 		return this.unbind( ".ui-disableSelection" ); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.extend( $.ui, { | ||||||
|  | 	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
 | ||||||
|  | 	plugin: { | ||||||
|  | 		add: function( module, option, set ) { | ||||||
|  | 			var i, | ||||||
|  | 				proto = $.ui[ module ].prototype; | ||||||
|  | 			for ( i in set ) { | ||||||
|  | 				proto.plugins[ i ] = proto.plugins[ i ] || []; | ||||||
|  | 				proto.plugins[ i ].push( [ option, set[ i ] ] ); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		call: function( instance, name, args ) { | ||||||
|  | 			var i, | ||||||
|  | 				set = instance.plugins[ name ]; | ||||||
|  | 			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			for ( i = 0; i < set.length; i++ ) { | ||||||
|  | 				if ( instance.options[ set[ i ][ 0 ] ] ) { | ||||||
|  | 					set[ i ][ 1 ].apply( instance.element, args ); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	// only used by resizable
 | ||||||
|  | 	hasScroll: function( el, a ) { | ||||||
|  | 
 | ||||||
|  | 		//If overflow is hidden, the element might have extra content, but the user wants to hide it
 | ||||||
|  | 		if ( $( el ).css( "overflow" ) === "hidden") { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", | ||||||
|  | 			has = false; | ||||||
|  | 
 | ||||||
|  | 		if ( el[ scroll ] > 0 ) { | ||||||
|  | 			return true; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// TODO: determine which cases actually cause this to happen
 | ||||||
|  | 		// if the element doesn't have the scroll set, see if it's possible to
 | ||||||
|  | 		// set the scroll
 | ||||||
|  | 		el[ scroll ] = 1; | ||||||
|  | 		has = ( el[ scroll ] > 0 ); | ||||||
|  | 		el[ scroll ] = 0; | ||||||
|  | 		return has; | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | })( jQuery ); | ||||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -0,0 +1,808 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Dialog 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/dialog/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  *  jquery.ui.button.js | ||||||
|  |  *	jquery.ui.draggable.js | ||||||
|  |  *	jquery.ui.mouse.js | ||||||
|  |  *	jquery.ui.position.js | ||||||
|  |  *	jquery.ui.resizable.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | var sizeRelatedOptions = { | ||||||
|  | 		buttons: true, | ||||||
|  | 		height: true, | ||||||
|  | 		maxHeight: true, | ||||||
|  | 		maxWidth: true, | ||||||
|  | 		minHeight: true, | ||||||
|  | 		minWidth: true, | ||||||
|  | 		width: true | ||||||
|  | 	}, | ||||||
|  | 	resizableRelatedOptions = { | ||||||
|  | 		maxHeight: true, | ||||||
|  | 		maxWidth: true, | ||||||
|  | 		minHeight: true, | ||||||
|  | 		minWidth: true | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | $.widget( "ui.dialog", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	options: { | ||||||
|  | 		appendTo: "body", | ||||||
|  | 		autoOpen: true, | ||||||
|  | 		buttons: [], | ||||||
|  | 		closeOnEscape: true, | ||||||
|  | 		closeText: "close", | ||||||
|  | 		dialogClass: "", | ||||||
|  | 		draggable: true, | ||||||
|  | 		hide: null, | ||||||
|  | 		height: "auto", | ||||||
|  | 		maxHeight: null, | ||||||
|  | 		maxWidth: null, | ||||||
|  | 		minHeight: 150, | ||||||
|  | 		minWidth: 150, | ||||||
|  | 		modal: false, | ||||||
|  | 		position: { | ||||||
|  | 			my: "center", | ||||||
|  | 			at: "center", | ||||||
|  | 			of: window, | ||||||
|  | 			collision: "fit", | ||||||
|  | 			// Ensure the titlebar is always visible
 | ||||||
|  | 			using: function( pos ) { | ||||||
|  | 				var topOffset = $( this ).css( pos ).offset().top; | ||||||
|  | 				if ( topOffset < 0 ) { | ||||||
|  | 					$( this ).css( "top", pos.top - topOffset ); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		resizable: true, | ||||||
|  | 		show: null, | ||||||
|  | 		title: null, | ||||||
|  | 		width: 300, | ||||||
|  | 
 | ||||||
|  | 		// callbacks
 | ||||||
|  | 		beforeClose: null, | ||||||
|  | 		close: null, | ||||||
|  | 		drag: null, | ||||||
|  | 		dragStart: null, | ||||||
|  | 		dragStop: null, | ||||||
|  | 		focus: null, | ||||||
|  | 		open: null, | ||||||
|  | 		resize: null, | ||||||
|  | 		resizeStart: null, | ||||||
|  | 		resizeStop: null | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_create: function() { | ||||||
|  | 		this.originalCss = { | ||||||
|  | 			display: this.element[0].style.display, | ||||||
|  | 			width: this.element[0].style.width, | ||||||
|  | 			minHeight: this.element[0].style.minHeight, | ||||||
|  | 			maxHeight: this.element[0].style.maxHeight, | ||||||
|  | 			height: this.element[0].style.height | ||||||
|  | 		}; | ||||||
|  | 		this.originalPosition = { | ||||||
|  | 			parent: this.element.parent(), | ||||||
|  | 			index: this.element.parent().children().index( this.element ) | ||||||
|  | 		}; | ||||||
|  | 		this.originalTitle = this.element.attr("title"); | ||||||
|  | 		this.options.title = this.options.title || this.originalTitle; | ||||||
|  | 
 | ||||||
|  | 		this._createWrapper(); | ||||||
|  | 
 | ||||||
|  | 		this.element | ||||||
|  | 			.show() | ||||||
|  | 			.removeAttr("title") | ||||||
|  | 			.addClass("ui-dialog-content ui-widget-content") | ||||||
|  | 			.appendTo( this.uiDialog ); | ||||||
|  | 
 | ||||||
|  | 		this._createTitlebar(); | ||||||
|  | 		this._createButtonPane(); | ||||||
|  | 
 | ||||||
|  | 		if ( this.options.draggable && $.fn.draggable ) { | ||||||
|  | 			this._makeDraggable(); | ||||||
|  | 		} | ||||||
|  | 		if ( this.options.resizable && $.fn.resizable ) { | ||||||
|  | 			this._makeResizable(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._isOpen = false; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_init: function() { | ||||||
|  | 		if ( this.options.autoOpen ) { | ||||||
|  | 			this.open(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_appendTo: function() { | ||||||
|  | 		var element = this.options.appendTo; | ||||||
|  | 		if ( element && (element.jquery || element.nodeType) ) { | ||||||
|  | 			return $( element ); | ||||||
|  | 		} | ||||||
|  | 		return this.document.find( element || "body" ).eq( 0 ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		var next, | ||||||
|  | 			originalPosition = this.originalPosition; | ||||||
|  | 
 | ||||||
|  | 		this._destroyOverlay(); | ||||||
|  | 
 | ||||||
|  | 		this.element | ||||||
|  | 			.removeUniqueId() | ||||||
|  | 			.removeClass("ui-dialog-content ui-widget-content") | ||||||
|  | 			.css( this.originalCss ) | ||||||
|  | 			// Without detaching first, the following becomes really slow
 | ||||||
|  | 			.detach(); | ||||||
|  | 
 | ||||||
|  | 		this.uiDialog.stop( true, true ).remove(); | ||||||
|  | 
 | ||||||
|  | 		if ( this.originalTitle ) { | ||||||
|  | 			this.element.attr( "title", this.originalTitle ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		next = originalPosition.parent.children().eq( originalPosition.index ); | ||||||
|  | 		// Don't try to place the dialog next to itself (#8613)
 | ||||||
|  | 		if ( next.length && next[0] !== this.element[0] ) { | ||||||
|  | 			next.before( this.element ); | ||||||
|  | 		} else { | ||||||
|  | 			originalPosition.parent.append( this.element ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	widget: function() { | ||||||
|  | 		return this.uiDialog; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	disable: $.noop, | ||||||
|  | 	enable: $.noop, | ||||||
|  | 
 | ||||||
|  | 	close: function( event ) { | ||||||
|  | 		var that = this; | ||||||
|  | 
 | ||||||
|  | 		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._isOpen = false; | ||||||
|  | 		this._destroyOverlay(); | ||||||
|  | 
 | ||||||
|  | 		if ( !this.opener.filter(":focusable").focus().length ) { | ||||||
|  | 			// Hiding a focused element doesn't trigger blur in WebKit
 | ||||||
|  | 			// so in case we have nothing to focus on, explicitly blur the active element
 | ||||||
|  | 			// https://bugs.webkit.org/show_bug.cgi?id=47182
 | ||||||
|  | 			$( this.document[0].activeElement ).blur(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._hide( this.uiDialog, this.options.hide, function() { | ||||||
|  | 			that._trigger( "close", event ); | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	isOpen: function() { | ||||||
|  | 		return this._isOpen; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	moveToTop: function() { | ||||||
|  | 		this._moveToTop(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_moveToTop: function( event, silent ) { | ||||||
|  | 		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length; | ||||||
|  | 		if ( moved && !silent ) { | ||||||
|  | 			this._trigger( "focus", event ); | ||||||
|  | 		} | ||||||
|  | 		return moved; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	open: function() { | ||||||
|  | 		var that = this; | ||||||
|  | 		if ( this._isOpen ) { | ||||||
|  | 			if ( this._moveToTop() ) { | ||||||
|  | 				this._focusTabbable(); | ||||||
|  | 			} | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._isOpen = true; | ||||||
|  | 		this.opener = $( this.document[0].activeElement ); | ||||||
|  | 
 | ||||||
|  | 		this._size(); | ||||||
|  | 		this._position(); | ||||||
|  | 		this._createOverlay(); | ||||||
|  | 		this._moveToTop( null, true ); | ||||||
|  | 		this._show( this.uiDialog, this.options.show, function() { | ||||||
|  | 			that._focusTabbable(); | ||||||
|  | 			that._trigger("focus"); | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		this._trigger("open"); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_focusTabbable: function() { | ||||||
|  | 		// Set focus to the first match:
 | ||||||
|  | 		// 1. First element inside the dialog matching [autofocus]
 | ||||||
|  | 		// 2. Tabbable element inside the content element
 | ||||||
|  | 		// 3. Tabbable element inside the buttonpane
 | ||||||
|  | 		// 4. The close button
 | ||||||
|  | 		// 5. The dialog itself
 | ||||||
|  | 		var hasFocus = this.element.find("[autofocus]"); | ||||||
|  | 		if ( !hasFocus.length ) { | ||||||
|  | 			hasFocus = this.element.find(":tabbable"); | ||||||
|  | 		} | ||||||
|  | 		if ( !hasFocus.length ) { | ||||||
|  | 			hasFocus = this.uiDialogButtonPane.find(":tabbable"); | ||||||
|  | 		} | ||||||
|  | 		if ( !hasFocus.length ) { | ||||||
|  | 			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable"); | ||||||
|  | 		} | ||||||
|  | 		if ( !hasFocus.length ) { | ||||||
|  | 			hasFocus = this.uiDialog; | ||||||
|  | 		} | ||||||
|  | 		hasFocus.eq( 0 ).focus(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_keepFocus: function( event ) { | ||||||
|  | 		function checkFocus() { | ||||||
|  | 			var activeElement = this.document[0].activeElement, | ||||||
|  | 				isActive = this.uiDialog[0] === activeElement || | ||||||
|  | 					$.contains( this.uiDialog[0], activeElement ); | ||||||
|  | 			if ( !isActive ) { | ||||||
|  | 				this._focusTabbable(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		event.preventDefault(); | ||||||
|  | 		checkFocus.call( this ); | ||||||
|  | 		// support: IE
 | ||||||
|  | 		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
 | ||||||
|  | 		// so we check again later
 | ||||||
|  | 		this._delay( checkFocus ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_createWrapper: function() { | ||||||
|  | 		this.uiDialog = $("<div>") | ||||||
|  | 			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " + | ||||||
|  | 				this.options.dialogClass ) | ||||||
|  | 			.hide() | ||||||
|  | 			.attr({ | ||||||
|  | 				// Setting tabIndex makes the div focusable
 | ||||||
|  | 				tabIndex: -1, | ||||||
|  | 				role: "dialog" | ||||||
|  | 			}) | ||||||
|  | 			.appendTo( this._appendTo() ); | ||||||
|  | 
 | ||||||
|  | 		this._on( this.uiDialog, { | ||||||
|  | 			keydown: function( event ) { | ||||||
|  | 				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && | ||||||
|  | 						event.keyCode === $.ui.keyCode.ESCAPE ) { | ||||||
|  | 					event.preventDefault(); | ||||||
|  | 					this.close( event ); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				// prevent tabbing out of dialogs
 | ||||||
|  | 				if ( event.keyCode !== $.ui.keyCode.TAB ) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				var tabbables = this.uiDialog.find(":tabbable"), | ||||||
|  | 					first = tabbables.filter(":first"), | ||||||
|  | 					last  = tabbables.filter(":last"); | ||||||
|  | 
 | ||||||
|  | 				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) { | ||||||
|  | 					first.focus( 1 ); | ||||||
|  | 					event.preventDefault(); | ||||||
|  | 				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) { | ||||||
|  | 					last.focus( 1 ); | ||||||
|  | 					event.preventDefault(); | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			mousedown: function( event ) { | ||||||
|  | 				if ( this._moveToTop( event ) ) { | ||||||
|  | 					this._focusTabbable(); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		// We assume that any existing aria-describedby attribute means
 | ||||||
|  | 		// that the dialog content is marked up properly
 | ||||||
|  | 		// otherwise we brute force the content as the description
 | ||||||
|  | 		if ( !this.element.find("[aria-describedby]").length ) { | ||||||
|  | 			this.uiDialog.attr({ | ||||||
|  | 				"aria-describedby": this.element.uniqueId().attr("id") | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_createTitlebar: function() { | ||||||
|  | 		var uiDialogTitle; | ||||||
|  | 
 | ||||||
|  | 		this.uiDialogTitlebar = $("<div>") | ||||||
|  | 			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix") | ||||||
|  | 			.prependTo( this.uiDialog ); | ||||||
|  | 		this._on( this.uiDialogTitlebar, { | ||||||
|  | 			mousedown: function( event ) { | ||||||
|  | 				// Don't prevent click on close button (#8838)
 | ||||||
|  | 				// Focusing a dialog that is partially scrolled out of view
 | ||||||
|  | 				// causes the browser to scroll it into view, preventing the click event
 | ||||||
|  | 				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) { | ||||||
|  | 					// Dialog isn't getting focus when dragging (#8063)
 | ||||||
|  | 					this.uiDialog.focus(); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		this.uiDialogTitlebarClose = $("<button></button>") | ||||||
|  | 			.button({ | ||||||
|  | 				label: this.options.closeText, | ||||||
|  | 				icons: { | ||||||
|  | 					primary: "ui-icon-closethick" | ||||||
|  | 				}, | ||||||
|  | 				text: false | ||||||
|  | 			}) | ||||||
|  | 			.addClass("ui-dialog-titlebar-close") | ||||||
|  | 			.appendTo( this.uiDialogTitlebar ); | ||||||
|  | 		this._on( this.uiDialogTitlebarClose, { | ||||||
|  | 			click: function( event ) { | ||||||
|  | 				event.preventDefault(); | ||||||
|  | 				this.close( event ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		uiDialogTitle = $("<span>") | ||||||
|  | 			.uniqueId() | ||||||
|  | 			.addClass("ui-dialog-title") | ||||||
|  | 			.prependTo( this.uiDialogTitlebar ); | ||||||
|  | 		this._title( uiDialogTitle ); | ||||||
|  | 
 | ||||||
|  | 		this.uiDialog.attr({ | ||||||
|  | 			"aria-labelledby": uiDialogTitle.attr("id") | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_title: function( title ) { | ||||||
|  | 		if ( !this.options.title ) { | ||||||
|  | 			title.html(" "); | ||||||
|  | 		} | ||||||
|  | 		title.text( this.options.title ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_createButtonPane: function() { | ||||||
|  | 		this.uiDialogButtonPane = $("<div>") | ||||||
|  | 			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"); | ||||||
|  | 
 | ||||||
|  | 		this.uiButtonSet = $("<div>") | ||||||
|  | 			.addClass("ui-dialog-buttonset") | ||||||
|  | 			.appendTo( this.uiDialogButtonPane ); | ||||||
|  | 
 | ||||||
|  | 		this._createButtons(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_createButtons: function() { | ||||||
|  | 		var that = this, | ||||||
|  | 			buttons = this.options.buttons; | ||||||
|  | 
 | ||||||
|  | 		// if we already have a button pane, remove it
 | ||||||
|  | 		this.uiDialogButtonPane.remove(); | ||||||
|  | 		this.uiButtonSet.empty(); | ||||||
|  | 
 | ||||||
|  | 		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) { | ||||||
|  | 			this.uiDialog.removeClass("ui-dialog-buttons"); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		$.each( buttons, function( name, props ) { | ||||||
|  | 			var click, buttonOptions; | ||||||
|  | 			props = $.isFunction( props ) ? | ||||||
|  | 				{ click: props, text: name } : | ||||||
|  | 				props; | ||||||
|  | 			// Default to a non-submitting button
 | ||||||
|  | 			props = $.extend( { type: "button" }, props ); | ||||||
|  | 			// Change the context for the click callback to be the main element
 | ||||||
|  | 			click = props.click; | ||||||
|  | 			props.click = function() { | ||||||
|  | 				click.apply( that.element[0], arguments ); | ||||||
|  | 			}; | ||||||
|  | 			buttonOptions = { | ||||||
|  | 				icons: props.icons, | ||||||
|  | 				text: props.showText | ||||||
|  | 			}; | ||||||
|  | 			delete props.icons; | ||||||
|  | 			delete props.showText; | ||||||
|  | 			$( "<button></button>", props ) | ||||||
|  | 				.button( buttonOptions ) | ||||||
|  | 				.appendTo( that.uiButtonSet ); | ||||||
|  | 		}); | ||||||
|  | 		this.uiDialog.addClass("ui-dialog-buttons"); | ||||||
|  | 		this.uiDialogButtonPane.appendTo( this.uiDialog ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_makeDraggable: function() { | ||||||
|  | 		var that = this, | ||||||
|  | 			options = this.options; | ||||||
|  | 
 | ||||||
|  | 		function filteredUi( ui ) { | ||||||
|  | 			return { | ||||||
|  | 				position: ui.position, | ||||||
|  | 				offset: ui.offset | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.uiDialog.draggable({ | ||||||
|  | 			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", | ||||||
|  | 			handle: ".ui-dialog-titlebar", | ||||||
|  | 			containment: "document", | ||||||
|  | 			start: function( event, ui ) { | ||||||
|  | 				$( this ).addClass("ui-dialog-dragging"); | ||||||
|  | 				that._blockFrames(); | ||||||
|  | 				that._trigger( "dragStart", event, filteredUi( ui ) ); | ||||||
|  | 			}, | ||||||
|  | 			drag: function( event, ui ) { | ||||||
|  | 				that._trigger( "drag", event, filteredUi( ui ) ); | ||||||
|  | 			}, | ||||||
|  | 			stop: function( event, ui ) { | ||||||
|  | 				options.position = [ | ||||||
|  | 					ui.position.left - that.document.scrollLeft(), | ||||||
|  | 					ui.position.top - that.document.scrollTop() | ||||||
|  | 				]; | ||||||
|  | 				$( this ).removeClass("ui-dialog-dragging"); | ||||||
|  | 				that._unblockFrames(); | ||||||
|  | 				that._trigger( "dragStop", event, filteredUi( ui ) ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_makeResizable: function() { | ||||||
|  | 		var that = this, | ||||||
|  | 			options = this.options, | ||||||
|  | 			handles = options.resizable, | ||||||
|  | 			// .ui-resizable has position: relative defined in the stylesheet
 | ||||||
|  | 			// but dialogs have to use absolute or fixed positioning
 | ||||||
|  | 			position = this.uiDialog.css("position"), | ||||||
|  | 			resizeHandles = typeof handles === "string" ? | ||||||
|  | 				handles	: | ||||||
|  | 				"n,e,s,w,se,sw,ne,nw"; | ||||||
|  | 
 | ||||||
|  | 		function filteredUi( ui ) { | ||||||
|  | 			return { | ||||||
|  | 				originalPosition: ui.originalPosition, | ||||||
|  | 				originalSize: ui.originalSize, | ||||||
|  | 				position: ui.position, | ||||||
|  | 				size: ui.size | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.uiDialog.resizable({ | ||||||
|  | 			cancel: ".ui-dialog-content", | ||||||
|  | 			containment: "document", | ||||||
|  | 			alsoResize: this.element, | ||||||
|  | 			maxWidth: options.maxWidth, | ||||||
|  | 			maxHeight: options.maxHeight, | ||||||
|  | 			minWidth: options.minWidth, | ||||||
|  | 			minHeight: this._minHeight(), | ||||||
|  | 			handles: resizeHandles, | ||||||
|  | 			start: function( event, ui ) { | ||||||
|  | 				$( this ).addClass("ui-dialog-resizing"); | ||||||
|  | 				that._blockFrames(); | ||||||
|  | 				that._trigger( "resizeStart", event, filteredUi( ui ) ); | ||||||
|  | 			}, | ||||||
|  | 			resize: function( event, ui ) { | ||||||
|  | 				that._trigger( "resize", event, filteredUi( ui ) ); | ||||||
|  | 			}, | ||||||
|  | 			stop: function( event, ui ) { | ||||||
|  | 				options.height = $( this ).height(); | ||||||
|  | 				options.width = $( this ).width(); | ||||||
|  | 				$( this ).removeClass("ui-dialog-resizing"); | ||||||
|  | 				that._unblockFrames(); | ||||||
|  | 				that._trigger( "resizeStop", event, filteredUi( ui ) ); | ||||||
|  | 			} | ||||||
|  | 		}) | ||||||
|  | 		.css( "position", position ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_minHeight: function() { | ||||||
|  | 		var options = this.options; | ||||||
|  | 
 | ||||||
|  | 		return options.height === "auto" ? | ||||||
|  | 			options.minHeight : | ||||||
|  | 			Math.min( options.minHeight, options.height ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_position: function() { | ||||||
|  | 		// Need to show the dialog to get the actual offset in the position plugin
 | ||||||
|  | 		var isVisible = this.uiDialog.is(":visible"); | ||||||
|  | 		if ( !isVisible ) { | ||||||
|  | 			this.uiDialog.show(); | ||||||
|  | 		} | ||||||
|  | 		this.uiDialog.position( this.options.position ); | ||||||
|  | 		if ( !isVisible ) { | ||||||
|  | 			this.uiDialog.hide(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOptions: function( options ) { | ||||||
|  | 		var that = this, | ||||||
|  | 			resize = false, | ||||||
|  | 			resizableOptions = {}; | ||||||
|  | 
 | ||||||
|  | 		$.each( options, function( key, value ) { | ||||||
|  | 			that._setOption( key, value ); | ||||||
|  | 
 | ||||||
|  | 			if ( key in sizeRelatedOptions ) { | ||||||
|  | 				resize = true; | ||||||
|  | 			} | ||||||
|  | 			if ( key in resizableRelatedOptions ) { | ||||||
|  | 				resizableOptions[ key ] = value; | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		if ( resize ) { | ||||||
|  | 			this._size(); | ||||||
|  | 			this._position(); | ||||||
|  | 		} | ||||||
|  | 		if ( this.uiDialog.is(":data(ui-resizable)") ) { | ||||||
|  | 			this.uiDialog.resizable( "option", resizableOptions ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function( key, value ) { | ||||||
|  | 		/*jshint maxcomplexity:15*/ | ||||||
|  | 		var isDraggable, isResizable, | ||||||
|  | 			uiDialog = this.uiDialog; | ||||||
|  | 
 | ||||||
|  | 		if ( key === "dialogClass" ) { | ||||||
|  | 			uiDialog | ||||||
|  | 				.removeClass( this.options.dialogClass ) | ||||||
|  | 				.addClass( value ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "disabled" ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._super( key, value ); | ||||||
|  | 
 | ||||||
|  | 		if ( key === "appendTo" ) { | ||||||
|  | 			this.uiDialog.appendTo( this._appendTo() ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "buttons" ) { | ||||||
|  | 			this._createButtons(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "closeText" ) { | ||||||
|  | 			this.uiDialogTitlebarClose.button({ | ||||||
|  | 				// Ensure that we always pass a string
 | ||||||
|  | 				label: "" + value | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "draggable" ) { | ||||||
|  | 			isDraggable = uiDialog.is(":data(ui-draggable)"); | ||||||
|  | 			if ( isDraggable && !value ) { | ||||||
|  | 				uiDialog.draggable("destroy"); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if ( !isDraggable && value ) { | ||||||
|  | 				this._makeDraggable(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "position" ) { | ||||||
|  | 			this._position(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "resizable" ) { | ||||||
|  | 			// currently resizable, becoming non-resizable
 | ||||||
|  | 			isResizable = uiDialog.is(":data(ui-resizable)"); | ||||||
|  | 			if ( isResizable && !value ) { | ||||||
|  | 				uiDialog.resizable("destroy"); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// currently resizable, changing handles
 | ||||||
|  | 			if ( isResizable && typeof value === "string" ) { | ||||||
|  | 				uiDialog.resizable( "option", "handles", value ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// currently non-resizable, becoming resizable
 | ||||||
|  | 			if ( !isResizable && value !== false ) { | ||||||
|  | 				this._makeResizable(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( key === "title" ) { | ||||||
|  | 			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_size: function() { | ||||||
|  | 		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
 | ||||||
|  | 		// divs will both have width and height set, so we need to reset them
 | ||||||
|  | 		var nonContentHeight, minContentHeight, maxContentHeight, | ||||||
|  | 			options = this.options; | ||||||
|  | 
 | ||||||
|  | 		// Reset content sizing
 | ||||||
|  | 		this.element.show().css({ | ||||||
|  | 			width: "auto", | ||||||
|  | 			minHeight: 0, | ||||||
|  | 			maxHeight: "none", | ||||||
|  | 			height: 0 | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		if ( options.minWidth > options.width ) { | ||||||
|  | 			options.width = options.minWidth; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// reset wrapper sizing
 | ||||||
|  | 		// determine the height of all the non-content elements
 | ||||||
|  | 		nonContentHeight = this.uiDialog.css({ | ||||||
|  | 				height: "auto", | ||||||
|  | 				width: options.width | ||||||
|  | 			}) | ||||||
|  | 			.outerHeight(); | ||||||
|  | 		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); | ||||||
|  | 		maxContentHeight = typeof options.maxHeight === "number" ? | ||||||
|  | 			Math.max( 0, options.maxHeight - nonContentHeight ) : | ||||||
|  | 			"none"; | ||||||
|  | 
 | ||||||
|  | 		if ( options.height === "auto" ) { | ||||||
|  | 			this.element.css({ | ||||||
|  | 				minHeight: minContentHeight, | ||||||
|  | 				maxHeight: maxContentHeight, | ||||||
|  | 				height: "auto" | ||||||
|  | 			}); | ||||||
|  | 		} else { | ||||||
|  | 			this.element.height( Math.max( 0, options.height - nonContentHeight ) ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (this.uiDialog.is(":data(ui-resizable)") ) { | ||||||
|  | 			this.uiDialog.resizable( "option", "minHeight", this._minHeight() ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_blockFrames: function() { | ||||||
|  | 		this.iframeBlocks = this.document.find( "iframe" ).map(function() { | ||||||
|  | 			var iframe = $( this ); | ||||||
|  | 
 | ||||||
|  | 			return $( "<div>" ) | ||||||
|  | 				.css({ | ||||||
|  | 					position: "absolute", | ||||||
|  | 					width: iframe.outerWidth(), | ||||||
|  | 					height: iframe.outerHeight() | ||||||
|  | 				}) | ||||||
|  | 				.appendTo( iframe.parent() ) | ||||||
|  | 				.offset( iframe.offset() )[0]; | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_unblockFrames: function() { | ||||||
|  | 		if ( this.iframeBlocks ) { | ||||||
|  | 			this.iframeBlocks.remove(); | ||||||
|  | 			delete this.iframeBlocks; | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_allowInteraction: function( event ) { | ||||||
|  | 		if ( $( event.target ).closest(".ui-dialog").length ) { | ||||||
|  | 			return true; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// TODO: Remove hack when datepicker implements
 | ||||||
|  | 		// the .ui-front logic (#8989)
 | ||||||
|  | 		return !!$( event.target ).closest(".ui-datepicker").length; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_createOverlay: function() { | ||||||
|  | 		if ( !this.options.modal ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		var that = this, | ||||||
|  | 			widgetFullName = this.widgetFullName; | ||||||
|  | 		if ( !$.ui.dialog.overlayInstances ) { | ||||||
|  | 			// Prevent use of anchors and inputs.
 | ||||||
|  | 			// We use a delay in case the overlay is created from an
 | ||||||
|  | 			// event that we're going to be cancelling. (#2804)
 | ||||||
|  | 			this._delay(function() { | ||||||
|  | 				// Handle .dialog().dialog("close") (#4065)
 | ||||||
|  | 				if ( $.ui.dialog.overlayInstances ) { | ||||||
|  | 					this.document.bind( "focusin.dialog", function( event ) { | ||||||
|  | 						if ( !that._allowInteraction( event ) ) { | ||||||
|  | 							event.preventDefault(); | ||||||
|  | 							$(".ui-dialog:visible:last .ui-dialog-content") | ||||||
|  | 								.data( widgetFullName )._focusTabbable(); | ||||||
|  | 						} | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.overlay = $("<div>") | ||||||
|  | 			.addClass("ui-widget-overlay ui-front") | ||||||
|  | 			.appendTo( this._appendTo() ); | ||||||
|  | 		this._on( this.overlay, { | ||||||
|  | 			mousedown: "_keepFocus" | ||||||
|  | 		}); | ||||||
|  | 		$.ui.dialog.overlayInstances++; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroyOverlay: function() { | ||||||
|  | 		if ( !this.options.modal ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( this.overlay ) { | ||||||
|  | 			$.ui.dialog.overlayInstances--; | ||||||
|  | 
 | ||||||
|  | 			if ( !$.ui.dialog.overlayInstances ) { | ||||||
|  | 				this.document.unbind( "focusin.dialog" ); | ||||||
|  | 			} | ||||||
|  | 			this.overlay.remove(); | ||||||
|  | 			this.overlay = null; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.dialog.overlayInstances = 0; | ||||||
|  | 
 | ||||||
|  | // DEPRECATED
 | ||||||
|  | if ( $.uiBackCompat !== false ) { | ||||||
|  | 	// position option with array notation
 | ||||||
|  | 	// just override with old implementation
 | ||||||
|  | 	$.widget( "ui.dialog", $.ui.dialog, { | ||||||
|  | 		_position: function() { | ||||||
|  | 			var position = this.options.position, | ||||||
|  | 				myAt = [], | ||||||
|  | 				offset = [ 0, 0 ], | ||||||
|  | 				isVisible; | ||||||
|  | 
 | ||||||
|  | 			if ( position ) { | ||||||
|  | 				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) { | ||||||
|  | 					myAt = position.split ? position.split(" ") : [ position[0], position[1] ]; | ||||||
|  | 					if ( myAt.length === 1 ) { | ||||||
|  | 						myAt[1] = myAt[0]; | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					$.each( [ "left", "top" ], function( i, offsetPosition ) { | ||||||
|  | 						if ( +myAt[ i ] === myAt[ i ] ) { | ||||||
|  | 							offset[ i ] = myAt[ i ]; | ||||||
|  | 							myAt[ i ] = offsetPosition; | ||||||
|  | 						} | ||||||
|  | 					}); | ||||||
|  | 
 | ||||||
|  | 					position = { | ||||||
|  | 						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " + | ||||||
|  | 							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]), | ||||||
|  | 						at: myAt.join(" ") | ||||||
|  | 					}; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				position = $.extend( {}, $.ui.dialog.prototype.options.position, position ); | ||||||
|  | 			} else { | ||||||
|  | 				position = $.ui.dialog.prototype.options.position; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// need to show the dialog to get the actual offset in the position plugin
 | ||||||
|  | 			isVisible = this.uiDialog.is(":visible"); | ||||||
|  | 			if ( !isVisible ) { | ||||||
|  | 				this.uiDialog.show(); | ||||||
|  | 			} | ||||||
|  | 			this.uiDialog.position( position ); | ||||||
|  | 			if ( !isVisible ) { | ||||||
|  | 				this.uiDialog.hide(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | }( jQuery ) ); | ||||||
| @ -0,0 +1,958 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Draggable 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/draggable/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.mouse.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.widget("ui.draggable", $.ui.mouse, { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	widgetEventPrefix: "drag", | ||||||
|  | 	options: { | ||||||
|  | 		addClasses: true, | ||||||
|  | 		appendTo: "parent", | ||||||
|  | 		axis: false, | ||||||
|  | 		connectToSortable: false, | ||||||
|  | 		containment: false, | ||||||
|  | 		cursor: "auto", | ||||||
|  | 		cursorAt: false, | ||||||
|  | 		grid: false, | ||||||
|  | 		handle: false, | ||||||
|  | 		helper: "original", | ||||||
|  | 		iframeFix: false, | ||||||
|  | 		opacity: false, | ||||||
|  | 		refreshPositions: false, | ||||||
|  | 		revert: false, | ||||||
|  | 		revertDuration: 500, | ||||||
|  | 		scope: "default", | ||||||
|  | 		scroll: true, | ||||||
|  | 		scrollSensitivity: 20, | ||||||
|  | 		scrollSpeed: 20, | ||||||
|  | 		snap: false, | ||||||
|  | 		snapMode: "both", | ||||||
|  | 		snapTolerance: 20, | ||||||
|  | 		stack: false, | ||||||
|  | 		zIndex: false, | ||||||
|  | 
 | ||||||
|  | 		// callbacks
 | ||||||
|  | 		drag: null, | ||||||
|  | 		start: null, | ||||||
|  | 		stop: null | ||||||
|  | 	}, | ||||||
|  | 	_create: function() { | ||||||
|  | 
 | ||||||
|  | 		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) { | ||||||
|  | 			this.element[0].style.position = "relative"; | ||||||
|  | 		} | ||||||
|  | 		if (this.options.addClasses){ | ||||||
|  | 			this.element.addClass("ui-draggable"); | ||||||
|  | 		} | ||||||
|  | 		if (this.options.disabled){ | ||||||
|  | 			this.element.addClass("ui-draggable-disabled"); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._mouseInit(); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ); | ||||||
|  | 		this._mouseDestroy(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseCapture: function(event) { | ||||||
|  | 
 | ||||||
|  | 		var o = this.options; | ||||||
|  | 
 | ||||||
|  | 		// among others, prevent a drag on a resizable-handle
 | ||||||
|  | 		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//Quit if we're not on a valid handle
 | ||||||
|  | 		this.handle = this._getHandle(event); | ||||||
|  | 		if (!this.handle) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { | ||||||
|  | 			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>") | ||||||
|  | 			.css({ | ||||||
|  | 				width: this.offsetWidth+"px", height: this.offsetHeight+"px", | ||||||
|  | 				position: "absolute", opacity: "0.001", zIndex: 1000 | ||||||
|  | 			}) | ||||||
|  | 			.css($(this).offset()) | ||||||
|  | 			.appendTo("body"); | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		return true; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseStart: function(event) { | ||||||
|  | 
 | ||||||
|  | 		var o = this.options; | ||||||
|  | 
 | ||||||
|  | 		//Create and append the visible helper
 | ||||||
|  | 		this.helper = this._createHelper(event); | ||||||
|  | 
 | ||||||
|  | 		this.helper.addClass("ui-draggable-dragging"); | ||||||
|  | 
 | ||||||
|  | 		//Cache the helper size
 | ||||||
|  | 		this._cacheHelperProportions(); | ||||||
|  | 
 | ||||||
|  | 		//If ddmanager is used for droppables, set the global draggable
 | ||||||
|  | 		if($.ui.ddmanager) { | ||||||
|  | 			$.ui.ddmanager.current = this; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		/* | ||||||
|  | 		 * - Position generation - | ||||||
|  | 		 * This block generates everything position related - it's the core of draggables. | ||||||
|  | 		 */ | ||||||
|  | 
 | ||||||
|  | 		//Cache the margins of the original element
 | ||||||
|  | 		this._cacheMargins(); | ||||||
|  | 
 | ||||||
|  | 		//Store the helper's css position
 | ||||||
|  | 		this.cssPosition = this.helper.css( "position" ); | ||||||
|  | 		this.scrollParent = this.helper.scrollParent(); | ||||||
|  | 		this.offsetParent = this.helper.offsetParent(); | ||||||
|  | 		this.offsetParentCssPosition = this.offsetParent.css( "position" ); | ||||||
|  | 
 | ||||||
|  | 		//The element's absolute position on the page minus margins
 | ||||||
|  | 		this.offset = this.positionAbs = this.element.offset(); | ||||||
|  | 		this.offset = { | ||||||
|  | 			top: this.offset.top - this.margins.top, | ||||||
|  | 			left: this.offset.left - this.margins.left | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		//Reset scroll cache
 | ||||||
|  | 		this.offset.scroll = false; | ||||||
|  | 
 | ||||||
|  | 		$.extend(this.offset, { | ||||||
|  | 			click: { //Where the click happened, relative to the element
 | ||||||
|  | 				left: event.pageX - this.offset.left, | ||||||
|  | 				top: event.pageY - this.offset.top | ||||||
|  | 			}, | ||||||
|  | 			parent: this._getParentOffset(), | ||||||
|  | 			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
 | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		//Generate the original position
 | ||||||
|  | 		this.originalPosition = this.position = this._generatePosition(event); | ||||||
|  | 		this.originalPageX = event.pageX; | ||||||
|  | 		this.originalPageY = event.pageY; | ||||||
|  | 
 | ||||||
|  | 		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
 | ||||||
|  | 		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); | ||||||
|  | 
 | ||||||
|  | 		//Set a containment if given in the options
 | ||||||
|  | 		this._setContainment(); | ||||||
|  | 
 | ||||||
|  | 		//Trigger event + callbacks
 | ||||||
|  | 		if(this._trigger("start", event) === false) { | ||||||
|  | 			this._clear(); | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//Recache the helper size
 | ||||||
|  | 		this._cacheHelperProportions(); | ||||||
|  | 
 | ||||||
|  | 		//Prepare the droppable offsets
 | ||||||
|  | 		if ($.ui.ddmanager && !o.dropBehaviour) { | ||||||
|  | 			$.ui.ddmanager.prepareOffsets(this, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
 | ||||||
|  | 
 | ||||||
|  | 		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
 | ||||||
|  | 		if ( $.ui.ddmanager ) { | ||||||
|  | 			$.ui.ddmanager.dragStart(this, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return true; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseDrag: function(event, noPropagation) { | ||||||
|  | 		// reset any necessary cached properties (see #5009)
 | ||||||
|  | 		if ( this.offsetParentCssPosition === "fixed" ) { | ||||||
|  | 			this.offset.parent = this._getParentOffset(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//Compute the helpers position
 | ||||||
|  | 		this.position = this._generatePosition(event); | ||||||
|  | 		this.positionAbs = this._convertPositionTo("absolute"); | ||||||
|  | 
 | ||||||
|  | 		//Call plugins and callbacks and use the resulting position if something is returned
 | ||||||
|  | 		if (!noPropagation) { | ||||||
|  | 			var ui = this._uiHash(); | ||||||
|  | 			if(this._trigger("drag", event, ui) === false) { | ||||||
|  | 				this._mouseUp({}); | ||||||
|  | 				return false; | ||||||
|  | 			} | ||||||
|  | 			this.position = ui.position; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if(!this.options.axis || this.options.axis !== "y") { | ||||||
|  | 			this.helper[0].style.left = this.position.left+"px"; | ||||||
|  | 		} | ||||||
|  | 		if(!this.options.axis || this.options.axis !== "x") { | ||||||
|  | 			this.helper[0].style.top = this.position.top+"px"; | ||||||
|  | 		} | ||||||
|  | 		if($.ui.ddmanager) { | ||||||
|  | 			$.ui.ddmanager.drag(this, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return false; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseStop: function(event) { | ||||||
|  | 
 | ||||||
|  | 		//If we are using droppables, inform the manager about the drop
 | ||||||
|  | 		var that = this, | ||||||
|  | 			dropped = false; | ||||||
|  | 		if ($.ui.ddmanager && !this.options.dropBehaviour) { | ||||||
|  | 			dropped = $.ui.ddmanager.drop(this, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//if a drop comes from outside (a sortable)
 | ||||||
|  | 		if(this.dropped) { | ||||||
|  | 			dropped = this.dropped; | ||||||
|  | 			this.dropped = false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//if the original element is no longer in the DOM don't bother to continue (see #8269)
 | ||||||
|  | 		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { | ||||||
|  | 			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { | ||||||
|  | 				if(that._trigger("stop", event) !== false) { | ||||||
|  | 					that._clear(); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		} else { | ||||||
|  | 			if(this._trigger("stop", event) !== false) { | ||||||
|  | 				this._clear(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return false; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseUp: function(event) { | ||||||
|  | 		//Remove frame helpers
 | ||||||
|  | 		$("div.ui-draggable-iframeFix").each(function() { | ||||||
|  | 			this.parentNode.removeChild(this); | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
 | ||||||
|  | 		if( $.ui.ddmanager ) { | ||||||
|  | 			$.ui.ddmanager.dragStop(this, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return $.ui.mouse.prototype._mouseUp.call(this, event); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	cancel: function() { | ||||||
|  | 
 | ||||||
|  | 		if(this.helper.is(".ui-draggable-dragging")) { | ||||||
|  | 			this._mouseUp({}); | ||||||
|  | 		} else { | ||||||
|  | 			this._clear(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return this; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_getHandle: function(event) { | ||||||
|  | 		return this.options.handle ? | ||||||
|  | 			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length : | ||||||
|  | 			true; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_createHelper: function(event) { | ||||||
|  | 
 | ||||||
|  | 		var o = this.options, | ||||||
|  | 			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element); | ||||||
|  | 
 | ||||||
|  | 		if(!helper.parents("body").length) { | ||||||
|  | 			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo)); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) { | ||||||
|  | 			helper.css("position", "absolute"); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return helper; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_adjustOffsetFromHelper: function(obj) { | ||||||
|  | 		if (typeof obj === "string") { | ||||||
|  | 			obj = obj.split(" "); | ||||||
|  | 		} | ||||||
|  | 		if ($.isArray(obj)) { | ||||||
|  | 			obj = {left: +obj[0], top: +obj[1] || 0}; | ||||||
|  | 		} | ||||||
|  | 		if ("left" in obj) { | ||||||
|  | 			this.offset.click.left = obj.left + this.margins.left; | ||||||
|  | 		} | ||||||
|  | 		if ("right" in obj) { | ||||||
|  | 			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; | ||||||
|  | 		} | ||||||
|  | 		if ("top" in obj) { | ||||||
|  | 			this.offset.click.top = obj.top + this.margins.top; | ||||||
|  | 		} | ||||||
|  | 		if ("bottom" in obj) { | ||||||
|  | 			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_getParentOffset: function() { | ||||||
|  | 
 | ||||||
|  | 		//Get the offsetParent and cache its position
 | ||||||
|  | 		var po = this.offsetParent.offset(); | ||||||
|  | 
 | ||||||
|  | 		// This is a special case where we need to modify a offset calculated on start, since the following happened:
 | ||||||
|  | 		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
 | ||||||
|  | 		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
 | ||||||
|  | 		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
 | ||||||
|  | 		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { | ||||||
|  | 			po.left += this.scrollParent.scrollLeft(); | ||||||
|  | 			po.top += this.scrollParent.scrollTop(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//This needs to be actually done for all browsers, since pageX/pageY includes this information
 | ||||||
|  | 		//Ugly IE fix
 | ||||||
|  | 		if((this.offsetParent[0] === document.body) || | ||||||
|  | 			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { | ||||||
|  | 			po = { top: 0, left: 0 }; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return { | ||||||
|  | 			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), | ||||||
|  | 			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_getRelativeOffset: function() { | ||||||
|  | 
 | ||||||
|  | 		if(this.cssPosition === "relative") { | ||||||
|  | 			var p = this.element.position(); | ||||||
|  | 			return { | ||||||
|  | 				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), | ||||||
|  | 				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() | ||||||
|  | 			}; | ||||||
|  | 		} else { | ||||||
|  | 			return { top: 0, left: 0 }; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_cacheMargins: function() { | ||||||
|  | 		this.margins = { | ||||||
|  | 			left: (parseInt(this.element.css("marginLeft"),10) || 0), | ||||||
|  | 			top: (parseInt(this.element.css("marginTop"),10) || 0), | ||||||
|  | 			right: (parseInt(this.element.css("marginRight"),10) || 0), | ||||||
|  | 			bottom: (parseInt(this.element.css("marginBottom"),10) || 0) | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_cacheHelperProportions: function() { | ||||||
|  | 		this.helperProportions = { | ||||||
|  | 			width: this.helper.outerWidth(), | ||||||
|  | 			height: this.helper.outerHeight() | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setContainment: function() { | ||||||
|  | 
 | ||||||
|  | 		var over, c, ce, | ||||||
|  | 			o = this.options; | ||||||
|  | 
 | ||||||
|  | 		if ( !o.containment ) { | ||||||
|  | 			this.containment = null; | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( o.containment === "window" ) { | ||||||
|  | 			this.containment = [ | ||||||
|  | 				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left, | ||||||
|  | 				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top, | ||||||
|  | 				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left, | ||||||
|  | 				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top | ||||||
|  | 			]; | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( o.containment === "document") { | ||||||
|  | 			this.containment = [ | ||||||
|  | 				0, | ||||||
|  | 				0, | ||||||
|  | 				$( document ).width() - this.helperProportions.width - this.margins.left, | ||||||
|  | 				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top | ||||||
|  | 			]; | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( o.containment.constructor === Array ) { | ||||||
|  | 			this.containment = o.containment; | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( o.containment === "parent" ) { | ||||||
|  | 			o.containment = this.helper[ 0 ].parentNode; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		c = $( o.containment ); | ||||||
|  | 		ce = c[ 0 ]; | ||||||
|  | 
 | ||||||
|  | 		if( !ce ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		over = c.css( "overflow" ) !== "hidden"; | ||||||
|  | 
 | ||||||
|  | 		this.containment = [ | ||||||
|  | 			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ), | ||||||
|  | 			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) , | ||||||
|  | 			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right, | ||||||
|  | 			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom | ||||||
|  | 		]; | ||||||
|  | 		this.relative_container = c; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_convertPositionTo: function(d, pos) { | ||||||
|  | 
 | ||||||
|  | 		if(!pos) { | ||||||
|  | 			pos = this.position; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		var mod = d === "absolute" ? 1 : -1, | ||||||
|  | 			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent; | ||||||
|  | 
 | ||||||
|  | 		//Cache the scroll
 | ||||||
|  | 		if (!this.offset.scroll) { | ||||||
|  | 			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()}; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return { | ||||||
|  | 			top: ( | ||||||
|  | 				pos.top	+																// The absolute mouse position
 | ||||||
|  | 				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
 | ||||||
|  | 				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
 | ||||||
|  | 				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod ) | ||||||
|  | 			), | ||||||
|  | 			left: ( | ||||||
|  | 				pos.left +																// The absolute mouse position
 | ||||||
|  | 				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
 | ||||||
|  | 				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
 | ||||||
|  | 				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod ) | ||||||
|  | 			) | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_generatePosition: function(event) { | ||||||
|  | 
 | ||||||
|  | 		var containment, co, top, left, | ||||||
|  | 			o = this.options, | ||||||
|  | 			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent, | ||||||
|  | 			pageX = event.pageX, | ||||||
|  | 			pageY = event.pageY; | ||||||
|  | 
 | ||||||
|  | 		//Cache the scroll
 | ||||||
|  | 		if (!this.offset.scroll) { | ||||||
|  | 			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()}; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		/* | ||||||
|  | 		 * - Position constraining - | ||||||
|  | 		 * Constrain the position to a mix of grid, containment. | ||||||
|  | 		 */ | ||||||
|  | 
 | ||||||
|  | 		// If we are not dragging yet, we won't check for options
 | ||||||
|  | 		if ( this.originalPosition ) { | ||||||
|  | 			if ( this.containment ) { | ||||||
|  | 				if ( this.relative_container ){ | ||||||
|  | 					co = this.relative_container.offset(); | ||||||
|  | 					containment = [ | ||||||
|  | 						this.containment[ 0 ] + co.left, | ||||||
|  | 						this.containment[ 1 ] + co.top, | ||||||
|  | 						this.containment[ 2 ] + co.left, | ||||||
|  | 						this.containment[ 3 ] + co.top | ||||||
|  | 					]; | ||||||
|  | 				} | ||||||
|  | 				else { | ||||||
|  | 					containment = this.containment; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				if(event.pageX - this.offset.click.left < containment[0]) { | ||||||
|  | 					pageX = containment[0] + this.offset.click.left; | ||||||
|  | 				} | ||||||
|  | 				if(event.pageY - this.offset.click.top < containment[1]) { | ||||||
|  | 					pageY = containment[1] + this.offset.click.top; | ||||||
|  | 				} | ||||||
|  | 				if(event.pageX - this.offset.click.left > containment[2]) { | ||||||
|  | 					pageX = containment[2] + this.offset.click.left; | ||||||
|  | 				} | ||||||
|  | 				if(event.pageY - this.offset.click.top > containment[3]) { | ||||||
|  | 					pageY = containment[3] + this.offset.click.top; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if(o.grid) { | ||||||
|  | 				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
 | ||||||
|  | 				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; | ||||||
|  | 				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; | ||||||
|  | 
 | ||||||
|  | 				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; | ||||||
|  | 				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return { | ||||||
|  | 			top: ( | ||||||
|  | 				pageY -																	// The absolute mouse position
 | ||||||
|  | 				this.offset.click.top	-												// Click offset (relative to the element)
 | ||||||
|  | 				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
 | ||||||
|  | 				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
 | ||||||
|  | 				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) | ||||||
|  | 			), | ||||||
|  | 			left: ( | ||||||
|  | 				pageX -																	// The absolute mouse position
 | ||||||
|  | 				this.offset.click.left -												// Click offset (relative to the element)
 | ||||||
|  | 				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
 | ||||||
|  | 				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
 | ||||||
|  | 				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) | ||||||
|  | 			) | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_clear: function() { | ||||||
|  | 		this.helper.removeClass("ui-draggable-dragging"); | ||||||
|  | 		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) { | ||||||
|  | 			this.helper.remove(); | ||||||
|  | 		} | ||||||
|  | 		this.helper = null; | ||||||
|  | 		this.cancelHelperRemoval = false; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	// From now on bulk stuff - mainly helpers
 | ||||||
|  | 
 | ||||||
|  | 	_trigger: function(type, event, ui) { | ||||||
|  | 		ui = ui || this._uiHash(); | ||||||
|  | 		$.ui.plugin.call(this, type, [event, ui]); | ||||||
|  | 		//The absolute position has to be recalculated after plugins
 | ||||||
|  | 		if(type === "drag") { | ||||||
|  | 			this.positionAbs = this._convertPositionTo("absolute"); | ||||||
|  | 		} | ||||||
|  | 		return $.Widget.prototype._trigger.call(this, type, event, ui); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	plugins: {}, | ||||||
|  | 
 | ||||||
|  | 	_uiHash: function() { | ||||||
|  | 		return { | ||||||
|  | 			helper: this.helper, | ||||||
|  | 			position: this.position, | ||||||
|  | 			originalPosition: this.originalPosition, | ||||||
|  | 			offset: this.positionAbs | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("draggable", "connectToSortable", { | ||||||
|  | 	start: function(event, ui) { | ||||||
|  | 
 | ||||||
|  | 		var inst = $(this).data("ui-draggable"), o = inst.options, | ||||||
|  | 			uiSortable = $.extend({}, ui, { item: inst.element }); | ||||||
|  | 		inst.sortables = []; | ||||||
|  | 		$(o.connectToSortable).each(function() { | ||||||
|  | 			var sortable = $.data(this, "ui-sortable"); | ||||||
|  | 			if (sortable && !sortable.options.disabled) { | ||||||
|  | 				inst.sortables.push({ | ||||||
|  | 					instance: sortable, | ||||||
|  | 					shouldRevert: sortable.options.revert | ||||||
|  | 				}); | ||||||
|  | 				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
 | ||||||
|  | 				sortable._trigger("activate", event, uiSortable); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 	stop: function(event, ui) { | ||||||
|  | 
 | ||||||
|  | 		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
 | ||||||
|  | 		var inst = $(this).data("ui-draggable"), | ||||||
|  | 			uiSortable = $.extend({}, ui, { item: inst.element }); | ||||||
|  | 
 | ||||||
|  | 		$.each(inst.sortables, function() { | ||||||
|  | 			if(this.instance.isOver) { | ||||||
|  | 
 | ||||||
|  | 				this.instance.isOver = 0; | ||||||
|  | 
 | ||||||
|  | 				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
 | ||||||
|  | 				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
 | ||||||
|  | 
 | ||||||
|  | 				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
 | ||||||
|  | 				if(this.shouldRevert) { | ||||||
|  | 					this.instance.options.revert = this.shouldRevert; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				//Trigger the stop of the sortable
 | ||||||
|  | 				this.instance._mouseStop(event); | ||||||
|  | 
 | ||||||
|  | 				this.instance.options.helper = this.instance.options._helper; | ||||||
|  | 
 | ||||||
|  | 				//If the helper has been the original item, restore properties in the sortable
 | ||||||
|  | 				if(inst.options.helper === "original") { | ||||||
|  | 					this.instance.currentItem.css({ top: "auto", left: "auto" }); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 			} else { | ||||||
|  | 				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
 | ||||||
|  | 				this.instance._trigger("deactivate", event, uiSortable); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 	drag: function(event, ui) { | ||||||
|  | 
 | ||||||
|  | 		var inst = $(this).data("ui-draggable"), that = this; | ||||||
|  | 
 | ||||||
|  | 		$.each(inst.sortables, function() { | ||||||
|  | 
 | ||||||
|  | 			var innermostIntersecting = false, | ||||||
|  | 				thisSortable = this; | ||||||
|  | 
 | ||||||
|  | 			//Copy over some variables to allow calling the sortable's native _intersectsWith
 | ||||||
|  | 			this.instance.positionAbs = inst.positionAbs; | ||||||
|  | 			this.instance.helperProportions = inst.helperProportions; | ||||||
|  | 			this.instance.offset.click = inst.offset.click; | ||||||
|  | 
 | ||||||
|  | 			if(this.instance._intersectsWith(this.instance.containerCache)) { | ||||||
|  | 				innermostIntersecting = true; | ||||||
|  | 				$.each(inst.sortables, function () { | ||||||
|  | 					this.instance.positionAbs = inst.positionAbs; | ||||||
|  | 					this.instance.helperProportions = inst.helperProportions; | ||||||
|  | 					this.instance.offset.click = inst.offset.click; | ||||||
|  | 					if (this !== thisSortable && | ||||||
|  | 						this.instance._intersectsWith(this.instance.containerCache) && | ||||||
|  | 						$.contains(thisSortable.instance.element[0], this.instance.element[0]) | ||||||
|  | 					) { | ||||||
|  | 						innermostIntersecting = false; | ||||||
|  | 					} | ||||||
|  | 					return innermostIntersecting; | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 			if(innermostIntersecting) { | ||||||
|  | 				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
 | ||||||
|  | 				if(!this.instance.isOver) { | ||||||
|  | 
 | ||||||
|  | 					this.instance.isOver = 1; | ||||||
|  | 					//Now we fake the start of dragging for the sortable instance,
 | ||||||
|  | 					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
 | ||||||
|  | 					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
 | ||||||
|  | 					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true); | ||||||
|  | 					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
 | ||||||
|  | 					this.instance.options.helper = function() { return ui.helper[0]; }; | ||||||
|  | 
 | ||||||
|  | 					event.target = this.instance.currentItem[0]; | ||||||
|  | 					this.instance._mouseCapture(event, true); | ||||||
|  | 					this.instance._mouseStart(event, true, true); | ||||||
|  | 
 | ||||||
|  | 					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
 | ||||||
|  | 					this.instance.offset.click.top = inst.offset.click.top; | ||||||
|  | 					this.instance.offset.click.left = inst.offset.click.left; | ||||||
|  | 					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; | ||||||
|  | 					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; | ||||||
|  | 
 | ||||||
|  | 					inst._trigger("toSortable", event); | ||||||
|  | 					inst.dropped = this.instance.element; //draggable revert needs that
 | ||||||
|  | 					//hack so receive/update callbacks work (mostly)
 | ||||||
|  | 					inst.currentItem = inst.element; | ||||||
|  | 					this.instance.fromOutside = inst; | ||||||
|  | 
 | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
 | ||||||
|  | 				if(this.instance.currentItem) { | ||||||
|  | 					this.instance._mouseDrag(event); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 			} else { | ||||||
|  | 
 | ||||||
|  | 				//If it doesn't intersect with the sortable, and it intersected before,
 | ||||||
|  | 				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
 | ||||||
|  | 				if(this.instance.isOver) { | ||||||
|  | 
 | ||||||
|  | 					this.instance.isOver = 0; | ||||||
|  | 					this.instance.cancelHelperRemoval = true; | ||||||
|  | 
 | ||||||
|  | 					//Prevent reverting on this forced stop
 | ||||||
|  | 					this.instance.options.revert = false; | ||||||
|  | 
 | ||||||
|  | 					// The out event needs to be triggered independently
 | ||||||
|  | 					this.instance._trigger("out", event, this.instance._uiHash(this.instance)); | ||||||
|  | 
 | ||||||
|  | 					this.instance._mouseStop(event, true); | ||||||
|  | 					this.instance.options.helper = this.instance.options._helper; | ||||||
|  | 
 | ||||||
|  | 					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
 | ||||||
|  | 					this.instance.currentItem.remove(); | ||||||
|  | 					if(this.instance.placeholder) { | ||||||
|  | 						this.instance.placeholder.remove(); | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					inst._trigger("fromSortable", event); | ||||||
|  | 					inst.dropped = false; //draggable revert needs that
 | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("draggable", "cursor", { | ||||||
|  | 	start: function() { | ||||||
|  | 		var t = $("body"), o = $(this).data("ui-draggable").options; | ||||||
|  | 		if (t.css("cursor")) { | ||||||
|  | 			o._cursor = t.css("cursor"); | ||||||
|  | 		} | ||||||
|  | 		t.css("cursor", o.cursor); | ||||||
|  | 	}, | ||||||
|  | 	stop: function() { | ||||||
|  | 		var o = $(this).data("ui-draggable").options; | ||||||
|  | 		if (o._cursor) { | ||||||
|  | 			$("body").css("cursor", o._cursor); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("draggable", "opacity", { | ||||||
|  | 	start: function(event, ui) { | ||||||
|  | 		var t = $(ui.helper), o = $(this).data("ui-draggable").options; | ||||||
|  | 		if(t.css("opacity")) { | ||||||
|  | 			o._opacity = t.css("opacity"); | ||||||
|  | 		} | ||||||
|  | 		t.css("opacity", o.opacity); | ||||||
|  | 	}, | ||||||
|  | 	stop: function(event, ui) { | ||||||
|  | 		var o = $(this).data("ui-draggable").options; | ||||||
|  | 		if(o._opacity) { | ||||||
|  | 			$(ui.helper).css("opacity", o._opacity); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("draggable", "scroll", { | ||||||
|  | 	start: function() { | ||||||
|  | 		var i = $(this).data("ui-draggable"); | ||||||
|  | 		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { | ||||||
|  | 			i.overflowOffset = i.scrollParent.offset(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	drag: function( event ) { | ||||||
|  | 
 | ||||||
|  | 		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false; | ||||||
|  | 
 | ||||||
|  | 		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { | ||||||
|  | 
 | ||||||
|  | 			if(!o.axis || o.axis !== "x") { | ||||||
|  | 				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { | ||||||
|  | 					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; | ||||||
|  | 				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) { | ||||||
|  | 					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if(!o.axis || o.axis !== "y") { | ||||||
|  | 				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { | ||||||
|  | 					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; | ||||||
|  | 				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) { | ||||||
|  | 					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		} else { | ||||||
|  | 
 | ||||||
|  | 			if(!o.axis || o.axis !== "x") { | ||||||
|  | 				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { | ||||||
|  | 					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); | ||||||
|  | 				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { | ||||||
|  | 					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if(!o.axis || o.axis !== "y") { | ||||||
|  | 				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { | ||||||
|  | 					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); | ||||||
|  | 				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { | ||||||
|  | 					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { | ||||||
|  | 			$.ui.ddmanager.prepareOffsets(i, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("draggable", "snap", { | ||||||
|  | 	start: function() { | ||||||
|  | 
 | ||||||
|  | 		var i = $(this).data("ui-draggable"), | ||||||
|  | 			o = i.options; | ||||||
|  | 
 | ||||||
|  | 		i.snapElements = []; | ||||||
|  | 
 | ||||||
|  | 		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() { | ||||||
|  | 			var $t = $(this), | ||||||
|  | 				$o = $t.offset(); | ||||||
|  | 			if(this !== i.element[0]) { | ||||||
|  | 				i.snapElements.push({ | ||||||
|  | 					item: this, | ||||||
|  | 					width: $t.outerWidth(), height: $t.outerHeight(), | ||||||
|  | 					top: $o.top, left: $o.left | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 	drag: function(event, ui) { | ||||||
|  | 
 | ||||||
|  | 		var ts, bs, ls, rs, l, r, t, b, i, first, | ||||||
|  | 			inst = $(this).data("ui-draggable"), | ||||||
|  | 			o = inst.options, | ||||||
|  | 			d = o.snapTolerance, | ||||||
|  | 			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, | ||||||
|  | 			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; | ||||||
|  | 
 | ||||||
|  | 		for (i = inst.snapElements.length - 1; i >= 0; i--){ | ||||||
|  | 
 | ||||||
|  | 			l = inst.snapElements[i].left; | ||||||
|  | 			r = l + inst.snapElements[i].width; | ||||||
|  | 			t = inst.snapElements[i].top; | ||||||
|  | 			b = t + inst.snapElements[i].height; | ||||||
|  | 
 | ||||||
|  | 			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) { | ||||||
|  | 				if(inst.snapElements[i].snapping) { | ||||||
|  | 					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); | ||||||
|  | 				} | ||||||
|  | 				inst.snapElements[i].snapping = false; | ||||||
|  | 				continue; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if(o.snapMode !== "inner") { | ||||||
|  | 				ts = Math.abs(t - y2) <= d; | ||||||
|  | 				bs = Math.abs(b - y1) <= d; | ||||||
|  | 				ls = Math.abs(l - x2) <= d; | ||||||
|  | 				rs = Math.abs(r - x1) <= d; | ||||||
|  | 				if(ts) { | ||||||
|  | 					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; | ||||||
|  | 				} | ||||||
|  | 				if(bs) { | ||||||
|  | 					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; | ||||||
|  | 				} | ||||||
|  | 				if(ls) { | ||||||
|  | 					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; | ||||||
|  | 				} | ||||||
|  | 				if(rs) { | ||||||
|  | 					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			first = (ts || bs || ls || rs); | ||||||
|  | 
 | ||||||
|  | 			if(o.snapMode !== "outer") { | ||||||
|  | 				ts = Math.abs(t - y1) <= d; | ||||||
|  | 				bs = Math.abs(b - y2) <= d; | ||||||
|  | 				ls = Math.abs(l - x1) <= d; | ||||||
|  | 				rs = Math.abs(r - x2) <= d; | ||||||
|  | 				if(ts) { | ||||||
|  | 					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; | ||||||
|  | 				} | ||||||
|  | 				if(bs) { | ||||||
|  | 					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; | ||||||
|  | 				} | ||||||
|  | 				if(ls) { | ||||||
|  | 					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; | ||||||
|  | 				} | ||||||
|  | 				if(rs) { | ||||||
|  | 					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) { | ||||||
|  | 				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); | ||||||
|  | 			} | ||||||
|  | 			inst.snapElements[i].snapping = (ts || bs || ls || rs || first); | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("draggable", "stack", { | ||||||
|  | 	start: function() { | ||||||
|  | 		var min, | ||||||
|  | 			o = this.data("ui-draggable").options, | ||||||
|  | 			group = $.makeArray($(o.stack)).sort(function(a,b) { | ||||||
|  | 				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		if (!group.length) { return; } | ||||||
|  | 
 | ||||||
|  | 		min = parseInt($(group[0]).css("zIndex"), 10) || 0; | ||||||
|  | 		$(group).each(function(i) { | ||||||
|  | 			$(this).css("zIndex", min + i); | ||||||
|  | 		}); | ||||||
|  | 		this.css("zIndex", (min + group.length)); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("draggable", "zIndex", { | ||||||
|  | 	start: function(event, ui) { | ||||||
|  | 		var t = $(ui.helper), o = $(this).data("ui-draggable").options; | ||||||
|  | 		if(t.css("zIndex")) { | ||||||
|  | 			o._zIndex = t.css("zIndex"); | ||||||
|  | 		} | ||||||
|  | 		t.css("zIndex", o.zIndex); | ||||||
|  | 	}, | ||||||
|  | 	stop: function(event, ui) { | ||||||
|  | 		var o = $(this).data("ui-draggable").options; | ||||||
|  | 		if(o._zIndex) { | ||||||
|  | 			$(ui.helper).css("zIndex", o._zIndex); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,372 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Droppable 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/droppable/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  *	jquery.ui.mouse.js | ||||||
|  |  *	jquery.ui.draggable.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | function isOverAxis( x, reference, size ) { | ||||||
|  | 	return ( x > reference ) && ( x < ( reference + size ) ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | $.widget("ui.droppable", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	widgetEventPrefix: "drop", | ||||||
|  | 	options: { | ||||||
|  | 		accept: "*", | ||||||
|  | 		activeClass: false, | ||||||
|  | 		addClasses: true, | ||||||
|  | 		greedy: false, | ||||||
|  | 		hoverClass: false, | ||||||
|  | 		scope: "default", | ||||||
|  | 		tolerance: "intersect", | ||||||
|  | 
 | ||||||
|  | 		// callbacks
 | ||||||
|  | 		activate: null, | ||||||
|  | 		deactivate: null, | ||||||
|  | 		drop: null, | ||||||
|  | 		out: null, | ||||||
|  | 		over: null | ||||||
|  | 	}, | ||||||
|  | 	_create: function() { | ||||||
|  | 
 | ||||||
|  | 		var o = this.options, | ||||||
|  | 			accept = o.accept; | ||||||
|  | 
 | ||||||
|  | 		this.isover = false; | ||||||
|  | 		this.isout = true; | ||||||
|  | 
 | ||||||
|  | 		this.accept = $.isFunction(accept) ? accept : function(d) { | ||||||
|  | 			return d.is(accept); | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		//Store the droppable's proportions
 | ||||||
|  | 		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; | ||||||
|  | 
 | ||||||
|  | 		// Add the reference and positions to the manager
 | ||||||
|  | 		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; | ||||||
|  | 		$.ui.ddmanager.droppables[o.scope].push(this); | ||||||
|  | 
 | ||||||
|  | 		(o.addClasses && this.element.addClass("ui-droppable")); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		var i = 0, | ||||||
|  | 			drop = $.ui.ddmanager.droppables[this.options.scope]; | ||||||
|  | 
 | ||||||
|  | 		for ( ; i < drop.length; i++ ) { | ||||||
|  | 			if ( drop[i] === this ) { | ||||||
|  | 				drop.splice(i, 1); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.element.removeClass("ui-droppable ui-droppable-disabled"); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function(key, value) { | ||||||
|  | 
 | ||||||
|  | 		if(key === "accept") { | ||||||
|  | 			this.accept = $.isFunction(value) ? value : function(d) { | ||||||
|  | 				return d.is(value); | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		$.Widget.prototype._setOption.apply(this, arguments); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_activate: function(event) { | ||||||
|  | 		var draggable = $.ui.ddmanager.current; | ||||||
|  | 		if(this.options.activeClass) { | ||||||
|  | 			this.element.addClass(this.options.activeClass); | ||||||
|  | 		} | ||||||
|  | 		if(draggable){ | ||||||
|  | 			this._trigger("activate", event, this.ui(draggable)); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_deactivate: function(event) { | ||||||
|  | 		var draggable = $.ui.ddmanager.current; | ||||||
|  | 		if(this.options.activeClass) { | ||||||
|  | 			this.element.removeClass(this.options.activeClass); | ||||||
|  | 		} | ||||||
|  | 		if(draggable){ | ||||||
|  | 			this._trigger("deactivate", event, this.ui(draggable)); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_over: function(event) { | ||||||
|  | 
 | ||||||
|  | 		var draggable = $.ui.ddmanager.current; | ||||||
|  | 
 | ||||||
|  | 		// Bail if draggable and droppable are same element
 | ||||||
|  | 		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { | ||||||
|  | 			if(this.options.hoverClass) { | ||||||
|  | 				this.element.addClass(this.options.hoverClass); | ||||||
|  | 			} | ||||||
|  | 			this._trigger("over", event, this.ui(draggable)); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_out: function(event) { | ||||||
|  | 
 | ||||||
|  | 		var draggable = $.ui.ddmanager.current; | ||||||
|  | 
 | ||||||
|  | 		// Bail if draggable and droppable are same element
 | ||||||
|  | 		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { | ||||||
|  | 			if(this.options.hoverClass) { | ||||||
|  | 				this.element.removeClass(this.options.hoverClass); | ||||||
|  | 			} | ||||||
|  | 			this._trigger("out", event, this.ui(draggable)); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_drop: function(event,custom) { | ||||||
|  | 
 | ||||||
|  | 		var draggable = custom || $.ui.ddmanager.current, | ||||||
|  | 			childrenIntersection = false; | ||||||
|  | 
 | ||||||
|  | 		// Bail if draggable and droppable are same element
 | ||||||
|  | 		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() { | ||||||
|  | 			var inst = $.data(this, "ui-droppable"); | ||||||
|  | 			if( | ||||||
|  | 				inst.options.greedy && | ||||||
|  | 				!inst.options.disabled && | ||||||
|  | 				inst.options.scope === draggable.options.scope && | ||||||
|  | 				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) && | ||||||
|  | 				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) | ||||||
|  | 			) { childrenIntersection = true; return false; } | ||||||
|  | 		}); | ||||||
|  | 		if(childrenIntersection) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { | ||||||
|  | 			if(this.options.activeClass) { | ||||||
|  | 				this.element.removeClass(this.options.activeClass); | ||||||
|  | 			} | ||||||
|  | 			if(this.options.hoverClass) { | ||||||
|  | 				this.element.removeClass(this.options.hoverClass); | ||||||
|  | 			} | ||||||
|  | 			this._trigger("drop", event, this.ui(draggable)); | ||||||
|  | 			return this.element; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return false; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	ui: function(c) { | ||||||
|  | 		return { | ||||||
|  | 			draggable: (c.currentItem || c.element), | ||||||
|  | 			helper: c.helper, | ||||||
|  | 			position: c.position, | ||||||
|  | 			offset: c.positionAbs | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.intersect = function(draggable, droppable, toleranceMode) { | ||||||
|  | 
 | ||||||
|  | 	if (!droppable.offset) { | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var draggableLeft, draggableTop, | ||||||
|  | 		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, | ||||||
|  | 		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height, | ||||||
|  | 		l = droppable.offset.left, r = l + droppable.proportions.width, | ||||||
|  | 		t = droppable.offset.top, b = t + droppable.proportions.height; | ||||||
|  | 
 | ||||||
|  | 	switch (toleranceMode) { | ||||||
|  | 		case "fit": | ||||||
|  | 			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b); | ||||||
|  | 		case "intersect": | ||||||
|  | 			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
 | ||||||
|  | 				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
 | ||||||
|  | 				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
 | ||||||
|  | 				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
 | ||||||
|  | 		case "pointer": | ||||||
|  | 			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left); | ||||||
|  | 			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top); | ||||||
|  | 			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width ); | ||||||
|  | 		case "touch": | ||||||
|  | 			return ( | ||||||
|  | 				(y1 >= t && y1 <= b) ||	// Top edge touching
 | ||||||
|  | 				(y2 >= t && y2 <= b) ||	// Bottom edge touching
 | ||||||
|  | 				(y1 < t && y2 > b)		// Surrounded vertically
 | ||||||
|  | 			) && ( | ||||||
|  | 				(x1 >= l && x1 <= r) ||	// Left edge touching
 | ||||||
|  | 				(x2 >= l && x2 <= r) ||	// Right edge touching
 | ||||||
|  | 				(x1 < l && x2 > r)		// Surrounded horizontally
 | ||||||
|  | 			); | ||||||
|  | 		default: | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  | 	This manager tracks offsets of draggables and droppables | ||||||
|  | */ | ||||||
|  | $.ui.ddmanager = { | ||||||
|  | 	current: null, | ||||||
|  | 	droppables: { "default": [] }, | ||||||
|  | 	prepareOffsets: function(t, event) { | ||||||
|  | 
 | ||||||
|  | 		var i, j, | ||||||
|  | 			m = $.ui.ddmanager.droppables[t.options.scope] || [], | ||||||
|  | 			type = event ? event.type : null, // workaround for #2317
 | ||||||
|  | 			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack(); | ||||||
|  | 
 | ||||||
|  | 		droppablesLoop: for (i = 0; i < m.length; i++) { | ||||||
|  | 
 | ||||||
|  | 			//No disabled and non-accepted
 | ||||||
|  | 			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) { | ||||||
|  | 				continue; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// Filter out elements in the current dragged item
 | ||||||
|  | 			for (j=0; j < list.length; j++) { | ||||||
|  | 				if(list[j] === m[i].element[0]) { | ||||||
|  | 					m[i].proportions.height = 0; | ||||||
|  | 					continue droppablesLoop; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			m[i].visible = m[i].element.css("display") !== "none"; | ||||||
|  | 			if(!m[i].visible) { | ||||||
|  | 				continue; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			//Activate the droppable if used directly from draggables
 | ||||||
|  | 			if(type === "mousedown") { | ||||||
|  | 				m[i]._activate.call(m[i], event); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			m[i].offset = m[i].element.offset(); | ||||||
|  | 			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 	drop: function(draggable, event) { | ||||||
|  | 
 | ||||||
|  | 		var dropped = false; | ||||||
|  | 		// Create a copy of the droppables in case the list changes during the drop (#9116)
 | ||||||
|  | 		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() { | ||||||
|  | 
 | ||||||
|  | 			if(!this.options) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) { | ||||||
|  | 				dropped = this._drop.call(this, event) || dropped; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { | ||||||
|  | 				this.isout = true; | ||||||
|  | 				this.isover = false; | ||||||
|  | 				this._deactivate.call(this, event); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		}); | ||||||
|  | 		return dropped; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 	dragStart: function( draggable, event ) { | ||||||
|  | 		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
 | ||||||
|  | 		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() { | ||||||
|  | 			if( !draggable.options.refreshPositions ) { | ||||||
|  | 				$.ui.ddmanager.prepareOffsets( draggable, event ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 	drag: function(draggable, event) { | ||||||
|  | 
 | ||||||
|  | 		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
 | ||||||
|  | 		if(draggable.options.refreshPositions) { | ||||||
|  | 			$.ui.ddmanager.prepareOffsets(draggable, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//Run through all droppables and check their positions based on specific tolerance options
 | ||||||
|  | 		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { | ||||||
|  | 
 | ||||||
|  | 			if(this.options.disabled || this.greedyChild || !this.visible) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			var parentInstance, scope, parent, | ||||||
|  | 				intersects = $.ui.intersect(draggable, this, this.options.tolerance), | ||||||
|  | 				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null); | ||||||
|  | 			if(!c) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if (this.options.greedy) { | ||||||
|  | 				// find droppable parents with same scope
 | ||||||
|  | 				scope = this.options.scope; | ||||||
|  | 				parent = this.element.parents(":data(ui-droppable)").filter(function () { | ||||||
|  | 					return $.data(this, "ui-droppable").options.scope === scope; | ||||||
|  | 				}); | ||||||
|  | 
 | ||||||
|  | 				if (parent.length) { | ||||||
|  | 					parentInstance = $.data(parent[0], "ui-droppable"); | ||||||
|  | 					parentInstance.greedyChild = (c === "isover"); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// we just moved into a greedy child
 | ||||||
|  | 			if (parentInstance && c === "isover") { | ||||||
|  | 				parentInstance.isover = false; | ||||||
|  | 				parentInstance.isout = true; | ||||||
|  | 				parentInstance._out.call(parentInstance, event); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			this[c] = true; | ||||||
|  | 			this[c === "isout" ? "isover" : "isout"] = false; | ||||||
|  | 			this[c === "isover" ? "_over" : "_out"].call(this, event); | ||||||
|  | 
 | ||||||
|  | 			// we just moved out of a greedy child
 | ||||||
|  | 			if (parentInstance && c === "isout") { | ||||||
|  | 				parentInstance.isout = false; | ||||||
|  | 				parentInstance.isover = true; | ||||||
|  | 				parentInstance._over.call(parentInstance, event); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 	dragStop: function( draggable, event ) { | ||||||
|  | 		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" ); | ||||||
|  | 		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
 | ||||||
|  | 		if( !draggable.options.refreshPositions ) { | ||||||
|  | 			$.ui.ddmanager.prepareOffsets( draggable, event ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,82 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Blind 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/blind-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | var rvertical = /up|down|vertical/, | ||||||
|  | 	rpositivemotion = /up|left|vertical|horizontal/; | ||||||
|  | 
 | ||||||
|  | $.effects.effect.blind = function( o, done ) { | ||||||
|  | 	// Create element
 | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ], | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ), | ||||||
|  | 		direction = o.direction || "up", | ||||||
|  | 		vertical = rvertical.test( direction ), | ||||||
|  | 		ref = vertical ? "height" : "width", | ||||||
|  | 		ref2 = vertical ? "top" : "left", | ||||||
|  | 		motion = rpositivemotion.test( direction ), | ||||||
|  | 		animation = {}, | ||||||
|  | 		show = mode === "show", | ||||||
|  | 		wrapper, distance, margin; | ||||||
|  | 
 | ||||||
|  | 	// if already wrapped, the wrapper's properties are my property. #6245
 | ||||||
|  | 	if ( el.parent().is( ".ui-effects-wrapper" ) ) { | ||||||
|  | 		$.effects.save( el.parent(), props ); | ||||||
|  | 	} else { | ||||||
|  | 		$.effects.save( el, props ); | ||||||
|  | 	} | ||||||
|  | 	el.show(); | ||||||
|  | 	wrapper = $.effects.createWrapper( el ).css({ | ||||||
|  | 		overflow: "hidden" | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	distance = wrapper[ ref ](); | ||||||
|  | 	margin = parseFloat( wrapper.css( ref2 ) ) || 0; | ||||||
|  | 
 | ||||||
|  | 	animation[ ref ] = show ? distance : 0; | ||||||
|  | 	if ( !motion ) { | ||||||
|  | 		el | ||||||
|  | 			.css( vertical ? "bottom" : "right", 0 ) | ||||||
|  | 			.css( vertical ? "top" : "left", "auto" ) | ||||||
|  | 			.css({ position: "absolute" }); | ||||||
|  | 
 | ||||||
|  | 		animation[ ref2 ] = show ? margin : distance + margin; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// start at 0 if we are showing
 | ||||||
|  | 	if ( show ) { | ||||||
|  | 		wrapper.css( ref, 0 ); | ||||||
|  | 		if ( ! motion ) { | ||||||
|  | 			wrapper.css( ref2, margin + distance ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	wrapper.animate( animation, { | ||||||
|  | 		duration: o.duration, | ||||||
|  | 		easing: o.easing, | ||||||
|  | 		queue: false, | ||||||
|  | 		complete: function() { | ||||||
|  | 			if ( mode === "hide" ) { | ||||||
|  | 				el.hide(); | ||||||
|  | 			} | ||||||
|  | 			$.effects.restore( el, props ); | ||||||
|  | 			$.effects.removeWrapper( el ); | ||||||
|  | 			done(); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,113 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Bounce 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/bounce-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.bounce = function( o, done ) { | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ], | ||||||
|  | 
 | ||||||
|  | 		// defaults:
 | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ), | ||||||
|  | 		hide = mode === "hide", | ||||||
|  | 		show = mode === "show", | ||||||
|  | 		direction = o.direction || "up", | ||||||
|  | 		distance = o.distance, | ||||||
|  | 		times = o.times || 5, | ||||||
|  | 
 | ||||||
|  | 		// number of internal animations
 | ||||||
|  | 		anims = times * 2 + ( show || hide ? 1 : 0 ), | ||||||
|  | 		speed = o.duration / anims, | ||||||
|  | 		easing = o.easing, | ||||||
|  | 
 | ||||||
|  | 		// utility:
 | ||||||
|  | 		ref = ( direction === "up" || direction === "down" ) ? "top" : "left", | ||||||
|  | 		motion = ( direction === "up" || direction === "left" ), | ||||||
|  | 		i, | ||||||
|  | 		upAnim, | ||||||
|  | 		downAnim, | ||||||
|  | 
 | ||||||
|  | 		// we will need to re-assemble the queue to stack our animations in place
 | ||||||
|  | 		queue = el.queue(), | ||||||
|  | 		queuelen = queue.length; | ||||||
|  | 
 | ||||||
|  | 	// Avoid touching opacity to prevent clearType and PNG issues in IE
 | ||||||
|  | 	if ( show || hide ) { | ||||||
|  | 		props.push( "opacity" ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	$.effects.save( el, props ); | ||||||
|  | 	el.show(); | ||||||
|  | 	$.effects.createWrapper( el ); // Create Wrapper
 | ||||||
|  | 
 | ||||||
|  | 	// default distance for the BIGGEST bounce is the outer Distance / 3
 | ||||||
|  | 	if ( !distance ) { | ||||||
|  | 		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if ( show ) { | ||||||
|  | 		downAnim = { opacity: 1 }; | ||||||
|  | 		downAnim[ ref ] = 0; | ||||||
|  | 
 | ||||||
|  | 		// if we are showing, force opacity 0 and set the initial position
 | ||||||
|  | 		// then do the "first" animation
 | ||||||
|  | 		el.css( "opacity", 0 ) | ||||||
|  | 			.css( ref, motion ? -distance * 2 : distance * 2 ) | ||||||
|  | 			.animate( downAnim, speed, easing ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// start at the smallest distance if we are hiding
 | ||||||
|  | 	if ( hide ) { | ||||||
|  | 		distance = distance / Math.pow( 2, times - 1 ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	downAnim = {}; | ||||||
|  | 	downAnim[ ref ] = 0; | ||||||
|  | 	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
 | ||||||
|  | 	for ( i = 0; i < times; i++ ) { | ||||||
|  | 		upAnim = {}; | ||||||
|  | 		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; | ||||||
|  | 
 | ||||||
|  | 		el.animate( upAnim, speed, easing ) | ||||||
|  | 			.animate( downAnim, speed, easing ); | ||||||
|  | 
 | ||||||
|  | 		distance = hide ? distance * 2 : distance / 2; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Last Bounce when Hiding
 | ||||||
|  | 	if ( hide ) { | ||||||
|  | 		upAnim = { opacity: 0 }; | ||||||
|  | 		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; | ||||||
|  | 
 | ||||||
|  | 		el.animate( upAnim, speed, easing ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	el.queue(function() { | ||||||
|  | 		if ( hide ) { | ||||||
|  | 			el.hide(); | ||||||
|  | 		} | ||||||
|  | 		$.effects.restore( el, props ); | ||||||
|  | 		$.effects.removeWrapper( el ); | ||||||
|  | 		done(); | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	// inject all the animations we just queued to be first in line (after "inprogress")
 | ||||||
|  | 	if ( queuelen > 1) { | ||||||
|  | 		queue.splice.apply( queue, | ||||||
|  | 			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); | ||||||
|  | 	} | ||||||
|  | 	el.dequeue(); | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,67 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Clip 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/clip-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.clip = function( o, done ) { | ||||||
|  | 	// Create element
 | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ], | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ), | ||||||
|  | 		show = mode === "show", | ||||||
|  | 		direction = o.direction || "vertical", | ||||||
|  | 		vert = direction === "vertical", | ||||||
|  | 		size = vert ? "height" : "width", | ||||||
|  | 		position = vert ? "top" : "left", | ||||||
|  | 		animation = {}, | ||||||
|  | 		wrapper, animate, distance; | ||||||
|  | 
 | ||||||
|  | 	// Save & Show
 | ||||||
|  | 	$.effects.save( el, props ); | ||||||
|  | 	el.show(); | ||||||
|  | 
 | ||||||
|  | 	// Create Wrapper
 | ||||||
|  | 	wrapper = $.effects.createWrapper( el ).css({ | ||||||
|  | 		overflow: "hidden" | ||||||
|  | 	}); | ||||||
|  | 	animate = ( el[0].tagName === "IMG" ) ? wrapper : el; | ||||||
|  | 	distance = animate[ size ](); | ||||||
|  | 
 | ||||||
|  | 	// Shift
 | ||||||
|  | 	if ( show ) { | ||||||
|  | 		animate.css( size, 0 ); | ||||||
|  | 		animate.css( position, distance / 2 ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Create Animation Object:
 | ||||||
|  | 	animation[ size ] = show ? distance : 0; | ||||||
|  | 	animation[ position ] = show ? 0 : distance / 2; | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	animate.animate( animation, { | ||||||
|  | 		queue: false, | ||||||
|  | 		duration: o.duration, | ||||||
|  | 		easing: o.easing, | ||||||
|  | 		complete: function() { | ||||||
|  | 			if ( !show ) { | ||||||
|  | 				el.hide(); | ||||||
|  | 			} | ||||||
|  | 			$.effects.restore( el, props ); | ||||||
|  | 			$.effects.removeWrapper( el ); | ||||||
|  | 			done(); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,65 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Drop 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/drop-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.drop = function( o, done ) { | ||||||
|  | 
 | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ], | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ), | ||||||
|  | 		show = mode === "show", | ||||||
|  | 		direction = o.direction || "left", | ||||||
|  | 		ref = ( direction === "up" || direction === "down" ) ? "top" : "left", | ||||||
|  | 		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg", | ||||||
|  | 		animation = { | ||||||
|  | 			opacity: show ? 1 : 0 | ||||||
|  | 		}, | ||||||
|  | 		distance; | ||||||
|  | 
 | ||||||
|  | 	// Adjust
 | ||||||
|  | 	$.effects.save( el, props ); | ||||||
|  | 	el.show(); | ||||||
|  | 	$.effects.createWrapper( el ); | ||||||
|  | 
 | ||||||
|  | 	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2; | ||||||
|  | 
 | ||||||
|  | 	if ( show ) { | ||||||
|  | 		el | ||||||
|  | 			.css( "opacity", 0 ) | ||||||
|  | 			.css( ref, motion === "pos" ? -distance : distance ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Animation
 | ||||||
|  | 	animation[ ref ] = ( show ? | ||||||
|  | 		( motion === "pos" ? "+=" : "-=" ) : | ||||||
|  | 		( motion === "pos" ? "-=" : "+=" ) ) + | ||||||
|  | 		distance; | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	el.animate( animation, { | ||||||
|  | 		queue: false, | ||||||
|  | 		duration: o.duration, | ||||||
|  | 		easing: o.easing, | ||||||
|  | 		complete: function() { | ||||||
|  | 			if ( mode === "hide" ) { | ||||||
|  | 				el.hide(); | ||||||
|  | 			} | ||||||
|  | 			$.effects.restore( el, props ); | ||||||
|  | 			$.effects.removeWrapper( el ); | ||||||
|  | 			done(); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,97 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Explode 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/explode-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.explode = function( o, done ) { | ||||||
|  | 
 | ||||||
|  | 	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3, | ||||||
|  | 		cells = rows, | ||||||
|  | 		el = $( this ), | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ), | ||||||
|  | 		show = mode === "show", | ||||||
|  | 
 | ||||||
|  | 		// show and then visibility:hidden the element before calculating offset
 | ||||||
|  | 		offset = el.show().css( "visibility", "hidden" ).offset(), | ||||||
|  | 
 | ||||||
|  | 		// width and height of a piece
 | ||||||
|  | 		width = Math.ceil( el.outerWidth() / cells ), | ||||||
|  | 		height = Math.ceil( el.outerHeight() / rows ), | ||||||
|  | 		pieces = [], | ||||||
|  | 
 | ||||||
|  | 		// loop
 | ||||||
|  | 		i, j, left, top, mx, my; | ||||||
|  | 
 | ||||||
|  | 	// children animate complete:
 | ||||||
|  | 	function childComplete() { | ||||||
|  | 		pieces.push( this ); | ||||||
|  | 		if ( pieces.length === rows * cells ) { | ||||||
|  | 			animComplete(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// clone the element for each row and cell.
 | ||||||
|  | 	for( i = 0; i < rows ; i++ ) { // ===>
 | ||||||
|  | 		top = offset.top + i * height; | ||||||
|  | 		my = i - ( rows - 1 ) / 2 ; | ||||||
|  | 
 | ||||||
|  | 		for( j = 0; j < cells ; j++ ) { // |||
 | ||||||
|  | 			left = offset.left + j * width; | ||||||
|  | 			mx = j - ( cells - 1 ) / 2 ; | ||||||
|  | 
 | ||||||
|  | 			// Create a clone of the now hidden main element that will be absolute positioned
 | ||||||
|  | 			// within a wrapper div off the -left and -top equal to size of our pieces
 | ||||||
|  | 			el | ||||||
|  | 				.clone() | ||||||
|  | 				.appendTo( "body" ) | ||||||
|  | 				.wrap( "<div></div>" ) | ||||||
|  | 				.css({ | ||||||
|  | 					position: "absolute", | ||||||
|  | 					visibility: "visible", | ||||||
|  | 					left: -j * width, | ||||||
|  | 					top: -i * height | ||||||
|  | 				}) | ||||||
|  | 
 | ||||||
|  | 			// select the wrapper - make it overflow: hidden and absolute positioned based on
 | ||||||
|  | 			// where the original was located +left and +top equal to the size of pieces
 | ||||||
|  | 				.parent() | ||||||
|  | 				.addClass( "ui-effects-explode" ) | ||||||
|  | 				.css({ | ||||||
|  | 					position: "absolute", | ||||||
|  | 					overflow: "hidden", | ||||||
|  | 					width: width, | ||||||
|  | 					height: height, | ||||||
|  | 					left: left + ( show ? mx * width : 0 ), | ||||||
|  | 					top: top + ( show ? my * height : 0 ), | ||||||
|  | 					opacity: show ? 0 : 1 | ||||||
|  | 				}).animate({ | ||||||
|  | 					left: left + ( show ? 0 : mx * width ), | ||||||
|  | 					top: top + ( show ? 0 : my * height ), | ||||||
|  | 					opacity: show ? 1 : 0 | ||||||
|  | 				}, o.duration || 500, o.easing, childComplete ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	function animComplete() { | ||||||
|  | 		el.css({ | ||||||
|  | 			visibility: "visible" | ||||||
|  | 		}); | ||||||
|  | 		$( pieces ).remove(); | ||||||
|  | 		if ( !show ) { | ||||||
|  | 			el.hide(); | ||||||
|  | 		} | ||||||
|  | 		done(); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,30 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Fade 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/fade-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.fade = function( o, done ) { | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "toggle" ); | ||||||
|  | 
 | ||||||
|  | 	el.animate({ | ||||||
|  | 		opacity: mode | ||||||
|  | 	}, { | ||||||
|  | 		queue: false, | ||||||
|  | 		duration: o.duration, | ||||||
|  | 		easing: o.easing, | ||||||
|  | 		complete: done | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })( jQuery ); | ||||||
| @ -0,0 +1,76 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Fold 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/fold-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.fold = function( o, done ) { | ||||||
|  | 
 | ||||||
|  | 	// Create element
 | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ], | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ), | ||||||
|  | 		show = mode === "show", | ||||||
|  | 		hide = mode === "hide", | ||||||
|  | 		size = o.size || 15, | ||||||
|  | 		percent = /([0-9]+)%/.exec( size ), | ||||||
|  | 		horizFirst = !!o.horizFirst, | ||||||
|  | 		widthFirst = show !== horizFirst, | ||||||
|  | 		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ], | ||||||
|  | 		duration = o.duration / 2, | ||||||
|  | 		wrapper, distance, | ||||||
|  | 		animation1 = {}, | ||||||
|  | 		animation2 = {}; | ||||||
|  | 
 | ||||||
|  | 	$.effects.save( el, props ); | ||||||
|  | 	el.show(); | ||||||
|  | 
 | ||||||
|  | 	// Create Wrapper
 | ||||||
|  | 	wrapper = $.effects.createWrapper( el ).css({ | ||||||
|  | 		overflow: "hidden" | ||||||
|  | 	}); | ||||||
|  | 	distance = widthFirst ? | ||||||
|  | 		[ wrapper.width(), wrapper.height() ] : | ||||||
|  | 		[ wrapper.height(), wrapper.width() ]; | ||||||
|  | 
 | ||||||
|  | 	if ( percent ) { | ||||||
|  | 		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; | ||||||
|  | 	} | ||||||
|  | 	if ( show ) { | ||||||
|  | 		wrapper.css( horizFirst ? { | ||||||
|  | 			height: 0, | ||||||
|  | 			width: size | ||||||
|  | 		} : { | ||||||
|  | 			height: size, | ||||||
|  | 			width: 0 | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Animation
 | ||||||
|  | 	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size; | ||||||
|  | 	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0; | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	wrapper | ||||||
|  | 		.animate( animation1, duration, o.easing ) | ||||||
|  | 		.animate( animation2, duration, o.easing, function() { | ||||||
|  | 			if ( hide ) { | ||||||
|  | 				el.hide(); | ||||||
|  | 			} | ||||||
|  | 			$.effects.restore( el, props ); | ||||||
|  | 			$.effects.removeWrapper( el ); | ||||||
|  | 			done(); | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,50 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Highlight 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/highlight-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.highlight = function( o, done ) { | ||||||
|  | 	var elem = $( this ), | ||||||
|  | 		props = [ "backgroundImage", "backgroundColor", "opacity" ], | ||||||
|  | 		mode = $.effects.setMode( elem, o.mode || "show" ), | ||||||
|  | 		animation = { | ||||||
|  | 			backgroundColor: elem.css( "backgroundColor" ) | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	if (mode === "hide") { | ||||||
|  | 		animation.opacity = 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	$.effects.save( elem, props ); | ||||||
|  | 
 | ||||||
|  | 	elem | ||||||
|  | 		.show() | ||||||
|  | 		.css({ | ||||||
|  | 			backgroundImage: "none", | ||||||
|  | 			backgroundColor: o.color || "#ffff99" | ||||||
|  | 		}) | ||||||
|  | 		.animate( animation, { | ||||||
|  | 			queue: false, | ||||||
|  | 			duration: o.duration, | ||||||
|  | 			easing: o.easing, | ||||||
|  | 			complete: function() { | ||||||
|  | 				if ( mode === "hide" ) { | ||||||
|  | 					elem.hide(); | ||||||
|  | 				} | ||||||
|  | 				$.effects.restore( elem, props ); | ||||||
|  | 				done(); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,63 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Pulsate 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/pulsate-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.pulsate = function( o, done ) { | ||||||
|  | 	var elem = $( this ), | ||||||
|  | 		mode = $.effects.setMode( elem, o.mode || "show" ), | ||||||
|  | 		show = mode === "show", | ||||||
|  | 		hide = mode === "hide", | ||||||
|  | 		showhide = ( show || mode === "hide" ), | ||||||
|  | 
 | ||||||
|  | 		// showing or hiding leaves of the "last" animation
 | ||||||
|  | 		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), | ||||||
|  | 		duration = o.duration / anims, | ||||||
|  | 		animateTo = 0, | ||||||
|  | 		queue = elem.queue(), | ||||||
|  | 		queuelen = queue.length, | ||||||
|  | 		i; | ||||||
|  | 
 | ||||||
|  | 	if ( show || !elem.is(":visible")) { | ||||||
|  | 		elem.css( "opacity", 0 ).show(); | ||||||
|  | 		animateTo = 1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// anims - 1 opacity "toggles"
 | ||||||
|  | 	for ( i = 1; i < anims; i++ ) { | ||||||
|  | 		elem.animate({ | ||||||
|  | 			opacity: animateTo | ||||||
|  | 		}, duration, o.easing ); | ||||||
|  | 		animateTo = 1 - animateTo; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	elem.animate({ | ||||||
|  | 		opacity: animateTo | ||||||
|  | 	}, duration, o.easing); | ||||||
|  | 
 | ||||||
|  | 	elem.queue(function() { | ||||||
|  | 		if ( hide ) { | ||||||
|  | 			elem.hide(); | ||||||
|  | 		} | ||||||
|  | 		done(); | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	// We just queued up "anims" animations, we need to put them next in the queue
 | ||||||
|  | 	if ( queuelen > 1 ) { | ||||||
|  | 		queue.splice.apply( queue, | ||||||
|  | 			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); | ||||||
|  | 	} | ||||||
|  | 	elem.dequeue(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,318 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Scale 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/scale-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.puff = function( o, done ) { | ||||||
|  | 	var elem = $( this ), | ||||||
|  | 		mode = $.effects.setMode( elem, o.mode || "hide" ), | ||||||
|  | 		hide = mode === "hide", | ||||||
|  | 		percent = parseInt( o.percent, 10 ) || 150, | ||||||
|  | 		factor = percent / 100, | ||||||
|  | 		original = { | ||||||
|  | 			height: elem.height(), | ||||||
|  | 			width: elem.width(), | ||||||
|  | 			outerHeight: elem.outerHeight(), | ||||||
|  | 			outerWidth: elem.outerWidth() | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	$.extend( o, { | ||||||
|  | 		effect: "scale", | ||||||
|  | 		queue: false, | ||||||
|  | 		fade: true, | ||||||
|  | 		mode: mode, | ||||||
|  | 		complete: done, | ||||||
|  | 		percent: hide ? percent : 100, | ||||||
|  | 		from: hide ? | ||||||
|  | 			original : | ||||||
|  | 			{ | ||||||
|  | 				height: original.height * factor, | ||||||
|  | 				width: original.width * factor, | ||||||
|  | 				outerHeight: original.outerHeight * factor, | ||||||
|  | 				outerWidth: original.outerWidth * factor | ||||||
|  | 			} | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	elem.effect( o ); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | $.effects.effect.scale = function( o, done ) { | ||||||
|  | 
 | ||||||
|  | 	// Create element
 | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		options = $.extend( true, {}, o ), | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ), | ||||||
|  | 		percent = parseInt( o.percent, 10 ) || | ||||||
|  | 			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ), | ||||||
|  | 		direction = o.direction || "both", | ||||||
|  | 		origin = o.origin, | ||||||
|  | 		original = { | ||||||
|  | 			height: el.height(), | ||||||
|  | 			width: el.width(), | ||||||
|  | 			outerHeight: el.outerHeight(), | ||||||
|  | 			outerWidth: el.outerWidth() | ||||||
|  | 		}, | ||||||
|  | 		factor = { | ||||||
|  | 			y: direction !== "horizontal" ? (percent / 100) : 1, | ||||||
|  | 			x: direction !== "vertical" ? (percent / 100) : 1 | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	// We are going to pass this effect to the size effect:
 | ||||||
|  | 	options.effect = "size"; | ||||||
|  | 	options.queue = false; | ||||||
|  | 	options.complete = done; | ||||||
|  | 
 | ||||||
|  | 	// Set default origin and restore for show/hide
 | ||||||
|  | 	if ( mode !== "effect" ) { | ||||||
|  | 		options.origin = origin || ["middle","center"]; | ||||||
|  | 		options.restore = true; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	options.from = o.from || ( mode === "show" ? { | ||||||
|  | 		height: 0, | ||||||
|  | 		width: 0, | ||||||
|  | 		outerHeight: 0, | ||||||
|  | 		outerWidth: 0 | ||||||
|  | 	} : original ); | ||||||
|  | 	options.to = { | ||||||
|  | 		height: original.height * factor.y, | ||||||
|  | 		width: original.width * factor.x, | ||||||
|  | 		outerHeight: original.outerHeight * factor.y, | ||||||
|  | 		outerWidth: original.outerWidth * factor.x | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	// Fade option to support puff
 | ||||||
|  | 	if ( options.fade ) { | ||||||
|  | 		if ( mode === "show" ) { | ||||||
|  | 			options.from.opacity = 0; | ||||||
|  | 			options.to.opacity = 1; | ||||||
|  | 		} | ||||||
|  | 		if ( mode === "hide" ) { | ||||||
|  | 			options.from.opacity = 1; | ||||||
|  | 			options.to.opacity = 0; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	el.effect( options ); | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | $.effects.effect.size = function( o, done ) { | ||||||
|  | 
 | ||||||
|  | 	// Create element
 | ||||||
|  | 	var original, baseline, factor, | ||||||
|  | 		el = $( this ), | ||||||
|  | 		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ], | ||||||
|  | 
 | ||||||
|  | 		// Always restore
 | ||||||
|  | 		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ], | ||||||
|  | 
 | ||||||
|  | 		// Copy for children
 | ||||||
|  | 		props2 = [ "width", "height", "overflow" ], | ||||||
|  | 		cProps = [ "fontSize" ], | ||||||
|  | 		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], | ||||||
|  | 		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], | ||||||
|  | 
 | ||||||
|  | 		// Set options
 | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ), | ||||||
|  | 		restore = o.restore || mode !== "effect", | ||||||
|  | 		scale = o.scale || "both", | ||||||
|  | 		origin = o.origin || [ "middle", "center" ], | ||||||
|  | 		position = el.css( "position" ), | ||||||
|  | 		props = restore ? props0 : props1, | ||||||
|  | 		zero = { | ||||||
|  | 			height: 0, | ||||||
|  | 			width: 0, | ||||||
|  | 			outerHeight: 0, | ||||||
|  | 			outerWidth: 0 | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	if ( mode === "show" ) { | ||||||
|  | 		el.show(); | ||||||
|  | 	} | ||||||
|  | 	original = { | ||||||
|  | 		height: el.height(), | ||||||
|  | 		width: el.width(), | ||||||
|  | 		outerHeight: el.outerHeight(), | ||||||
|  | 		outerWidth: el.outerWidth() | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	if ( o.mode === "toggle" && mode === "show" ) { | ||||||
|  | 		el.from = o.to || zero; | ||||||
|  | 		el.to = o.from || original; | ||||||
|  | 	} else { | ||||||
|  | 		el.from = o.from || ( mode === "show" ? zero : original ); | ||||||
|  | 		el.to = o.to || ( mode === "hide" ? zero : original ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Set scaling factor
 | ||||||
|  | 	factor = { | ||||||
|  | 		from: { | ||||||
|  | 			y: el.from.height / original.height, | ||||||
|  | 			x: el.from.width / original.width | ||||||
|  | 		}, | ||||||
|  | 		to: { | ||||||
|  | 			y: el.to.height / original.height, | ||||||
|  | 			x: el.to.width / original.width | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	// Scale the css box
 | ||||||
|  | 	if ( scale === "box" || scale === "both" ) { | ||||||
|  | 
 | ||||||
|  | 		// Vertical props scaling
 | ||||||
|  | 		if ( factor.from.y !== factor.to.y ) { | ||||||
|  | 			props = props.concat( vProps ); | ||||||
|  | 			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from ); | ||||||
|  | 			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Horizontal props scaling
 | ||||||
|  | 		if ( factor.from.x !== factor.to.x ) { | ||||||
|  | 			props = props.concat( hProps ); | ||||||
|  | 			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from ); | ||||||
|  | 			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Scale the content
 | ||||||
|  | 	if ( scale === "content" || scale === "both" ) { | ||||||
|  | 
 | ||||||
|  | 		// Vertical props scaling
 | ||||||
|  | 		if ( factor.from.y !== factor.to.y ) { | ||||||
|  | 			props = props.concat( cProps ).concat( props2 ); | ||||||
|  | 			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from ); | ||||||
|  | 			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	$.effects.save( el, props ); | ||||||
|  | 	el.show(); | ||||||
|  | 	$.effects.createWrapper( el ); | ||||||
|  | 	el.css( "overflow", "hidden" ).css( el.from ); | ||||||
|  | 
 | ||||||
|  | 	// Adjust
 | ||||||
|  | 	if (origin) { // Calculate baseline shifts
 | ||||||
|  | 		baseline = $.effects.getBaseline( origin, original ); | ||||||
|  | 		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y; | ||||||
|  | 		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x; | ||||||
|  | 		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y; | ||||||
|  | 		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x; | ||||||
|  | 	} | ||||||
|  | 	el.css( el.from ); // set top & left
 | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	if ( scale === "content" || scale === "both" ) { // Scale the children
 | ||||||
|  | 
 | ||||||
|  | 		// Add margins/font-size
 | ||||||
|  | 		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps); | ||||||
|  | 		hProps = hProps.concat([ "marginLeft", "marginRight" ]); | ||||||
|  | 		props2 = props0.concat(vProps).concat(hProps); | ||||||
|  | 
 | ||||||
|  | 		el.find( "*[width]" ).each( function(){ | ||||||
|  | 			var child = $( this ), | ||||||
|  | 				c_original = { | ||||||
|  | 					height: child.height(), | ||||||
|  | 					width: child.width(), | ||||||
|  | 					outerHeight: child.outerHeight(), | ||||||
|  | 					outerWidth: child.outerWidth() | ||||||
|  | 				}; | ||||||
|  | 			if (restore) { | ||||||
|  | 				$.effects.save(child, props2); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			child.from = { | ||||||
|  | 				height: c_original.height * factor.from.y, | ||||||
|  | 				width: c_original.width * factor.from.x, | ||||||
|  | 				outerHeight: c_original.outerHeight * factor.from.y, | ||||||
|  | 				outerWidth: c_original.outerWidth * factor.from.x | ||||||
|  | 			}; | ||||||
|  | 			child.to = { | ||||||
|  | 				height: c_original.height * factor.to.y, | ||||||
|  | 				width: c_original.width * factor.to.x, | ||||||
|  | 				outerHeight: c_original.height * factor.to.y, | ||||||
|  | 				outerWidth: c_original.width * factor.to.x | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 			// Vertical props scaling
 | ||||||
|  | 			if ( factor.from.y !== factor.to.y ) { | ||||||
|  | 				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from ); | ||||||
|  | 				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// Horizontal props scaling
 | ||||||
|  | 			if ( factor.from.x !== factor.to.x ) { | ||||||
|  | 				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from ); | ||||||
|  | 				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to ); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// Animate children
 | ||||||
|  | 			child.css( child.from ); | ||||||
|  | 			child.animate( child.to, o.duration, o.easing, function() { | ||||||
|  | 
 | ||||||
|  | 				// Restore children
 | ||||||
|  | 				if ( restore ) { | ||||||
|  | 					$.effects.restore( child, props2 ); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	el.animate( el.to, { | ||||||
|  | 		queue: false, | ||||||
|  | 		duration: o.duration, | ||||||
|  | 		easing: o.easing, | ||||||
|  | 		complete: function() { | ||||||
|  | 			if ( el.to.opacity === 0 ) { | ||||||
|  | 				el.css( "opacity", el.from.opacity ); | ||||||
|  | 			} | ||||||
|  | 			if( mode === "hide" ) { | ||||||
|  | 				el.hide(); | ||||||
|  | 			} | ||||||
|  | 			$.effects.restore( el, props ); | ||||||
|  | 			if ( !restore ) { | ||||||
|  | 
 | ||||||
|  | 				// we need to calculate our new positioning based on the scaling
 | ||||||
|  | 				if ( position === "static" ) { | ||||||
|  | 					el.css({ | ||||||
|  | 						position: "relative", | ||||||
|  | 						top: el.to.top, | ||||||
|  | 						left: el.to.left | ||||||
|  | 					}); | ||||||
|  | 				} else { | ||||||
|  | 					$.each([ "top", "left" ], function( idx, pos ) { | ||||||
|  | 						el.css( pos, function( _, str ) { | ||||||
|  | 							var val = parseInt( str, 10 ), | ||||||
|  | 								toRef = idx ? el.to.left : el.to.top; | ||||||
|  | 
 | ||||||
|  | 							// if original was "auto", recalculate the new value from wrapper
 | ||||||
|  | 							if ( str === "auto" ) { | ||||||
|  | 								return toRef + "px"; | ||||||
|  | 							} | ||||||
|  | 
 | ||||||
|  | 							return val + toRef + "px"; | ||||||
|  | 						}); | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			$.effects.removeWrapper( el ); | ||||||
|  | 			done(); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,74 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Shake 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/shake-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.shake = function( o, done ) { | ||||||
|  | 
 | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ], | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ), | ||||||
|  | 		direction = o.direction || "left", | ||||||
|  | 		distance = o.distance || 20, | ||||||
|  | 		times = o.times || 3, | ||||||
|  | 		anims = times * 2 + 1, | ||||||
|  | 		speed = Math.round(o.duration/anims), | ||||||
|  | 		ref = (direction === "up" || direction === "down") ? "top" : "left", | ||||||
|  | 		positiveMotion = (direction === "up" || direction === "left"), | ||||||
|  | 		animation = {}, | ||||||
|  | 		animation1 = {}, | ||||||
|  | 		animation2 = {}, | ||||||
|  | 		i, | ||||||
|  | 
 | ||||||
|  | 		// we will need to re-assemble the queue to stack our animations in place
 | ||||||
|  | 		queue = el.queue(), | ||||||
|  | 		queuelen = queue.length; | ||||||
|  | 
 | ||||||
|  | 	$.effects.save( el, props ); | ||||||
|  | 	el.show(); | ||||||
|  | 	$.effects.createWrapper( el ); | ||||||
|  | 
 | ||||||
|  | 	// Animation
 | ||||||
|  | 	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; | ||||||
|  | 	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; | ||||||
|  | 	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	el.animate( animation, speed, o.easing ); | ||||||
|  | 
 | ||||||
|  | 	// Shakes
 | ||||||
|  | 	for ( i = 1; i < times; i++ ) { | ||||||
|  | 		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing ); | ||||||
|  | 	} | ||||||
|  | 	el | ||||||
|  | 		.animate( animation1, speed, o.easing ) | ||||||
|  | 		.animate( animation, speed / 2, o.easing ) | ||||||
|  | 		.queue(function() { | ||||||
|  | 			if ( mode === "hide" ) { | ||||||
|  | 				el.hide(); | ||||||
|  | 			} | ||||||
|  | 			$.effects.restore( el, props ); | ||||||
|  | 			$.effects.removeWrapper( el ); | ||||||
|  | 			done(); | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	// inject all the animations we just queued to be first in line (after "inprogress")
 | ||||||
|  | 	if ( queuelen > 1) { | ||||||
|  | 		queue.splice.apply( queue, | ||||||
|  | 			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); | ||||||
|  | 	} | ||||||
|  | 	el.dequeue(); | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,64 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Slide 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/slide-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.slide = function( o, done ) { | ||||||
|  | 
 | ||||||
|  | 	// Create element
 | ||||||
|  | 	var el = $( this ), | ||||||
|  | 		props = [ "position", "top", "bottom", "left", "right", "width", "height" ], | ||||||
|  | 		mode = $.effects.setMode( el, o.mode || "show" ), | ||||||
|  | 		show = mode === "show", | ||||||
|  | 		direction = o.direction || "left", | ||||||
|  | 		ref = (direction === "up" || direction === "down") ? "top" : "left", | ||||||
|  | 		positiveMotion = (direction === "up" || direction === "left"), | ||||||
|  | 		distance, | ||||||
|  | 		animation = {}; | ||||||
|  | 
 | ||||||
|  | 	// Adjust
 | ||||||
|  | 	$.effects.save( el, props ); | ||||||
|  | 	el.show(); | ||||||
|  | 	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ); | ||||||
|  | 
 | ||||||
|  | 	$.effects.createWrapper( el ).css({ | ||||||
|  | 		overflow: "hidden" | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	if ( show ) { | ||||||
|  | 		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Animation
 | ||||||
|  | 	animation[ ref ] = ( show ? | ||||||
|  | 		( positiveMotion ? "+=" : "-=") : | ||||||
|  | 		( positiveMotion ? "-=" : "+=")) + | ||||||
|  | 		distance; | ||||||
|  | 
 | ||||||
|  | 	// Animate
 | ||||||
|  | 	el.animate( animation, { | ||||||
|  | 		queue: false, | ||||||
|  | 		duration: o.duration, | ||||||
|  | 		easing: o.easing, | ||||||
|  | 		complete: function() { | ||||||
|  | 			if ( mode === "hide" ) { | ||||||
|  | 				el.hide(); | ||||||
|  | 			} | ||||||
|  | 			$.effects.restore( el, props ); | ||||||
|  | 			$.effects.removeWrapper( el ); | ||||||
|  | 			done(); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,47 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Effects Transfer 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/transfer-effect/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.effect.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.effects.effect.transfer = function( o, done ) { | ||||||
|  | 	var elem = $( this ), | ||||||
|  | 		target = $( o.to ), | ||||||
|  | 		targetFixed = target.css( "position" ) === "fixed", | ||||||
|  | 		body = $("body"), | ||||||
|  | 		fixTop = targetFixed ? body.scrollTop() : 0, | ||||||
|  | 		fixLeft = targetFixed ? body.scrollLeft() : 0, | ||||||
|  | 		endPosition = target.offset(), | ||||||
|  | 		animation = { | ||||||
|  | 			top: endPosition.top - fixTop , | ||||||
|  | 			left: endPosition.left - fixLeft , | ||||||
|  | 			height: target.innerHeight(), | ||||||
|  | 			width: target.innerWidth() | ||||||
|  | 		}, | ||||||
|  | 		startPosition = elem.offset(), | ||||||
|  | 		transfer = $( "<div class='ui-effects-transfer'></div>" ) | ||||||
|  | 			.appendTo( document.body ) | ||||||
|  | 			.addClass( o.className ) | ||||||
|  | 			.css({ | ||||||
|  | 				top: startPosition.top - fixTop , | ||||||
|  | 				left: startPosition.left - fixLeft , | ||||||
|  | 				height: elem.innerHeight(), | ||||||
|  | 				width: elem.innerWidth(), | ||||||
|  | 				position: targetFixed ? "fixed" : "absolute" | ||||||
|  | 			}) | ||||||
|  | 			.animate( animation, o.duration, o.easing, function() { | ||||||
|  | 				transfer.remove(); | ||||||
|  | 				done(); | ||||||
|  | 			}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -0,0 +1,621 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Menu 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/menu/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  *	jquery.ui.position.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.widget( "ui.menu", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	defaultElement: "<ul>", | ||||||
|  | 	delay: 300, | ||||||
|  | 	options: { | ||||||
|  | 		icons: { | ||||||
|  | 			submenu: "ui-icon-carat-1-e" | ||||||
|  | 		}, | ||||||
|  | 		menus: "ul", | ||||||
|  | 		position: { | ||||||
|  | 			my: "left top", | ||||||
|  | 			at: "right top" | ||||||
|  | 		}, | ||||||
|  | 		role: "menu", | ||||||
|  | 
 | ||||||
|  | 		// callbacks
 | ||||||
|  | 		blur: null, | ||||||
|  | 		focus: null, | ||||||
|  | 		select: null | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_create: function() { | ||||||
|  | 		this.activeMenu = this.element; | ||||||
|  | 		// flag used to prevent firing of the click handler
 | ||||||
|  | 		// as the event bubbles up through nested menus
 | ||||||
|  | 		this.mouseHandled = false; | ||||||
|  | 		this.element | ||||||
|  | 			.uniqueId() | ||||||
|  | 			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) | ||||||
|  | 			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ) | ||||||
|  | 			.attr({ | ||||||
|  | 				role: this.options.role, | ||||||
|  | 				tabIndex: 0 | ||||||
|  | 			}) | ||||||
|  | 			// need to catch all clicks on disabled menu
 | ||||||
|  | 			// not possible through _on
 | ||||||
|  | 			.bind( "click" + this.eventNamespace, $.proxy(function( event ) { | ||||||
|  | 				if ( this.options.disabled ) { | ||||||
|  | 					event.preventDefault(); | ||||||
|  | 				} | ||||||
|  | 			}, this )); | ||||||
|  | 
 | ||||||
|  | 		if ( this.options.disabled ) { | ||||||
|  | 			this.element | ||||||
|  | 				.addClass( "ui-state-disabled" ) | ||||||
|  | 				.attr( "aria-disabled", "true" ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._on({ | ||||||
|  | 			// Prevent focus from sticking to links inside menu after clicking
 | ||||||
|  | 			// them (focus should always stay on UL during navigation).
 | ||||||
|  | 			"mousedown .ui-menu-item > a": function( event ) { | ||||||
|  | 				event.preventDefault(); | ||||||
|  | 			}, | ||||||
|  | 			"click .ui-state-disabled > a": function( event ) { | ||||||
|  | 				event.preventDefault(); | ||||||
|  | 			}, | ||||||
|  | 			"click .ui-menu-item:has(a)": function( event ) { | ||||||
|  | 				var target = $( event.target ).closest( ".ui-menu-item" ); | ||||||
|  | 				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { | ||||||
|  | 					this.mouseHandled = true; | ||||||
|  | 
 | ||||||
|  | 					this.select( event ); | ||||||
|  | 					// Open submenu on click
 | ||||||
|  | 					if ( target.has( ".ui-menu" ).length ) { | ||||||
|  | 						this.expand( event ); | ||||||
|  | 					} else if ( !this.element.is( ":focus" ) ) { | ||||||
|  | 						// Redirect focus to the menu
 | ||||||
|  | 						this.element.trigger( "focus", [ true ] ); | ||||||
|  | 
 | ||||||
|  | 						// If the active item is on the top level, let it stay active.
 | ||||||
|  | 						// Otherwise, blur the active item since it is no longer visible.
 | ||||||
|  | 						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { | ||||||
|  | 							clearTimeout( this.timer ); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			"mouseenter .ui-menu-item": function( event ) { | ||||||
|  | 				var target = $( event.currentTarget ); | ||||||
|  | 				// Remove ui-state-active class from siblings of the newly focused menu item
 | ||||||
|  | 				// to avoid a jump caused by adjacent elements both having a class with a border
 | ||||||
|  | 				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" ); | ||||||
|  | 				this.focus( event, target ); | ||||||
|  | 			}, | ||||||
|  | 			mouseleave: "collapseAll", | ||||||
|  | 			"mouseleave .ui-menu": "collapseAll", | ||||||
|  | 			focus: function( event, keepActiveItem ) { | ||||||
|  | 				// If there's already an active item, keep it active
 | ||||||
|  | 				// If not, activate the first item
 | ||||||
|  | 				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 ); | ||||||
|  | 
 | ||||||
|  | 				if ( !keepActiveItem ) { | ||||||
|  | 					this.focus( event, item ); | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			blur: function( event ) { | ||||||
|  | 				this._delay(function() { | ||||||
|  | 					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) { | ||||||
|  | 						this.collapseAll( event ); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 			}, | ||||||
|  | 			keydown: "_keydown" | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		this.refresh(); | ||||||
|  | 
 | ||||||
|  | 		// Clicks outside of a menu collapse any open menus
 | ||||||
|  | 		this._on( this.document, { | ||||||
|  | 			click: function( event ) { | ||||||
|  | 				if ( !$( event.target ).closest( ".ui-menu" ).length ) { | ||||||
|  | 					this.collapseAll( event ); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				// Reset the mouseHandled flag
 | ||||||
|  | 				this.mouseHandled = false; | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		// Destroy (sub)menus
 | ||||||
|  | 		this.element | ||||||
|  | 			.removeAttr( "aria-activedescendant" ) | ||||||
|  | 			.find( ".ui-menu" ).addBack() | ||||||
|  | 				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" ) | ||||||
|  | 				.removeAttr( "role" ) | ||||||
|  | 				.removeAttr( "tabIndex" ) | ||||||
|  | 				.removeAttr( "aria-labelledby" ) | ||||||
|  | 				.removeAttr( "aria-expanded" ) | ||||||
|  | 				.removeAttr( "aria-hidden" ) | ||||||
|  | 				.removeAttr( "aria-disabled" ) | ||||||
|  | 				.removeUniqueId() | ||||||
|  | 				.show(); | ||||||
|  | 
 | ||||||
|  | 		// Destroy menu items
 | ||||||
|  | 		this.element.find( ".ui-menu-item" ) | ||||||
|  | 			.removeClass( "ui-menu-item" ) | ||||||
|  | 			.removeAttr( "role" ) | ||||||
|  | 			.removeAttr( "aria-disabled" ) | ||||||
|  | 			.children( "a" ) | ||||||
|  | 				.removeUniqueId() | ||||||
|  | 				.removeClass( "ui-corner-all ui-state-hover" ) | ||||||
|  | 				.removeAttr( "tabIndex" ) | ||||||
|  | 				.removeAttr( "role" ) | ||||||
|  | 				.removeAttr( "aria-haspopup" ) | ||||||
|  | 				.children().each( function() { | ||||||
|  | 					var elem = $( this ); | ||||||
|  | 					if ( elem.data( "ui-menu-submenu-carat" ) ) { | ||||||
|  | 						elem.remove(); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 
 | ||||||
|  | 		// Destroy menu dividers
 | ||||||
|  | 		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_keydown: function( event ) { | ||||||
|  | 		/*jshint maxcomplexity:20*/ | ||||||
|  | 		var match, prev, character, skip, regex, | ||||||
|  | 			preventDefault = true; | ||||||
|  | 
 | ||||||
|  | 		function escape( value ) { | ||||||
|  | 			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		switch ( event.keyCode ) { | ||||||
|  | 		case $.ui.keyCode.PAGE_UP: | ||||||
|  | 			this.previousPage( event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.PAGE_DOWN: | ||||||
|  | 			this.nextPage( event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.HOME: | ||||||
|  | 			this._move( "first", "first", event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.END: | ||||||
|  | 			this._move( "last", "last", event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.UP: | ||||||
|  | 			this.previous( event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.DOWN: | ||||||
|  | 			this.next( event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.LEFT: | ||||||
|  | 			this.collapse( event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.RIGHT: | ||||||
|  | 			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { | ||||||
|  | 				this.expand( event ); | ||||||
|  | 			} | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.ENTER: | ||||||
|  | 		case $.ui.keyCode.SPACE: | ||||||
|  | 			this._activate( event ); | ||||||
|  | 			break; | ||||||
|  | 		case $.ui.keyCode.ESCAPE: | ||||||
|  | 			this.collapse( event ); | ||||||
|  | 			break; | ||||||
|  | 		default: | ||||||
|  | 			preventDefault = false; | ||||||
|  | 			prev = this.previousFilter || ""; | ||||||
|  | 			character = String.fromCharCode( event.keyCode ); | ||||||
|  | 			skip = false; | ||||||
|  | 
 | ||||||
|  | 			clearTimeout( this.filterTimer ); | ||||||
|  | 
 | ||||||
|  | 			if ( character === prev ) { | ||||||
|  | 				skip = true; | ||||||
|  | 			} else { | ||||||
|  | 				character = prev + character; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			regex = new RegExp( "^" + escape( character ), "i" ); | ||||||
|  | 			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { | ||||||
|  | 				return regex.test( $( this ).children( "a" ).text() ); | ||||||
|  | 			}); | ||||||
|  | 			match = skip && match.index( this.active.next() ) !== -1 ? | ||||||
|  | 				this.active.nextAll( ".ui-menu-item" ) : | ||||||
|  | 				match; | ||||||
|  | 
 | ||||||
|  | 			// If no matches on the current filter, reset to the last character pressed
 | ||||||
|  | 			// to move down the menu to the first item that starts with that character
 | ||||||
|  | 			if ( !match.length ) { | ||||||
|  | 				character = String.fromCharCode( event.keyCode ); | ||||||
|  | 				regex = new RegExp( "^" + escape( character ), "i" ); | ||||||
|  | 				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { | ||||||
|  | 					return regex.test( $( this ).children( "a" ).text() ); | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if ( match.length ) { | ||||||
|  | 				this.focus( event, match ); | ||||||
|  | 				if ( match.length > 1 ) { | ||||||
|  | 					this.previousFilter = character; | ||||||
|  | 					this.filterTimer = this._delay(function() { | ||||||
|  | 						delete this.previousFilter; | ||||||
|  | 					}, 1000 ); | ||||||
|  | 				} else { | ||||||
|  | 					delete this.previousFilter; | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				delete this.previousFilter; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( preventDefault ) { | ||||||
|  | 			event.preventDefault(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_activate: function( event ) { | ||||||
|  | 		if ( !this.active.is( ".ui-state-disabled" ) ) { | ||||||
|  | 			if ( this.active.children( "a[aria-haspopup='true']" ).length ) { | ||||||
|  | 				this.expand( event ); | ||||||
|  | 			} else { | ||||||
|  | 				this.select( event ); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	refresh: function() { | ||||||
|  | 		var menus, | ||||||
|  | 			icon = this.options.icons.submenu, | ||||||
|  | 			submenus = this.element.find( this.options.menus ); | ||||||
|  | 
 | ||||||
|  | 		// Initialize nested menus
 | ||||||
|  | 		submenus.filter( ":not(.ui-menu)" ) | ||||||
|  | 			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) | ||||||
|  | 			.hide() | ||||||
|  | 			.attr({ | ||||||
|  | 				role: this.options.role, | ||||||
|  | 				"aria-hidden": "true", | ||||||
|  | 				"aria-expanded": "false" | ||||||
|  | 			}) | ||||||
|  | 			.each(function() { | ||||||
|  | 				var menu = $( this ), | ||||||
|  | 					item = menu.prev( "a" ), | ||||||
|  | 					submenuCarat = $( "<span>" ) | ||||||
|  | 						.addClass( "ui-menu-icon ui-icon " + icon ) | ||||||
|  | 						.data( "ui-menu-submenu-carat", true ); | ||||||
|  | 
 | ||||||
|  | 				item | ||||||
|  | 					.attr( "aria-haspopup", "true" ) | ||||||
|  | 					.prepend( submenuCarat ); | ||||||
|  | 				menu.attr( "aria-labelledby", item.attr( "id" ) ); | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		menus = submenus.add( this.element ); | ||||||
|  | 
 | ||||||
|  | 		// Don't refresh list items that are already adapted
 | ||||||
|  | 		menus.children( ":not(.ui-menu-item):has(a)" ) | ||||||
|  | 			.addClass( "ui-menu-item" ) | ||||||
|  | 			.attr( "role", "presentation" ) | ||||||
|  | 			.children( "a" ) | ||||||
|  | 				.uniqueId() | ||||||
|  | 				.addClass( "ui-corner-all" ) | ||||||
|  | 				.attr({ | ||||||
|  | 					tabIndex: -1, | ||||||
|  | 					role: this._itemRole() | ||||||
|  | 				}); | ||||||
|  | 
 | ||||||
|  | 		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
 | ||||||
|  | 		menus.children( ":not(.ui-menu-item)" ).each(function() { | ||||||
|  | 			var item = $( this ); | ||||||
|  | 			// hyphen, em dash, en dash
 | ||||||
|  | 			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) { | ||||||
|  | 				item.addClass( "ui-widget-content ui-menu-divider" ); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		// Add aria-disabled attribute to any disabled menu item
 | ||||||
|  | 		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); | ||||||
|  | 
 | ||||||
|  | 		// If the active item has been removed, blur the menu
 | ||||||
|  | 		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { | ||||||
|  | 			this.blur(); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_itemRole: function() { | ||||||
|  | 		return { | ||||||
|  | 			menu: "menuitem", | ||||||
|  | 			listbox: "option" | ||||||
|  | 		}[ this.options.role ]; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function( key, value ) { | ||||||
|  | 		if ( key === "icons" ) { | ||||||
|  | 			this.element.find( ".ui-menu-icon" ) | ||||||
|  | 				.removeClass( this.options.icons.submenu ) | ||||||
|  | 				.addClass( value.submenu ); | ||||||
|  | 		} | ||||||
|  | 		this._super( key, value ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	focus: function( event, item ) { | ||||||
|  | 		var nested, focused; | ||||||
|  | 		this.blur( event, event && event.type === "focus" ); | ||||||
|  | 
 | ||||||
|  | 		this._scrollIntoView( item ); | ||||||
|  | 
 | ||||||
|  | 		this.active = item.first(); | ||||||
|  | 		focused = this.active.children( "a" ).addClass( "ui-state-focus" ); | ||||||
|  | 		// Only update aria-activedescendant if there's a role
 | ||||||
|  | 		// otherwise we assume focus is managed elsewhere
 | ||||||
|  | 		if ( this.options.role ) { | ||||||
|  | 			this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Highlight active parent menu item, if any
 | ||||||
|  | 		this.active | ||||||
|  | 			.parent() | ||||||
|  | 			.closest( ".ui-menu-item" ) | ||||||
|  | 			.children( "a:first" ) | ||||||
|  | 			.addClass( "ui-state-active" ); | ||||||
|  | 
 | ||||||
|  | 		if ( event && event.type === "keydown" ) { | ||||||
|  | 			this._close(); | ||||||
|  | 		} else { | ||||||
|  | 			this.timer = this._delay(function() { | ||||||
|  | 				this._close(); | ||||||
|  | 			}, this.delay ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		nested = item.children( ".ui-menu" ); | ||||||
|  | 		if ( nested.length && ( /^mouse/.test( event.type ) ) ) { | ||||||
|  | 			this._startOpening(nested); | ||||||
|  | 		} | ||||||
|  | 		this.activeMenu = item.parent(); | ||||||
|  | 
 | ||||||
|  | 		this._trigger( "focus", event, { item: item } ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_scrollIntoView: function( item ) { | ||||||
|  | 		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; | ||||||
|  | 		if ( this._hasScroll() ) { | ||||||
|  | 			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0; | ||||||
|  | 			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0; | ||||||
|  | 			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; | ||||||
|  | 			scroll = this.activeMenu.scrollTop(); | ||||||
|  | 			elementHeight = this.activeMenu.height(); | ||||||
|  | 			itemHeight = item.height(); | ||||||
|  | 
 | ||||||
|  | 			if ( offset < 0 ) { | ||||||
|  | 				this.activeMenu.scrollTop( scroll + offset ); | ||||||
|  | 			} else if ( offset + itemHeight > elementHeight ) { | ||||||
|  | 				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	blur: function( event, fromFocus ) { | ||||||
|  | 		if ( !fromFocus ) { | ||||||
|  | 			clearTimeout( this.timer ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( !this.active ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.active.children( "a" ).removeClass( "ui-state-focus" ); | ||||||
|  | 		this.active = null; | ||||||
|  | 
 | ||||||
|  | 		this._trigger( "blur", event, { item: this.active } ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_startOpening: function( submenu ) { | ||||||
|  | 		clearTimeout( this.timer ); | ||||||
|  | 
 | ||||||
|  | 		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
 | ||||||
|  | 		// shift in the submenu position when mousing over the carat icon
 | ||||||
|  | 		if ( submenu.attr( "aria-hidden" ) !== "true" ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.timer = this._delay(function() { | ||||||
|  | 			this._close(); | ||||||
|  | 			this._open( submenu ); | ||||||
|  | 		}, this.delay ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_open: function( submenu ) { | ||||||
|  | 		var position = $.extend({ | ||||||
|  | 			of: this.active | ||||||
|  | 		}, this.options.position ); | ||||||
|  | 
 | ||||||
|  | 		clearTimeout( this.timer ); | ||||||
|  | 		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) | ||||||
|  | 			.hide() | ||||||
|  | 			.attr( "aria-hidden", "true" ); | ||||||
|  | 
 | ||||||
|  | 		submenu | ||||||
|  | 			.show() | ||||||
|  | 			.removeAttr( "aria-hidden" ) | ||||||
|  | 			.attr( "aria-expanded", "true" ) | ||||||
|  | 			.position( position ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	collapseAll: function( event, all ) { | ||||||
|  | 		clearTimeout( this.timer ); | ||||||
|  | 		this.timer = this._delay(function() { | ||||||
|  | 			// If we were passed an event, look for the submenu that contains the event
 | ||||||
|  | 			var currentMenu = all ? this.element : | ||||||
|  | 				$( event && event.target ).closest( this.element.find( ".ui-menu" ) ); | ||||||
|  | 
 | ||||||
|  | 			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
 | ||||||
|  | 			if ( !currentMenu.length ) { | ||||||
|  | 				currentMenu = this.element; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			this._close( currentMenu ); | ||||||
|  | 
 | ||||||
|  | 			this.blur( event ); | ||||||
|  | 			this.activeMenu = currentMenu; | ||||||
|  | 		}, this.delay ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	// With no arguments, closes the currently active menu - if nothing is active
 | ||||||
|  | 	// it closes all menus.  If passed an argument, it will search for menus BELOW
 | ||||||
|  | 	_close: function( startMenu ) { | ||||||
|  | 		if ( !startMenu ) { | ||||||
|  | 			startMenu = this.active ? this.active.parent() : this.element; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		startMenu | ||||||
|  | 			.find( ".ui-menu" ) | ||||||
|  | 				.hide() | ||||||
|  | 				.attr( "aria-hidden", "true" ) | ||||||
|  | 				.attr( "aria-expanded", "false" ) | ||||||
|  | 			.end() | ||||||
|  | 			.find( "a.ui-state-active" ) | ||||||
|  | 				.removeClass( "ui-state-active" ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	collapse: function( event ) { | ||||||
|  | 		var newItem = this.active && | ||||||
|  | 			this.active.parent().closest( ".ui-menu-item", this.element ); | ||||||
|  | 		if ( newItem && newItem.length ) { | ||||||
|  | 			this._close(); | ||||||
|  | 			this.focus( event, newItem ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	expand: function( event ) { | ||||||
|  | 		var newItem = this.active && | ||||||
|  | 			this.active | ||||||
|  | 				.children( ".ui-menu " ) | ||||||
|  | 				.children( ".ui-menu-item" ) | ||||||
|  | 				.first(); | ||||||
|  | 
 | ||||||
|  | 		if ( newItem && newItem.length ) { | ||||||
|  | 			this._open( newItem.parent() ); | ||||||
|  | 
 | ||||||
|  | 			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
 | ||||||
|  | 			this._delay(function() { | ||||||
|  | 				this.focus( event, newItem ); | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	next: function( event ) { | ||||||
|  | 		this._move( "next", "first", event ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	previous: function( event ) { | ||||||
|  | 		this._move( "prev", "last", event ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	isFirstItem: function() { | ||||||
|  | 		return this.active && !this.active.prevAll( ".ui-menu-item" ).length; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	isLastItem: function() { | ||||||
|  | 		return this.active && !this.active.nextAll( ".ui-menu-item" ).length; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_move: function( direction, filter, event ) { | ||||||
|  | 		var next; | ||||||
|  | 		if ( this.active ) { | ||||||
|  | 			if ( direction === "first" || direction === "last" ) { | ||||||
|  | 				next = this.active | ||||||
|  | 					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) | ||||||
|  | 					.eq( -1 ); | ||||||
|  | 			} else { | ||||||
|  | 				next = this.active | ||||||
|  | 					[ direction + "All" ]( ".ui-menu-item" ) | ||||||
|  | 					.eq( 0 ); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if ( !next || !next.length || !this.active ) { | ||||||
|  | 			next = this.activeMenu.children( ".ui-menu-item" )[ filter ](); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.focus( event, next ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	nextPage: function( event ) { | ||||||
|  | 		var item, base, height; | ||||||
|  | 
 | ||||||
|  | 		if ( !this.active ) { | ||||||
|  | 			this.next( event ); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		if ( this.isLastItem() ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		if ( this._hasScroll() ) { | ||||||
|  | 			base = this.active.offset().top; | ||||||
|  | 			height = this.element.height(); | ||||||
|  | 			this.active.nextAll( ".ui-menu-item" ).each(function() { | ||||||
|  | 				item = $( this ); | ||||||
|  | 				return item.offset().top - base - height < 0; | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 			this.focus( event, item ); | ||||||
|  | 		} else { | ||||||
|  | 			this.focus( event, this.activeMenu.children( ".ui-menu-item" ) | ||||||
|  | 				[ !this.active ? "first" : "last" ]() ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	previousPage: function( event ) { | ||||||
|  | 		var item, base, height; | ||||||
|  | 		if ( !this.active ) { | ||||||
|  | 			this.next( event ); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		if ( this.isFirstItem() ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		if ( this._hasScroll() ) { | ||||||
|  | 			base = this.active.offset().top; | ||||||
|  | 			height = this.element.height(); | ||||||
|  | 			this.active.prevAll( ".ui-menu-item" ).each(function() { | ||||||
|  | 				item = $( this ); | ||||||
|  | 				return item.offset().top - base + height > 0; | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 			this.focus( event, item ); | ||||||
|  | 		} else { | ||||||
|  | 			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_hasScroll: function() { | ||||||
|  | 		return this.element.outerHeight() < this.element.prop( "scrollHeight" ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	select: function( event ) { | ||||||
|  | 		// TODO: It should never be possible to not have an active item at this
 | ||||||
|  | 		// point, but the tests don't trigger mouseenter before click.
 | ||||||
|  | 		this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); | ||||||
|  | 		var ui = { item: this.active }; | ||||||
|  | 		if ( !this.active.has( ".ui-menu" ).length ) { | ||||||
|  | 			this.collapseAll( event, true ); | ||||||
|  | 		} | ||||||
|  | 		this._trigger( "select", event, ui ); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | }( jQuery )); | ||||||
| @ -0,0 +1,169 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Mouse 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/mouse/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | var mouseHandled = false; | ||||||
|  | $( document ).mouseup( function() { | ||||||
|  | 	mouseHandled = false; | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.widget("ui.mouse", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	options: { | ||||||
|  | 		cancel: "input,textarea,button,select,option", | ||||||
|  | 		distance: 1, | ||||||
|  | 		delay: 0 | ||||||
|  | 	}, | ||||||
|  | 	_mouseInit: function() { | ||||||
|  | 		var that = this; | ||||||
|  | 
 | ||||||
|  | 		this.element | ||||||
|  | 			.bind("mousedown."+this.widgetName, function(event) { | ||||||
|  | 				return that._mouseDown(event); | ||||||
|  | 			}) | ||||||
|  | 			.bind("click."+this.widgetName, function(event) { | ||||||
|  | 				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { | ||||||
|  | 					$.removeData(event.target, that.widgetName + ".preventClickEvent"); | ||||||
|  | 					event.stopImmediatePropagation(); | ||||||
|  | 					return false; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		this.started = false; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	// TODO: make sure destroying one instance of mouse doesn't mess with
 | ||||||
|  | 	// other instances of mouse
 | ||||||
|  | 	_mouseDestroy: function() { | ||||||
|  | 		this.element.unbind("."+this.widgetName); | ||||||
|  | 		if ( this._mouseMoveDelegate ) { | ||||||
|  | 			$(document) | ||||||
|  | 				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) | ||||||
|  | 				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseDown: function(event) { | ||||||
|  | 		// don't let more than one widget handle mouseStart
 | ||||||
|  | 		if( mouseHandled ) { return; } | ||||||
|  | 
 | ||||||
|  | 		// we may have missed mouseup (out of window)
 | ||||||
|  | 		(this._mouseStarted && this._mouseUp(event)); | ||||||
|  | 
 | ||||||
|  | 		this._mouseDownEvent = event; | ||||||
|  | 
 | ||||||
|  | 		var that = this, | ||||||
|  | 			btnIsLeft = (event.which === 1), | ||||||
|  | 			// event.target.nodeName works around a bug in IE 8 with
 | ||||||
|  | 			// disabled inputs (#7620)
 | ||||||
|  | 			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); | ||||||
|  | 		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { | ||||||
|  | 			return true; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.mouseDelayMet = !this.options.delay; | ||||||
|  | 		if (!this.mouseDelayMet) { | ||||||
|  | 			this._mouseDelayTimer = setTimeout(function() { | ||||||
|  | 				that.mouseDelayMet = true; | ||||||
|  | 			}, this.options.delay); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | ||||||
|  | 			this._mouseStarted = (this._mouseStart(event) !== false); | ||||||
|  | 			if (!this._mouseStarted) { | ||||||
|  | 				event.preventDefault(); | ||||||
|  | 				return true; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Click event may never have fired (Gecko & Opera)
 | ||||||
|  | 		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { | ||||||
|  | 			$.removeData(event.target, this.widgetName + ".preventClickEvent"); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// these delegates are required to keep context
 | ||||||
|  | 		this._mouseMoveDelegate = function(event) { | ||||||
|  | 			return that._mouseMove(event); | ||||||
|  | 		}; | ||||||
|  | 		this._mouseUpDelegate = function(event) { | ||||||
|  | 			return that._mouseUp(event); | ||||||
|  | 		}; | ||||||
|  | 		$(document) | ||||||
|  | 			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate) | ||||||
|  | 			.bind("mouseup."+this.widgetName, this._mouseUpDelegate); | ||||||
|  | 
 | ||||||
|  | 		event.preventDefault(); | ||||||
|  | 
 | ||||||
|  | 		mouseHandled = true; | ||||||
|  | 		return true; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseMove: function(event) { | ||||||
|  | 		// IE mouseup check - mouseup happened when mouse was out of window
 | ||||||
|  | 		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { | ||||||
|  | 			return this._mouseUp(event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (this._mouseStarted) { | ||||||
|  | 			this._mouseDrag(event); | ||||||
|  | 			return event.preventDefault(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | ||||||
|  | 			this._mouseStarted = | ||||||
|  | 				(this._mouseStart(this._mouseDownEvent, event) !== false); | ||||||
|  | 			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return !this._mouseStarted; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseUp: function(event) { | ||||||
|  | 		$(document) | ||||||
|  | 			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) | ||||||
|  | 			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate); | ||||||
|  | 
 | ||||||
|  | 		if (this._mouseStarted) { | ||||||
|  | 			this._mouseStarted = false; | ||||||
|  | 
 | ||||||
|  | 			if (event.target === this._mouseDownEvent.target) { | ||||||
|  | 				$.data(event.target, this.widgetName + ".preventClickEvent", true); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			this._mouseStop(event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return false; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseDistanceMet: function(event) { | ||||||
|  | 		return (Math.max( | ||||||
|  | 				Math.abs(this._mouseDownEvent.pageX - event.pageX), | ||||||
|  | 				Math.abs(this._mouseDownEvent.pageY - event.pageY) | ||||||
|  | 			) >= this.options.distance | ||||||
|  | 		); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseDelayMet: function(/* event */) { | ||||||
|  | 		return this.mouseDelayMet; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	// These are placeholder methods, to be overriden by extending plugin
 | ||||||
|  | 	_mouseStart: function(/* event */) {}, | ||||||
|  | 	_mouseDrag: function(/* event */) {}, | ||||||
|  | 	_mouseStop: function(/* event */) {}, | ||||||
|  | 	_mouseCapture: function(/* event */) { return true; } | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
| @ -0,0 +1,497 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Position 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/position/
 | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.ui = $.ui || {}; | ||||||
|  | 
 | ||||||
|  | var cachedScrollbarWidth, | ||||||
|  | 	max = Math.max, | ||||||
|  | 	abs = Math.abs, | ||||||
|  | 	round = Math.round, | ||||||
|  | 	rhorizontal = /left|center|right/, | ||||||
|  | 	rvertical = /top|center|bottom/, | ||||||
|  | 	roffset = /[\+\-]\d+(\.[\d]+)?%?/, | ||||||
|  | 	rposition = /^\w+/, | ||||||
|  | 	rpercent = /%$/, | ||||||
|  | 	_position = $.fn.position; | ||||||
|  | 
 | ||||||
|  | function getOffsets( offsets, width, height ) { | ||||||
|  | 	return [ | ||||||
|  | 		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), | ||||||
|  | 		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) | ||||||
|  | 	]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function parseCss( element, property ) { | ||||||
|  | 	return parseInt( $.css( element, property ), 10 ) || 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function getDimensions( elem ) { | ||||||
|  | 	var raw = elem[0]; | ||||||
|  | 	if ( raw.nodeType === 9 ) { | ||||||
|  | 		return { | ||||||
|  | 			width: elem.width(), | ||||||
|  | 			height: elem.height(), | ||||||
|  | 			offset: { top: 0, left: 0 } | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	if ( $.isWindow( raw ) ) { | ||||||
|  | 		return { | ||||||
|  | 			width: elem.width(), | ||||||
|  | 			height: elem.height(), | ||||||
|  | 			offset: { top: elem.scrollTop(), left: elem.scrollLeft() } | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	if ( raw.preventDefault ) { | ||||||
|  | 		return { | ||||||
|  | 			width: 0, | ||||||
|  | 			height: 0, | ||||||
|  | 			offset: { top: raw.pageY, left: raw.pageX } | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	return { | ||||||
|  | 		width: elem.outerWidth(), | ||||||
|  | 		height: elem.outerHeight(), | ||||||
|  | 		offset: elem.offset() | ||||||
|  | 	}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | $.position = { | ||||||
|  | 	scrollbarWidth: function() { | ||||||
|  | 		if ( cachedScrollbarWidth !== undefined ) { | ||||||
|  | 			return cachedScrollbarWidth; | ||||||
|  | 		} | ||||||
|  | 		var w1, w2, | ||||||
|  | 			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ), | ||||||
|  | 			innerDiv = div.children()[0]; | ||||||
|  | 
 | ||||||
|  | 		$( "body" ).append( div ); | ||||||
|  | 		w1 = innerDiv.offsetWidth; | ||||||
|  | 		div.css( "overflow", "scroll" ); | ||||||
|  | 
 | ||||||
|  | 		w2 = innerDiv.offsetWidth; | ||||||
|  | 
 | ||||||
|  | 		if ( w1 === w2 ) { | ||||||
|  | 			w2 = div[0].clientWidth; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		div.remove(); | ||||||
|  | 
 | ||||||
|  | 		return (cachedScrollbarWidth = w1 - w2); | ||||||
|  | 	}, | ||||||
|  | 	getScrollInfo: function( within ) { | ||||||
|  | 		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ), | ||||||
|  | 			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ), | ||||||
|  | 			hasOverflowX = overflowX === "scroll" || | ||||||
|  | 				( overflowX === "auto" && within.width < within.element[0].scrollWidth ), | ||||||
|  | 			hasOverflowY = overflowY === "scroll" || | ||||||
|  | 				( overflowY === "auto" && within.height < within.element[0].scrollHeight ); | ||||||
|  | 		return { | ||||||
|  | 			width: hasOverflowY ? $.position.scrollbarWidth() : 0, | ||||||
|  | 			height: hasOverflowX ? $.position.scrollbarWidth() : 0 | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | 	getWithinInfo: function( element ) { | ||||||
|  | 		var withinElement = $( element || window ), | ||||||
|  | 			isWindow = $.isWindow( withinElement[0] ); | ||||||
|  | 		return { | ||||||
|  | 			element: withinElement, | ||||||
|  | 			isWindow: isWindow, | ||||||
|  | 			offset: withinElement.offset() || { left: 0, top: 0 }, | ||||||
|  | 			scrollLeft: withinElement.scrollLeft(), | ||||||
|  | 			scrollTop: withinElement.scrollTop(), | ||||||
|  | 			width: isWindow ? withinElement.width() : withinElement.outerWidth(), | ||||||
|  | 			height: isWindow ? withinElement.height() : withinElement.outerHeight() | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | $.fn.position = function( options ) { | ||||||
|  | 	if ( !options || !options.of ) { | ||||||
|  | 		return _position.apply( this, arguments ); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// make a copy, we don't want to modify arguments
 | ||||||
|  | 	options = $.extend( {}, options ); | ||||||
|  | 
 | ||||||
|  | 	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, | ||||||
|  | 		target = $( options.of ), | ||||||
|  | 		within = $.position.getWithinInfo( options.within ), | ||||||
|  | 		scrollInfo = $.position.getScrollInfo( within ), | ||||||
|  | 		collision = ( options.collision || "flip" ).split( " " ), | ||||||
|  | 		offsets = {}; | ||||||
|  | 
 | ||||||
|  | 	dimensions = getDimensions( target ); | ||||||
|  | 	if ( target[0].preventDefault ) { | ||||||
|  | 		// force left top to allow flipping
 | ||||||
|  | 		options.at = "left top"; | ||||||
|  | 	} | ||||||
|  | 	targetWidth = dimensions.width; | ||||||
|  | 	targetHeight = dimensions.height; | ||||||
|  | 	targetOffset = dimensions.offset; | ||||||
|  | 	// clone to reuse original targetOffset later
 | ||||||
|  | 	basePosition = $.extend( {}, targetOffset ); | ||||||
|  | 
 | ||||||
|  | 	// force my and at to have valid horizontal and vertical positions
 | ||||||
|  | 	// if a value is missing or invalid, it will be converted to center
 | ||||||
|  | 	$.each( [ "my", "at" ], function() { | ||||||
|  | 		var pos = ( options[ this ] || "" ).split( " " ), | ||||||
|  | 			horizontalOffset, | ||||||
|  | 			verticalOffset; | ||||||
|  | 
 | ||||||
|  | 		if ( pos.length === 1) { | ||||||
|  | 			pos = rhorizontal.test( pos[ 0 ] ) ? | ||||||
|  | 				pos.concat( [ "center" ] ) : | ||||||
|  | 				rvertical.test( pos[ 0 ] ) ? | ||||||
|  | 					[ "center" ].concat( pos ) : | ||||||
|  | 					[ "center", "center" ]; | ||||||
|  | 		} | ||||||
|  | 		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; | ||||||
|  | 		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; | ||||||
|  | 
 | ||||||
|  | 		// calculate offsets
 | ||||||
|  | 		horizontalOffset = roffset.exec( pos[ 0 ] ); | ||||||
|  | 		verticalOffset = roffset.exec( pos[ 1 ] ); | ||||||
|  | 		offsets[ this ] = [ | ||||||
|  | 			horizontalOffset ? horizontalOffset[ 0 ] : 0, | ||||||
|  | 			verticalOffset ? verticalOffset[ 0 ] : 0 | ||||||
|  | 		]; | ||||||
|  | 
 | ||||||
|  | 		// reduce to just the positions without the offsets
 | ||||||
|  | 		options[ this ] = [ | ||||||
|  | 			rposition.exec( pos[ 0 ] )[ 0 ], | ||||||
|  | 			rposition.exec( pos[ 1 ] )[ 0 ] | ||||||
|  | 		]; | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	// normalize collision option
 | ||||||
|  | 	if ( collision.length === 1 ) { | ||||||
|  | 		collision[ 1 ] = collision[ 0 ]; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if ( options.at[ 0 ] === "right" ) { | ||||||
|  | 		basePosition.left += targetWidth; | ||||||
|  | 	} else if ( options.at[ 0 ] === "center" ) { | ||||||
|  | 		basePosition.left += targetWidth / 2; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if ( options.at[ 1 ] === "bottom" ) { | ||||||
|  | 		basePosition.top += targetHeight; | ||||||
|  | 	} else if ( options.at[ 1 ] === "center" ) { | ||||||
|  | 		basePosition.top += targetHeight / 2; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); | ||||||
|  | 	basePosition.left += atOffset[ 0 ]; | ||||||
|  | 	basePosition.top += atOffset[ 1 ]; | ||||||
|  | 
 | ||||||
|  | 	return this.each(function() { | ||||||
|  | 		var collisionPosition, using, | ||||||
|  | 			elem = $( this ), | ||||||
|  | 			elemWidth = elem.outerWidth(), | ||||||
|  | 			elemHeight = elem.outerHeight(), | ||||||
|  | 			marginLeft = parseCss( this, "marginLeft" ), | ||||||
|  | 			marginTop = parseCss( this, "marginTop" ), | ||||||
|  | 			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width, | ||||||
|  | 			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height, | ||||||
|  | 			position = $.extend( {}, basePosition ), | ||||||
|  | 			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); | ||||||
|  | 
 | ||||||
|  | 		if ( options.my[ 0 ] === "right" ) { | ||||||
|  | 			position.left -= elemWidth; | ||||||
|  | 		} else if ( options.my[ 0 ] === "center" ) { | ||||||
|  | 			position.left -= elemWidth / 2; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( options.my[ 1 ] === "bottom" ) { | ||||||
|  | 			position.top -= elemHeight; | ||||||
|  | 		} else if ( options.my[ 1 ] === "center" ) { | ||||||
|  | 			position.top -= elemHeight / 2; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		position.left += myOffset[ 0 ]; | ||||||
|  | 		position.top += myOffset[ 1 ]; | ||||||
|  | 
 | ||||||
|  | 		// if the browser doesn't support fractions, then round for consistent results
 | ||||||
|  | 		if ( !$.support.offsetFractions ) { | ||||||
|  | 			position.left = round( position.left ); | ||||||
|  | 			position.top = round( position.top ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		collisionPosition = { | ||||||
|  | 			marginLeft: marginLeft, | ||||||
|  | 			marginTop: marginTop | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		$.each( [ "left", "top" ], function( i, dir ) { | ||||||
|  | 			if ( $.ui.position[ collision[ i ] ] ) { | ||||||
|  | 				$.ui.position[ collision[ i ] ][ dir ]( position, { | ||||||
|  | 					targetWidth: targetWidth, | ||||||
|  | 					targetHeight: targetHeight, | ||||||
|  | 					elemWidth: elemWidth, | ||||||
|  | 					elemHeight: elemHeight, | ||||||
|  | 					collisionPosition: collisionPosition, | ||||||
|  | 					collisionWidth: collisionWidth, | ||||||
|  | 					collisionHeight: collisionHeight, | ||||||
|  | 					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], | ||||||
|  | 					my: options.my, | ||||||
|  | 					at: options.at, | ||||||
|  | 					within: within, | ||||||
|  | 					elem : elem | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		if ( options.using ) { | ||||||
|  | 			// adds feedback as second argument to using callback, if present
 | ||||||
|  | 			using = function( props ) { | ||||||
|  | 				var left = targetOffset.left - position.left, | ||||||
|  | 					right = left + targetWidth - elemWidth, | ||||||
|  | 					top = targetOffset.top - position.top, | ||||||
|  | 					bottom = top + targetHeight - elemHeight, | ||||||
|  | 					feedback = { | ||||||
|  | 						target: { | ||||||
|  | 							element: target, | ||||||
|  | 							left: targetOffset.left, | ||||||
|  | 							top: targetOffset.top, | ||||||
|  | 							width: targetWidth, | ||||||
|  | 							height: targetHeight | ||||||
|  | 						}, | ||||||
|  | 						element: { | ||||||
|  | 							element: elem, | ||||||
|  | 							left: position.left, | ||||||
|  | 							top: position.top, | ||||||
|  | 							width: elemWidth, | ||||||
|  | 							height: elemHeight | ||||||
|  | 						}, | ||||||
|  | 						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", | ||||||
|  | 						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" | ||||||
|  | 					}; | ||||||
|  | 				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { | ||||||
|  | 					feedback.horizontal = "center"; | ||||||
|  | 				} | ||||||
|  | 				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { | ||||||
|  | 					feedback.vertical = "middle"; | ||||||
|  | 				} | ||||||
|  | 				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { | ||||||
|  | 					feedback.important = "horizontal"; | ||||||
|  | 				} else { | ||||||
|  | 					feedback.important = "vertical"; | ||||||
|  | 				} | ||||||
|  | 				options.using.call( this, props, feedback ); | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		elem.offset( $.extend( position, { using: using } ) ); | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | $.ui.position = { | ||||||
|  | 	fit: { | ||||||
|  | 		left: function( position, data ) { | ||||||
|  | 			var within = data.within, | ||||||
|  | 				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, | ||||||
|  | 				outerWidth = within.width, | ||||||
|  | 				collisionPosLeft = position.left - data.collisionPosition.marginLeft, | ||||||
|  | 				overLeft = withinOffset - collisionPosLeft, | ||||||
|  | 				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, | ||||||
|  | 				newOverRight; | ||||||
|  | 
 | ||||||
|  | 			// element is wider than within
 | ||||||
|  | 			if ( data.collisionWidth > outerWidth ) { | ||||||
|  | 				// element is initially over the left side of within
 | ||||||
|  | 				if ( overLeft > 0 && overRight <= 0 ) { | ||||||
|  | 					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; | ||||||
|  | 					position.left += overLeft - newOverRight; | ||||||
|  | 				// element is initially over right side of within
 | ||||||
|  | 				} else if ( overRight > 0 && overLeft <= 0 ) { | ||||||
|  | 					position.left = withinOffset; | ||||||
|  | 				// element is initially over both left and right sides of within
 | ||||||
|  | 				} else { | ||||||
|  | 					if ( overLeft > overRight ) { | ||||||
|  | 						position.left = withinOffset + outerWidth - data.collisionWidth; | ||||||
|  | 					} else { | ||||||
|  | 						position.left = withinOffset; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			// too far left -> align with left edge
 | ||||||
|  | 			} else if ( overLeft > 0 ) { | ||||||
|  | 				position.left += overLeft; | ||||||
|  | 			// too far right -> align with right edge
 | ||||||
|  | 			} else if ( overRight > 0 ) { | ||||||
|  | 				position.left -= overRight; | ||||||
|  | 			// adjust based on position and margin
 | ||||||
|  | 			} else { | ||||||
|  | 				position.left = max( position.left - collisionPosLeft, position.left ); | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		top: function( position, data ) { | ||||||
|  | 			var within = data.within, | ||||||
|  | 				withinOffset = within.isWindow ? within.scrollTop : within.offset.top, | ||||||
|  | 				outerHeight = data.within.height, | ||||||
|  | 				collisionPosTop = position.top - data.collisionPosition.marginTop, | ||||||
|  | 				overTop = withinOffset - collisionPosTop, | ||||||
|  | 				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, | ||||||
|  | 				newOverBottom; | ||||||
|  | 
 | ||||||
|  | 			// element is taller than within
 | ||||||
|  | 			if ( data.collisionHeight > outerHeight ) { | ||||||
|  | 				// element is initially over the top of within
 | ||||||
|  | 				if ( overTop > 0 && overBottom <= 0 ) { | ||||||
|  | 					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; | ||||||
|  | 					position.top += overTop - newOverBottom; | ||||||
|  | 				// element is initially over bottom of within
 | ||||||
|  | 				} else if ( overBottom > 0 && overTop <= 0 ) { | ||||||
|  | 					position.top = withinOffset; | ||||||
|  | 				// element is initially over both top and bottom of within
 | ||||||
|  | 				} else { | ||||||
|  | 					if ( overTop > overBottom ) { | ||||||
|  | 						position.top = withinOffset + outerHeight - data.collisionHeight; | ||||||
|  | 					} else { | ||||||
|  | 						position.top = withinOffset; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			// too far up -> align with top
 | ||||||
|  | 			} else if ( overTop > 0 ) { | ||||||
|  | 				position.top += overTop; | ||||||
|  | 			// too far down -> align with bottom edge
 | ||||||
|  | 			} else if ( overBottom > 0 ) { | ||||||
|  | 				position.top -= overBottom; | ||||||
|  | 			// adjust based on position and margin
 | ||||||
|  | 			} else { | ||||||
|  | 				position.top = max( position.top - collisionPosTop, position.top ); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	flip: { | ||||||
|  | 		left: function( position, data ) { | ||||||
|  | 			var within = data.within, | ||||||
|  | 				withinOffset = within.offset.left + within.scrollLeft, | ||||||
|  | 				outerWidth = within.width, | ||||||
|  | 				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, | ||||||
|  | 				collisionPosLeft = position.left - data.collisionPosition.marginLeft, | ||||||
|  | 				overLeft = collisionPosLeft - offsetLeft, | ||||||
|  | 				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, | ||||||
|  | 				myOffset = data.my[ 0 ] === "left" ? | ||||||
|  | 					-data.elemWidth : | ||||||
|  | 					data.my[ 0 ] === "right" ? | ||||||
|  | 						data.elemWidth : | ||||||
|  | 						0, | ||||||
|  | 				atOffset = data.at[ 0 ] === "left" ? | ||||||
|  | 					data.targetWidth : | ||||||
|  | 					data.at[ 0 ] === "right" ? | ||||||
|  | 						-data.targetWidth : | ||||||
|  | 						0, | ||||||
|  | 				offset = -2 * data.offset[ 0 ], | ||||||
|  | 				newOverRight, | ||||||
|  | 				newOverLeft; | ||||||
|  | 
 | ||||||
|  | 			if ( overLeft < 0 ) { | ||||||
|  | 				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; | ||||||
|  | 				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { | ||||||
|  | 					position.left += myOffset + atOffset + offset; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			else if ( overRight > 0 ) { | ||||||
|  | 				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; | ||||||
|  | 				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { | ||||||
|  | 					position.left += myOffset + atOffset + offset; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		top: function( position, data ) { | ||||||
|  | 			var within = data.within, | ||||||
|  | 				withinOffset = within.offset.top + within.scrollTop, | ||||||
|  | 				outerHeight = within.height, | ||||||
|  | 				offsetTop = within.isWindow ? within.scrollTop : within.offset.top, | ||||||
|  | 				collisionPosTop = position.top - data.collisionPosition.marginTop, | ||||||
|  | 				overTop = collisionPosTop - offsetTop, | ||||||
|  | 				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, | ||||||
|  | 				top = data.my[ 1 ] === "top", | ||||||
|  | 				myOffset = top ? | ||||||
|  | 					-data.elemHeight : | ||||||
|  | 					data.my[ 1 ] === "bottom" ? | ||||||
|  | 						data.elemHeight : | ||||||
|  | 						0, | ||||||
|  | 				atOffset = data.at[ 1 ] === "top" ? | ||||||
|  | 					data.targetHeight : | ||||||
|  | 					data.at[ 1 ] === "bottom" ? | ||||||
|  | 						-data.targetHeight : | ||||||
|  | 						0, | ||||||
|  | 				offset = -2 * data.offset[ 1 ], | ||||||
|  | 				newOverTop, | ||||||
|  | 				newOverBottom; | ||||||
|  | 			if ( overTop < 0 ) { | ||||||
|  | 				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; | ||||||
|  | 				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) { | ||||||
|  | 					position.top += myOffset + atOffset + offset; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			else if ( overBottom > 0 ) { | ||||||
|  | 				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; | ||||||
|  | 				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) { | ||||||
|  | 					position.top += myOffset + atOffset + offset; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 	flipfit: { | ||||||
|  | 		left: function() { | ||||||
|  | 			$.ui.position.flip.left.apply( this, arguments ); | ||||||
|  | 			$.ui.position.fit.left.apply( this, arguments ); | ||||||
|  | 		}, | ||||||
|  | 		top: function() { | ||||||
|  | 			$.ui.position.flip.top.apply( this, arguments ); | ||||||
|  | 			$.ui.position.fit.top.apply( this, arguments ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | // fraction support test
 | ||||||
|  | (function () { | ||||||
|  | 	var testElement, testElementParent, testElementStyle, offsetLeft, i, | ||||||
|  | 		body = document.getElementsByTagName( "body" )[ 0 ], | ||||||
|  | 		div = document.createElement( "div" ); | ||||||
|  | 
 | ||||||
|  | 	//Create a "fake body" for testing based on method used in jQuery.support
 | ||||||
|  | 	testElement = document.createElement( body ? "div" : "body" ); | ||||||
|  | 	testElementStyle = { | ||||||
|  | 		visibility: "hidden", | ||||||
|  | 		width: 0, | ||||||
|  | 		height: 0, | ||||||
|  | 		border: 0, | ||||||
|  | 		margin: 0, | ||||||
|  | 		background: "none" | ||||||
|  | 	}; | ||||||
|  | 	if ( body ) { | ||||||
|  | 		$.extend( testElementStyle, { | ||||||
|  | 			position: "absolute", | ||||||
|  | 			left: "-1000px", | ||||||
|  | 			top: "-1000px" | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 	for ( i in testElementStyle ) { | ||||||
|  | 		testElement.style[ i ] = testElementStyle[ i ]; | ||||||
|  | 	} | ||||||
|  | 	testElement.appendChild( div ); | ||||||
|  | 	testElementParent = body || document.documentElement; | ||||||
|  | 	testElementParent.insertBefore( testElement, testElementParent.firstChild ); | ||||||
|  | 
 | ||||||
|  | 	div.style.cssText = "position: absolute; left: 10.7432222px;"; | ||||||
|  | 
 | ||||||
|  | 	offsetLeft = $( div ).offset().left; | ||||||
|  | 	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11; | ||||||
|  | 
 | ||||||
|  | 	testElement.innerHTML = ""; | ||||||
|  | 	testElementParent.removeChild( testElement ); | ||||||
|  | })(); | ||||||
|  | 
 | ||||||
|  | }( jQuery ) ); | ||||||
| @ -0,0 +1,145 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Progressbar 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/progressbar/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *   jquery.ui.core.js | ||||||
|  |  *   jquery.ui.widget.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | $.widget( "ui.progressbar", { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	options: { | ||||||
|  | 		max: 100, | ||||||
|  | 		value: 0, | ||||||
|  | 
 | ||||||
|  | 		change: null, | ||||||
|  | 		complete: null | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	min: 0, | ||||||
|  | 
 | ||||||
|  | 	_create: function() { | ||||||
|  | 		// Constrain initial value
 | ||||||
|  | 		this.oldValue = this.options.value = this._constrainedValue(); | ||||||
|  | 
 | ||||||
|  | 		this.element | ||||||
|  | 			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) | ||||||
|  | 			.attr({ | ||||||
|  | 				// Only set static values, aria-valuenow and aria-valuemax are
 | ||||||
|  | 				// set inside _refreshValue()
 | ||||||
|  | 				role: "progressbar", | ||||||
|  | 				"aria-valuemin": this.min | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" ) | ||||||
|  | 			.appendTo( this.element ); | ||||||
|  | 
 | ||||||
|  | 		this._refreshValue(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 		this.element | ||||||
|  | 			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) | ||||||
|  | 			.removeAttr( "role" ) | ||||||
|  | 			.removeAttr( "aria-valuemin" ) | ||||||
|  | 			.removeAttr( "aria-valuemax" ) | ||||||
|  | 			.removeAttr( "aria-valuenow" ); | ||||||
|  | 
 | ||||||
|  | 		this.valueDiv.remove(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	value: function( newValue ) { | ||||||
|  | 		if ( newValue === undefined ) { | ||||||
|  | 			return this.options.value; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.options.value = this._constrainedValue( newValue ); | ||||||
|  | 		this._refreshValue(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_constrainedValue: function( newValue ) { | ||||||
|  | 		if ( newValue === undefined ) { | ||||||
|  | 			newValue = this.options.value; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.indeterminate = newValue === false; | ||||||
|  | 
 | ||||||
|  | 		// sanitize value
 | ||||||
|  | 		if ( typeof newValue !== "number" ) { | ||||||
|  | 			newValue = 0; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return this.indeterminate ? false : | ||||||
|  | 			Math.min( this.options.max, Math.max( this.min, newValue ) ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOptions: function( options ) { | ||||||
|  | 		// Ensure "value" option is set after other values (like max)
 | ||||||
|  | 		var value = options.value; | ||||||
|  | 		delete options.value; | ||||||
|  | 
 | ||||||
|  | 		this._super( options ); | ||||||
|  | 
 | ||||||
|  | 		this.options.value = this._constrainedValue( value ); | ||||||
|  | 		this._refreshValue(); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_setOption: function( key, value ) { | ||||||
|  | 		if ( key === "max" ) { | ||||||
|  | 			// Don't allow a max less than min
 | ||||||
|  | 			value = Math.max( this.min, value ); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._super( key, value ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_percentage: function() { | ||||||
|  | 		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min ); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_refreshValue: function() { | ||||||
|  | 		var value = this.options.value, | ||||||
|  | 			percentage = this._percentage(); | ||||||
|  | 
 | ||||||
|  | 		this.valueDiv | ||||||
|  | 			.toggle( this.indeterminate || value > this.min ) | ||||||
|  | 			.toggleClass( "ui-corner-right", value === this.options.max ) | ||||||
|  | 			.width( percentage.toFixed(0) + "%" ); | ||||||
|  | 
 | ||||||
|  | 		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate ); | ||||||
|  | 
 | ||||||
|  | 		if ( this.indeterminate ) { | ||||||
|  | 			this.element.removeAttr( "aria-valuenow" ); | ||||||
|  | 			if ( !this.overlayDiv ) { | ||||||
|  | 				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv ); | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			this.element.attr({ | ||||||
|  | 				"aria-valuemax": this.options.max, | ||||||
|  | 				"aria-valuenow": value | ||||||
|  | 			}); | ||||||
|  | 			if ( this.overlayDiv ) { | ||||||
|  | 				this.overlayDiv.remove(); | ||||||
|  | 				this.overlayDiv = null; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ( this.oldValue !== value ) { | ||||||
|  | 			this.oldValue = value; | ||||||
|  | 			this._trigger( "change" ); | ||||||
|  | 		} | ||||||
|  | 		if ( value === this.options.max ) { | ||||||
|  | 			this._trigger( "complete" ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | })( jQuery ); | ||||||
| @ -0,0 +1,968 @@ | |||||||
|  | /*! | ||||||
|  |  * jQuery UI Resizable 1.10.3 | ||||||
|  |  * http://jqueryui.com
 | ||||||
|  |  * | ||||||
|  |  * Copyright 2013 jQuery Foundation and other contributors | ||||||
|  |  * Released under the MIT license. | ||||||
|  |  * http://jquery.org/license
 | ||||||
|  |  * | ||||||
|  |  * http://api.jqueryui.com/resizable/
 | ||||||
|  |  * | ||||||
|  |  * Depends: | ||||||
|  |  *	jquery.ui.core.js | ||||||
|  |  *	jquery.ui.mouse.js | ||||||
|  |  *	jquery.ui.widget.js | ||||||
|  |  */ | ||||||
|  | (function( $, undefined ) { | ||||||
|  | 
 | ||||||
|  | function num(v) { | ||||||
|  | 	return parseInt(v, 10) || 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function isNumber(value) { | ||||||
|  | 	return !isNaN(parseInt(value, 10)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | $.widget("ui.resizable", $.ui.mouse, { | ||||||
|  | 	version: "1.10.3", | ||||||
|  | 	widgetEventPrefix: "resize", | ||||||
|  | 	options: { | ||||||
|  | 		alsoResize: false, | ||||||
|  | 		animate: false, | ||||||
|  | 		animateDuration: "slow", | ||||||
|  | 		animateEasing: "swing", | ||||||
|  | 		aspectRatio: false, | ||||||
|  | 		autoHide: false, | ||||||
|  | 		containment: false, | ||||||
|  | 		ghost: false, | ||||||
|  | 		grid: false, | ||||||
|  | 		handles: "e,s,se", | ||||||
|  | 		helper: false, | ||||||
|  | 		maxHeight: null, | ||||||
|  | 		maxWidth: null, | ||||||
|  | 		minHeight: 10, | ||||||
|  | 		minWidth: 10, | ||||||
|  | 		// See #7960
 | ||||||
|  | 		zIndex: 90, | ||||||
|  | 
 | ||||||
|  | 		// callbacks
 | ||||||
|  | 		resize: null, | ||||||
|  | 		start: null, | ||||||
|  | 		stop: null | ||||||
|  | 	}, | ||||||
|  | 	_create: function() { | ||||||
|  | 
 | ||||||
|  | 		var n, i, handle, axis, hname, | ||||||
|  | 			that = this, | ||||||
|  | 			o = this.options; | ||||||
|  | 		this.element.addClass("ui-resizable"); | ||||||
|  | 
 | ||||||
|  | 		$.extend(this, { | ||||||
|  | 			_aspectRatio: !!(o.aspectRatio), | ||||||
|  | 			aspectRatio: o.aspectRatio, | ||||||
|  | 			originalElement: this.element, | ||||||
|  | 			_proportionallyResizeElements: [], | ||||||
|  | 			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		//Wrap the element if it cannot hold child nodes
 | ||||||
|  | 		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { | ||||||
|  | 
 | ||||||
|  | 			//Create a wrapper element and set the wrapper to the new current internal element
 | ||||||
|  | 			this.element.wrap( | ||||||
|  | 				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({ | ||||||
|  | 					position: this.element.css("position"), | ||||||
|  | 					width: this.element.outerWidth(), | ||||||
|  | 					height: this.element.outerHeight(), | ||||||
|  | 					top: this.element.css("top"), | ||||||
|  | 					left: this.element.css("left") | ||||||
|  | 				}) | ||||||
|  | 			); | ||||||
|  | 
 | ||||||
|  | 			//Overwrite the original this.element
 | ||||||
|  | 			this.element = this.element.parent().data( | ||||||
|  | 				"ui-resizable", this.element.data("ui-resizable") | ||||||
|  | 			); | ||||||
|  | 
 | ||||||
|  | 			this.elementIsWrapper = true; | ||||||
|  | 
 | ||||||
|  | 			//Move margins to the wrapper
 | ||||||
|  | 			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); | ||||||
|  | 			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); | ||||||
|  | 
 | ||||||
|  | 			//Prevent Safari textarea resize
 | ||||||
|  | 			this.originalResizeStyle = this.originalElement.css("resize"); | ||||||
|  | 			this.originalElement.css("resize", "none"); | ||||||
|  | 
 | ||||||
|  | 			//Push the actual element to our proportionallyResize internal array
 | ||||||
|  | 			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" })); | ||||||
|  | 
 | ||||||
|  | 			// avoid IE jump (hard set the margin)
 | ||||||
|  | 			this.originalElement.css({ margin: this.originalElement.css("margin") }); | ||||||
|  | 
 | ||||||
|  | 			// fix handlers offset
 | ||||||
|  | 			this._proportionallyResize(); | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" }); | ||||||
|  | 		if(this.handles.constructor === String) { | ||||||
|  | 
 | ||||||
|  | 			if ( this.handles === "all") { | ||||||
|  | 				this.handles = "n,e,s,w,se,sw,ne,nw"; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			n = this.handles.split(","); | ||||||
|  | 			this.handles = {}; | ||||||
|  | 
 | ||||||
|  | 			for(i = 0; i < n.length; i++) { | ||||||
|  | 
 | ||||||
|  | 				handle = $.trim(n[i]); | ||||||
|  | 				hname = "ui-resizable-"+handle; | ||||||
|  | 				axis = $("<div class='ui-resizable-handle " + hname + "'></div>"); | ||||||
|  | 
 | ||||||
|  | 				// Apply zIndex to all handles - see #7960
 | ||||||
|  | 				axis.css({ zIndex: o.zIndex }); | ||||||
|  | 
 | ||||||
|  | 				//TODO : What's going on here?
 | ||||||
|  | 				if ("se" === handle) { | ||||||
|  | 					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se"); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				//Insert into internal handles object and append to element
 | ||||||
|  | 				this.handles[handle] = ".ui-resizable-"+handle; | ||||||
|  | 				this.element.append(axis); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._renderAxis = function(target) { | ||||||
|  | 
 | ||||||
|  | 			var i, axis, padPos, padWrapper; | ||||||
|  | 
 | ||||||
|  | 			target = target || this.element; | ||||||
|  | 
 | ||||||
|  | 			for(i in this.handles) { | ||||||
|  | 
 | ||||||
|  | 				if(this.handles[i].constructor === String) { | ||||||
|  | 					this.handles[i] = $(this.handles[i], this.element).show(); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
 | ||||||
|  | 				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { | ||||||
|  | 
 | ||||||
|  | 					axis = $(this.handles[i], this.element); | ||||||
|  | 
 | ||||||
|  | 					//Checking the correct pad and border
 | ||||||
|  | 					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); | ||||||
|  | 
 | ||||||
|  | 					//The padding type i have to apply...
 | ||||||
|  | 					padPos = [ "padding", | ||||||
|  | 						/ne|nw|n/.test(i) ? "Top" : | ||||||
|  | 						/se|sw|s/.test(i) ? "Bottom" : | ||||||
|  | 						/^e$/.test(i) ? "Right" : "Left" ].join(""); | ||||||
|  | 
 | ||||||
|  | 					target.css(padPos, padWrapper); | ||||||
|  | 
 | ||||||
|  | 					this._proportionallyResize(); | ||||||
|  | 
 | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				//TODO: What's that good for? There's not anything to be executed left
 | ||||||
|  | 				if(!$(this.handles[i]).length) { | ||||||
|  | 					continue; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		//TODO: make renderAxis a prototype function
 | ||||||
|  | 		this._renderAxis(this.element); | ||||||
|  | 
 | ||||||
|  | 		this._handles = $(".ui-resizable-handle", this.element) | ||||||
|  | 			.disableSelection(); | ||||||
|  | 
 | ||||||
|  | 		//Matching axis name
 | ||||||
|  | 		this._handles.mouseover(function() { | ||||||
|  | 			if (!that.resizing) { | ||||||
|  | 				if (this.className) { | ||||||
|  | 					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); | ||||||
|  | 				} | ||||||
|  | 				//Axis, default = se
 | ||||||
|  | 				that.axis = axis && axis[1] ? axis[1] : "se"; | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		//If we want to auto hide the elements
 | ||||||
|  | 		if (o.autoHide) { | ||||||
|  | 			this._handles.hide(); | ||||||
|  | 			$(this.element) | ||||||
|  | 				.addClass("ui-resizable-autohide") | ||||||
|  | 				.mouseenter(function() { | ||||||
|  | 					if (o.disabled) { | ||||||
|  | 						return; | ||||||
|  | 					} | ||||||
|  | 					$(this).removeClass("ui-resizable-autohide"); | ||||||
|  | 					that._handles.show(); | ||||||
|  | 				}) | ||||||
|  | 				.mouseleave(function(){ | ||||||
|  | 					if (o.disabled) { | ||||||
|  | 						return; | ||||||
|  | 					} | ||||||
|  | 					if (!that.resizing) { | ||||||
|  | 						$(this).addClass("ui-resizable-autohide"); | ||||||
|  | 						that._handles.hide(); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//Initialize the mouse interaction
 | ||||||
|  | 		this._mouseInit(); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_destroy: function() { | ||||||
|  | 
 | ||||||
|  | 		this._mouseDestroy(); | ||||||
|  | 
 | ||||||
|  | 		var wrapper, | ||||||
|  | 			_destroy = function(exp) { | ||||||
|  | 				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") | ||||||
|  | 					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove(); | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 		//TODO: Unwrap at same DOM position
 | ||||||
|  | 		if (this.elementIsWrapper) { | ||||||
|  | 			_destroy(this.element); | ||||||
|  | 			wrapper = this.element; | ||||||
|  | 			this.originalElement.css({ | ||||||
|  | 				position: wrapper.css("position"), | ||||||
|  | 				width: wrapper.outerWidth(), | ||||||
|  | 				height: wrapper.outerHeight(), | ||||||
|  | 				top: wrapper.css("top"), | ||||||
|  | 				left: wrapper.css("left") | ||||||
|  | 			}).insertAfter( wrapper ); | ||||||
|  | 			wrapper.remove(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this.originalElement.css("resize", this.originalResizeStyle); | ||||||
|  | 		_destroy(this.originalElement); | ||||||
|  | 
 | ||||||
|  | 		return this; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseCapture: function(event) { | ||||||
|  | 		var i, handle, | ||||||
|  | 			capture = false; | ||||||
|  | 
 | ||||||
|  | 		for (i in this.handles) { | ||||||
|  | 			handle = $(this.handles[i])[0]; | ||||||
|  | 			if (handle === event.target || $.contains(handle, event.target)) { | ||||||
|  | 				capture = true; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return !this.options.disabled && capture; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseStart: function(event) { | ||||||
|  | 
 | ||||||
|  | 		var curleft, curtop, cursor, | ||||||
|  | 			o = this.options, | ||||||
|  | 			iniPos = this.element.position(), | ||||||
|  | 			el = this.element; | ||||||
|  | 
 | ||||||
|  | 		this.resizing = true; | ||||||
|  | 
 | ||||||
|  | 		// bugfix for http://dev.jquery.com/ticket/1749
 | ||||||
|  | 		if ( (/absolute/).test( el.css("position") ) ) { | ||||||
|  | 			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") }); | ||||||
|  | 		} else if (el.is(".ui-draggable")) { | ||||||
|  | 			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left }); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		this._renderProxy(); | ||||||
|  | 
 | ||||||
|  | 		curleft = num(this.helper.css("left")); | ||||||
|  | 		curtop = num(this.helper.css("top")); | ||||||
|  | 
 | ||||||
|  | 		if (o.containment) { | ||||||
|  | 			curleft += $(o.containment).scrollLeft() || 0; | ||||||
|  | 			curtop += $(o.containment).scrollTop() || 0; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		//Store needed variables
 | ||||||
|  | 		this.offset = this.helper.offset(); | ||||||
|  | 		this.position = { left: curleft, top: curtop }; | ||||||
|  | 		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; | ||||||
|  | 		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; | ||||||
|  | 		this.originalPosition = { left: curleft, top: curtop }; | ||||||
|  | 		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; | ||||||
|  | 		this.originalMousePosition = { left: event.pageX, top: event.pageY }; | ||||||
|  | 
 | ||||||
|  | 		//Aspect Ratio
 | ||||||
|  | 		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); | ||||||
|  | 
 | ||||||
|  | 		cursor = $(".ui-resizable-" + this.axis).css("cursor"); | ||||||
|  | 		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor); | ||||||
|  | 
 | ||||||
|  | 		el.addClass("ui-resizable-resizing"); | ||||||
|  | 		this._propagate("start", event); | ||||||
|  | 		return true; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseDrag: function(event) { | ||||||
|  | 
 | ||||||
|  | 		//Increase performance, avoid regex
 | ||||||
|  | 		var data, | ||||||
|  | 			el = this.helper, props = {}, | ||||||
|  | 			smp = this.originalMousePosition, | ||||||
|  | 			a = this.axis, | ||||||
|  | 			prevTop = this.position.top, | ||||||
|  | 			prevLeft = this.position.left, | ||||||
|  | 			prevWidth = this.size.width, | ||||||
|  | 			prevHeight = this.size.height, | ||||||
|  | 			dx = (event.pageX-smp.left)||0, | ||||||
|  | 			dy = (event.pageY-smp.top)||0, | ||||||
|  | 			trigger = this._change[a]; | ||||||
|  | 
 | ||||||
|  | 		if (!trigger) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Calculate the attrs that will be change
 | ||||||
|  | 		data = trigger.apply(this, [event, dx, dy]); | ||||||
|  | 
 | ||||||
|  | 		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
 | ||||||
|  | 		this._updateVirtualBoundaries(event.shiftKey); | ||||||
|  | 		if (this._aspectRatio || event.shiftKey) { | ||||||
|  | 			data = this._updateRatio(data, event); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		data = this._respectSize(data, event); | ||||||
|  | 
 | ||||||
|  | 		this._updateCache(data); | ||||||
|  | 
 | ||||||
|  | 		// plugins callbacks need to be called first
 | ||||||
|  | 		this._propagate("resize", event); | ||||||
|  | 
 | ||||||
|  | 		if (this.position.top !== prevTop) { | ||||||
|  | 			props.top = this.position.top + "px"; | ||||||
|  | 		} | ||||||
|  | 		if (this.position.left !== prevLeft) { | ||||||
|  | 			props.left = this.position.left + "px"; | ||||||
|  | 		} | ||||||
|  | 		if (this.size.width !== prevWidth) { | ||||||
|  | 			props.width = this.size.width + "px"; | ||||||
|  | 		} | ||||||
|  | 		if (this.size.height !== prevHeight) { | ||||||
|  | 			props.height = this.size.height + "px"; | ||||||
|  | 		} | ||||||
|  | 		el.css(props); | ||||||
|  | 
 | ||||||
|  | 		if (!this._helper && this._proportionallyResizeElements.length) { | ||||||
|  | 			this._proportionallyResize(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Call the user callback if the element was resized
 | ||||||
|  | 		if ( ! $.isEmptyObject(props) ) { | ||||||
|  | 			this._trigger("resize", event, this.ui()); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return false; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_mouseStop: function(event) { | ||||||
|  | 
 | ||||||
|  | 		this.resizing = false; | ||||||
|  | 		var pr, ista, soffseth, soffsetw, s, left, top, | ||||||
|  | 			o = this.options, that = this; | ||||||
|  | 
 | ||||||
|  | 		if(this._helper) { | ||||||
|  | 
 | ||||||
|  | 			pr = this._proportionallyResizeElements; | ||||||
|  | 			ista = pr.length && (/textarea/i).test(pr[0].nodeName); | ||||||
|  | 			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height; | ||||||
|  | 			soffsetw = ista ? 0 : that.sizeDiff.width; | ||||||
|  | 
 | ||||||
|  | 			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) }; | ||||||
|  | 			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null; | ||||||
|  | 			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null; | ||||||
|  | 
 | ||||||
|  | 			if (!o.animate) { | ||||||
|  | 				this.element.css($.extend(s, { top: top, left: left })); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			that.helper.height(that.size.height); | ||||||
|  | 			that.helper.width(that.size.width); | ||||||
|  | 
 | ||||||
|  | 			if (this._helper && !o.animate) { | ||||||
|  | 				this._proportionallyResize(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		$("body").css("cursor", "auto"); | ||||||
|  | 
 | ||||||
|  | 		this.element.removeClass("ui-resizable-resizing"); | ||||||
|  | 
 | ||||||
|  | 		this._propagate("stop", event); | ||||||
|  | 
 | ||||||
|  | 		if (this._helper) { | ||||||
|  | 			this.helper.remove(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return false; | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_updateVirtualBoundaries: function(forceAspectRatio) { | ||||||
|  | 		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b, | ||||||
|  | 			o = this.options; | ||||||
|  | 
 | ||||||
|  | 		b = { | ||||||
|  | 			minWidth: isNumber(o.minWidth) ? o.minWidth : 0, | ||||||
|  | 			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity, | ||||||
|  | 			minHeight: isNumber(o.minHeight) ? o.minHeight : 0, | ||||||
|  | 			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		if(this._aspectRatio || forceAspectRatio) { | ||||||
|  | 			// We want to create an enclosing box whose aspect ration is the requested one
 | ||||||
|  | 			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
 | ||||||
|  | 			pMinWidth = b.minHeight * this.aspectRatio; | ||||||
|  | 			pMinHeight = b.minWidth / this.aspectRatio; | ||||||
|  | 			pMaxWidth = b.maxHeight * this.aspectRatio; | ||||||
|  | 			pMaxHeight = b.maxWidth / this.aspectRatio; | ||||||
|  | 
 | ||||||
|  | 			if(pMinWidth > b.minWidth) { | ||||||
|  | 				b.minWidth = pMinWidth; | ||||||
|  | 			} | ||||||
|  | 			if(pMinHeight > b.minHeight) { | ||||||
|  | 				b.minHeight = pMinHeight; | ||||||
|  | 			} | ||||||
|  | 			if(pMaxWidth < b.maxWidth) { | ||||||
|  | 				b.maxWidth = pMaxWidth; | ||||||
|  | 			} | ||||||
|  | 			if(pMaxHeight < b.maxHeight) { | ||||||
|  | 				b.maxHeight = pMaxHeight; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		this._vBoundaries = b; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_updateCache: function(data) { | ||||||
|  | 		this.offset = this.helper.offset(); | ||||||
|  | 		if (isNumber(data.left)) { | ||||||
|  | 			this.position.left = data.left; | ||||||
|  | 		} | ||||||
|  | 		if (isNumber(data.top)) { | ||||||
|  | 			this.position.top = data.top; | ||||||
|  | 		} | ||||||
|  | 		if (isNumber(data.height)) { | ||||||
|  | 			this.size.height = data.height; | ||||||
|  | 		} | ||||||
|  | 		if (isNumber(data.width)) { | ||||||
|  | 			this.size.width = data.width; | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_updateRatio: function( data ) { | ||||||
|  | 
 | ||||||
|  | 		var cpos = this.position, | ||||||
|  | 			csize = this.size, | ||||||
|  | 			a = this.axis; | ||||||
|  | 
 | ||||||
|  | 		if (isNumber(data.height)) { | ||||||
|  | 			data.width = (data.height * this.aspectRatio); | ||||||
|  | 		} else if (isNumber(data.width)) { | ||||||
|  | 			data.height = (data.width / this.aspectRatio); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (a === "sw") { | ||||||
|  | 			data.left = cpos.left + (csize.width - data.width); | ||||||
|  | 			data.top = null; | ||||||
|  | 		} | ||||||
|  | 		if (a === "nw") { | ||||||
|  | 			data.top = cpos.top + (csize.height - data.height); | ||||||
|  | 			data.left = cpos.left + (csize.width - data.width); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return data; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_respectSize: function( data ) { | ||||||
|  | 
 | ||||||
|  | 		var o = this._vBoundaries, | ||||||
|  | 			a = this.axis, | ||||||
|  | 			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), | ||||||
|  | 			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height), | ||||||
|  | 			dw = this.originalPosition.left + this.originalSize.width, | ||||||
|  | 			dh = this.position.top + this.size.height, | ||||||
|  | 			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); | ||||||
|  | 		if (isminw) { | ||||||
|  | 			data.width = o.minWidth; | ||||||
|  | 		} | ||||||
|  | 		if (isminh) { | ||||||
|  | 			data.height = o.minHeight; | ||||||
|  | 		} | ||||||
|  | 		if (ismaxw) { | ||||||
|  | 			data.width = o.maxWidth; | ||||||
|  | 		} | ||||||
|  | 		if (ismaxh) { | ||||||
|  | 			data.height = o.maxHeight; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (isminw && cw) { | ||||||
|  | 			data.left = dw - o.minWidth; | ||||||
|  | 		} | ||||||
|  | 		if (ismaxw && cw) { | ||||||
|  | 			data.left = dw - o.maxWidth; | ||||||
|  | 		} | ||||||
|  | 		if (isminh && ch) { | ||||||
|  | 			data.top = dh - o.minHeight; | ||||||
|  | 		} | ||||||
|  | 		if (ismaxh && ch) { | ||||||
|  | 			data.top = dh - o.maxHeight; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// fixing jump error on top/left - bug #2330
 | ||||||
|  | 		if (!data.width && !data.height && !data.left && data.top) { | ||||||
|  | 			data.top = null; | ||||||
|  | 		} else if (!data.width && !data.height && !data.top && data.left) { | ||||||
|  | 			data.left = null; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return data; | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_proportionallyResize: function() { | ||||||
|  | 
 | ||||||
|  | 		if (!this._proportionallyResizeElements.length) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		var i, j, borders, paddings, prel, | ||||||
|  | 			element = this.helper || this.element; | ||||||
|  | 
 | ||||||
|  | 		for ( i=0; i < this._proportionallyResizeElements.length; i++) { | ||||||
|  | 
 | ||||||
|  | 			prel = this._proportionallyResizeElements[i]; | ||||||
|  | 
 | ||||||
|  | 			if (!this.borderDif) { | ||||||
|  | 				this.borderDif = []; | ||||||
|  | 				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")]; | ||||||
|  | 				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")]; | ||||||
|  | 
 | ||||||
|  | 				for ( j = 0; j < borders.length; j++ ) { | ||||||
|  | 					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 ); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			prel.css({ | ||||||
|  | 				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, | ||||||
|  | 				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_renderProxy: function() { | ||||||
|  | 
 | ||||||
|  | 		var el = this.element, o = this.options; | ||||||
|  | 		this.elementOffset = el.offset(); | ||||||
|  | 
 | ||||||
|  | 		if(this._helper) { | ||||||
|  | 
 | ||||||
|  | 			this.helper = this.helper || $("<div style='overflow:hidden;'></div>"); | ||||||
|  | 
 | ||||||
|  | 			this.helper.addClass(this._helper).css({ | ||||||
|  | 				width: this.element.outerWidth() - 1, | ||||||
|  | 				height: this.element.outerHeight() - 1, | ||||||
|  | 				position: "absolute", | ||||||
|  | 				left: this.elementOffset.left +"px", | ||||||
|  | 				top: this.elementOffset.top +"px", | ||||||
|  | 				zIndex: ++o.zIndex //TODO: Don't modify option
 | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 			this.helper | ||||||
|  | 				.appendTo("body") | ||||||
|  | 				.disableSelection(); | ||||||
|  | 
 | ||||||
|  | 		} else { | ||||||
|  | 			this.helper = this.element; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_change: { | ||||||
|  | 		e: function(event, dx) { | ||||||
|  | 			return { width: this.originalSize.width + dx }; | ||||||
|  | 		}, | ||||||
|  | 		w: function(event, dx) { | ||||||
|  | 			var cs = this.originalSize, sp = this.originalPosition; | ||||||
|  | 			return { left: sp.left + dx, width: cs.width - dx }; | ||||||
|  | 		}, | ||||||
|  | 		n: function(event, dx, dy) { | ||||||
|  | 			var cs = this.originalSize, sp = this.originalPosition; | ||||||
|  | 			return { top: sp.top + dy, height: cs.height - dy }; | ||||||
|  | 		}, | ||||||
|  | 		s: function(event, dx, dy) { | ||||||
|  | 			return { height: this.originalSize.height + dy }; | ||||||
|  | 		}, | ||||||
|  | 		se: function(event, dx, dy) { | ||||||
|  | 			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); | ||||||
|  | 		}, | ||||||
|  | 		sw: function(event, dx, dy) { | ||||||
|  | 			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); | ||||||
|  | 		}, | ||||||
|  | 		ne: function(event, dx, dy) { | ||||||
|  | 			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); | ||||||
|  | 		}, | ||||||
|  | 		nw: function(event, dx, dy) { | ||||||
|  | 			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	_propagate: function(n, event) { | ||||||
|  | 		$.ui.plugin.call(this, n, [event, this.ui()]); | ||||||
|  | 		(n !== "resize" && this._trigger(n, event, this.ui())); | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	plugins: {}, | ||||||
|  | 
 | ||||||
|  | 	ui: function() { | ||||||
|  | 		return { | ||||||
|  | 			originalElement: this.originalElement, | ||||||
|  | 			element: this.element, | ||||||
|  | 			helper: this.helper, | ||||||
|  | 			position: this.position, | ||||||
|  | 			size: this.size, | ||||||
|  | 			originalSize: this.originalSize, | ||||||
|  | 			originalPosition: this.originalPosition | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  |  * Resizable Extensions | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("resizable", "animate", { | ||||||
|  | 
 | ||||||
|  | 	stop: function( event ) { | ||||||
|  | 		var that = $(this).data("ui-resizable"), | ||||||
|  | 			o = that.options, | ||||||
|  | 			pr = that._proportionallyResizeElements, | ||||||
|  | 			ista = pr.length && (/textarea/i).test(pr[0].nodeName), | ||||||
|  | 			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height, | ||||||
|  | 			soffsetw = ista ? 0 : that.sizeDiff.width, | ||||||
|  | 			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) }, | ||||||
|  | 			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null, | ||||||
|  | 			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null; | ||||||
|  | 
 | ||||||
|  | 		that.element.animate( | ||||||
|  | 			$.extend(style, top && left ? { top: top, left: left } : {}), { | ||||||
|  | 				duration: o.animateDuration, | ||||||
|  | 				easing: o.animateEasing, | ||||||
|  | 				step: function() { | ||||||
|  | 
 | ||||||
|  | 					var data = { | ||||||
|  | 						width: parseInt(that.element.css("width"), 10), | ||||||
|  | 						height: parseInt(that.element.css("height"), 10), | ||||||
|  | 						top: parseInt(that.element.css("top"), 10), | ||||||
|  | 						left: parseInt(that.element.css("left"), 10) | ||||||
|  | 					}; | ||||||
|  | 
 | ||||||
|  | 					if (pr && pr.length) { | ||||||
|  | 						$(pr[0]).css({ width: data.width, height: data.height }); | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					// propagating resize, and updating values for each animation step
 | ||||||
|  | 					that._updateCache(data); | ||||||
|  | 					that._propagate("resize", event); | ||||||
|  | 
 | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("resizable", "containment", { | ||||||
|  | 
 | ||||||
|  | 	start: function() { | ||||||
|  | 		var element, p, co, ch, cw, width, height, | ||||||
|  | 			that = $(this).data("ui-resizable"), | ||||||
|  | 			o = that.options, | ||||||
|  | 			el = that.element, | ||||||
|  | 			oc = o.containment, | ||||||
|  | 			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; | ||||||
|  | 
 | ||||||
|  | 		if (!ce) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		that.containerElement = $(ce); | ||||||
|  | 
 | ||||||
|  | 		if (/document/.test(oc) || oc === document) { | ||||||
|  | 			that.containerOffset = { left: 0, top: 0 }; | ||||||
|  | 			that.containerPosition = { left: 0, top: 0 }; | ||||||
|  | 
 | ||||||
|  | 			that.parentData = { | ||||||
|  | 				element: $(document), left: 0, top: 0, | ||||||
|  | 				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// i'm a node, so compute top, left, right, bottom
 | ||||||
|  | 		else { | ||||||
|  | 			element = $(ce); | ||||||
|  | 			p = []; | ||||||
|  | 			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); | ||||||
|  | 
 | ||||||
|  | 			that.containerOffset = element.offset(); | ||||||
|  | 			that.containerPosition = element.position(); | ||||||
|  | 			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; | ||||||
|  | 
 | ||||||
|  | 			co = that.containerOffset; | ||||||
|  | 			ch = that.containerSize.height; | ||||||
|  | 			cw = that.containerSize.width; | ||||||
|  | 			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ); | ||||||
|  | 			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); | ||||||
|  | 
 | ||||||
|  | 			that.parentData = { | ||||||
|  | 				element: ce, left: co.left, top: co.top, width: width, height: height | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	resize: function( event ) { | ||||||
|  | 		var woset, hoset, isParent, isOffsetRelative, | ||||||
|  | 			that = $(this).data("ui-resizable"), | ||||||
|  | 			o = that.options, | ||||||
|  | 			co = that.containerOffset, cp = that.position, | ||||||
|  | 			pRatio = that._aspectRatio || event.shiftKey, | ||||||
|  | 			cop = { top:0, left:0 }, ce = that.containerElement; | ||||||
|  | 
 | ||||||
|  | 		if (ce[0] !== document && (/static/).test(ce.css("position"))) { | ||||||
|  | 			cop = co; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (cp.left < (that._helper ? co.left : 0)) { | ||||||
|  | 			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left)); | ||||||
|  | 			if (pRatio) { | ||||||
|  | 				that.size.height = that.size.width / that.aspectRatio; | ||||||
|  | 			} | ||||||
|  | 			that.position.left = o.helper ? co.left : 0; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (cp.top < (that._helper ? co.top : 0)) { | ||||||
|  | 			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top); | ||||||
|  | 			if (pRatio) { | ||||||
|  | 				that.size.width = that.size.height * that.aspectRatio; | ||||||
|  | 			} | ||||||
|  | 			that.position.top = that._helper ? co.top : 0; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		that.offset.left = that.parentData.left+that.position.left; | ||||||
|  | 		that.offset.top = that.parentData.top+that.position.top; | ||||||
|  | 
 | ||||||
|  | 		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width ); | ||||||
|  | 		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height ); | ||||||
|  | 
 | ||||||
|  | 		isParent = that.containerElement.get(0) === that.element.parent().get(0); | ||||||
|  | 		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position")); | ||||||
|  | 
 | ||||||
|  | 		if(isParent && isOffsetRelative) { | ||||||
|  | 			woset -= that.parentData.left; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (woset + that.size.width >= that.parentData.width) { | ||||||
|  | 			that.size.width = that.parentData.width - woset; | ||||||
|  | 			if (pRatio) { | ||||||
|  | 				that.size.height = that.size.width / that.aspectRatio; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (hoset + that.size.height >= that.parentData.height) { | ||||||
|  | 			that.size.height = that.parentData.height - hoset; | ||||||
|  | 			if (pRatio) { | ||||||
|  | 				that.size.width = that.size.height * that.aspectRatio; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	stop: function(){ | ||||||
|  | 		var that = $(this).data("ui-resizable"), | ||||||
|  | 			o = that.options, | ||||||
|  | 			co = that.containerOffset, | ||||||
|  | 			cop = that.containerPosition, | ||||||
|  | 			ce = that.containerElement, | ||||||
|  | 			helper = $(that.helper), | ||||||
|  | 			ho = helper.offset(), | ||||||
|  | 			w = helper.outerWidth() - that.sizeDiff.width, | ||||||
|  | 			h = helper.outerHeight() - that.sizeDiff.height; | ||||||
|  | 
 | ||||||
|  | 		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) { | ||||||
|  | 			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) { | ||||||
|  | 			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("resizable", "alsoResize", { | ||||||
|  | 
 | ||||||
|  | 	start: function () { | ||||||
|  | 		var that = $(this).data("ui-resizable"), | ||||||
|  | 			o = that.options, | ||||||
|  | 			_store = function (exp) { | ||||||
|  | 				$(exp).each(function() { | ||||||
|  | 					var el = $(this); | ||||||
|  | 					el.data("ui-resizable-alsoresize", { | ||||||
|  | 						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), | ||||||
|  | 						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10) | ||||||
|  | 					}); | ||||||
|  | 				}); | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) { | ||||||
|  | 			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } | ||||||
|  | 			else { $.each(o.alsoResize, function (exp) { _store(exp); }); } | ||||||
|  | 		}else{ | ||||||
|  | 			_store(o.alsoResize); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	resize: function (event, ui) { | ||||||
|  | 		var that = $(this).data("ui-resizable"), | ||||||
|  | 			o = that.options, | ||||||
|  | 			os = that.originalSize, | ||||||
|  | 			op = that.originalPosition, | ||||||
|  | 			delta = { | ||||||
|  | 				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0, | ||||||
|  | 				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0 | ||||||
|  | 			}, | ||||||
|  | 
 | ||||||
|  | 			_alsoResize = function (exp, c) { | ||||||
|  | 				$(exp).each(function() { | ||||||
|  | 					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {}, | ||||||
|  | 						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"]; | ||||||
|  | 
 | ||||||
|  | 					$.each(css, function (i, prop) { | ||||||
|  | 						var sum = (start[prop]||0) + (delta[prop]||0); | ||||||
|  | 						if (sum && sum >= 0) { | ||||||
|  | 							style[prop] = sum || null; | ||||||
|  | 						} | ||||||
|  | 					}); | ||||||
|  | 
 | ||||||
|  | 					el.css(style); | ||||||
|  | 				}); | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) { | ||||||
|  | 			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); | ||||||
|  | 		}else{ | ||||||
|  | 			_alsoResize(o.alsoResize); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	stop: function () { | ||||||
|  | 		$(this).removeData("resizable-alsoresize"); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("resizable", "ghost", { | ||||||
|  | 
 | ||||||
|  | 	start: function() { | ||||||
|  | 
 | ||||||
|  | 		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size; | ||||||
|  | 
 | ||||||
|  | 		that.ghost = that.originalElement.clone(); | ||||||
|  | 		that.ghost | ||||||
|  | 			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) | ||||||
|  | 			.addClass("ui-resizable-ghost") | ||||||
|  | 			.addClass(typeof o.ghost === "string" ? o.ghost : ""); | ||||||
|  | 
 | ||||||
|  | 		that.ghost.appendTo(that.helper); | ||||||
|  | 
 | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	resize: function(){ | ||||||
|  | 		var that = $(this).data("ui-resizable"); | ||||||
|  | 		if (that.ghost) { | ||||||
|  | 			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width }); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	stop: function() { | ||||||
|  | 		var that = $(this).data("ui-resizable"); | ||||||
|  | 		if (that.ghost && that.helper) { | ||||||
|  | 			that.helper.get(0).removeChild(that.ghost.get(0)); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | $.ui.plugin.add("resizable", "grid", { | ||||||
|  | 
 | ||||||
|  | 	resize: function() { | ||||||
|  | 		var that = $(this).data("ui-resizable"), | ||||||
|  | 			o = that.options, | ||||||
|  | 			cs = that.size, | ||||||
|  | 			os = that.originalSize, | ||||||
|  | 			op = that.originalPosition, | ||||||
|  | 			a = that.axis, | ||||||
|  | 			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid, | ||||||
|  | 			gridX = (grid[0]||1), | ||||||
|  | 			gridY = (grid[1]||1), | ||||||
|  | 			ox = Math.round((cs.width - os.width) / gridX) * gridX, | ||||||
|  | 			oy = Math.round((cs.height - os.height) / gridY) * gridY, | ||||||
|  | 			newWidth = os.width + ox, | ||||||
|  | 			newHeight = os.height + oy, | ||||||
|  | 			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth), | ||||||
|  | 			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight), | ||||||
|  | 			isMinWidth = o.minWidth && (o.minWidth > newWidth), | ||||||
|  | 			isMinHeight = o.minHeight && (o.minHeight > newHeight); | ||||||
|  | 
 | ||||||
|  | 		o.grid = grid; | ||||||
|  | 
 | ||||||
|  | 		if (isMinWidth) { | ||||||
|  | 			newWidth = newWidth + gridX; | ||||||
|  | 		} | ||||||
|  | 		if (isMinHeight) { | ||||||
|  | 			newHeight = newHeight + gridY; | ||||||
|  | 		} | ||||||
|  | 		if (isMaxWidth) { | ||||||
|  | 			newWidth = newWidth - gridX; | ||||||
|  | 		} | ||||||
|  | 		if (isMaxHeight) { | ||||||
|  | 			newHeight = newHeight - gridY; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (/^(se|s|e)$/.test(a)) { | ||||||
|  | 			that.size.width = newWidth; | ||||||
|  | 			that.size.height = newHeight; | ||||||
|  | 		} else if (/^(ne)$/.test(a)) { | ||||||
|  | 			that.size.width = newWidth; | ||||||
|  | 			that.size.height = newHeight; | ||||||
|  | 			that.position.top = op.top - oy; | ||||||
|  | 		} else if (/^(sw)$/.test(a)) { | ||||||
|  | 			that.size.width = newWidth; | ||||||
|  | 			that.size.height = newHeight; | ||||||
|  | 			that.position.left = op.left - ox; | ||||||
|  | 		} else { | ||||||
|  | 			that.size.width = newWidth; | ||||||
|  | 			that.size.height = newHeight; | ||||||
|  | 			that.position.top = op.top - oy; | ||||||
|  | 			that.position.left = op.left - ox; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | })(jQuery); | ||||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in new issue