diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index e289e9c54..a3aab34c5 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -86,8 +86,13 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $baseUrl = Application_Common_OsPath::getBaseDir(); - $view->headScript()->appendFile($baseUrl.'js/libs/jquery-1.7.2.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $view->headScript()->appendFile($baseUrl.'js/libs/jquery-ui-1.8.18.custom.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + //$view->headScript()->appendFile($baseUrl.'js/libs/jquery-1.7.2.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $view->headScript()->appendFile('http://code.jquery.com/jquery-1.10.1.min.js','text/javascript'); + $view->headScript()->appendFile('http://code.jquery.com/jquery-migrate-1.2.1.min.js','text/javascript'); + + //$view->headScript()->appendFile($baseUrl.'js/libs/jquery-ui-1.8.18.custom.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $view->headScript()->appendFile('http://code.jquery.com/ui/1.10.3/jquery-ui.js','text/javascript'); + $view->headScript()->appendFile($baseUrl.'js/libs/jquery.stickyPanel.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'js/qtip/jquery.qtip.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'js/jplayer/jquery.jplayer.min.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); diff --git a/airtime_mvc/application/controllers/PlayouthistoryController.php b/airtime_mvc/application/controllers/PlayouthistoryController.php index 8b84902e3..b77420594 100644 --- a/airtime_mvc/application/controllers/PlayouthistoryController.php +++ b/airtime_mvc/application/controllers/PlayouthistoryController.php @@ -56,6 +56,7 @@ class PlayouthistoryController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'js/datatables/plugin/TableTools/js/ZeroClipboard.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'js/datatables/plugin/TableTools/js/TableTools.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'js/bootstrap-datetime/bootstrap-datetimepicker.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $offset = date("Z") * -1; $this->view->headScript()->appendScript("var serverTimezoneOffset = {$offset}; //in seconds"); @@ -67,6 +68,7 @@ class PlayouthistoryController extends Zend_Controller_Action $this->view->headLink()->appendStylesheet($baseUrl.'js/datatables/plugin/TableTools/css/TableTools.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'css/jquery.ui.timepicker.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'css/playouthistory.css?'.$CC_CONFIG['airtime_version']); + $this->view->headLink()->appendStylesheet($baseUrl.'css/bootstrap-datetimepicker.min.css?'.$CC_CONFIG['airtime_version']); } public function aggregateHistoryFeedAction() @@ -121,7 +123,7 @@ class PlayouthistoryController extends Zend_Controller_Action $form = $historyService->makeHistoryFileForm($file_id); $this->view->form = $form; - $this->view->dialog = $this->view->render('form/edit-history-file.phtml'); + $this->view->dialog = $this->view->render('playouthistory/dialog.phtml'); unset($this->view->form); } @@ -144,7 +146,7 @@ class PlayouthistoryController extends Zend_Controller_Action $form = $historyService->makeHistoryItemForm($history_id); $this->view->form = $form; - $this->view->dialog = $this->view->render('form/edit-history-item.phtml'); + $this->view->dialog = $this->view->render('playouthistory/dialog.phtml'); unset($this->view->form); } diff --git a/airtime_mvc/application/forms/EditHistoryItem.php b/airtime_mvc/application/forms/EditHistoryItem.php index 99ae87c8d..eebc6b849 100644 --- a/airtime_mvc/application/forms/EditHistoryItem.php +++ b/airtime_mvc/application/forms/EditHistoryItem.php @@ -2,9 +2,9 @@ class Application_Form_EditHistoryItem extends Zend_Form { - const VALIDATE_DATETIME_FORMAT = 'yyyy-MM-dd HH-mm-ss'; + const VALIDATE_DATETIME_FORMAT = 'yyyy-MM-dd HH:mm:ss'; const VALIDATE_DATE_FORMAT = 'yyyy-MM-dd'; - const VALIDATE_TIME_FORMAT = 'HH-mm-ss'; + const VALIDATE_TIME_FORMAT = 'HH:mm:ss'; const ID_PREFIX = "his_item_"; @@ -12,11 +12,13 @@ class Application_Form_EditHistoryItem extends Zend_Form const ITEM_CLASS = "class"; const ITEM_ID_SUFFIX = "name"; + const TEXT_INPUT_CLASS = "input_text"; + private $formElTypes = array( TEMPLATE_DATE => array( "class" => "Zend_Form_Element_Text", "attrs" => array( - "class" => "input_text" + "class" => self::TEXT_INPUT_CLASS ), "validators" => array( array( @@ -33,7 +35,7 @@ class Application_Form_EditHistoryItem extends Zend_Form TEMPLATE_TIME => array( "class" => "Zend_Form_Element_Text", "attrs" => array( - "class" => "input_text" + "class" => self::TEXT_INPUT_CLASS ), "validators" => array( array( @@ -50,7 +52,7 @@ class Application_Form_EditHistoryItem extends Zend_Form TEMPLATE_DATETIME => array( "class" => "Zend_Form_Element_Text", "attrs" => array( - "class" => "input_text" + "class" => self::TEXT_INPUT_CLASS ), "validators" => array( array( @@ -67,7 +69,7 @@ class Application_Form_EditHistoryItem extends Zend_Form TEMPLATE_STRING => array( "class" => "Zend_Form_Element_Text", "attrs" => array( - "class" => "input_text" + "class" => self::TEXT_INPUT_CLASS ), "filters" => array( "StringTrim" @@ -87,7 +89,7 @@ class Application_Form_EditHistoryItem extends Zend_Form ) ), "attrs" => array( - "class" => "input_text" + "class" => self::TEXT_INPUT_CLASS ), "filters" => array( "Int" @@ -96,7 +98,7 @@ class Application_Form_EditHistoryItem extends Zend_Form TEMPLATE_FLOAT => array( "class" => "Zend_Form_Element_Text", "attrs" => array( - "class" => "input_text" + "class" => self::TEXT_INPUT_CLASS ), "validators" => array( array( @@ -107,16 +109,69 @@ class Application_Form_EditHistoryItem extends Zend_Form ); public function init() { + + $this->setDecorators(array( + 'PrepareElements', + array('ViewScript', array('viewScript' => 'form/edit-history-item.phtml')) + )); $history_id = new Zend_Form_Element_Hidden(self::ID_PREFIX.'id'); $history_id->setValidators(array( new Zend_Validate_Int() )); + $history_id->setDecorators(array('ViewHelper')); $this->addElement($history_id); + + $starts = new Zend_Form_Element_Text(self::ID_PREFIX.'starts'); + $starts->setValidators(array( + new Zend_Validate_Date(self::VALIDATE_DATETIME_FORMAT) + )); + $starts->setAttrib('class', self::TEXT_INPUT_CLASS); + $starts->setAttrib('data-format', self::VALIDATE_DATETIME_FORMAT); + $starts->addFilter('StringTrim'); + $starts->setLabel(_('Start Time')); + $starts->setDecorators(array('ViewHelper')); + $this->addElement($starts); + + $ends = new Zend_Form_Element_Text(self::ID_PREFIX.'ends'); + $ends->setValidators(array( + new Zend_Validate_Date(self::VALIDATE_DATETIME_FORMAT) + )); + $ends->setAttrib('class', self::TEXT_INPUT_CLASS); + $ends->setAttrib('data-format', self::VALIDATE_DATETIME_FORMAT); + $ends->addFilter('StringTrim'); + $ends->setLabel(_('End Time')); + $ends->setDecorators(array('ViewHelper')); + $this->addElement($ends); + + $dynamic_attrs = new Zend_Form_SubForm(); + $this->addSubForm($dynamic_attrs, self::ID_PREFIX.'template'); + + // Add the submit button + $this->addElement('button', 'his_item_save', array( + 'ignore' => true, + 'class' => 'btn his_item_save', + 'label' => _('Save'), + 'decorators' => array( + 'ViewHelper' + ) + )); + + // Add the cancel button + $this->addElement('button', 'his_item_cancel', array( + 'ignore' => true, + 'class' => 'btn his_item_cancel', + 'label' => _('Cancel'), + 'decorators' => array( + 'ViewHelper' + ) + )); } public function createFromTemplate($template) { + $templateSubForm = $this->getSubForm(self::ID_PREFIX.'template'); + for ($i = 0, $len = count($template); $i < $len; $i++) { $item = $template[$i]; @@ -170,41 +225,8 @@ class Application_Form_EditHistoryItem extends Zend_Form } } - $this->addElement($el); - } - - // Add the submit button - $this->addElement('button', 'his_item_save', array( - 'ignore' => true, - 'class' => 'btn his_item_save', - 'label' => _('Save'), - 'decorators' => array( - 'ViewHelper' - ) - )); - - // Add the cancel button - $this->addElement('button', 'his_item_cancel', array( - 'ignore' => true, - 'class' => 'btn his_item_cancel', - 'label' => _('Cancel'), - 'decorators' => array( - 'ViewHelper' - ) - )); - - $this->addDisplayGroup( - array( - 'his_item_save', - 'his_item_cancel' - ), - 'submitButtons', - array( - 'decorators' => array( - 'FormElements', - 'DtDdWrapper' - ) - ) - ); + $el->setDecorators(array('ViewHelper')); + $templateSubForm->addElement($el); + } } } \ No newline at end of file diff --git a/airtime_mvc/application/services/HistoryService.php b/airtime_mvc/application/services/HistoryService.php index 0aa5467de..da76a3a8c 100644 --- a/airtime_mvc/application/services/HistoryService.php +++ b/airtime_mvc/application/services/HistoryService.php @@ -211,21 +211,30 @@ class Application_Service_HistoryService public function populateTemplateItem($values) { - $template = $this->getItemTemplate(); - $historyRecord = new CcPlayoutHistory(); - - $timezoneUTC = new DateTimeZone("UTC"); - $timezoneLocal = new DateTimeZone($this->timezone); - - $dateTime = new DateTime($values["starts"], $timezoneLocal); - $dateTime->setTimezone($timezoneLocal); - $historyRecord->setDbStarts($dateTime->format("Y-m-d H:i:s")); - - $dateTime = new DateTime($result["ends"], $timezoneUTC); - $dateTime->setTimezone($timezoneUTC); - $historyRecord->setDbEnds($dateTime->format("Y-m-d H:i:s")); - - + $this->con->beginTransaction(); + + try { + $template = $this->getItemTemplate(); + $historyRecord = new CcPlayoutHistory(); + + $timezoneUTC = new DateTimeZone("UTC"); + $timezoneLocal = new DateTimeZone($this->timezone); + + $dateTime = new DateTime($values["starts"], $timezoneLocal); + $dateTime->setTimezone($timezoneLocal); + $historyRecord->setDbStarts($dateTime->format("Y-m-d H:i:s")); + + $dateTime = new DateTime($result["ends"], $timezoneUTC); + $dateTime->setTimezone($timezoneUTC); + $historyRecord->setDbEnds($dateTime->format("Y-m-d H:i:s")); + + $this->con->commit(); + } + catch (Exception $e) { + $this->con->rollback(); + Logging::info($e); + throw $e; + } } @@ -347,8 +356,8 @@ class Application_Service_HistoryService $fields = array(); //array index is the position of the item in the history template table. - $fields[] = array("name" => "starts", "type" => TEMPLATE_DATETIME, "isFileMd" => false); - $fields[] = array("name" => "ends", "type" => TEMPLATE_DATETIME, "isFileMd" => false); + //$fields[] = array("name" => "starts", "type" => TEMPLATE_DATETIME, "isFileMd" => false); + //$fields[] = array("name" => "ends", "type" => TEMPLATE_DATETIME, "isFileMd" => false); $fields[] = array("name" => MDATA_KEY_TITLE, "type" => TEMPLATE_STRING, "isFileMd" => true); //these fields can be populated from an associated file. $fields[] = array("name" => MDATA_KEY_CREATOR, "type" => TEMPLATE_STRING, "isFileMd" => true); diff --git a/airtime_mvc/application/views/scripts/form/edit-history-item.phtml b/airtime_mvc/application/views/scripts/form/edit-history-item.phtml index 886790693..7f87f20d6 100644 --- a/airtime_mvc/application/views/scripts/form/edit-history-item.phtml +++ b/airtime_mvc/application/views/scripts/form/edit-history-item.phtml @@ -1,3 +1,60 @@ -
\ No newline at end of file + diff --git a/airtime_mvc/application/views/scripts/playouthistory/dialog.phtml b/airtime_mvc/application/views/scripts/playouthistory/dialog.phtml new file mode 100644 index 000000000..2e55e706a --- /dev/null +++ b/airtime_mvc/application/views/scripts/playouthistory/dialog.phtml @@ -0,0 +1 @@ +form; ?> \ No newline at end of file diff --git a/airtime_mvc/public/css/bootstrap-datetimepicker.min.css b/airtime_mvc/public/css/bootstrap-datetimepicker.min.css new file mode 100644 index 000000000..36394e276 --- /dev/null +++ b/airtime_mvc/public/css/bootstrap-datetimepicker.min.css @@ -0,0 +1,8 @@ +/*! + * Datepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:3000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.bootstrap-datetimepicker-widget:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:6px}.bootstrap-datetimepicker-widget:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:100%;font-weight:bold;font-size:1.2em}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#999}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{color:#fff;background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget td.active:hover,.bootstrap-datetimepicker-widget td.active:hover:hover,.bootstrap-datetimepicker-widget td.active:active,.bootstrap-datetimepicker-widget td.active:hover:active,.bootstrap-datetimepicker-widget td.active.active,.bootstrap-datetimepicker-widget td.active:hover.active,.bootstrap-datetimepicker-widget td.active.disabled,.bootstrap-datetimepicker-widget td.active:hover.disabled,.bootstrap-datetimepicker-widget td.active[disabled],.bootstrap-datetimepicker-widget td.active:hover[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.bootstrap-datetimepicker-widget td.active:active,.bootstrap-datetimepicker-widget td.active:hover:active,.bootstrap-datetimepicker-widget td.active.active,.bootstrap-datetimepicker-widget td.active:hover.active{background-color:#039 \9}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:block;width:47px;height:54px;line-height:54px;float:left;margin:2px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{color:#fff;background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget td span.active:hover,.bootstrap-datetimepicker-widget td span.active:active,.bootstrap-datetimepicker-widget td span.active.active,.bootstrap-datetimepicker-widget td span.active.disabled,.bootstrap-datetimepicker-widget td span.active[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.bootstrap-datetimepicker-widget td span.active:active,.bootstrap-datetimepicker-widget td span.active.active{background-color:#039 \9}.bootstrap-datetimepicker-widget td span.old{color:#999}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget th.switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px} \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/playouthistory/historytable.js b/airtime_mvc/public/js/airtime/playouthistory/historytable.js index 5f5650e44..c57e8cba5 100644 --- a/airtime_mvc/public/js/airtime/playouthistory/historytable.js +++ b/airtime_mvc/public/js/airtime/playouthistory/historytable.js @@ -201,10 +201,13 @@ var AIRTIME = (function(AIRTIME) { function makeHistoryDialog(html) { $hisDialogEl = $(html); - + $hisDialogEl.dialog({ title: $.i18n._("Edit History Record"), modal: true, + open: function( event, ui ) { + $hisDialogEl.find('.date').datetimepicker(); + }, close: function() { removeHistoryDialog(); } diff --git a/airtime_mvc/public/js/bootstrap-datetime/bootstrap-datetimepicker.min.js b/airtime_mvc/public/js/bootstrap-datetime/bootstrap-datetimepicker.min.js new file mode 100644 index 000000000..a30f77645 --- /dev/null +++ b/airtime_mvc/public/js/bootstrap-datetime/bootstrap-datetimepicker.min.js @@ -0,0 +1,26 @@ +/** + * @license + * ========================================================= + * bootstrap-datetimepicker.js + * http://www.eyecon.ro/bootstrap-datepicker + * ========================================================= + * Copyright 2012 Stefan Petre + * + * Contributions: + * - Andrew Rowls + * - Thiago de Arruda + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= + */ +(function($){var smartPhone=window.orientation!=undefined;var DateTimePicker=function(element,options){this.id=dpgId++;this.init(element,options)};var dateToDate=function(dt){if(typeof dt==="string"){return new Date(dt)}return dt};DateTimePicker.prototype={constructor:DateTimePicker,init:function(element,options){var icon;if(!(options.pickTime||options.pickDate))throw new Error("Must choose at least one picker");this.options=options;this.$element=$(element);this.language=options.language in dates?options.language:"en";this.pickDate=options.pickDate;this.pickTime=options.pickTime;this.isInput=this.$element.is("input");this.component=false;if(this.$element.find(".input-append")||this.$element.find(".input-prepend"))this.component=this.$element.find(".add-on");this.format=options.format;if(!this.format){if(this.isInput)this.format=this.$element.data("format");else this.format=this.$element.find("input").data("format");if(!this.format)this.format="MM/dd/yyyy"}this._compileFormat();if(this.component){icon=this.component.find("i")}if(this.pickTime){if(icon&&icon.length)this.timeIcon=icon.data("time-icon");if(!this.timeIcon)this.timeIcon="icon-time";icon.addClass(this.timeIcon)}if(this.pickDate){if(icon&&icon.length)this.dateIcon=icon.data("date-icon");if(!this.dateIcon)this.dateIcon="icon-calendar";icon.removeClass(this.timeIcon);icon.addClass(this.dateIcon)}this.widget=$(getTemplate(this.timeIcon,options.pickDate,options.pickTime,options.pick12HourFormat,options.pickSeconds,options.collapse)).appendTo("body");this.minViewMode=options.minViewMode||this.$element.data("date-minviewmode")||0;if(typeof this.minViewMode==="string"){switch(this.minViewMode){case"months":this.minViewMode=1;break;case"years":this.minViewMode=2;break;default:this.minViewMode=0;break}}this.viewMode=options.viewMode||this.$element.data("date-viewmode")||0;if(typeof this.viewMode==="string"){switch(this.viewMode){case"months":this.viewMode=1;break;case"years":this.viewMode=2;break;default:this.viewMode=0;break}}this.startViewMode=this.viewMode;this.weekStart=options.weekStart||this.$element.data("date-weekstart")||0;this.weekEnd=this.weekStart===0?6:this.weekStart-1;this.setStartDate(options.startDate||this.$element.data("date-startdate"));this.setEndDate(options.endDate||this.$element.data("date-enddate"));this.fillDow();this.fillMonths();this.fillHours();this.fillMinutes();this.fillSeconds();this.update();this.showMode();this._attachDatePickerEvents()},show:function(e){this.widget.show();this.height=this.component?this.component.outerHeight():this.$element.outerHeight();this.place();this.$element.trigger({type:"show",date:this._date});this._attachDatePickerGlobalEvents();if(e){e.stopPropagation();e.preventDefault()}},disable:function(){this.$element.find("input").prop("disabled",true);this._detachDatePickerEvents()},enable:function(){this.$element.find("input").prop("disabled",false);this._attachDatePickerEvents()},hide:function(){var collapse=this.widget.find(".collapse");for(var i=0;it |