From 0b70c84cec4049de992c83b35cf825b419dd9a09 Mon Sep 17 00:00:00 2001 From: t1m0n Date: Sat, 28 Nov 2015 19:49:11 +0300 Subject: [PATCH] add navigation to docs --- dist/css/datepicker.css | 3 +- dist/css/datepicker.min.css | 2 +- dist/js/datepicker.js | 13 +- dist/js/datepicker.min.js | 2 +- index-ru.html => docs/index-ru.html | 24 +- docs/js/navigation.js | 119 +++++ gulpfile.js | 11 +- page/css/github-gist.css | 218 ---------- page/css/style.css | 1 - page/jade/layout.jade | 33 -- page/jade/mixins/example-code.jade | 4 - page/jade/mixins/example-content.jade | 3 - page/jade/mixins/example-inline.jade | 4 - page/jade/mixins/example.jade | 4 - page/jade/mixins/param-header.jade | 14 - page/jade/mixins/param.jade | 5 - page/jade/pages/index-ru.jade | 598 -------------------------- page/js/highlight.pack.js | 1 - page/sass/_page.scss | 255 ----------- page/sass/_reset.scss | 82 ---- page/sass/init.scss | 2 - src/js/datepicker.js | 13 +- src/sass/_datepicker-config.scss | 1 + src/sass/datepicker.scss | 1 + tasks/cssPage.js | 4 +- tasks/jade.js | 4 +- 26 files changed, 175 insertions(+), 1246 deletions(-) rename index-ru.html => docs/index-ru.html (72%) create mode 100644 docs/js/navigation.js delete mode 100644 page/css/github-gist.css delete mode 100644 page/css/style.css delete mode 100644 page/jade/layout.jade delete mode 100644 page/jade/mixins/example-code.jade delete mode 100644 page/jade/mixins/example-content.jade delete mode 100644 page/jade/mixins/example-inline.jade delete mode 100644 page/jade/mixins/example.jade delete mode 100644 page/jade/mixins/param-header.jade delete mode 100644 page/jade/mixins/param.jade delete mode 100644 page/jade/pages/index-ru.jade delete mode 100644 page/js/highlight.pack.js delete mode 100644 page/sass/_page.scss delete mode 100644 page/sass/_reset.scss delete mode 100644 page/sass/init.scss diff --git a/dist/css/datepicker.css b/dist/css/datepicker.css index 115a966..9bd55e4 100644 --- a/dist/css/datepicker.css +++ b/dist/css/datepicker.css @@ -137,7 +137,8 @@ opacity: 0; transition: opacity 0.3s ease, left 0s 0.3s, -webkit-transform 0.3s ease; transition: opacity 0.3s ease, transform 0.3s ease, left 0s 0.3s; - transition: opacity 0.3s ease, transform 0.3s ease, left 0s 0.3s, -webkit-transform 0.3s ease; } + transition: opacity 0.3s ease, transform 0.3s ease, left 0s 0.3s, -webkit-transform 0.3s ease; + z-index: 100; } .datepicker.-from-top- { -webkit-transform: translateY(-8px); transform: translateY(-8px); } diff --git a/dist/css/datepicker.min.css b/dist/css/datepicker.min.css index 4fd2688..1601b4a 100644 --- a/dist/css/datepicker.min.css +++ b/dist/css/datepicker.min.css @@ -1 +1 @@ -.datepicker--cells{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.datepicker--cell{border-radius:4px;cursor:pointer;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:32px;z-index:1}.datepicker--cell:hover{background:#f0f0f0}.datepicker--cell.-current-{color:#4EB5E6}.datepicker--cell.-current-:hover{color:#4a4a4a}.datepicker--cell.-disabled-{cursor:default;color:#aeaeae;background:0 0}.datepicker--cell.-selected-,.datepicker--cell.-selected-.-current-{color:#fff;background:#5cc4ef}.datepicker--days-names{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:8px 0 3px}.datepicker--day-name{color:#FF9A19;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-flex:1;-ms-flex:1;flex:1;text-align:center;text-transform:uppercase;font-size:.8em}.datepicker--body,.datepicker-inline .datepicker--pointer{display:none}.datepicker--cell-day{width:14.28571%}.datepicker--cells-months{height:170px}.datepicker--cell-month{width:33.33%;height:25%}.datepicker--cells-years,.datepicker--years{height:170px}.datepicker--cell-year{width:25%;height:33.33%}.datepickers-container{position:absolute;left:0;top:0}.datepicker{background:#fff;border:1px solid #dbdbdb;box-shadow:0 4px 12px rgba(0,0,0,.15);border-radius:4px;box-sizing:content-box;font-family:Tahoma,sans-serif;font-size:14px;color:#4a4a4a;width:250px;position:absolute;left:-100000px;opacity:0;transition:opacity .3s ease,left 0s .3s,-webkit-transform .3s ease;transition:opacity .3s ease,transform .3s ease,left 0s .3s;transition:opacity .3s ease,transform .3s ease,left 0s .3s,-webkit-transform .3s ease}.datepicker.-from-top-{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.datepicker.-from-right-{-webkit-transform:translateX(8px);transform:translateX(8px)}.datepicker.-from-bottom-{-webkit-transform:translateY(8px);transform:translateY(8px)}.datepicker.-from-left-{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.datepicker.active{opacity:1;-webkit-transform:translate(0);transform:translate(0);transition:opacity .3s ease,left 0s 0s,-webkit-transform .3s ease;transition:opacity .3s ease,transform .3s ease,left 0s 0s;transition:opacity .3s ease,transform .3s ease,left 0s 0s,-webkit-transform .3s ease}.datepicker-inline .datepicker{border-color:#d7d7d7;box-shadow:none;position:static;left:auto;right:auto;opacity:1;-webkit-transform:none;transform:none}.datepicker--content{box-sizing:content-box;padding:4px}.datepicker--pointer{position:absolute;background:#fff;border-top:1px solid #dbdbdb;border-right:1px solid #dbdbdb;width:10px;height:10px;z-index:-1}.datepicker--nav-action:hover,.datepicker--nav-title:hover{background:#f0f0f0}.-top-center- .datepicker--pointer,.-top-left- .datepicker--pointer,.-top-right- .datepicker--pointer{top:calc(100% - 4px);-webkit-transform:rotate(135deg);transform:rotate(135deg)}.-right-bottom- .datepicker--pointer,.-right-center- .datepicker--pointer,.-right-top- .datepicker--pointer{right:calc(100% - 4px);-webkit-transform:rotate(225deg);transform:rotate(225deg)}.-bottom-center- .datepicker--pointer,.-bottom-left- .datepicker--pointer,.-bottom-right- .datepicker--pointer{bottom:calc(100% - 4px);-webkit-transform:rotate(315deg);transform:rotate(315deg)}.-left-bottom- .datepicker--pointer,.-left-center- .datepicker--pointer,.-left-top- .datepicker--pointer{left:calc(100% - 4px);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.-bottom-left- .datepicker--pointer,.-top-left- .datepicker--pointer{left:10px}.-bottom-right- .datepicker--pointer,.-top-right- .datepicker--pointer{right:10px}.-bottom-center- .datepicker--pointer,.-top-center- .datepicker--pointer{left:calc(50% - 10px / 2)}.-left-top- .datepicker--pointer,.-right-top- .datepicker--pointer{top:10px}.-left-bottom- .datepicker--pointer,.-right-bottom- .datepicker--pointer{bottom:10px}.-left-center- .datepicker--pointer,.-right-center- .datepicker--pointer{top:calc(50% - 10px / 2)}.datepicker--body.active{display:block}.datepicker--nav{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid #efefef;min-height:32px;padding:4px}.datepicker--nav-action,.datepicker--nav-title{display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.datepicker--nav-action{width:32px;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker--nav-action.-disabled-{visibility:hidden}.datepicker--nav-action svg{width:32px;height:32px}.datepicker--nav-action path{fill:none;stroke:#9c9c9c;stroke-width:2px}.datepicker--nav-title{border-radius:4px;padding:0 8px}.datepicker--nav-title i{font-style:normal;color:#9c9c9c;margin-left:5px}.datepicker--nav-title.-disabled-{cursor:default;background:0 0}.datepicker--buttons{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:4px;border-top:1px solid #efefef}.datepicker--button{color:#4EB5E6;cursor:pointer;border-radius:4px;-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:32px}.datepicker--button:hover{color:#4a4a4a;background:#f0f0f0}.datepicker--cell-day.-other-month-,.datepicker--cell-year.-other-decade-{color:#dedede}.datepicker--cell-day.-other-month-:hover,.datepicker--cell-year.-other-decade-:hover{color:#c5c5c5}.-disabled-.datepicker--cell-day.-other-month-:hover,.-disabled-.datepicker--cell-year.-other-decade-:hover{color:#dedede}.-selected-.datepicker--cell-day.-other-month-,.-selected-.datepicker--cell-year.-other-decade-{color:#fff;background:#a2ddf6}.datepicker--cell-day.-other-month-:empty,.datepicker--cell-year.-other-decade-:empty{background:0 0;border:none} \ No newline at end of file +.datepicker--cells{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.datepicker--cell{border-radius:4px;cursor:pointer;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:32px;z-index:1}.datepicker--cell:hover{background:#f0f0f0}.datepicker--cell.-current-{color:#4EB5E6}.datepicker--cell.-current-:hover{color:#4a4a4a}.datepicker--cell.-disabled-{cursor:default;color:#aeaeae;background:0 0}.datepicker--cell.-selected-,.datepicker--cell.-selected-.-current-{color:#fff;background:#5cc4ef}.datepicker--days-names{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:8px 0 3px}.datepicker--day-name{color:#FF9A19;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-flex:1;-ms-flex:1;flex:1;text-align:center;text-transform:uppercase;font-size:.8em}.datepicker--body,.datepicker-inline .datepicker--pointer{display:none}.datepicker--cell-day{width:14.28571%}.datepicker--cells-months{height:170px}.datepicker--cell-month{width:33.33%;height:25%}.datepicker--cells-years,.datepicker--years{height:170px}.datepicker--cell-year{width:25%;height:33.33%}.datepickers-container{position:absolute;left:0;top:0}.datepicker{background:#fff;border:1px solid #dbdbdb;box-shadow:0 4px 12px rgba(0,0,0,.15);border-radius:4px;box-sizing:content-box;font-family:Tahoma,sans-serif;font-size:14px;color:#4a4a4a;width:250px;position:absolute;left:-100000px;opacity:0;transition:opacity .3s ease,left 0s .3s,-webkit-transform .3s ease;transition:opacity .3s ease,transform .3s ease,left 0s .3s;transition:opacity .3s ease,transform .3s ease,left 0s .3s,-webkit-transform .3s ease;z-index:100}.datepicker.-from-top-{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.datepicker.-from-right-{-webkit-transform:translateX(8px);transform:translateX(8px)}.datepicker.-from-bottom-{-webkit-transform:translateY(8px);transform:translateY(8px)}.datepicker.-from-left-{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.datepicker.active{opacity:1;-webkit-transform:translate(0);transform:translate(0);transition:opacity .3s ease,left 0s 0s,-webkit-transform .3s ease;transition:opacity .3s ease,transform .3s ease,left 0s 0s;transition:opacity .3s ease,transform .3s ease,left 0s 0s,-webkit-transform .3s ease}.datepicker-inline .datepicker{border-color:#d7d7d7;box-shadow:none;position:static;left:auto;right:auto;opacity:1;-webkit-transform:none;transform:none}.datepicker--content{box-sizing:content-box;padding:4px}.datepicker--pointer{position:absolute;background:#fff;border-top:1px solid #dbdbdb;border-right:1px solid #dbdbdb;width:10px;height:10px;z-index:-1}.datepicker--nav-action:hover,.datepicker--nav-title:hover{background:#f0f0f0}.-top-center- .datepicker--pointer,.-top-left- .datepicker--pointer,.-top-right- .datepicker--pointer{top:calc(100% - 4px);-webkit-transform:rotate(135deg);transform:rotate(135deg)}.-right-bottom- .datepicker--pointer,.-right-center- .datepicker--pointer,.-right-top- .datepicker--pointer{right:calc(100% - 4px);-webkit-transform:rotate(225deg);transform:rotate(225deg)}.-bottom-center- .datepicker--pointer,.-bottom-left- .datepicker--pointer,.-bottom-right- .datepicker--pointer{bottom:calc(100% - 4px);-webkit-transform:rotate(315deg);transform:rotate(315deg)}.-left-bottom- .datepicker--pointer,.-left-center- .datepicker--pointer,.-left-top- .datepicker--pointer{left:calc(100% - 4px);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.-bottom-left- .datepicker--pointer,.-top-left- .datepicker--pointer{left:10px}.-bottom-right- .datepicker--pointer,.-top-right- .datepicker--pointer{right:10px}.-bottom-center- .datepicker--pointer,.-top-center- .datepicker--pointer{left:calc(50% - 10px / 2)}.-left-top- .datepicker--pointer,.-right-top- .datepicker--pointer{top:10px}.-left-bottom- .datepicker--pointer,.-right-bottom- .datepicker--pointer{bottom:10px}.-left-center- .datepicker--pointer,.-right-center- .datepicker--pointer{top:calc(50% - 10px / 2)}.datepicker--body.active{display:block}.datepicker--nav{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid #efefef;min-height:32px;padding:4px}.datepicker--nav-action,.datepicker--nav-title{display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.datepicker--nav-action{width:32px;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker--nav-action.-disabled-{visibility:hidden}.datepicker--nav-action svg{width:32px;height:32px}.datepicker--nav-action path{fill:none;stroke:#9c9c9c;stroke-width:2px}.datepicker--nav-title{border-radius:4px;padding:0 8px}.datepicker--nav-title i{font-style:normal;color:#9c9c9c;margin-left:5px}.datepicker--nav-title.-disabled-{cursor:default;background:0 0}.datepicker--buttons{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:4px;border-top:1px solid #efefef}.datepicker--button{color:#4EB5E6;cursor:pointer;border-radius:4px;-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:32px}.datepicker--button:hover{color:#4a4a4a;background:#f0f0f0}.datepicker--cell-day.-other-month-,.datepicker--cell-year.-other-decade-{color:#dedede}.datepicker--cell-day.-other-month-:hover,.datepicker--cell-year.-other-decade-:hover{color:#c5c5c5}.-disabled-.datepicker--cell-day.-other-month-:hover,.-disabled-.datepicker--cell-year.-other-decade-:hover{color:#dedede}.-selected-.datepicker--cell-day.-other-month-,.-selected-.datepicker--cell-year.-other-decade-{color:#fff;background:#a2ddf6}.datepicker--cell-day.-other-month-:empty,.datepicker--cell-year.-other-decade-:empty{background:0 0;border:none} \ No newline at end of file diff --git a/dist/js/datepicker.js b/dist/js/datepicker.js index 850feb1..a91426c 100644 --- a/dist/js/datepicker.js +++ b/dist/js/datepicker.js @@ -133,6 +133,7 @@ var Datepicker; _bindEvents : function () { this.$el.on(this.opts.showEvent, this._onShowEvent.bind(this)); this.$el.on('blur', this._onBlur.bind(this)); + this.$el.on('input', this._onInput.bind(this)); this.$datepicker.on('mousedown', this._onMouseDownDatepicker.bind(this)); this.$datepicker.on('mouseup', this._onMouseUpDatepicker.bind(this)); }, @@ -366,7 +367,9 @@ var Datepicker; clear: function () { this.selectedDates = []; this.views[this.currentView]._render(); - this._triggerOnChange() + if (this.opts.onSelect) { + this._triggerOnChange() + } }, /** @@ -567,6 +570,14 @@ var Datepicker; this.$el.focus() }, + _onInput: function () { + var val = this.$el.val(); + + if (!val) { + this.clear(); + } + }, + get parsedDate() { return Datepicker.getParsedDate(this.date); }, diff --git a/dist/js/datepicker.min.js b/dist/js/datepicker.min.js index 6a0cd05..3ce1dbd 100644 --- a/dist/js/datepicker.min.js +++ b/dist/js/datepicker.min.js @@ -1 +1 @@ -var Datepicker;!function(t,e,i){var s,a,n="datepicker",r=".datepicker-here",h=!1,o='
',d={inline:!1,language:"ru",startDate:new Date,firstDay:"",weekends:[6,0],dateFormat:"",toggleSelected:!0,position:"bottom left",offset:12,view:"days",minView:"days",showOtherMonths:!0,selectOtherMonths:!0,moveToOtherMonthsOnSelect:!0,showOtherYears:!0,selectOtherYears:!0,moveToOtherYearsOnSelect:!0,minDate:"",maxDate:"",disableNavWhenOutOfRange:!0,multipleDates:!1,multipleDatesSeparator:",",todayButton:!1,clearButton:!1,showEvent:"focus",autoClose:!1,monthsFiled:"monthsShort",prevHtml:'',nextHtml:'',navTitles:{days:"MM, yyyy",months:"yyyy",years:"yyyy1 - yyyy2"},onSelect:"",onChangeMonth:"",onChangeYear:"",onChangeDecade:"",onChangeView:"",onRenderCell:""};Datepicker=function(t,a){this.el=t,this.$el=e(t),this.opts=e.extend(!0,{},d,a,this.$el.data()),s==i&&(s=e("body")),this.opts.startDate||(this.opts.startDate=new Date),"INPUT"==this.el.nodeName&&(this.elIsInput=!0),this.inited=!1,this.visible=!1,this.silent=!1,this.currentDate=this.opts.startDate,this.currentView=this.opts.view,this._createShortCuts(),this.selectedDates=[],this.views={},this.init()},Datepicker.prototype={viewIndexes:["days","months","years"],init:function(){h||this.opts.inline||!this.elIsInput||this._buildDatepickersContainer(),this._buildBaseHtml(),this._defineLocale(this.opts.language),this._syncWithMinMaxDates(),this.elIsInput&&(this.opts.inline||(this._setPositionClasses(this.opts.position),this._bindEvents())),this.views[this.currentView]=new Datepicker.Body(this,this.currentView,this.opts),this.views[this.currentView].show(),this.nav=new Datepicker.Navigation(this,this.opts),this.view=this.currentView,this.inited=!0},_createShortCuts:function(){this.minDate=this.opts.minDate?this.opts.minDate:new Date(-86399999136e5),this.maxDate=this.opts.maxDate?this.opts.maxDate:new Date(86399999136e5)},_bindEvents:function(){this.$el.on(this.opts.showEvent,this._onShowEvent.bind(this)),this.$el.on("blur",this._onBlur.bind(this)),this.$datepicker.on("mousedown",this._onMouseDownDatepicker.bind(this)),this.$datepicker.on("mouseup",this._onMouseUpDatepicker.bind(this))},isWeekend:function(t){return-1!==this.opts.weekends.indexOf(t)},_defineLocale:function(t){"string"==typeof t?(this.loc=Datepicker.language[t],this.loc||(console.warn("Can't find language \""+t+'" in Datepicker.language, will use "ru" instead'),this.loc=e.extend(!0,{},Datepicker.language.ru)),this.loc=e.extend(!0,{},Datepicker.language.ru,Datepicker.language[t])):this.loc=e.extend(!0,{},Datepicker.language.ru,t),this.opts.dateFormat&&(this.loc.dateFormat=this.opts.dateFormat),this.opts.firstDay&&(this.loc.firstDay=this.opts.firstDay)},_buildDatepickersContainer:function(){h=!0,s.append('
'),a=e("#datepickers-container")},_buildBaseHtml:function(){var t,i=e('
');t="INPUT"==this.el.nodeName?this.opts.inline?i.insertAfter(this.$el):a:i.appendTo(this.$el),this.$datepicker=e(o).appendTo(t),this.$content=e(".datepicker--content",this.$datepicker),this.$nav=e(".datepicker--nav",this.$datepicker)},_triggerOnChange:function(){if(!this.selectedDates.length)return this.opts.onSelect("","",this);var t,e=this.selectedDates,i=Datepicker.getParsedDate(e[0]),s=this,a=new Date(i.year,i.month,i.date);t=e.map(function(t){return s.formatDate(s.loc.dateFormat,t)}).join(this.opts.multipleDatesSeparator),this.opts.multipleDates&&(a=e.map(function(t){var e=Datepicker.getParsedDate(t);return new Date(e.year,e.month,e.date)})),this.opts.onSelect(t,a,this)},next:function(){var t=this.parsedDate,e=this.opts;switch(this.view){case"days":this.date=new Date(t.year,t.month+1,1),e.onChangeMonth&&e.onChangeMonth(this.parsedDate.month,this.parsedDate.year);break;case"months":this.date=new Date(t.year+1,t.month,1),e.onChangeYear&&e.onChangeYear(this.parsedDate.year);break;case"years":this.date=new Date(t.year+10,0,1),e.onChangeDecade&&e.onChangeDecade(this.curDecade)}},prev:function(){var t=this.parsedDate,e=this.opts;switch(this.view){case"days":this.date=new Date(t.year,t.month-1,1),e.onChangeMonth&&e.onChangeMonth(this.parsedDate.month,this.parsedDate.year);break;case"months":this.date=new Date(t.year-1,t.month,1),e.onChangeYear&&e.onChangeYear(this.parsedDate.year);break;case"years":this.date=new Date(t.year-10,0,1),e.onChangeDecade&&e.onChangeDecade(this.curDecade)}},formatDate:function(t,e){e=e||this.date;var i=t,s=this.loc,a=Datepicker.getDecade(e),n=Datepicker.getParsedDate(e);switch(!0){case/dd/.test(i):i=i.replace(/\bdd\b/,n.fullDate);case/d/.test(i):i=i.replace(/\bd\b/,n.date);case/DD/.test(i):i=i.replace(/\bDD\b/,s.days[n.day]);case/D/.test(i):i=i.replace(/\bD\b/,s.daysShort[n.day]);case/mm/.test(i):i=i.replace(/\bmm\b/,n.fullMonth);case/m/.test(i):i=i.replace(/\bm\b/,n.month+1);case/MM/.test(i):i=i.replace(/\bMM\b/,this.loc.months[n.month]);case/M/.test(i):i=i.replace(/\bM\b/,s.monthsShort[n.month]);case/yyyy/.test(i):i=i.replace(/\byyyy\b/,n.year);case/yyyy1/.test(i):i=i.replace(/\byyyy1\b/,a[0]);case/yyyy2/.test(i):i=i.replace(/\byyyy2\b/,a[1]);case/yy/.test(i):i=i.replace(/\byy\b/,n.year.toString().slice(-2))}return i},selectDate:function(t){var e=this.parsedDate,i="";if(t instanceof Date){if("days"==this.view&&t.getMonth()!=e.month&&this.opts.moveToOtherMonthsOnSelect&&(i=new Date(t.getFullYear(),t.getMonth(),1)),"years"==this.view&&t.getFullYear()!=e.year&&this.opts.moveToOtherYearsOnSelect&&(i=new Date(t.getFullYear(),0,1)),i&&(this.silent=!0,this.date=i,this.silent=!1,this.nav._render()),this.opts.multipleDates){if(this.selectedDates.length===this.opts.multipleDates)return;this._isSelected(t)||this.selectedDates.push(t)}else this.selectedDates=[t];this._setInputValue(),this.opts.onSelect&&this._triggerOnChange(),this.opts.autoClose?this.hide():this.views[this.currentView]._render()}},removeDate:function(t){var e=this.selectedDates,i=this;if(t instanceof Date)return e.some(function(s,a){return Datepicker.isSame(s,t)?(e.splice(a,1),i.views[i.currentView]._render(),i._setInputValue(),i.opts.onSelect&&i._triggerOnChange(),!0):void 0})},today:function(){this.silent=!0,this.view=this.opts.minView,this.silent=!1,this.date=new Date},clear:function(){this.selectedDates=[],this.views[this.currentView]._render(),this._triggerOnChange()},update:function(t,i){var s=arguments.length;return 2==s?this.opts[t]=i:1==s&&"object"==typeof t&&(this.opts=e.extend(!0,this.opts,t)),this._createShortCuts(),this._syncWithMinMaxDates(),this._defineLocale(this.opts.language),this.nav._addButtonsIfNeed(),this.nav._render(),this.views[this.currentView]._render(),this.elIsInput&&!this.opts.inline&&(this._setPositionClasses(this.opts.position),this.visible&&this.setPosition(this.opts.position)),this},_syncWithMinMaxDates:function(){var t=this.date.getTime();this.silent=!0,this.minTime>t&&(this.date=this.minDate),this.maxTime=this.minTime&&i<=this.maxTime,month:r>=this.minTime&&h<=this.maxTime,year:s.year>=a.year&&s.year<=n.year};return e?o[e]:o.day},_getDimensions:function(t){var e=t.offset();return{width:t.outerWidth(),height:t.outerHeight(),left:e.left,top:e.top}},_setPositionClasses:function(t){t=t.split(" ");var e=t[0],i=t[1],s="datepicker -"+e+"-"+i+"- -from-"+e+"-";this.visible&&(s+=" active"),this.$datepicker.removeAttr("class").addClass(s)},setPosition:function(t){var e,i,s=this._getDimensions(this.$el),a=this._getDimensions(this.$datepicker),n=t.split(" "),r=this.opts.offset,h=n[0],o=n[1];switch(h){case"top":e=s.top-a.height-r;break;case"right":i=s.left+s.width+r;break;case"bottom":e=s.top+s.height+r;break;case"left":i=s.left-a.width-r}switch(o){case"top":e=s.top;break;case"right":i=s.left+s.width-a.width;break;case"bottom":e=s.top+s.height-a.height;break;case"left":i=s.left;break;case"center":/left|right/.test(h)?e=s.top+s.height/2-a.height/2:i=s.left+s.width/2-a.width/2}this.$datepicker.css({left:i,top:e})},show:function(){this.setPosition(this.opts.position),this.$datepicker.addClass("active"),this.visible=!0},hide:function(){this.$datepicker.removeClass("active").css({left:"-100000px"}),this.inFocus=!1,this.visible=!1,this.$el.blur()},_onShowEvent:function(){this.visible||this.show()},_onBlur:function(){!this.inFocus&&this.visible&&this.hide()},_onMouseDownDatepicker:function(t){this.inFocus=!0},_onMouseUpDatepicker:function(t){this.inFocus=!1,this.$el.focus()},get parsedDate(){return Datepicker.getParsedDate(this.date)},set date(t){return t instanceof Date?(this.currentDate=t,this.inited&&!this.silent&&(this.views[this.view]._render(),this.nav._render()),t):void 0},get date(){return this.currentDate},set view(t){return this.viewIndex=this.viewIndexes.indexOf(t),this.viewIndex<0?void 0:(this.prevView=this.currentView,this.currentView=t,this.inited&&(this.views[t]?this.views[t]._render():this.views[t]=new Datepicker.Body(this,t,this.opts),this.views[this.prevView].hide(),this.views[t].show(),this.nav._render(),this.opts.onChangeView&&this.opts.onChangeView(t),this.setPosition(this.opts.position)),t)},get view(){return this.currentView},get cellType(){return this.view.substring(0,this.view.length-1)},get minTime(){var t=Datepicker.getParsedDate(this.minDate);return new Date(t.year,t.month,t.date).getTime()},get maxTime(){var t=Datepicker.getParsedDate(this.maxDate);return new Date(t.year,t.month,t.date).getTime()},get curDecade(){return Datepicker.getDecade(this.date)}},Datepicker.getDaysCount=function(t){return new Date(t.getFullYear(),t.getMonth()+1,0).getDate()},Datepicker.getParsedDate=function(t){return{year:t.getFullYear(),month:t.getMonth(),fullMonth:t.getMonth()+1<10?"0"+(t.getMonth()+1):t.getMonth()+1,date:t.getDate(),fullDate:t.getDate()<10?"0"+t.getDate():t.getDate(),day:t.getDay()}},Datepicker.getDecade=function(t){var e=10*Math.floor(t.getFullYear()/10);return[e,e+9]},Datepicker.template=function(t,e){return t.replace(/#\{([\w]+)\}/g,function(t,i){return e[i]||0===e[i]?e[i]:void 0})},Datepicker.isSame=function(t,e,i){var s=Datepicker.getParsedDate(t),a=Datepicker.getParsedDate(e),n=i?i:"day",r={day:s.date==a.date&&s.month==a.month&&s.year==a.year,month:s.month==a.month&&s.year==a.year,year:s.year==a.year};return r[n]},Datepicker.language={ru:{days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],daysShort:["Вос","Пон","Вто","Сре","Чет","Пят","Суб"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",clear:"Очистить",dateFormat:"dd.mm.yyyy",firstDay:1}},e.fn[n]=function(t){return Datepicker.prototype[t]?void Datepicker.prototype[t].apply(this.data(n),Array.prototype.slice.call(arguments,1)):this.each(function(){if(e.data(this,n)){var i=e.data(this,n),s=i.opts;i.opts=e.extend({},s,t)}else e.data(this,n,new Datepicker(this,t))})},e(function(){e(r).datepicker()})}(window,jQuery),function(){var t={days:'
',months:'
',years:'
'};Datepicker.Body=function(t,e,i){this.d=t,this.type=e,this.opts=i,this.init()},Datepicker.Body.prototype={init:function(){this._buildBaseHtml(),this._render(),this._bindEvents()},_bindEvents:function(){this.$el.on("click",".datepicker--cell",$.proxy(this._onClickCell,this))},_buildBaseHtml:function(){this.$el=$(t[this.type]).appendTo(this.d.$content),this.$names=$(".datepicker--days-names",this.$el),this.$cells=$(".datepicker--cells",this.$el)},_getDayNamesHtml:function(t,e,i,s){return e=void 0!=e?e:t,i=i?i:"",s=void 0!=s?s:0,s>7?i:7==e?this._getDayNamesHtml(t,0,i,++s):(i+='
'+this.d.loc.daysMin[e]+"
",this._getDayNamesHtml(t,++e,i,++s))},_getDaysHtml:function(t){var e=Datepicker.getDaysCount(t),i=new Date(t.getFullYear(),t.getMonth(),1).getDay(),s=new Date(t.getFullYear(),t.getMonth(),e).getDay(),a=i-this.d.loc.firstDay,n=6-s+this.d.loc.firstDay;a=0>a?a+7:a,n=n>6?n-7:n;for(var r,h,o=-a+1,d="",c=o,l=e+n;l>=c;c++)h=t.getFullYear(),r=t.getMonth(),d+=this._getDayHtml(new Date(h,r,c));return d},_getDayHtml:function(t){var e="datepicker--cell datepicker--cell-day",i=new Date,s=Datepicker.getParsedDate(t),a={},n=s.date;return this.opts.onRenderCell&&(a=this.opts.onRenderCell(t,"day")||{},n=a.html?a.html:n,e+=a.classes?" "+a.classes:""),this.d.isWeekend(s.day)&&(e+=" -weekend-"),Datepicker.isSame(i,t)&&(e+=" -current-"),this.d._isSelected(t,"day")&&(e+=" -selected-"),(!this.d._isInRange(t)||a.disabled)&&(e+=" -disabled-"),s.month!=this.d.parsedDate.month&&(e+=" -other-month-",this.opts.selectOtherMonths||(e+=" -disabled-"),this.opts.showOtherMonths||(n="")),'
'+n+"
"},_getMonthsHtml:function(t){for(var e="",i=Datepicker.getParsedDate(t),s=0;12>s;)e+=this._getMonthHtml(new Date(i.year,s)),s++;return e},_getMonthHtml:function(t){var e="datepicker--cell datepicker--cell-month",i=Datepicker.getParsedDate(t),s=new Date,a=this.d.loc,n=a[this.opts.monthsFiled][i.month],r={};return this.opts.onRenderCell&&(r=this.opts.onRenderCell(t,"month")||{},n=r.html?r.html:n,e+=r.classes?" "+r.classes:""),Datepicker.isSame(s,t,"month")&&(e+=" -current-"),this.d._isSelected(t,"month")&&(e+=" -selected-"),(!this.d._isInRange(t,"month")||r.disabled)&&(e+=" -disabled-"),'
'+n+"
"},_getYearsHtml:function(t){var e=(Datepicker.getParsedDate(t),Datepicker.getDecade(t)),i=e[0]-1,s="",a=i;for(a;a<=e[1]+1;a++)s+=this._getYearHtml(new Date(a,0));return s},_getYearHtml:function(t){var e="datepicker--cell datepicker--cell-year",i=Datepicker.getDecade(this.d.date),s=new Date,a=Datepicker.getParsedDate(t),n=a.year,r={};return this.opts.onRenderCell&&(r=this.opts.onRenderCell(t,"year")||{},n=r.html?r.html:n,e+=r.classes?" "+r.classes:""),(a.yeari[1])&&(e+=" -other-decade-",this.opts.selectOtherYears||(e+=" -disabled-"),this.opts.showOtherYears||(n="")),Datepicker.isSame(s,t,"year")&&(e+=" -current-"),this.d._isSelected(t,"year")&&(e+=" -selected-"),(!this.d._isInRange(t,"year")||r.disabled)&&(e+=" -disabled-"),'
'+n+"
"},_renderTypes:{days:function(){var t=this._getDayNamesHtml(this.d.loc.firstDay),e=this._getDaysHtml(this.d.currentDate);this.$cells.html(e),this.$names.html(t)},months:function(){var t=this._getMonthsHtml(this.d.currentDate);this.$cells.html(t)},years:function(){var t=this._getYearsHtml(this.d.currentDate);this.$cells.html(t)}},_render:function(){this._renderTypes[this.type].bind(this)()},show:function(){this.$el.addClass("active"),this.acitve=!0},hide:function(){this.$el.removeClass("active"),this.active=!1},_handleClick:function(t){var e=t.data("date")||1,i=t.data("month")||0,s=t.data("year")||this.d.parsedDate.year;if(this.d.view!=this.opts.minView){var a=this.d.viewIndex-1;return this.d.silent=!0,this.d.date=new Date(s,i,e),this.d.silent=!1,void(this.d.view=this.d.viewIndexes[a])}var n=new Date(s,i,e),r=this.d._isSelected(n,this.d.cellType);r?r&&this.opts.toggleSelected&&this.d.removeDate(n):this.d.selectDate(n)},_onClickCell:function(t){var e=$(t.target).closest(".datepicker--cell");e.hasClass("-disabled-")||this._handleClick.bind(this)(e)}}}(),function(){var t='
#{prevHtml}
#{title}
#{nextHtml}
',e='
',i='#{label}';Datepicker.Navigation=function(t,e){this.d=t,this.opts=e,this.$buttonsContainer="",this.init()},Datepicker.Navigation.prototype={init:function(){this._buildBaseHtml(),this._bindEvents()},_bindEvents:function(){this.d.$nav.on("click",".datepicker--nav-action",$.proxy(this._onClickNavButton,this)),this.d.$nav.on("click",".datepicker--nav-title",$.proxy(this._onClickNavTitle,this)),this.d.$datepicker.on("click",".datepicker--button",$.proxy(this._onClickNavButton,this))},_buildBaseHtml:function(){this._render(),this._addButtonsIfNeed()},_addButtonsIfNeed:function(){this.opts.todayButton&&this._addButton("today"),this.opts.clearButton&&this._addButton("clear")},_render:function(){var e=this._getTitle(this.d.currentDate),i=Datepicker.template(t,$.extend({title:e},this.opts));this.d.$nav.html(i),"years"==this.d.view&&$(".datepicker--nav-title",this.d.$nav).addClass("-disabled-"),this.setNavStatus()},_getTitle:function(t){return this.d.formatDate(this.opts.navTitles[this.d.view],t)},_addButton:function(t){this.$buttonsContainer.length||this._addButtonsContainer();var e={action:t,label:this.d.loc[t]},s=Datepicker.template(i,e);this.$buttonsContainer.append(s)},_addButtonsContainer:function(){this.d.$datepicker.append(e),this.$buttonsContainer=$(".datepicker--buttons",this.d.$datepicker)},setNavStatus:function(){if((this.opts.minDate||this.opts.maxDate)&&this.opts.disableNavWhenOutOfRange){var t=this.d.parsedDate,e=t.month,i=t.year,s=t.date;switch(this.d.view){case"days":this.d._isInRange(new Date(i,e-1,s),"month")||this._disableNav("prev"),this.d._isInRange(new Date(i,e+1,s),"month")||this._disableNav("next");break;case"months":this.d._isInRange(new Date(i-1,e,s),"year")||this._disableNav("prev"),this.d._isInRange(new Date(i+1,e,s),"year")||this._disableNav("next");break;case"years":this.d._isInRange(new Date(i-10,e,s),"year")||this._disableNav("prev"),this.d._isInRange(new Date(i+10,e,s),"year")||this._disableNav("next")}}},_disableNav:function(t){$('[data-action="'+t+'"]',this.d.$nav).addClass("-disabled-")},_activateNav:function(t){$('[data-action="'+t+'"]',this.d.$nav).removeClass("-disabled-")},_onClickNavButton:function(t){var e=$(t.target).closest("[data-action]"),i=e.data("action");this.d[i]()},_onClickNavTitle:function(t){return $(t.target).hasClass("-disabled-")?void 0:"days"==this.d.view?this.d.view="months":void(this.d.view="years")}}}(); \ No newline at end of file +var Datepicker;!function(t,e,i){var s,a,n="datepicker",h=".datepicker-here",r=!1,o='
',d={inline:!1,language:"ru",startDate:new Date,firstDay:"",weekends:[6,0],dateFormat:"",toggleSelected:!0,position:"bottom left",offset:12,view:"days",minView:"days",showOtherMonths:!0,selectOtherMonths:!0,moveToOtherMonthsOnSelect:!0,showOtherYears:!0,selectOtherYears:!0,moveToOtherYearsOnSelect:!0,minDate:"",maxDate:"",disableNavWhenOutOfRange:!0,multipleDates:!1,multipleDatesSeparator:",",todayButton:!1,clearButton:!1,showEvent:"focus",autoClose:!1,monthsFiled:"monthsShort",prevHtml:'',nextHtml:'',navTitles:{days:"MM, yyyy",months:"yyyy",years:"yyyy1 - yyyy2"},onSelect:"",onChangeMonth:"",onChangeYear:"",onChangeDecade:"",onChangeView:"",onRenderCell:""};Datepicker=function(t,a){this.el=t,this.$el=e(t),this.opts=e.extend(!0,{},d,a,this.$el.data()),s==i&&(s=e("body")),this.opts.startDate||(this.opts.startDate=new Date),"INPUT"==this.el.nodeName&&(this.elIsInput=!0),this.inited=!1,this.visible=!1,this.silent=!1,this.currentDate=this.opts.startDate,this.currentView=this.opts.view,this._createShortCuts(),this.selectedDates=[],this.views={},this.init()},Datepicker.prototype={viewIndexes:["days","months","years"],init:function(){r||this.opts.inline||!this.elIsInput||this._buildDatepickersContainer(),this._buildBaseHtml(),this._defineLocale(this.opts.language),this._syncWithMinMaxDates(),this.elIsInput&&(this.opts.inline||(this._setPositionClasses(this.opts.position),this._bindEvents())),this.views[this.currentView]=new Datepicker.Body(this,this.currentView,this.opts),this.views[this.currentView].show(),this.nav=new Datepicker.Navigation(this,this.opts),this.view=this.currentView,this.inited=!0},_createShortCuts:function(){this.minDate=this.opts.minDate?this.opts.minDate:new Date(-86399999136e5),this.maxDate=this.opts.maxDate?this.opts.maxDate:new Date(86399999136e5)},_bindEvents:function(){this.$el.on(this.opts.showEvent,this._onShowEvent.bind(this)),this.$el.on("blur",this._onBlur.bind(this)),this.$el.on("input",this._onInput.bind(this)),this.$datepicker.on("mousedown",this._onMouseDownDatepicker.bind(this)),this.$datepicker.on("mouseup",this._onMouseUpDatepicker.bind(this))},isWeekend:function(t){return-1!==this.opts.weekends.indexOf(t)},_defineLocale:function(t){"string"==typeof t?(this.loc=Datepicker.language[t],this.loc||(console.warn("Can't find language \""+t+'" in Datepicker.language, will use "ru" instead'),this.loc=e.extend(!0,{},Datepicker.language.ru)),this.loc=e.extend(!0,{},Datepicker.language.ru,Datepicker.language[t])):this.loc=e.extend(!0,{},Datepicker.language.ru,t),this.opts.dateFormat&&(this.loc.dateFormat=this.opts.dateFormat),this.opts.firstDay&&(this.loc.firstDay=this.opts.firstDay)},_buildDatepickersContainer:function(){r=!0,s.append('
'),a=e("#datepickers-container")},_buildBaseHtml:function(){var t,i=e('
');t="INPUT"==this.el.nodeName?this.opts.inline?i.insertAfter(this.$el):a:i.appendTo(this.$el),this.$datepicker=e(o).appendTo(t),this.$content=e(".datepicker--content",this.$datepicker),this.$nav=e(".datepicker--nav",this.$datepicker)},_triggerOnChange:function(){if(!this.selectedDates.length)return this.opts.onSelect("","",this);var t,e=this.selectedDates,i=Datepicker.getParsedDate(e[0]),s=this,a=new Date(i.year,i.month,i.date);t=e.map(function(t){return s.formatDate(s.loc.dateFormat,t)}).join(this.opts.multipleDatesSeparator),this.opts.multipleDates&&(a=e.map(function(t){var e=Datepicker.getParsedDate(t);return new Date(e.year,e.month,e.date)})),this.opts.onSelect(t,a,this)},next:function(){var t=this.parsedDate,e=this.opts;switch(this.view){case"days":this.date=new Date(t.year,t.month+1,1),e.onChangeMonth&&e.onChangeMonth(this.parsedDate.month,this.parsedDate.year);break;case"months":this.date=new Date(t.year+1,t.month,1),e.onChangeYear&&e.onChangeYear(this.parsedDate.year);break;case"years":this.date=new Date(t.year+10,0,1),e.onChangeDecade&&e.onChangeDecade(this.curDecade)}},prev:function(){var t=this.parsedDate,e=this.opts;switch(this.view){case"days":this.date=new Date(t.year,t.month-1,1),e.onChangeMonth&&e.onChangeMonth(this.parsedDate.month,this.parsedDate.year);break;case"months":this.date=new Date(t.year-1,t.month,1),e.onChangeYear&&e.onChangeYear(this.parsedDate.year);break;case"years":this.date=new Date(t.year-10,0,1),e.onChangeDecade&&e.onChangeDecade(this.curDecade)}},formatDate:function(t,e){e=e||this.date;var i=t,s=this.loc,a=Datepicker.getDecade(e),n=Datepicker.getParsedDate(e);switch(!0){case/dd/.test(i):i=i.replace(/\bdd\b/,n.fullDate);case/d/.test(i):i=i.replace(/\bd\b/,n.date);case/DD/.test(i):i=i.replace(/\bDD\b/,s.days[n.day]);case/D/.test(i):i=i.replace(/\bD\b/,s.daysShort[n.day]);case/mm/.test(i):i=i.replace(/\bmm\b/,n.fullMonth);case/m/.test(i):i=i.replace(/\bm\b/,n.month+1);case/MM/.test(i):i=i.replace(/\bMM\b/,this.loc.months[n.month]);case/M/.test(i):i=i.replace(/\bM\b/,s.monthsShort[n.month]);case/yyyy/.test(i):i=i.replace(/\byyyy\b/,n.year);case/yyyy1/.test(i):i=i.replace(/\byyyy1\b/,a[0]);case/yyyy2/.test(i):i=i.replace(/\byyyy2\b/,a[1]);case/yy/.test(i):i=i.replace(/\byy\b/,n.year.toString().slice(-2))}return i},selectDate:function(t){var e=this.parsedDate,i="";if(t instanceof Date){if("days"==this.view&&t.getMonth()!=e.month&&this.opts.moveToOtherMonthsOnSelect&&(i=new Date(t.getFullYear(),t.getMonth(),1)),"years"==this.view&&t.getFullYear()!=e.year&&this.opts.moveToOtherYearsOnSelect&&(i=new Date(t.getFullYear(),0,1)),i&&(this.silent=!0,this.date=i,this.silent=!1,this.nav._render()),this.opts.multipleDates){if(this.selectedDates.length===this.opts.multipleDates)return;this._isSelected(t)||this.selectedDates.push(t)}else this.selectedDates=[t];this._setInputValue(),this.opts.onSelect&&this._triggerOnChange(),this.opts.autoClose?this.hide():this.views[this.currentView]._render()}},removeDate:function(t){var e=this.selectedDates,i=this;if(t instanceof Date)return e.some(function(s,a){return Datepicker.isSame(s,t)?(e.splice(a,1),i.views[i.currentView]._render(),i._setInputValue(),i.opts.onSelect&&i._triggerOnChange(),!0):void 0})},today:function(){this.silent=!0,this.view=this.opts.minView,this.silent=!1,this.date=new Date},clear:function(){this.selectedDates=[],this.views[this.currentView]._render(),this.opts.onSelect&&this._triggerOnChange()},update:function(t,i){var s=arguments.length;return 2==s?this.opts[t]=i:1==s&&"object"==typeof t&&(this.opts=e.extend(!0,this.opts,t)),this._createShortCuts(),this._syncWithMinMaxDates(),this._defineLocale(this.opts.language),this.nav._addButtonsIfNeed(),this.nav._render(),this.views[this.currentView]._render(),this.elIsInput&&!this.opts.inline&&(this._setPositionClasses(this.opts.position),this.visible&&this.setPosition(this.opts.position)),this},_syncWithMinMaxDates:function(){var t=this.date.getTime();this.silent=!0,this.minTime>t&&(this.date=this.minDate),this.maxTime=this.minTime&&i<=this.maxTime,month:h>=this.minTime&&r<=this.maxTime,year:s.year>=a.year&&s.year<=n.year};return e?o[e]:o.day},_getDimensions:function(t){var e=t.offset();return{width:t.outerWidth(),height:t.outerHeight(),left:e.left,top:e.top}},_setPositionClasses:function(t){t=t.split(" ");var e=t[0],i=t[1],s="datepicker -"+e+"-"+i+"- -from-"+e+"-";this.visible&&(s+=" active"),this.$datepicker.removeAttr("class").addClass(s)},setPosition:function(t){var e,i,s=this._getDimensions(this.$el),a=this._getDimensions(this.$datepicker),n=t.split(" "),h=this.opts.offset,r=n[0],o=n[1];switch(r){case"top":e=s.top-a.height-h;break;case"right":i=s.left+s.width+h;break;case"bottom":e=s.top+s.height+h;break;case"left":i=s.left-a.width-h}switch(o){case"top":e=s.top;break;case"right":i=s.left+s.width-a.width;break;case"bottom":e=s.top+s.height-a.height;break;case"left":i=s.left;break;case"center":/left|right/.test(r)?e=s.top+s.height/2-a.height/2:i=s.left+s.width/2-a.width/2}this.$datepicker.css({left:i,top:e})},show:function(){this.setPosition(this.opts.position),this.$datepicker.addClass("active"),this.visible=!0},hide:function(){this.$datepicker.removeClass("active").css({left:"-100000px"}),this.inFocus=!1,this.visible=!1,this.$el.blur()},_onShowEvent:function(){this.visible||this.show()},_onBlur:function(){!this.inFocus&&this.visible&&this.hide()},_onMouseDownDatepicker:function(t){this.inFocus=!0},_onMouseUpDatepicker:function(t){this.inFocus=!1,this.$el.focus()},_onInput:function(){var t=this.$el.val();t||this.clear()},get parsedDate(){return Datepicker.getParsedDate(this.date)},set date(t){return t instanceof Date?(this.currentDate=t,this.inited&&!this.silent&&(this.views[this.view]._render(),this.nav._render()),t):void 0},get date(){return this.currentDate},set view(t){return this.viewIndex=this.viewIndexes.indexOf(t),this.viewIndex<0?void 0:(this.prevView=this.currentView,this.currentView=t,this.inited&&(this.views[t]?this.views[t]._render():this.views[t]=new Datepicker.Body(this,t,this.opts),this.views[this.prevView].hide(),this.views[t].show(),this.nav._render(),this.opts.onChangeView&&this.opts.onChangeView(t),this.setPosition(this.opts.position)),t)},get view(){return this.currentView},get cellType(){return this.view.substring(0,this.view.length-1)},get minTime(){var t=Datepicker.getParsedDate(this.minDate);return new Date(t.year,t.month,t.date).getTime()},get maxTime(){var t=Datepicker.getParsedDate(this.maxDate);return new Date(t.year,t.month,t.date).getTime()},get curDecade(){return Datepicker.getDecade(this.date)}},Datepicker.getDaysCount=function(t){return new Date(t.getFullYear(),t.getMonth()+1,0).getDate()},Datepicker.getParsedDate=function(t){return{year:t.getFullYear(),month:t.getMonth(),fullMonth:t.getMonth()+1<10?"0"+(t.getMonth()+1):t.getMonth()+1,date:t.getDate(),fullDate:t.getDate()<10?"0"+t.getDate():t.getDate(),day:t.getDay()}},Datepicker.getDecade=function(t){var e=10*Math.floor(t.getFullYear()/10);return[e,e+9]},Datepicker.template=function(t,e){return t.replace(/#\{([\w]+)\}/g,function(t,i){return e[i]||0===e[i]?e[i]:void 0})},Datepicker.isSame=function(t,e,i){var s=Datepicker.getParsedDate(t),a=Datepicker.getParsedDate(e),n=i?i:"day",h={day:s.date==a.date&&s.month==a.month&&s.year==a.year,month:s.month==a.month&&s.year==a.year,year:s.year==a.year};return h[n]},Datepicker.language={ru:{days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],daysShort:["Вос","Пон","Вто","Сре","Чет","Пят","Суб"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",clear:"Очистить",dateFormat:"dd.mm.yyyy",firstDay:1}},e.fn[n]=function(t){return Datepicker.prototype[t]?void Datepicker.prototype[t].apply(this.data(n),Array.prototype.slice.call(arguments,1)):this.each(function(){if(e.data(this,n)){var i=e.data(this,n),s=i.opts;i.opts=e.extend({},s,t)}else e.data(this,n,new Datepicker(this,t))})},e(function(){e(h).datepicker()})}(window,jQuery),function(){var t={days:'
',months:'
',years:'
'};Datepicker.Body=function(t,e,i){this.d=t,this.type=e,this.opts=i,this.init()},Datepicker.Body.prototype={init:function(){this._buildBaseHtml(),this._render(),this._bindEvents()},_bindEvents:function(){this.$el.on("click",".datepicker--cell",$.proxy(this._onClickCell,this))},_buildBaseHtml:function(){this.$el=$(t[this.type]).appendTo(this.d.$content),this.$names=$(".datepicker--days-names",this.$el),this.$cells=$(".datepicker--cells",this.$el)},_getDayNamesHtml:function(t,e,i,s){return e=void 0!=e?e:t,i=i?i:"",s=void 0!=s?s:0,s>7?i:7==e?this._getDayNamesHtml(t,0,i,++s):(i+='
'+this.d.loc.daysMin[e]+"
",this._getDayNamesHtml(t,++e,i,++s))},_getDaysHtml:function(t){var e=Datepicker.getDaysCount(t),i=new Date(t.getFullYear(),t.getMonth(),1).getDay(),s=new Date(t.getFullYear(),t.getMonth(),e).getDay(),a=i-this.d.loc.firstDay,n=6-s+this.d.loc.firstDay;a=0>a?a+7:a,n=n>6?n-7:n;for(var h,r,o=-a+1,d="",c=o,l=e+n;l>=c;c++)r=t.getFullYear(),h=t.getMonth(),d+=this._getDayHtml(new Date(r,h,c));return d},_getDayHtml:function(t){var e="datepicker--cell datepicker--cell-day",i=new Date,s=Datepicker.getParsedDate(t),a={},n=s.date;return this.opts.onRenderCell&&(a=this.opts.onRenderCell(t,"day")||{},n=a.html?a.html:n,e+=a.classes?" "+a.classes:""),this.d.isWeekend(s.day)&&(e+=" -weekend-"),Datepicker.isSame(i,t)&&(e+=" -current-"),this.d._isSelected(t,"day")&&(e+=" -selected-"),(!this.d._isInRange(t)||a.disabled)&&(e+=" -disabled-"),s.month!=this.d.parsedDate.month&&(e+=" -other-month-",this.opts.selectOtherMonths||(e+=" -disabled-"),this.opts.showOtherMonths||(n="")),'
'+n+"
"},_getMonthsHtml:function(t){for(var e="",i=Datepicker.getParsedDate(t),s=0;12>s;)e+=this._getMonthHtml(new Date(i.year,s)),s++;return e},_getMonthHtml:function(t){var e="datepicker--cell datepicker--cell-month",i=Datepicker.getParsedDate(t),s=new Date,a=this.d.loc,n=a[this.opts.monthsFiled][i.month],h={};return this.opts.onRenderCell&&(h=this.opts.onRenderCell(t,"month")||{},n=h.html?h.html:n,e+=h.classes?" "+h.classes:""),Datepicker.isSame(s,t,"month")&&(e+=" -current-"),this.d._isSelected(t,"month")&&(e+=" -selected-"),(!this.d._isInRange(t,"month")||h.disabled)&&(e+=" -disabled-"),'
'+n+"
"},_getYearsHtml:function(t){var e=(Datepicker.getParsedDate(t),Datepicker.getDecade(t)),i=e[0]-1,s="",a=i;for(a;a<=e[1]+1;a++)s+=this._getYearHtml(new Date(a,0));return s},_getYearHtml:function(t){var e="datepicker--cell datepicker--cell-year",i=Datepicker.getDecade(this.d.date),s=new Date,a=Datepicker.getParsedDate(t),n=a.year,h={};return this.opts.onRenderCell&&(h=this.opts.onRenderCell(t,"year")||{},n=h.html?h.html:n,e+=h.classes?" "+h.classes:""),(a.yeari[1])&&(e+=" -other-decade-",this.opts.selectOtherYears||(e+=" -disabled-"),this.opts.showOtherYears||(n="")),Datepicker.isSame(s,t,"year")&&(e+=" -current-"),this.d._isSelected(t,"year")&&(e+=" -selected-"),(!this.d._isInRange(t,"year")||h.disabled)&&(e+=" -disabled-"),'
'+n+"
"},_renderTypes:{days:function(){var t=this._getDayNamesHtml(this.d.loc.firstDay),e=this._getDaysHtml(this.d.currentDate);this.$cells.html(e),this.$names.html(t)},months:function(){var t=this._getMonthsHtml(this.d.currentDate);this.$cells.html(t)},years:function(){var t=this._getYearsHtml(this.d.currentDate);this.$cells.html(t)}},_render:function(){this._renderTypes[this.type].bind(this)()},show:function(){this.$el.addClass("active"),this.acitve=!0},hide:function(){this.$el.removeClass("active"),this.active=!1},_handleClick:function(t){var e=t.data("date")||1,i=t.data("month")||0,s=t.data("year")||this.d.parsedDate.year;if(this.d.view!=this.opts.minView){var a=this.d.viewIndex-1;return this.d.silent=!0,this.d.date=new Date(s,i,e),this.d.silent=!1,void(this.d.view=this.d.viewIndexes[a])}var n=new Date(s,i,e),h=this.d._isSelected(n,this.d.cellType);h?h&&this.opts.toggleSelected&&this.d.removeDate(n):this.d.selectDate(n)},_onClickCell:function(t){var e=$(t.target).closest(".datepicker--cell");e.hasClass("-disabled-")||this._handleClick.bind(this)(e)}}}(),function(){var t='
#{prevHtml}
#{title}
#{nextHtml}
',e='
',i='#{label}';Datepicker.Navigation=function(t,e){this.d=t,this.opts=e,this.$buttonsContainer="",this.init()},Datepicker.Navigation.prototype={init:function(){this._buildBaseHtml(),this._bindEvents()},_bindEvents:function(){this.d.$nav.on("click",".datepicker--nav-action",$.proxy(this._onClickNavButton,this)),this.d.$nav.on("click",".datepicker--nav-title",$.proxy(this._onClickNavTitle,this)),this.d.$datepicker.on("click",".datepicker--button",$.proxy(this._onClickNavButton,this))},_buildBaseHtml:function(){this._render(),this._addButtonsIfNeed()},_addButtonsIfNeed:function(){this.opts.todayButton&&this._addButton("today"),this.opts.clearButton&&this._addButton("clear")},_render:function(){var e=this._getTitle(this.d.currentDate),i=Datepicker.template(t,$.extend({title:e},this.opts));this.d.$nav.html(i),"years"==this.d.view&&$(".datepicker--nav-title",this.d.$nav).addClass("-disabled-"),this.setNavStatus()},_getTitle:function(t){return this.d.formatDate(this.opts.navTitles[this.d.view],t)},_addButton:function(t){this.$buttonsContainer.length||this._addButtonsContainer();var e={action:t,label:this.d.loc[t]},s=Datepicker.template(i,e);this.$buttonsContainer.append(s)},_addButtonsContainer:function(){this.d.$datepicker.append(e),this.$buttonsContainer=$(".datepicker--buttons",this.d.$datepicker)},setNavStatus:function(){if((this.opts.minDate||this.opts.maxDate)&&this.opts.disableNavWhenOutOfRange){var t=this.d.parsedDate,e=t.month,i=t.year,s=t.date;switch(this.d.view){case"days":this.d._isInRange(new Date(i,e-1,s),"month")||this._disableNav("prev"),this.d._isInRange(new Date(i,e+1,s),"month")||this._disableNav("next");break;case"months":this.d._isInRange(new Date(i-1,e,s),"year")||this._disableNav("prev"),this.d._isInRange(new Date(i+1,e,s),"year")||this._disableNav("next");break;case"years":this.d._isInRange(new Date(i-10,e,s),"year")||this._disableNav("prev"),this.d._isInRange(new Date(i+10,e,s),"year")||this._disableNav("next")}}},_disableNav:function(t){$('[data-action="'+t+'"]',this.d.$nav).addClass("-disabled-")},_activateNav:function(t){$('[data-action="'+t+'"]',this.d.$nav).removeClass("-disabled-")},_onClickNavButton:function(t){var e=$(t.target).closest("[data-action]"),i=e.data("action");this.d[i]()},_onClickNavTitle:function(t){return $(t.target).hasClass("-disabled-")?void 0:"days"==this.d.view?this.d.view="months":void(this.d.view="years")}}}(); \ No newline at end of file diff --git a/index-ru.html b/docs/index-ru.html similarity index 72% rename from index-ru.html rename to docs/index-ru.html index f25597f..cb58d6c 100644 --- a/index-ru.html +++ b/docs/index-ru.html @@ -1,9 +1,9 @@ -Air Datepicker

AIR DATEPICKERлегкий современный jQuery календарь

AIR DATEPICKERлегкий кроссбраузерный jQuery календарь

Описание

Легкий кроссбраузерный календарь, написан с использованиемflexbox. Работает во всех современных браузерах: -IE 10+, Chrome, Firefox, Safari 8+, Opera 17+.

Установка

bower i --save air-datepicker

Либо можно скачать файлы напрямую с GitHub

Использование

Подключите стили и скрипты из папки/dist:

<html>
+

Описание

Легкий (~20kb минифицированный js файл и ~5.5kb gziped) кроссбраузерный календарь, написан с использованиемes5иcss flexbox. Работает во всех современных браузерах: +IE 10+, Chrome, Firefox, Safari 8+, Opera 17+.

Установка

bower i --save air-datepicker

Либо можно скачать файлы напрямую с GitHub

Использование

Подключите стили и скрипты из папки/dist:

<html>
 	<head>
 		<link href="dist/css/datepicker.min.css" rel="stylesheet" type="text/css">
 		<script src="dist/js/datepicker.min.js"></script>
@@ -13,8 +13,8 @@ $('#my-element').datepicker([options])
 
 // Доступ к экземпляру объекта
 $('#my-element').data('datepicker')
-

Примеры

Инициализация с опциями по умолчанию

Пример
<input type='text' class='datepicker-here' />
-

Выбор нескольких дат

Передайте параметр{multipleDates: true}для выбора нескольких дат. Если требуется ограничить количество выбранных дат, то передайте необходимое число{multipleDates: 3}.

Пример
<input type="text"
+

Примеры

Инициализация с опциями по умолчанию

Пример
<input type='text' class='datepicker-here' />
+

Выбор нескольких дат

Передайте параметр{multipleDates: true}для выбора нескольких дат. Если требуется ограничить количество выбранных дат, то передайте необходимое число{multipleDates: 3}.

Пример
<input type="text"
 	class="datepicker-here"
 	data-multiple-dates="3"
 	data-multiple-dates-separator=", "
@@ -63,7 +63,7 @@ $end.datepicker({
 				.update('maxDate', date)
 		}
 	})
-

Локализация

Вы можете добавить свою локализацию в объектDatepicker.language["my-lang"]и при вызове календаря передать название языка в параметрlanguage

Datepicker.language['my-lang'] = {...}
+

Локализация

Вы можете добавить свою локализацию в объектDatepicker.language["my-lang"]и при вызове календаря передать название языка в параметрlanguage

Datepicker.language['my-lang'] = {...}
 
 $('.my-datepicker').datepicker({
 	language: 'my-lang'
@@ -85,7 +85,7 @@ $('.my-datepicker').datepicker({
 	dateFormat: 'dd.mm.yyyy',
 	firstDay: 1
 };
-

Опции

inline

Тип:boolean

Значение по умполчанию:false

Если true, то календарь будет виден постоянно.

language

Тип:string|object

Значение по умполчанию:"ru"

Язык календаря. Если передается строка, то поиск языка будет осуществляться в объектеDatepicker.languageЕсли передан объект, то данные будут браться из него.

Если в объекте локализации не будет хватать каких то полей, то они будут взяты из языка по умолчанию.

startDate

Тип:Date

Значение по умполчанию:new Date()

Какую дату нужно показывать при инициализации календаря.

firstDay

Тип:number

Значение по умполчанию:""

Индекс дня, с которого начинается неделя. Возможные значение от 0 до 6, где 0 - воскресенье и 6 - суббота. +

Опции

inline

Тип:boolean

Значение по умполчанию:false

Если true, то календарь будет виден постоянно.

language

Тип:string|object

Значение по умполчанию:"ru"

Язык календаря. Если передается строка, то поиск языка будет осуществляться в объектеDatepicker.languageЕсли передан объект, то данные будут браться из него.

Если в объекте локализации не будет хватать каких то полей, то они будут взяты из языка по умолчанию.

startDate

Тип:Date

Значение по умполчанию:new Date()

Какую дату нужно показывать при инициализации календаря.

firstDay

Тип:number

Значение по умполчанию:""

Индекс дня, с которого начинается неделя. Возможные значение от 0 до 6, где 0 - воскресенье и 6 - суббота. По умолчанию берется из локализации, если значение передать сюда, то оно будет иметь больший приоритет.

weekends

Тип:array

Значение по умполчанию:[6, 0]

Массив индексов дней, которые будут считаться выходными днями. Им будет добавлен класс.-weekend-. По умолчанию это суббота и воскресенье.

dateFormat

Тип:string

Значение по умполчанию:""

Формат даты, кобминация из d, m, yyyy, D, M, и т.д. По умолчанию берется из локализации, если передать значение сюда, то оно будет иметь больший приоритет.

  • d- дата
  • dd- дата с лидирующем нулем
  • D- сокращенное наименование дня
  • DD- полное наименование дня
  • m- номер мясяца
  • mm- номер месяца с лидирующем нулем
  • M- сокращенное наименовение месяца
  • MM- полное наименовение месяца
  • yy- сокращенный номер года
  • yyyy- полный номер года
  • yyyy1- первый год декады, в которую входит текущий год
  • yyyy2- последний год декады, в которую входит текущий год

toggleSelected

Тип:boolean

Значение по умполчанию:true

Если true, то клик на выделенной дате снимет выделение.

position

Тип:string

Значение по умполчанию:"bottom left"

Позиционирование календаря отностиельно текстового поля. Первым значением задается основная ось позиционирования, воторым - положение на этой оси. Например{position: "right top"}- утсановит позицию клаендаря справа вверху от текстового поля.

offset

Тип:number

Значение по умполчанию:12

Отступ от основной оси позиционирования.

view

Тип:string

Значение по умполчанию:"days"

Начальный вид календаря. Возможноые значения:

  • days- отображение дней месяца
  • months- отображение месяцев одного года
  • years- отображение годов одной декады

minView

Тип:string

Значение по умполчанию:"days"

Минимальное представление календаря, по наступлению которого, выбор ячейки приведет к ее активации, а не переходу к следующему виду. @@ -97,7 +97,7 @@ $('.my-datepicker').datepicker({ navTitles: { days: '<h3>Выберете дату заезда</h3> MM, yyyy' } -})

monthsField

Тип:string

Значение по умполчанию:"monthsShort"

Какое поле из объекта локализации использовать в качестве названий месяцев, когда каледнарь отображает год.

События

onSelect(formattedDate, date, inst)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при выборе даты.

  • formattedDatestring- отформатированная дата.
  • dateDate|array- объектDateвыбранной даты, если{multipleDates: true}, то будет передан массив таких объектов.
  • instobject- экземпляр плагина.

onChangeMonth(month, year)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении месяца.

  • monthnumber- номер месяца (от 0 до 12), к которому осуществлен переход.
  • yearnumber- номер года, к которому осуществлен переход.

onChangeYear(year)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении года.

  • yearnumber- номер года, к которому осуществлен переход

onChangeDecade(decade)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении декады.

  • decadearray- массив, состоящий из номера года с которого начинается декада, и года на котором она заканчивается.

onChangeView(view)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении вида календаря

  • viewstring- вид, к которому осуществлен переход (days, months, years).

onRenderCell(date, cellType)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при отрисовке ячейки календаря.

  • dateDate- объект даты текущей ячейки
  • cellTypestring- тип текущей ячейки (day, month, year).

Функция должна возвращать объект, которой может состоять из трех полей:

{
+})

monthsField

Тип:string

Значение по умполчанию:"monthsShort"

Какое поле из объекта локализации использовать в качестве названий месяцев, когда каледнарь отображает год.

События

onSelect(formattedDate, date, inst)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при выборе даты.

  • formattedDatestring- отформатированная дата.
  • dateDate|array- объектDateвыбранной даты, если{multipleDates: true}, то будет передан массив таких объектов.
  • instobject- экземпляр плагина.

onChangeMonth(month, year)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении месяца.

  • monthnumber- номер месяца (от 0 до 12), к которому осуществлен переход.
  • yearnumber- номер года, к которому осуществлен переход.

onChangeYear(year)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении года.

  • yearnumber- номер года, к которому осуществлен переход

onChangeDecade(decade)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении декады.

  • decadearray- массив, состоящий из номера года с которого начинается декада, и года на котором она заканчивается.

onChangeView(view)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при изменении вида календаря

  • viewstring- вид, к которому осуществлен переход (days, months, years).

onRenderCell(date, cellType)

Тип:function

Значение по умполчанию:null

Функция обратного вызова при отрисовке ячейки календаря.

  • dateDate- объект даты текущей ячейки
  • cellTypestring- тип текущей ячейки (day, month, year).

Функция должна возвращать объект, которой может состоять из трех полей:

{
 	html: '', // Кастомный контент ячейки
 	classes: '', // Дополнительные классы для ячейки
 	disabled: '' // true/false, если true, то ячейку нельзя будет выбрать
@@ -113,7 +113,7 @@ $('.my-datepicker').datepicker({
 		}
 	}
 })
-

API

Досутп к экземпляру плагина осуществляется черезdataатрибут.

var myDatepicker = $('#my-elem').datepicker().data('datepicker');
+

API

Досутп к экземпляру плагина осуществляется черезdataатрибут.

var myDatepicker = $('#my-elem').datepicker().data('datepicker');
 
 myDatepicker.show();
 

show()

Показывает календарь.

hide()

Скрывает календарь.

next()

Переходит на следующий месяц если вид days, на следующий год если months, и следующую декаду если years.

prev()

Переходит на предыдщуий месяц если вид days, на предыдущий год если months, и предыдущую декаду если years.

selectDate(date)

  • dateDate- дата в формате JavaScriptDate()

Выбирает переданную дату. Если{multipleDates: false}и уже есть активная дата, то она будет деактивирована. Если{multipleDates: true}то будет добавлена еще одна активная дата.

removeDate(date)

  • dateDate- дата в формате JavaScriptDate()

Снимает выделение с переданной даты.

update(field[, value])

  • fieldstring|object- название поля значение которого нужно обновить.
  • fieldstring|*- новое значение параметра

Обновление опций календаря, после вызова метода он автоматически перерисуется. @@ -130,7 +130,9 @@ datepicker.update({ todayButton: true })

view

Устанавливает новое представление для календаря.

datepicker.view = 'months';
-

date

Устанавливает новую отображаемую дату, нужно передать JavaScriptDate()

datepicker.date = new Date();
\ No newline at end of file +}) + +navigation.init(); \ No newline at end of file diff --git a/docs/js/navigation.js b/docs/js/navigation.js new file mode 100644 index 0000000..93d6286 --- /dev/null +++ b/docs/js/navigation.js @@ -0,0 +1,119 @@ +var navigation; + +(function (window, $) { + var $sections = $('article'), + idCounter = 1, + idPrefix = 'sub-section-', + navTemplate = '', + $nav, + cache = {}; + + function init () { + updateCache(); + createHtml(); + + $($nav).on('click', 'a', onClickNavItem); + } + + function createHtml () { + var html = '', + section, + curSection, + subsection, + curSubSection; + + $(navTemplate).appendTo('body'); + $nav = $('#nav'); + + for (section in cache) { + curSection = cache[section]; + + html += ''; + } + + $nav.html(html); + } + + function updateCache () { + cache = {}; + idCounter = 1; + + var id, + title, + subTitles, + subId, + $subTitle, + $current; + + $sections.each(function () { + $current = $(this); + title = $('h2', $current); + subTitles = $('h3', $current); + id = title.attr('id'); + + cache[id] = { + title: title.text(), + offset: title.offset().top, + subSections: '' + }; + + if (subTitles.length) { + cache[id].subSections = {}; + + subTitles.each(function () { + subId = idPrefix + idCounter++; + $subTitle = $(this).attr('id', subId); + + cache[id].subSections[subId] = { + title: $subTitle.text(), + offset: $subTitle.offset().top + } + }) + } + }) + } + + function scrollTo (pos) { + $('body, html').animate({ + scrollTop: pos + }, 700, 'easeInOutCubic') + } + + function onClickNavItem (e) { + e.preventDefault(); + + var $link = $(e.target), + $section = $($link.attr('href')); + + $section.addClass('-hilited-'); + + setTimeout(function () { + $section.removeClass('-hilited-'); + }, 1400) + + scrollTo($section.offset().top - 16) + } + + navigation = { + init: init + } +})(window, jQuery); diff --git a/gulpfile.js b/gulpfile.js index 19f0378..7ddcd7c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,6 +8,13 @@ gulp.task('i18n', require('./tasks/i18n')); gulp.task('cssPage', require('./tasks/cssPage')); gulp.task('jade', require('./tasks/jade')); +var gzip = require('gulp-gzip'); +gulp.task('gzip', function (cb) { + gulp.src('dist/js/datepicker.min.js') + .pipe(gzip()) + .pipe(gulp.dest('dist/')) +}); + gulp.task('watch', function () { livereload.listen(); @@ -20,11 +27,11 @@ gulp.task('watch', function () { livereload.changed(file) }); - gulp.watch('page/sass/*.scss', ['cssPage']).on('change', function (file) { + gulp.watch('docs/sass/*.scss', ['cssPage']).on('change', function (file) { livereload.changed(file) }); - gulp.watch('page/jade/**/*.jade', ['jade']).on('change', function (file) { + gulp.watch('docs/jade/**/*.jade', ['jade']).on('change', function (file) { livereload.changed(file) }); }); diff --git a/page/css/github-gist.css b/page/css/github-gist.css deleted file mode 100644 index eb66fd1..0000000 --- a/page/css/github-gist.css +++ /dev/null @@ -1,218 +0,0 @@ -/** - * GitHub Gist Theme - * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro - */ - -.hljs { - display: block; - background: white; - padding: 0.5em; - color: #333333; - overflow-x: auto; - -webkit-text-size-adjust: none; -} - -.hljs-comment, -.bash .hljs-shebang, -.java .hljs-javadoc, -.javascript .hljs-javadoc, -.rust .hljs-preprocessor { - color: #969896; -} - -.hljs-string, -.apache .hljs-sqbracket, -.coffeescript .hljs-subst, -.coffeescript .hljs-regexp, -.cpp .hljs-preprocessor, -.c .hljs-preprocessor, -.javascript .hljs-regexp, -.json .hljs-attribute, -.makefile .hljs-variable, -.markdown .hljs-value, -.markdown .hljs-link_label, -.markdown .hljs-strong, -.markdown .hljs-emphasis, -.markdown .hljs-blockquote, -.nginx .hljs-regexp, -.nginx .hljs-number, -.objectivec .hljs-preprocessor .hljs-title, -.perl .hljs-regexp, -.php .hljs-regexp, -.xml .hljs-value, -.less .hljs-built_in, -.scss .hljs-built_in { - color: #df5000; -} - -.hljs-keyword, -.css .hljs-at_rule, -.css .hljs-important, -.http .hljs-request, -.ini .hljs-setting, -.haskell .hljs-type, -.java .hljs-javadoctag, -.javascript .hljs-tag, -.javascript .hljs-javadoctag, -.nginx .hljs-title, -.objectivec .hljs-preprocessor, -.php .hljs-phpdoc, -.sql .hljs-built_in, -.less .hljs-tag, -.less .hljs-at_rule, -.scss .hljs-tag, -.scss .hljs-at_rule, -.scss .hljs-important, -.stylus .hljs-at_rule, -.go .hljs-typename, -.swift .hljs-preprocessor { - color: #a71d5d; -} - -.apache .hljs-common, -.apache .hljs-cbracket, -.apache .hljs-keyword, -.bash .hljs-literal, -.bash .hljs-built_in, -.coffeescript .hljs-literal, -.coffeescript .hljs-built_in, -.coffeescript .hljs-number, -.cpp .hljs-number, -.cpp .hljs-built_in, -.c .hljs-number, -.c .hljs-built_in, -.cs .hljs-number, -.cs .hljs-built_in, -.css .hljs-attribute, -.css .hljs-hexcolor, -.css .hljs-number, -.css .hljs-function, -.haskell .hljs-number, -.http .hljs-literal, -.http .hljs-attribute, -.java .hljs-number, -.javascript .hljs-built_in, -.javascript .hljs-literal, -.javascript .hljs-number, -.json .hljs-number, -.makefile .hljs-keyword, -.markdown .hljs-link_reference, -.nginx .hljs-built_in, -.objectivec .hljs-literal, -.objectivec .hljs-number, -.objectivec .hljs-built_in, -.php .hljs-literal, -.php .hljs-number, -.python .hljs-number, -.ruby .hljs-prompt, -.ruby .hljs-constant, -.ruby .hljs-number, -.ruby .hljs-subst .hljs-keyword, -.ruby .hljs-symbol, -.rust .hljs-number, -.sql .hljs-number, -.puppet .hljs-function, -.less .hljs-number, -.less .hljs-hexcolor, -.less .hljs-function, -.less .hljs-attribute, -.scss .hljs-preprocessor, -.scss .hljs-number, -.scss .hljs-hexcolor, -.scss .hljs-function, -.scss .hljs-attribute, -.stylus .hljs-number, -.stylus .hljs-hexcolor, -.stylus .hljs-attribute, -.stylus .hljs-params, -.go .hljs-built_in, -.go .hljs-constant, -.swift .hljs-built_in, -.swift .hljs-number { - color: #0086b3; -} - -.apache .hljs-tag, -.cs .hljs-xmlDocTag, -.css .hljs-tag, -.xml .hljs-title, -.stylus .hljs-tag { - color: #63a35c; -} - -.bash .hljs-variable, -.cs .hljs-preprocessor, -.cs .hljs-preprocessor .hljs-keyword, -.css .hljs-attr_selector, -.css .hljs-value, -.ini .hljs-value, -.ini .hljs-keyword, -.javascript .hljs-tag .hljs-title, -.makefile .hljs-constant, -.nginx .hljs-variable, -.xml .hljs-tag, -.scss .hljs-variable { - color: #333333; -} - -.bash .hljs-title, -.coffeescript .hljs-title, -.cpp .hljs-title, -.c .hljs-title, -.cs .hljs-title, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo, -.ini .hljs-title, -.haskell .hljs-title, -.haskell .hljs-pragma, -.java .hljs-title, -.javascript .hljs-title, -.makefile .hljs-title, -.objectivec .hljs-title, -.perl .hljs-sub, -.php .hljs-title, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-parent, -.ruby .hljs-title, -.rust .hljs-title, -.xml .hljs-attribute, -.puppet .hljs-title, -.less .hljs-id, -.less .hljs-pseudo, -.less .hljs-class, -.scss .hljs-id, -.scss .hljs-pseudo, -.scss .hljs-class, -.stylus .hljs-class, -.stylus .hljs-id, -.stylus .hljs-pseudo, -.stylus .hljs-title, -.swift .hljs-title, -.diff .hljs-chunk { - color: #795da3; -} - -.coffeescript .hljs-reserved, -.coffeescript .hljs-attribute { - color: #1d3e81; -} - -.diff .hljs-chunk { - font-weight: bold; -} - -.diff .hljs-addition { - color: #55a532; - background-color: #eaffea; -} - -.diff .hljs-deletion { - color: #bd2c00; - background-color: #ffecec; -} - -.markdown .hljs-link_url { - text-decoration: underline; -} diff --git a/page/css/style.css b/page/css/style.css deleted file mode 100644 index 0002e46..0000000 --- a/page/css/style.css +++ /dev/null @@ -1 +0,0 @@ -.-text-center-,.datepicker-promo,.promo-header{text-align:center}a,abbr,acronym,address,applet,article,aside,audio,big,blockquote,canvas,caption,center,cite,code,dd,del,details,dfn,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,header,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,strike,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}body{margin:0}body,html{width:100%;height:100%}*,:after,:before{box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}b,strong{font-weight:700}i{font-style:italic}a{outline:0;color:#47A6EC}textarea{overflow:auto}html{color:#333;font-family:Tahoma,sans-serif;font-size:14px}p{line-height:1.3;margin-bottom:14px}h1,h2,h3,h4{font-family:'Fira Sans',sans-serif;line-height:1}h2{font-weight:100;font-size:32px;margin:48px 0 8px}h3{font-weight:500;font-size:18px;margin:24px 0 8px}h4{font-weight:400;color:#939393;font-size:16px;margin:24px 0 0}.container{width:960px;margin:0 auto;padding:1px 0}.container article{margin:60px 0 30px}input[type=text]{outline:0;height:32px;border:1px solid #979797;padding:0 8px;margin:0 0 14px;color:#444;font-family:Tahoma,sans-serif;transition:all .2s;width:250px}.hljs,.param-inline{font-family:Consolas,monospace}input[type=text]:focus{border-color:#ffd75c}ul{margin:0 0 16px}ul li{list-style:none;margin-bottom:8px}.example--label{background:#ececec;border-radius:0 0 4px 4px;position:absolute;padding:4px 12px;right:8px;top:0}.hljs{line-height:1.2;-moz-tab-size:4;tab-size:4}.example{border:1px solid #ececec;border-radius:4px;position:relative;margin:16px 0}.example .example-code{border:none;border-radius:0 0 4px 4px;border-top:1px solid #ececec;margin:0}.example-inline{background:red;display:inline-block;vertical-align:middle;margin:0 4px}.example-inline .hljs{padding:0 4px}.example-content{padding:32px}.example-content h1:first-child,.example-content h2:first-child,.example-content h3:first-child{margin-top:0}.example-content>:last-child{margin-bottom:0!important}a:hover{color:#1373ba}.example-code{border:1px solid #ddd;border-radius:4px;overflow:hidden;margin:16px 0;font-size:13px}.param-inline i,.param-inline strong{display:inline-block;margin-right:4px;vertical-align:middle}.example-code code{padding:16px 32px}.param-inline strong{background:#efefef;color:#333;border-radius:4px;font-weight:400;padding:3px 6px 4px}.param-inline i{color:#838383;font-size:.95em;font-style:normal;font-weight:100;font-family:'Fira Sans',sans-serif}.promo-header{font-size:48px;font-weight:100}.promo-header span{display:block;font-size:.5em}.datepicker-promo .datepicker-inline,.param-header--label,.range-example span{display:inline-block}.range-example input[type=text]{width:150px}.range-example span{margin:0 8px}.param-header{margin-bottom:8px}.param-header h3{margin-bottom:2px}.param-header p{margin:0;font-size:13px}.param{margin-bottom:32px}.param-header--label{color:#707070;vertical-align:middle} \ No newline at end of file diff --git a/page/jade/layout.jade b/page/jade/layout.jade deleted file mode 100644 index f2f0e99..0000000 --- a/page/jade/layout.jade +++ /dev/null @@ -1,33 +0,0 @@ -include mixins/example -include mixins/example-content -include mixins/example-code -include mixins/example-inline -include mixins/param -include mixins/param-header - -doctype html -html - head - title Air Datepicker - meta(charset='UTF-8') - link(href='page/css/style.css', rel='stylesheet', type='text/css') - link(href='page/css/github-gist.css', rel='stylesheet', type='text/css') - link(href='dist/css/datepicker.min.css', rel='stylesheet', type='text/css') - link(href='https://fonts.googleapis.com/css?family=Fira+Sans:400,300,500&subset=latin,cyrillic', rel='stylesheet', type='text/css') - script(src='bower_components/jquery/dist/jquery.min.js') - script(src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/highlight.min.js') - script(src='dist/js/datepicker.min.js') - script(src='dist/js/i18n/datepicker.en.js') - - body - div.wrapper - main.main(role='main') - .container - block content - - script. - var $code = $('code'); - $code.each(function (i, el) { - hljs.highlightBlock(el); - }) - diff --git a/page/jade/mixins/example-code.jade b/page/jade/mixins/example-code.jade deleted file mode 100644 index 784e50e..0000000 --- a/page/jade/mixins/example-code.jade +++ /dev/null @@ -1,4 +0,0 @@ -mixin example-code(cl) - pre.example-code - code(class=cl) - block \ No newline at end of file diff --git a/page/jade/mixins/example-content.jade b/page/jade/mixins/example-content.jade deleted file mode 100644 index 35be5d4..0000000 --- a/page/jade/mixins/example-content.jade +++ /dev/null @@ -1,3 +0,0 @@ -mixin example-content() - .example-content - block \ No newline at end of file diff --git a/page/jade/mixins/example-inline.jade b/page/jade/mixins/example-inline.jade deleted file mode 100644 index 6bf5e59..0000000 --- a/page/jade/mixins/example-inline.jade +++ /dev/null @@ -1,4 +0,0 @@ -mixin example-inline(content, type) - span.example-inline - code(class= type). - #{content} \ No newline at end of file diff --git a/page/jade/mixins/example.jade b/page/jade/mixins/example.jade deleted file mode 100644 index a196419..0000000 --- a/page/jade/mixins/example.jade +++ /dev/null @@ -1,4 +0,0 @@ -mixin example() - .example - .example--label Пример - block \ No newline at end of file diff --git a/page/jade/mixins/param-header.jade b/page/jade/mixins/param-header.jade deleted file mode 100644 index e6b26ca..0000000 --- a/page/jade/mixins/param-header.jade +++ /dev/null @@ -1,14 +0,0 @@ -mixin param-header(name, type, defaults) - header.param-header - h3= name - if type - p.param-header--row - span.param-header--label Тип: - +example-inline(type, 'js') - if (defaults || block) - p.param-header--row - span.param-header--label Значение по умполчанию: - if defaults - +example-inline(defaults, 'js') - if block - block diff --git a/page/jade/mixins/param.jade b/page/jade/mixins/param.jade deleted file mode 100644 index 0579de6..0000000 --- a/page/jade/mixins/param.jade +++ /dev/null @@ -1,5 +0,0 @@ -mixin param(content, type) - span.param-inline - strong= content - if type - i= type diff --git a/page/jade/pages/index-ru.jade b/page/jade/pages/index-ru.jade deleted file mode 100644 index 8c6fc12..0000000 --- a/page/jade/pages/index-ru.jade +++ /dev/null @@ -1,598 +0,0 @@ -extends ../layout - -block content - h1.promo-header - | AIR DATEPICKER - span легкий современный jQuery календарь - - p.-text-center- - .datepicker-here.datepicker-promo - script. - var $promo = $('.datepicker-promo'); - - $promo.datepicker() - - - h2 Описание - p - |Легкий кроссбраузерный календарь, написан с использованием - +example-inline('flexbox') - |. Работает во всех современных браузерах: - | IE 10+, Chrome, Firefox, Safari 8+, Opera 17+. - h2 Установка - +example-code('html') bower i --save air-datepicker - p Либо можно скачать файлы напрямую с GitHub - - h2 Использование - p - |Подключите стили и скрипты из папки - +example-inline('/dist') - | : - - +example-code('html') - :code - - - - - - - p - | Календарь автоматически проинициализируется на элементах с классом - +example-inline('.datepicker-here', 'css') - | , при этом опции можно передать через - +example-inline('data', 'html') - | атрибуты. - +example-code('html') - :code - - h3 Ручная инициализация - +example-code('js'). - // Инициализация - $('#my-element').datepicker([options]) - - // Доступ к экземпляру объекта - $('#my-element').data('datepicker') - - h2 Примеры - h3 Инициализация с опциями по умолчанию - +example - +example-content - input(type='text').datepicker-here - +example-code('html') - :code - - - h3 Выбор нескольких дат - p - | Передайте параметр - +example-inline('{multipleDates: true}','js') - | для выбора нескольких дат. Если требуется ограничить количество выбранных дат, то передайте необходимое число - +example-inline('{multipleDates: 3}','js') - | . - +example - +example-content - input(type='text' data-multiple-dates='3' data-multiple-dates-separator=', ', data-position='right top').datepicker-here - +example-code('html') - :code - - - h3 Постоянно видимый календарь - p - | Проинициализируйте плагин на элементе, который не является текстовым полем, например на - +example-inline('
', 'html') - | , либо передайте параметр - +example-inline('{inline: true}', 'js') - | . - +example - +example-content - div.datepicker-here - +example-code('html') - :code -
- - h3 Выбор месяца - +example - +example-content - input.datepicker-here(type='text' data-min-view='months' data-view='months' data-date-format='MM yyyy') - +example-code('html') - :code - - - h3 Минимальная и максимальные даты - p - | Чтобы ограничить выбор даты, используйте - +example-inline('minDate', 'js') - | и - +example-inline('maxDate', 'js') - | , которым нужно передать объект даты. - +example - +example-content - input#minMaxExample(type='text') - script. - $('#minMaxExample').datepicker({ - minDate: new Date() // Можно выбрать тольо даты, идущие за сегодняшним днем - }) - +example-code('js'). - $('#minMaxExample').datepicker({ - minDate: new Date() // Можно выбрать тольо даты, идущие за сегодняшним днем - }) - - h3 Диапозон дат - p. - По умолчанию в плагине нет встроенного механизма выбора диапозона дат для нескольких текстовых полей. - Тем не менее это можно сделть вручную. - +example - +example-content - div.range-example - input(type='text' placeholder='Начало')#start - span – - input(type='text' placeholder='Конец')#end - - script. - var $start = $('#start'), - $end = $('#end'); - - $start.datepicker({ - onSelect: function (fd, date) { - $end.data('datepicker') - .update('minDate', date) - } - }) - - $end.datepicker({ - onSelect: function (fd, date) { - $start.data('datepicker') - .update('maxDate', date) - } - }) - - +example-code('js'). - var $start = $('#start'), - $end = $('#end'); - - $start.datepicker({ - onSelect: function (fd, date) { - $end.data('datepicker') - .update('minDate', date) - } - }) - - $end.datepicker({ - onSelect: function (fd, date) { - $start.data('datepicker') - .update('maxDate', date) - } - }) - - article - h2 Локализация - p - | Вы можете добавить свою локализацию в объект - +example-inline('Datepicker.language["my-lang"]', 'js') - | и при вызове календаря передать название языка в параметр - +example-inline('language', 'js') - - +example-code('js'). - Datepicker.language['my-lang'] = {...} - - $('.my-datepicker').datepicker({ - language: 'my-lang' - }) - - p - | Также объект локализации можно передавать непосредственно в - +example-inline('language', 'js') - - +example-code('js'). - $('.my-datepicker').datepicker({ - language: { - days: [...] - ... - } - }) - - p Если в вашей локализации не будет хватать каких-то полей, то они будут взяты из языка по умолчанию. - - h3 Пример объекта локализации - +example-code('js'). - Datepicker.language['ru'] = { - days: ['Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'], - daysShort: ['Вос','Пон','Вто','Сре','Чет','Пят','Суб'], - daysMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], - months: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], - monthsShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], - today: 'Сегодня', - clear: 'Очистить', - dateFormat: 'dd.mm.yyyy', - firstDay: 1 - }; - - article - h2 Опции - - .param - +param-header('inline', 'boolean', 'false') - p Если true, то календарь будет виден постоянно. - - .param - +param-header('language', 'string|object', '"ru"') - p - | Язык календаря. Если передается строка, то поиск языка будет осуществляться в объекте - +example-inline('Datepicker.language', 'js') - | Если передан объект, то данные будут браться из него. - p Если в объекте локализации не будет хватать каких то полей, то они будут взяты из языка по умолчанию. - - .param - +param-header('startDate', 'Date', 'new Date()') - p Какую дату нужно показывать при инициализации календаря. - - .param - +param-header('firstDay', 'number', '""') - p. - Индекс дня, с которого начинается неделя. Возможные значение от 0 до 6, где 0 - воскресенье и 6 - суббота. - По умолчанию берется из локализации, если значение передать сюда, то оно будет иметь больший приоритет. - - .param - +param-header('weekends', 'array', '[6, 0]') - p - | Массив индексов дней, которые будут считаться выходными днями. Им будет добавлен класс - +example-inline('.-weekend-','css') - | . По умолчанию это суббота и воскресенье. - - .param - +param-header('dateFormat', 'string', '""') - p Формат даты, кобминация из d, m, yyyy, D, M, и т.д. По умолчанию берется из локализации, если передать значение сюда, то оно будет иметь больший приоритет. - ul - li - +param('d') - | - дата - li - +param('dd') - | - дата с лидирующем нулем - li - +param('D') - | - сокращенное наименование дня - li - +param('DD') - | - полное наименование дня - li - +param('m') - | - номер мясяца - li - +param('mm') - | - номер месяца с лидирующем нулем - li - +param('M') - | - сокращенное наименовение месяца - li - +param('MM') - | - полное наименовение месяца - li - +param('yy') - | - сокращенный номер года - li - +param('yyyy') - | - полный номер года - li - +param('yyyy1') - | - первый год декады, в которую входит текущий год - li - +param('yyyy2') - | - последний год декады, в которую входит текущий год - - .param - +param-header('toggleSelected', 'boolean', 'true') - p Если true, то клик на выделенной дате снимет выделение. - - .param - +param-header('position', 'string', '"bottom left"') - p - | Позиционирование календаря отностиельно текстового поля. Первым значением задается основная ось позиционирования, - | воторым - положение на этой оси. Например - +example-inline('{position: "right top"}', 'js') - | - утсановит позицию клаендаря справа вверху от текстового поля. - - .param - +param-header('offset','number', 12) - p Отступ от основной оси позиционирования. - - .param - +param-header('view', 'string', '"days"') - p Начальный вид календаря. Возможноые значения: - ul - li - +example-inline('days','js') - | - отображение дней месяца - li - +example-inline('months','js') - | - отображение месяцев одного года - li - +example-inline('years','js') - | - отображение годов одной декады - - .param - +param-header('minView', 'string', '"days"') - p - | Минимальное представление календаря, по наступлению которого, выбор ячейки приведет к ее активации, а не переходу к следующему виду. - | Возможные значения такие же как и у параметра - +example-inline('view') - | . - - .param - +param-header('showOtherMonths', 'boolean', 'true') - p Если true, то будут отображаться дни других месяцев. - - .param - +param-header('selectOtherMonths', 'boolean', 'true') - p Если true, то можно будет выбрать дни из других месяцев. - - .param - +param-header('moveToOtherMonthsOnSelect', 'boolean', 'true') - p Если true, то при выборе дней из других месяца, будет осуществялться переход к этому месяцу. - - .param - +param-header('showOtherYears', 'boolean', 'true') - p Если true, то при отображении декады, будут показаны годы из других декад. - - .param - +param-header('selectOtherYears', 'boolean', 'true') - p Если true, то можно будет выбрать года из других декад - - .param - +param-header('moveToOtherYearsOnSelect', 'boolean', 'true') - p Если true, то при выборе года из другой декады, будет осуществлен переход к этой декаде. - - .param - +param-header('minDate', 'Date', '""') - p Минимальная дата для возможности выбора. Все даты, идущее до нее нельзя будет активировать. - - .param - +param-header('maxDate', 'Date', '""') - p Максимальная дата для возможности выбора. Все даты, идущее после нее нельзя будет выбрать. - - .param - +param-header('disableNavWhenOutOfRange', 'boolean', 'true') - p Если true, то при наступлении даты, которая была бы меньше минимально возможной или больше максимально возможной, деактвировались бы кнопки навигации 'вперед', 'назад' - - .param - +param-header('multipleDates', 'boolean|number', 'false') - p Если true, то можно будет выбрать неограниченное количество дат. Если передать число, то количество выбираемых дат будет ограниченно этим числом. - - .param - +param-header('multipleDatesSeparator', 'string', '","') - p Разделитель дат, который будет вставлен между датами при объеденения нескольких дат в одну строку. - - .param - +param-header('todayButton', 'boolean', 'false') - p Если true, то будет отображена кнопка "Сегодня". - - .param - +param-header('clearButton', 'boolean', 'false') - p Если true, то будет отображена кнопка "Очистить". - - .param - +param-header('showEvent','string','"focus"') - p Тип события, по наступлению которого будет показан календарь. - - .param - +param-header('autoClose', 'boolean', 'false') - p Если true, то при активации даты, календарь закроется. - - .param - +param-header('prevHtml', 'string', '') - p Контент кнопки 'предыдущий месяц|год|декада'. - - .param - +param-header('nextHtml', 'string', '') - p Контент кнопки 'следующий месяц|год|декада'. - - .param - +param-header('navTitles', 'object') - +example-code('js') - :code - navTitles = { - days: 'MM, yyyy', - months: 'yyyy', - years: 'yyyy1 - yyyy2' - }; - p - | Значение заголовка календаря в зависимости от текущего вида, можно использовать те же обозночения что и в - +example-inline('dateFormat', 'js') - | . Недостающие поля будут взяты из значения по умолчанию. Также можно использовать html теги. - +example-code('js') - :code - $('#my-datepicker').datepicker({ - navTitles: { - days: '

Выберете дату заезда

MM, yyyy' - } - }) - .param - +param-header('monthsField','string','"monthsShort"') - p Какое поле из объекта локализации использовать в качестве названий месяцев, когда каледнарь отображает год. - - h2 События - .param - +param-header('onSelect(formattedDate, date, inst)', 'function', 'null') - p Функция обратного вызова при выборе даты. - ul - li - +param('formattedDate', 'string') - | - отформатированная дата. - li - +param('date', 'Date|array') - | - объект - +example-inline('Date', 'js') - | выбранной даты, если - +example-inline('{multipleDates: true}', 'js') - | , то будет передан массив таких объектов. - li - +param('inst','object') - | - экземпляр плагина. - - .param - +param-header('onChangeMonth(month, year)','function','null') - p Функция обратного вызова при изменении месяца. - ul - li - +param('month','number') - | - номер месяца (от 0 до 12), к которому осуществлен переход. - li - +param('year','number') - | - номер года, к которому осуществлен переход. - - .param - +param-header('onChangeYear(year)','function', 'null') - p Функция обратного вызова при изменении года. - ul - li - +param('year','number') - | - номер года, к которому осуществлен переход - - .param - +param-header('onChangeDecade(decade)','function', 'null') - p Функция обратного вызова при изменении декады. - ul - li - +param('decade','array') - | - массив, состоящий из номера года с которого начинается декада, и года на котором она заканчивается. - - .param - +param-header('onChangeView(view)', 'function', 'null') - p Функция обратного вызова при изменении вида календаря - ul - li - +param('view', 'string') - | - вид, к которому осуществлен переход (days, months, years). - - .param - +param-header('onRenderCell(date, cellType)', 'function', 'null') - p Функция обратного вызова при отрисовке ячейки календаря. - ul - li - +param('date', 'Date') - | - объект даты текущей ячейки - li - +param('cellType', 'string') - | - тип текущей ячейки (day, month, year). - p Функция должна возвращать объект, которой может состоять из трех полей: - +example-code('js'). - { - html: '', // Кастомный контент ячейки - classes: '', // Дополнительные классы для ячейки - disabled: '' // true/false, если true, то ячейку нельзя будет выбрать - } - h4 Пример - +example-code('js'). - $('#my-datepicker').datepicker({ - // Передаем функцию, которая добавляет 4 числу каждого месяца класс 'my-class' - // и делает их невозможными к выбору. - onRenderCell: function(date, cellType) { - if (cellType == 'day' && date.getDate() == 4) { - return { - classes: 'my-class', - disabled: true - } - } - } - }) - - article - h2 API - p - | Досутп к экземпляру плагина осуществляется через - +example-inline('data') - | атрибут. - +example-code('js'). - var myDatepicker = $('#my-elem').datepicker().data('datepicker'); - - myDatepicker.show(); - - .param - +param-header('show()') - p Показывает календарь. - - .param - +param-header('hide()') - p Скрывает календарь. - - .param - +param-header('next()') - p Переходит на следующий месяц если вид days, на следующий год если months, и следующую декаду если years. - - .param - +param-header('prev()') - p Переходит на предыдщуий месяц если вид days, на предыдущий год если months, и предыдущую декаду если years. - - .param - +param-header('selectDate(date)') - ul - li - +param('date','Date') - | - дата в формате JavaScript - +example-inline('Date()', 'js') - p - | Выбирает переданную дату. Если - +example-inline('{multipleDates: false}','js') - | и уже есть активная дата, то она будет деактивирована. Если - +example-inline('{multipleDates: true}','js') - | то будет добавлена еще одна активная дата. - - .param - +param-header('removeDate(date)') - ul - li - +param('date','Date') - | - дата в формате JavaScript - +example-inline('Date()', 'js') - p - | Снимает выделение с переданной даты. - - .param - +param-header('update(field[, value])') - ul - li - +param('field','string|object') - | - название поля значение которого нужно обновить. - li - +param('field','string|*') - | - новое значение параметра - p. - Обновление опций календаря, после вызова метода он автоматически перерисуется. - Можно обновлять сразу же несколько параметров, для этого нужно передать объект с требуемыми полями. - - +example-code('js'). - var datepicker = $('#my-elem').datepicker().data('datepicker'); - - // Обновление одного параметра - datepicker.update('minDate', new Date()) - - // Обновление нескольких параметров - datepicker.update({ - position: "top right", - maxDate: new Date(), - todayButton: true - }) - - .param - +param-header('view') - p Устанавливает новое представление для календаря. - +example-code('js'). - datepicker.view = 'months'; - - .param - +param-header('date') - p - | Устанавливает новую отображаемую дату, нужно передать JavaScript - +example-inline('Date()') - - +example-code('js'). - datepicker.date = new Date(); \ No newline at end of file diff --git a/page/js/highlight.pack.js b/page/js/highlight.pack.js deleted file mode 100644 index daf4665..0000000 --- a/page/js/highlight.pack.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){l+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);f.reverse().forEach(o)}else"start"==g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function p(){if(!L.k)return n(M);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(M);r;){e+=n(M.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(M)}return e+n(M.substr(t))}function d(){var e="string"==typeof L.sL;if(e&&!x[L.sL])return n(M);var t=e?l(L.sL,M,!0,y[L.sL]):f(M,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(y[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,"",!0):"";e.rB?(k+=r,M=""):e.eB?(k+=n(t)+r,M=""):(k+=r,M=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(M+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(M+=t),k+=b();do L.cN&&(k+=""),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),M="",a.starts&&v(a.starts,""),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"")+'"');return M+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,L=i||N,y={},k="";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,"",!0)+k);var M="",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function f(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=l(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?l(n,r,!0):f(r),s=u(t);if(s.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=(e||"").toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage("xml",function(t){var s="[A-Za-z0-9\\._:-]+",c={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php"},e={eW:!0,i:/]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},t.C("",{r:10}),{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[e],starts:{e:"",rE:!0,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[e],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars"]}},c,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},e]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}],i:/#/}}); \ No newline at end of file diff --git a/page/sass/_page.scss b/page/sass/_page.scss deleted file mode 100644 index c353fb1..0000000 --- a/page/sass/_page.scss +++ /dev/null @@ -1,255 +0,0 @@ -/* ------------------------------------------------- - Page styles - ------------------------------------------------- */ - -$fontFamily: Tahoma, sans-serif; - -html { - color: #333; - font-family: $fontFamily; - font-size: 14px; -} - -p { - line-height: 1.3; - margin-bottom: 14px; -} - -h1, h2, h3, h4 { - font-family: 'Fira Sans', sans-serif; - line-height: 1; -} - -h2 { - font-weight: 100; - font-size: 32px; - margin: 48px 0 8px; -} - -h3 { - font-weight: 500; - font-size: 18px; - margin: 24px 0 8px; -} - -h4 { - font-weight: normal; - color: #939393; - font-size: 16px; - margin: 24px 0 0; -} - - -.container { - width: 960px; - margin: 0 auto; - padding: 1px 0; - - article { - margin: 60px 0 30px; - } -} - -.-text-center- { - text-align: center; -} - -input[type='text'] { - outline: none; - height: 32px; - border: 1px solid #979797; - padding: 0 8px; - margin: 0 0 14px; - color: #444; - font-family: $fontFamily; - transition: all .2s; - width: 250px; - - &:focus { - border-color: #ffd75c; - } -} - -ul { - margin: 0 0 16px; - li { - list-style: none; - margin-bottom: 8px; - } -} - -/* Example - ------------------------------------------------- */ - -%example-label { - background: #ececec; - border-radius: 0 0 4px 4px; - position: absolute; - padding: 4px 12px; - right: 8px; - top: 0; -} - -$exampleBorderRadius: 4px; - -.hljs { - font-family: Consolas, monospace; - line-height: 1.2; - tab-size: 4; -} - -.example { - border: 1px solid #ececec; - border-radius: $exampleBorderRadius; - position: relative; - margin: 16px 0; - - .example-code { - border: none; - border-radius: 0 0 $exampleBorderRadius $exampleBorderRadius; - border-top: 1px solid #ececec; - margin: 0; - } -} - -.example-inline { - background: red; - display: inline-block; - vertical-align: middle; - margin: 0 4px; - - .hljs { - padding: 0 4px; - } -} - -.example--label { - @extend %example-label; -} - -.example-content { - padding: 32px; - - h1, h2, h3 { - &:first-child { - margin-top: 0; - } - } - - >*:last-child { - margin-bottom: 0 !important; - } -} - -a { - color: #47A6EC; - - &:hover { - color: darken(#47A6EC, 20); - } -} - -.example-code { - border: 1px solid #ddd; - border-radius: $exampleBorderRadius; - overflow: hidden; - margin: 16px 0; - font-size: 13px; - - code { - padding: 16px 32px; - } -} - -// Param -// ------------------------------------------------- - - -.param-inline { - font-family: Consolas, monospace; - strong { - background: #efefef; - color: #333; - border-radius: $exampleBorderRadius; - font-weight: normal; - display: inline-block; - vertical-align: middle; - padding: 3px 6px 4px; - margin-right: 4px; - } - - i { - color: #838383; - font-size: .95em; - font-style: normal; - font-weight: 100; - font-family: 'Fira Sans', sans-serif; - display: inline-block; - vertical-align: middle; - margin-right: 4px; - } -} - -// Promo block -// ------------------------------------------------- - -.promo-header { - font-size: 48px; - font-weight: 100; - text-align: center; - - span { - display: block; - font-size: .5em; - } -} - -.datepicker-promo { - text-align: center; - - .datepicker-inline { - display: inline-block; - } -} - -// Range example -// ------------------------------------------------- - -.range-example { - input[type='text'] { - width: 150px; - } - span { - display: inline-block; - margin: 0 8px; - } -} - -// Param header -// ------------------------------------------------- - -.param-header { - margin-bottom: 8px; - h3 { - margin-bottom: 2px; - } - - p { - margin: 0; - font-size: 13px; - } -} - -.param-header--row { - -} - -.param { - margin-bottom: 32px; -} - -.param-header--label { - color: #707070; - display: inline-block; - vertical-align: middle; -} diff --git a/page/sass/_reset.scss b/page/sass/_reset.scss deleted file mode 100644 index 787329a..0000000 --- a/page/sass/_reset.scss +++ /dev/null @@ -1,82 +0,0 @@ -/* ------------------------------------------------- - Reset - ------------------------------------------------- */ - -applet, object, iframe, p, -blockquote, pre, a, abbr, acronym, address, big, -cite, code, del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, sub, sup, tt, var, u, i, center, dl, -dt, dd, ol, ul, li, fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, figure, figcaption, -footer, header, menu, nav, output, ruby, section, -summary, time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - vertical-align: baseline; -} - -body { - margin: 0; -} - -html, body { - width: 100%; - height: 100%; -} - -* { - box-sizing: border-box; -} - -*:after, *:before { - box-sizing: border-box; -} - -// HTML 5 roles for ie8/eie9 -// ------------------------------------------------- - -article, -aside, -details, -figcaption, -figure, -footer, -header, -main, -menu, -nav, -section, -summary { - display: block; -} - -// Default font weight -// ------------------------------------------------- - -b, strong { - font-weight: bold; -} - -// Default font style -// ------------------------------------------------- - -i { - font-style: italic; -} - -// Remove link outline -// ------------------------------------------------- - -a { - outline: none; -} - -// Remove scroll in ie -// ------------------------------------------------- - -textarea { - overflow: auto; -} \ No newline at end of file diff --git a/page/sass/init.scss b/page/sass/init.scss deleted file mode 100644 index b372324..0000000 --- a/page/sass/init.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import "reset"; -@import "page"; \ No newline at end of file diff --git a/src/js/datepicker.js b/src/js/datepicker.js index 2f3889c..8922c12 100644 --- a/src/js/datepicker.js +++ b/src/js/datepicker.js @@ -133,6 +133,7 @@ var Datepicker; _bindEvents : function () { this.$el.on(this.opts.showEvent, this._onShowEvent.bind(this)); this.$el.on('blur', this._onBlur.bind(this)); + this.$el.on('input', this._onInput.bind(this)); this.$datepicker.on('mousedown', this._onMouseDownDatepicker.bind(this)); this.$datepicker.on('mouseup', this._onMouseUpDatepicker.bind(this)); }, @@ -366,7 +367,9 @@ var Datepicker; clear: function () { this.selectedDates = []; this.views[this.currentView]._render(); - this._triggerOnChange() + if (this.opts.onSelect) { + this._triggerOnChange() + } }, /** @@ -567,6 +570,14 @@ var Datepicker; this.$el.focus() }, + _onInput: function () { + var val = this.$el.val(); + + if (!val) { + this.clear(); + } + }, + get parsedDate() { return Datepicker.getParsedDate(this.date); }, diff --git a/src/sass/_datepicker-config.scss b/src/sass/_datepicker-config.scss index 91b24ce..fddda26 100644 --- a/src/sass/_datepicker-config.scss +++ b/src/sass/_datepicker-config.scss @@ -3,6 +3,7 @@ $datepickerWidth: 250px; $datepickerMinBodyHeight: 170px; $datepickerBorderRadius: 4px; $datepickerPadding: 4px; +$datepickerZIndex: 100; $fontFamily: Tahoma; $fontSize: 14px; diff --git a/src/sass/datepicker.scss b/src/sass/datepicker.scss index d5c3997..250d9a4 100644 --- a/src/sass/datepicker.scss +++ b/src/sass/datepicker.scss @@ -24,6 +24,7 @@ left: -100000px; opacity: 0; transition: opacity $transitionSpeed $transitionEase, transform $transitionSpeed $transitionEase, left 0s $transitionSpeed; + z-index: $datepickerZIndex; &.-from-top- { transform: translateY(-$transitionOffset); diff --git a/tasks/cssPage.js b/tasks/cssPage.js index 70503e8..0b28b83 100644 --- a/tasks/cssPage.js +++ b/tasks/cssPage.js @@ -8,10 +8,10 @@ var gulp = require('gulp'), concat = require('gulp-concat'); module.exports = function () { - gulp.src('page/sass/init.scss') + gulp.src('docs/sass/init.scss') .pipe(concat('style.css')) .pipe(sass().on('error', sass.logError)) .pipe(postcss([autoprefixer])) .pipe(minify()) - .pipe(gulp.dest('page/css')) + .pipe(gulp.dest('docs/css')) }; \ No newline at end of file diff --git a/tasks/jade.js b/tasks/jade.js index 5184761..01c4cf2 100644 --- a/tasks/jade.js +++ b/tasks/jade.js @@ -15,8 +15,8 @@ _jade.filters.code = function( block ) { }; module.exports = function () { - gulp.src('page/jade/pages/*.jade') + gulp.src('docs/jade/pages/*.jade') .pipe(plumber()) .pipe(jade()) - .pipe(gulp.dest('./')) + .pipe(gulp.dest('docs/')) };