Skip to content

Instantly share code, notes, and snippets.

@jcbowyer
Last active June 5, 2016 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jcbowyer/5df55d4758a7614ca08d71eaf640fc57 to your computer and use it in GitHub Desktop.
Save jcbowyer/5df55d4758a7614ca08d71eaf640fc57 to your computer and use it in GitHub Desktop.
PowerBI mutli select / advanced search custom visual
/** Your CSS code goes here */
.powerbi-sample-table tr {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
}
.powerbi-sample-table th {
display: none;
}
.powerbi-sample-table td {
display: block;
}
.powerbi-sample-table td:first-child {
padding-top: .5em;
}
.powerbi-sample-table td:last-child {
padding-bottom: .5em;
}
.powerbi-sample-table td:before {
content: attr(data-th) ": ";
font-weight: bold;
width: 6.5em;
display: inline-block;
}
.powerbi-sample-table .dynamic td:before {
display: none;
}
.powerbi-sample-table th, .powerbi-sample-table td {
text-align: left;
}
.powerbi-sample-table .dynamic th, .powerbi-sample-table .dynamic td {
display: table-cell;
padding: .25em .5em;
}
.powerbi-sample-table .dynamic th:first-child, .powerbi-sample-table .dynamic td:first-child {
padding-left: 0;
}
.powerbi-sample-table .dynamic th:last-child, .powerbi-sample-table .dynamic td:last-child {
padding-right: 0;
}
.powerbi-sample-table {
background: #34495E;
color: #fff;
border-radius: .4em;
overflow: hidden;
}
.powerbi-sample-table tr {
border-color: #46627f;
}
.powerbi-sample-table th, .powerbi-sample-table td {
margin: .5em 1em;
}
.powerbi-sample-table .dynamic th, .powerbi-sample-table .dynamic td {
padding: 1em !important;
}
.powerbi-sample-table th, .powerbi-sample-table td:before {
color: #dd5;
}
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/.fake{color:red}.k-common-test-class{opacity:0}.k-reset{margin:0;padding:0;border:0;outline:0;text-decoration:none;font-size:100%;list-style:none}.k-floatwrap:after,.k-grid-toolbar:after,.k-slider-items:after{content:"";display:block;clear:both;visibility:hidden;height:0;overflow:hidden}.k-floatwrap,.k-grid-toolbar,.k-slider-items{display:inline-block}.k-floatwrap,.k-grid-toolbar,.k-slider-items{display:block}.k-autocomplete,.k-autocomplete.k-state-hover,.k-block,.k-button,.k-draghandle,.k-dropdown-wrap,.k-dropdown-wrap.k-state-hover,.k-grid-header,.k-grouping-header,.k-header,.k-link.k-state-hover,.k-numeric-wrap,.k-numeric-wrap.k-state-hover,.k-pager-wrap,.k-picker-wrap,.k-picker-wrap.k-state-hover,.k-tabstrip-items .k-item,.k-textbox,.k-textbox:hover,.k-toolbar,.k-tooltip{background-repeat:repeat;background-position:0 center}.k-link:hover{text-decoration:none}.k-state-highlight>.k-link{color:inherit}.k-button,.k-input[type=text],.k-input[type=number],.k-picker-wrap .k-input,.k-textbox,.k-textbox>input{font-size:100%;font-family:inherit;border-style:solid;border-width:1px;-webkit-appearance:none}.k-block,.k-draghandle,.k-inline-block,.k-widget{border-style:solid;border-width:1px;-webkit-appearance:none}.k-block,.k-widget{line-height:normal;outline:0}.k-widget ::-ms-clear{width:0;height:0}.k-block{padding:2px}.k-button{display:inline-block;margin:0;padding:.2em .7em;font-family:inherit;line-height:1.72em;text-align:center;cursor:pointer;text-decoration:none}.k-button.k-state-disabled,.k-button.k-state-disabled:active,.k-button.k-state-disabled:hover,.k-button[disabled],.k-state-disabled .k-button,.k-state-disabled .k-button:active,.k-state-disabled .k-button:hover{cursor:default}a.k-button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none}.k-ff input.k-button{padding-bottom:.37em;padding-top:.37em}button.k-button::-moz-focus-inner,input.k-button::-moz-focus-inner{padding:0;border:0}a.k-button-expand{display:block}button.k-button-expand,input[type=submit].k-button-expand,input[type=button].k-button-expand,input[type=reset].k-button-expand{width:100%}body .k-button-icon,body .k-split-button-arrow{padding-left:.4em;padding-right:.4em}.k-button-icontext{overflow:visible}.k-toolbar .k-button-icontext{padding-right:.8em}.k-button-icontext .k-icon,.k-button-icontext .k-image,.k-button-icontext .k-sprite{margin-right:3px;margin-right:.3rem;margin-left:-3px;margin-left:-.3rem}.k-button.k-button-icontext .k-icon,.k-button.k-button-icontext .k-image{vertical-align:text-top}html body .k-button-bare{background:0 0!important;color:inherit;border-width:0}html body .k-button-bare.k-upload-button:hover{color:inherit}.k-link{cursor:pointer;outline:0;text-decoration:none}.k-grid-header span.k-link{cursor:default}.k-state-disabled,.k-state-disabled .k-button,.k-state-disabled .k-draghandle,.k-state-disabled .k-icon,.k-state-disabled .k-link,.k-state-disabled .k-upload-button input{cursor:default!important;outline:0}@media print{.k-state-disabled,.k-state-disabled .k-input{opacity:1!important}}.k-state-error{border-style:ridge}.k-state-empty{font-style:italic}.k-button-group .k-tool-icon,.k-icon,.k-sprite{display:inline-block;width:16px;height:16px;overflow:hidden;background-repeat:no-repeat;font-size:0;line-height:0;text-align:center;-ms-high-contrast-adjust:none}.k-icon.k-i-none{background-image:none!important}.k-ie8 .k-button-group .k-tool-icon,.k-ie8 .k-icon,.k-ie8 .k-sprite{vertical-align:middle}:root *>.k-button-group .k-tool-icon,:root *>.k-icon,:root *>.k-sprite{vertical-align:middle}.k-icon,.k-sprite{background-color:transparent}.k-numerictextbox .k-select .k-link span.k-i-arrow-n{background-position:0 -3px}.k-numerictextbox .k-select .k-link span.k-i-arrow-s{background-position:0 -35px}.k-state-selected .k-i-arrow-n{background-position:-16px 0}.k-button:active .k-state-selected .k-i-arrow-n,.k-button:not(.k-state-disabled):hover .k-state-selected .k-i-arrow-n,.k-link:not(.k-state-disabled):hover>.k-state-selected .k-i-arrow-n,.k-state-hover>*>.k-state-selected .k-i-arrow-n,.k-state-hover>.k-state-selected .k-i-arrow-n,.k-textbox:hover .k-state-selected .k-i-arrow-n{background-position:-32px 0}.k-numerictextbox .k-link.k-state-selected span.k-i-arrow-n,.k-numerictextbox .k-state-hover .k-link span.k-i-arrow-n{background-position:-16px -3px}.k-state-selected .k-i-arrow-s{background-position:-16px -32px}.k-button:active .k-state-selected .k-i-arrow-s,.k-button:not(.k-state-disabled):hover .k-state-selected .k-i-arrow-s,.k-link:not(.k-state-disabled):hover>.k-state-selected .k-i-arrow-s,.k-state-hover>*>.k-state-selected .k-i-arrow-s,.k-state-hover>.k-state-selected .k-i-arrow-s,.k-textbox:hover .k-state-selected .k-i-arrow-s{background-position:-32px -32px}.k-numerictextbox .k-link.k-state-selected span.k-i-arrow-s,.k-numerictextbox .k-state-hover .k-link span.k-i-arrow-s{background-position:-16px -35px}.k-grid-header th>.k-link:hover span.k-i-arrow-n{background-position:0 0}.k-grid-header th>.k-link:hover span.k-i-arrow-s{background-position:0 -32px}.k-group-indicator .k-link:hover span.k-si-arrow-n{background-position:0 -129px}.k-group-indicator .k-link:hover span.k-si-arrow-s{background-position:0 -159px}.k-group-indicator .k-button:hover span.k-group-delete{background-position:-32px -16px}.k-scheduler .k-scheduler-toolbar .k-nav-current .k-link .k-i-calendar{background-position:-32px -176px}.k-i-arrow-n{background-position:0 0}.k-button:active .k-i-arrow-n,.k-button:not(.k-state-disabled):hover .k-i-arrow-n,.k-link:not(.k-state-disabled):hover>.k-i-arrow-n,.k-state-hover>*>.k-i-arrow-n,.k-state-hover>.k-i-arrow-n,.k-textbox:hover .k-i-arrow-n{background-position:-16px 0}.k-i-arrow-e{background-position:0 -16px}.k-button:active .k-i-arrow-e,.k-button:not(.k-state-disabled):hover .k-i-arrow-e,.k-link:not(.k-state-disabled):hover>.k-i-arrow-e,.k-state-hover>*>.k-i-arrow-e,.k-state-hover>.k-i-arrow-e,.k-textbox:hover .k-i-arrow-e{background-position:-16px -16px}.k-rtl .k-i-arrow-w{background-position:0 -16px}.k-rtl .k-button:active .k-i-arrow-w,.k-rtl .k-button:not(.k-state-disabled):hover .k-i-arrow-w,.k-rtl .k-link:not(.k-state-disabled):hover>.k-i-arrow-w,.k-rtl .k-state-hover>*>.k-i-arrow-w,.k-rtl .k-state-hover>.k-i-arrow-w,.k-rtl .k-textbox:hover .k-i-arrow-w{background-position:-16px -16px}.k-i-arrow-s{background-position:0 -32px}.k-button:active .k-i-arrow-s,.k-button:not(.k-state-disabled):hover .k-i-arrow-s,.k-link:not(.k-state-disabled):hover>.k-i-arrow-s,.k-state-hover>*>.k-i-arrow-s,.k-state-hover>.k-i-arrow-s,.k-textbox:hover .k-i-arrow-s{background-position:-16px -32px}.k-i-arrow-w{background-position:0 -48px}.k-button:active .k-i-arrow-w,.k-button:not(.k-state-disabled):hover .k-i-arrow-w,.k-link:not(.k-state-disabled):hover>.k-i-arrow-w,.k-state-hover>*>.k-i-arrow-w,.k-state-hover>.k-i-arrow-w,.k-textbox:hover .k-i-arrow-w{background-position:-16px -48px}.k-rtl .k-i-arrow-e{background-position:0 -48px}.k-rtl .k-button:active .k-i-arrow-e,.k-rtl .k-button:not(.k-state-disabled):hover .k-i-arrow-e,.k-rtl .k-link:not(.k-state-disabled):hover>.k-i-arrow-e,.k-rtl .k-state-hover>*>.k-i-arrow-e,.k-rtl .k-state-hover>.k-i-arrow-e,.k-rtl .k-textbox:hover .k-i-arrow-e{background-position:-16px -48px}.k-i-seek-n{background-position:0 -64px}.k-button:active .k-i-seek-n,.k-button:not(.k-state-disabled):hover .k-i-seek-n,.k-link:not(.k-state-disabled):hover>.k-i-seek-n,.k-state-hover>*>.k-i-seek-n,.k-state-hover>.k-i-seek-n,.k-textbox:hover .k-i-seek-n{background-position:-16px -64px}.k-i-seek-e{background-position:0 -80px}.k-button:active .k-i-seek-e,.k-button:not(.k-state-disabled):hover .k-i-seek-e,.k-link:not(.k-state-disabled):hover>.k-i-seek-e,.k-state-hover>*>.k-i-seek-e,.k-state-hover>.k-i-seek-e,.k-textbox:hover .k-i-seek-e{background-position:-16px -80px}.k-rtl .k-i-seek-w{background-position:0 -80px}.k-rtl .k-button:active .k-i-seek-w,.k-rtl .k-button:not(.k-state-disabled):hover .k-i-seek-w,.k-rtl .k-link:not(.k-state-disabled):hover>.k-i-seek-w,.k-rtl .k-state-hover>*>.k-i-seek-w,.k-rtl .k-state-hover>.k-i-seek-w,.k-rtl .k-textbox:hover .k-i-seek-w{background-position:-16px -80px}.k-i-seek-s{background-position:0 -96px}.k-button:active .k-i-seek-s,.k-button:not(.k-state-disabled):hover .k-i-seek-s,.k-link:not(.k-state-disabled):hover>.k-i-seek-s,.k-state-hover>*>.k-i-seek-s,.k-state-hover>.k-i-seek-s,.k-textbox:hover .k-i-seek-s{background-position:-16px -96px}.k-i-seek-w{background-position:0 -112px}.k-button:active .k-i-seek-w,.k-button:not(.k-state-disabled):hover .k-i-seek-w,.k-link:not(.k-state-disabled):hover>.k-i-seek-w,.k-state-hover>*>.k-i-seek-w,.k-state-hover>.k-i-seek-w,.k-textbox:hover .k-i-seek-w{background-position:-16px -112px}.k-rtl .k-i-seek-e{background-position:0 -112px}.k-rtl .k-button:active .k-i-seek-e,.k-rtl .k-button:not(.k-state-disabled):hover .k-i-seek-e,.k-rtl .k-link:not(.k-state-disabled):hover>.k-i-seek-e,.k-rtl .k-state-hover>*>.k-i-seek-e,.k-rtl .k-state-hover>.k-i-seek-e,.k-rtl .k-textbox:hover .k-i-seek-e{background-position:-16px -112px}.k-si-arrow-n{background-position:0 -129px}.k-button:active .k-si-arrow-n,.k-button:not(.k-state-disabled):hover .k-si-arrow-n,.k-link:not(.k-state-disabled):hover>.k-si-arrow-n,.k-state-hover>*>.k-si-arrow-n,.k-state-hover>.k-si-arrow-n,.k-textbox:hover .k-si-arrow-n{background-position:-16px -129px}.k-si-arrow-e{background-position:0 -144px}.k-button:active .k-si-arrow-e,.k-button:not(.k-state-disabled):hover .k-si-arrow-e,.k-link:not(.k-state-disabled):hover>.k-si-arrow-e,.k-state-hover>*>.k-si-arrow-e,.k-state-hover>.k-si-arrow-e,.k-textbox:hover .k-si-arrow-e{background-position:-16px -144px}.k-si-arrow-s{background-position:0 -159px}.k-button:active .k-si-arrow-s,.k-button:not(.k-state-disabled):hover .k-si-arrow-s,.k-link:not(.k-state-disabled):hover>.k-si-arrow-s,.k-state-hover>*>.k-si-arrow-s,.k-state-hover>.k-si-arrow-s,.k-textbox:hover .k-si-arrow-s{background-position:-16px -159px}.k-si-arrow-w{background-position:0 -176px}.k-button:active .k-si-arrow-w,.k-button:not(.k-state-disabled):hover .k-si-arrow-w,.k-link:not(.k-state-disabled):hover>.k-si-arrow-w,.k-state-hover>*>.k-si-arrow-w,.k-state-hover>.k-si-arrow-w,.k-textbox:hover .k-si-arrow-w{background-position:-16px -176px}.k-i-arrowhead-n{background-position:0 -256px}.k-button:active .k-i-arrowhead-n,.k-button:not(.k-state-disabled):hover .k-i-arrowhead-n,.k-link:not(.k-state-disabled):hover>.k-i-arrowhead-n,.k-state-hover>*>.k-i-arrowhead-n,.k-state-hover>.k-i-arrowhead-n,.k-textbox:hover .k-i-arrowhead-n{background-position:-16px -256px}.k-i-arrowhead-e{background-position:0 -272px}.k-button:active .k-i-arrowhead-e,.k-button:not(.k-state-disabled):hover .k-i-arrowhead-e,.k-link:not(.k-state-disabled):hover>.k-i-arrowhead-e,.k-state-hover>*>.k-i-arrowhead-e,.k-state-hover>.k-i-arrowhead-e,.k-textbox:hover .k-i-arrowhead-e{background-position:-16px -272px}.k-i-arrowhead-s{background-position:0 -288px}.k-button:active .k-i-arrowhead-s,.k-button:not(.k-state-disabled):hover .k-i-arrowhead-s,.k-link:not(.k-state-disabled):hover>.k-i-arrowhead-s,.k-state-hover>*>.k-i-arrowhead-s,.k-state-hover>.k-i-arrowhead-s,.k-textbox:hover .k-i-arrowhead-s{background-position:-16px -288px}.k-i-arrowhead-w{background-position:0 -304px}.k-button:active .k-i-arrowhead-w,.k-button:not(.k-state-disabled):hover .k-i-arrowhead-w,.k-link:not(.k-state-disabled):hover>.k-i-arrowhead-w,.k-state-hover>*>.k-i-arrowhead-w,.k-state-hover>.k-i-arrowhead-w,.k-textbox:hover .k-i-arrowhead-w{background-position:-16px -304px}.k-i-expand,.k-plus,.k-plus-disabled{background-position:0 -192px}.k-button:active .k-i-expand,.k-button:active .k-plus,.k-button:active .k-plus-disabled,.k-button:not(.k-state-disabled):hover .k-i-expand,.k-button:not(.k-state-disabled):hover .k-plus,.k-button:not(.k-state-disabled):hover .k-plus-disabled,.k-link:not(.k-state-disabled):hover>.k-i-expand,.k-link:not(.k-state-disabled):hover>.k-plus,.k-link:not(.k-state-disabled):hover>.k-plus-disabled,.k-state-hover>*>.k-i-expand,.k-state-hover>*>.k-plus,.k-state-hover>*>.k-plus-disabled,.k-state-hover>.k-i-expand,.k-state-hover>.k-plus,.k-state-hover>.k-plus-disabled,.k-textbox:hover .k-i-expand,.k-textbox:hover .k-plus,.k-textbox:hover .k-plus-disabled{background-position:-16px -192px}.k-i-expand-w,.k-rtl .k-i-expand,.k-rtl .k-plus,.k-rtl .k-plus-disabled{background-position:0 -208px}.k-button:active .k-i-expand-w,.k-button:active .k-rtl .k-i-expand,.k-button:active .k-rtl .k-plus,.k-button:active .k-rtl .k-plus-disabled,.k-button:not(.k-state-disabled):hover .k-i-expand-w,.k-button:not(.k-state-disabled):hover .k-rtl .k-i-expand,.k-button:not(.k-state-disabled):hover .k-rtl .k-plus,.k-button:not(.k-state-disabled):hover .k-rtl .k-plus-disabled,.k-link:not(.k-state-disabled):hover>.k-i-expand-w,.k-link:not(.k-state-disabled):hover>.k-rtl .k-i-expand,.k-link:not(.k-state-disabled):hover>.k-rtl .k-plus,.k-link:not(.k-state-disabled):hover>.k-rtl .k-plus-disabled,.k-state-hover>*>.k-i-expand-w,.k-state-hover>*>.k-rtl .k-i-expand,.k-state-hover>*>.k-rtl .k-plus,.k-state-hover>*>.k-rtl .k-plus-disabled,.k-state-hover>.k-i-expand-w,.k-state-hover>.k-rtl .k-i-expand,.k-state-hover>.k-rtl .k-plus,.k-state-hover>.k-rtl .k-plus-disabled,.k-textbox:hover .k-i-expand-w,.k-textbox:hover .k-rtl .k-i-expand,.k-textbox:hover .k-rtl .k-plus,.k-textbox:hover .k-rtl .k-plus-disabled{background-position:-16px -208px}.k-i-collapse,.k-minus,.k-minus-disabled{background-position:0 -224px}.k-button:active .k-i-collapse,.k-button:active .k-minus,.k-button:active .k-minus-disabled,.k-button:not(.k-state-disabled):hover .k-i-collapse,.k-button:not(.k-state-disabled):hover .k-minus,.k-button:not(.k-state-disabled):hover .k-minus-disabled,.k-link:not(.k-state-disabled):hover>.k-i-collapse,.k-link:not(.k-state-disabled):hover>.k-minus,.k-link:not(.k-state-disabled):hover>.k-minus-disabled,.k-state-hover>*>.k-i-collapse,.k-state-hover>*>.k-minus,.k-state-hover>*>.k-minus-disabled,.k-state-hover>.k-i-collapse,.k-state-hover>.k-minus,.k-state-hover>.k-minus-disabled,.k-textbox:hover .k-i-collapse,.k-textbox:hover .k-minus,.k-textbox:hover .k-minus-disabled{background-position:-16px -224px}.k-i-collapse-w,.k-rtl .k-i-collapse,.k-rtl .k-minus,.k-rtl .k-minus-disabled{background-position:0 -240px}.k-button:active .k-i-collapse-w,.k-button:active .k-rtl .k-i-collapse,.k-button:active .k-rtl .k-minus,.k-button:active .k-rtl .k-minus-disabled,.k-button:not(.k-state-disabled):hover .k-i-collapse-w,.k-button:not(.k-state-disabled):hover .k-rtl .k-i-collapse,.k-button:not(.k-state-disabled):hover .k-rtl .k-minus,.k-button:not(.k-state-disabled):hover .k-rtl .k-minus-disabled,.k-link:not(.k-state-disabled):hover>.k-i-collapse-w,.k-link:not(.k-state-disabled):hover>.k-rtl .k-i-collapse,.k-link:not(.k-state-disabled):hover>.k-rtl .k-minus,.k-link:not(.k-state-disabled):hover>.k-rtl .k-minus-disabled,.k-state-hover>*>.k-i-collapse-w,.k-state-hover>*>.k-rtl .k-i-collapse,.k-state-hover>*>.k-rtl .k-minus,.k-state-hover>*>.k-rtl .k-minus-disabled,.k-state-hover>.k-i-collapse-w,.k-state-hover>.k-rtl .k-i-collapse,.k-state-hover>.k-rtl .k-minus,.k-state-hover>.k-rtl .k-minus-disabled,.k-textbox:hover .k-i-collapse-w,.k-textbox:hover .k-rtl .k-i-collapse,.k-textbox:hover .k-rtl .k-minus,.k-textbox:hover .k-rtl .k-minus-disabled{background-position:-16px -240px}.k-edit,.k-i-pencil{background-position:-32px 0}.k-button:active .k-edit,.k-button:active .k-i-pencil,.k-button:not(.k-state-disabled):hover .k-edit,.k-button:not(.k-state-disabled):hover .k-i-pencil,.k-link:not(.k-state-disabled):hover>.k-edit,.k-link:not(.k-state-disabled):hover>.k-i-pencil,.k-state-hover>*>.k-edit,.k-state-hover>*>.k-i-pencil,.k-state-hover>.k-edit,.k-state-hover>.k-i-pencil,.k-textbox:hover .k-edit,.k-textbox:hover .k-i-pencil{background-position:-48px 0}.k-delete,.k-group-delete,.k-i-close{background-position:-32px -16px; }.k-button:active .k-delete,.k-button:active .k-group-delete,.k-button:active .k-i-close,.k-button:not(.k-state-disabled):hover .k-delete,.k-button:not(.k-state-disabled):hover .k-group-delete,.k-button:not(.k-state-disabled):hover .k-i-close,.k-link:not(.k-state-disabled):hover>.k-delete,.k-link:not(.k-state-disabled):hover>.k-group-delete,.k-link:not(.k-state-disabled):hover>.k-i-close,.k-state-hover>*>.k-delete,.k-state-hover>*>.k-group-delete,.k-state-hover>*>.k-i-close,.k-state-hover>.k-delete,.k-state-hover>.k-group-delete,.k-state-hover>.k-i-close,.k-textbox:hover .k-delete,.k-textbox:hover .k-group-delete,.k-textbox:hover .k-i-close{background-position:-48px -16px}.k-si-close{background-position:-160px -80px}.k-button:active .k-si-close,.k-button:not(.k-state-disabled):hover .k-si-close,.k-link:not(.k-state-disabled):hover>.k-si-close,.k-state-hover>*>.k-si-close,.k-state-hover>.k-si-close,.k-textbox:hover .k-si-close{background-position:-176px -80px}.k-multiselect .k-delete{background-position:-160px -80px}.k-multiselect .k-state-hover .k-delete{background-position:-176px -80px}.k-i-tick,.k-insert,.k-update{background-position:-32px -32px}.k-button:active .k-i-tick,.k-button:active .k-insert,.k-button:active .k-update,.k-button:not(.k-state-disabled):hover .k-i-tick,.k-button:not(.k-state-disabled):hover .k-insert,.k-button:not(.k-state-disabled):hover .k-update,.k-link:not(.k-state-disabled):hover>.k-i-tick,.k-link:not(.k-state-disabled):hover>.k-insert,.k-link:not(.k-state-disabled):hover>.k-update,.k-state-hover>*>.k-i-tick,.k-state-hover>*>.k-insert,.k-state-hover>*>.k-update,.k-state-hover>.k-i-tick,.k-state-hover>.k-insert,.k-state-hover>.k-update,.k-textbox:hover .k-i-tick,.k-textbox:hover .k-insert,.k-textbox:hover .k-update{background-position:-48px -32px}.k-check:checked,.k-mobile-list .k-edit-field [type=checkbox],.k-mobile-list .k-edit-field [type=radio]{background-position:-32px -32px}.k-button:active .k-check:checked,.k-button:active .k-mobile-list .k-edit-field [type=checkbox],.k-button:active .k-mobile-list .k-edit-field [type=radio],.k-button:not(.k-state-disabled):hover .k-check:checked,.k-button:not(.k-state-disabled):hover .k-mobile-list .k-edit-field [type=checkbox],.k-button:not(.k-state-disabled):hover .k-mobile-list .k-edit-field [type=radio],.k-link:not(.k-state-disabled):hover>.k-check:checked,.k-link:not(.k-state-disabled):hover>.k-mobile-list .k-edit-field [type=checkbox],.k-link:not(.k-state-disabled):hover>.k-mobile-list .k-edit-field [type=radio],.k-state-hover>*>.k-check:checked,.k-state-hover>*>.k-mobile-list .k-edit-field [type=checkbox],.k-state-hover>*>.k-mobile-list .k-edit-field [type=radio],.k-state-hover>.k-check:checked,.k-state-hover>.k-mobile-list .k-edit-field [type=checkbox],.k-state-hover>.k-mobile-list .k-edit-field [type=radio],.k-textbox:hover .k-check:checked,.k-textbox:hover .k-mobile-list .k-edit-field [type=checkbox],.k-textbox:hover .k-mobile-list .k-edit-field [type=radio]{background-position:-48px -32px}.k-cancel,.k-denied,.k-i-cancel{background-position:-32px -48px}.k-button:active .k-cancel,.k-button:active .k-denied,.k-button:active .k-i-cancel,.k-button:not(.k-state-disabled):hover .k-cancel,.k-button:not(.k-state-disabled):hover .k-denied,.k-button:not(.k-state-disabled):hover .k-i-cancel,.k-link:not(.k-state-disabled):hover>.k-cancel,.k-link:not(.k-state-disabled):hover>.k-denied,.k-link:not(.k-state-disabled):hover>.k-i-cancel,.k-state-hover>*>.k-cancel,.k-state-hover>*>.k-denied,.k-state-hover>*>.k-i-cancel,.k-state-hover>.k-cancel,.k-state-hover>.k-denied,.k-state-hover>.k-i-cancel,.k-textbox:hover .k-cancel,.k-textbox:hover .k-denied,.k-textbox:hover .k-i-cancel{background-position:-48px -48px}.k-add,.k-i-plus{background-position:-32px -64px}.k-button:active .k-add,.k-button:active .k-i-plus,.k-button:not(.k-state-disabled):hover .k-add,.k-button:not(.k-state-disabled):hover .k-i-plus,.k-link:not(.k-state-disabled):hover>.k-add,.k-link:not(.k-state-disabled):hover>.k-i-plus,.k-state-hover>*>.k-add,.k-state-hover>*>.k-i-plus,.k-state-hover>.k-add,.k-state-hover>.k-i-plus,.k-textbox:hover .k-add,.k-textbox:hover .k-i-plus{background-position:-48px -64px}.k-filter,.k-i-funnel{background-position:-32px -80px}.k-button:active .k-filter,.k-button:active .k-i-funnel,.k-button:not(.k-state-disabled):hover .k-filter,.k-button:not(.k-state-disabled):hover .k-i-funnel,.k-link:not(.k-state-disabled):hover>.k-filter,.k-link:not(.k-state-disabled):hover>.k-i-funnel,.k-state-hover>*>.k-filter,.k-state-hover>*>.k-i-funnel,.k-state-hover>.k-filter,.k-state-hover>.k-i-funnel,.k-textbox:hover .k-filter,.k-textbox:hover .k-i-funnel{background-position:-48px -80px}.k-clear-filter,.k-i-funnel-clear{background-position:-32px -96px}.k-button:active .k-clear-filter,.k-button:active .k-i-funnel-clear,.k-button:not(.k-state-disabled):hover .k-clear-filter,.k-button:not(.k-state-disabled):hover .k-i-funnel-clear,.k-link:not(.k-state-disabled):hover>.k-clear-filter,.k-link:not(.k-state-disabled):hover>.k-i-funnel-clear,.k-state-hover>*>.k-clear-filter,.k-state-hover>*>.k-i-funnel-clear,.k-state-hover>.k-clear-filter,.k-state-hover>.k-i-funnel-clear,.k-textbox:hover .k-clear-filter,.k-textbox:hover .k-i-funnel-clear{background-position:-48px -96px}.k-i-lock{background-position:-64px 0}.k-button:active .k-i-lock,.k-button:not(.k-state-disabled):hover .k-i-lock,.k-link:not(.k-state-disabled):hover>.k-i-lock,.k-state-hover>*>.k-i-lock,.k-state-hover>.k-i-lock,.k-textbox:hover .k-i-lock{background-position:-80px 0}.k-i-unlock{background-position:-64px -16px}.k-button:active .k-i-unlock,.k-button:not(.k-state-disabled):hover .k-i-unlock,.k-link:not(.k-state-disabled):hover>.k-i-unlock,.k-state-hover>*>.k-i-unlock,.k-state-hover>.k-i-unlock,.k-textbox:hover .k-i-unlock{background-position:-80px -16px}.k-i-refresh{background-position:-32px -112px}.k-button:active .k-i-refresh,.k-button:not(.k-state-disabled):hover .k-i-refresh,.k-link:not(.k-state-disabled):hover>.k-i-refresh,.k-state-hover>*>.k-i-refresh,.k-state-hover>.k-i-refresh,.k-textbox:hover .k-i-refresh{background-position:-48px -112px}.k-i-exception{background-position:-160px -304px}.k-button:active .k-i-exception,.k-button:not(.k-state-disabled):hover .k-i-exception,.k-link:not(.k-state-disabled):hover>.k-i-exception,.k-state-hover>*>.k-i-exception,.k-state-hover>.k-i-exception,.k-textbox:hover .k-i-exception{background-position:-176px -304px}.k-i-restore{background-position:-32px -128px}.k-button:active .k-i-restore,.k-button:not(.k-state-disabled):hover .k-i-restore,.k-link:not(.k-state-disabled):hover>.k-i-restore,.k-state-hover>*>.k-i-restore,.k-state-hover>.k-i-restore,.k-textbox:hover .k-i-restore{background-position:-48px -128px}.k-i-maximize{background-position:-32px -144px}.k-button:active .k-i-maximize,.k-button:not(.k-state-disabled):hover .k-i-maximize,.k-link:not(.k-state-disabled):hover>.k-i-maximize,.k-state-hover>*>.k-i-maximize,.k-state-hover>.k-i-maximize,.k-textbox:hover .k-i-maximize{background-position:-48px -144px}.k-i-minimize{background-position:-64px -288px}.k-button:active .k-i-minimize,.k-button:not(.k-state-disabled):hover .k-i-minimize,.k-link:not(.k-state-disabled):hover>.k-i-minimize,.k-state-hover>*>.k-i-minimize,.k-state-hover>.k-i-minimize,.k-textbox:hover .k-i-minimize{background-position:-80px -288px}.k-i-pin{background-position:-160px -256px}.k-button:active .k-i-pin,.k-button:not(.k-state-disabled):hover .k-i-pin,.k-link:not(.k-state-disabled):hover>.k-i-pin,.k-state-hover>*>.k-i-pin,.k-state-hover>.k-i-pin,.k-textbox:hover .k-i-pin{background-position:-176px -256px}.k-i-unpin{background-position:-160px -272px}.k-button:active .k-i-unpin,.k-button:not(.k-state-disabled):hover .k-i-unpin,.k-link:not(.k-state-disabled):hover>.k-i-unpin,.k-state-hover>*>.k-i-unpin,.k-state-hover>.k-i-unpin,.k-textbox:hover .k-i-unpin{background-position:-176px -272px}.k-resize-se{background-position:-32px -160px}.k-button:active .k-resize-se,.k-button:not(.k-state-disabled):hover .k-resize-se,.k-link:not(.k-state-disabled):hover>.k-resize-se,.k-state-hover>*>.k-resize-se,.k-state-hover>.k-resize-se,.k-textbox:hover .k-resize-se{background-position:-48px -160px}.k-i-calendar{background-position:-32px -176px}.k-button:active .k-i-calendar,.k-button:not(.k-state-disabled):hover .k-i-calendar,.k-link:not(.k-state-disabled):hover>.k-i-calendar,.k-state-hover>*>.k-i-calendar,.k-state-hover>.k-i-calendar,.k-textbox:hover .k-i-calendar{background-position:-48px -176px}.k-i-clock{background-position:-32px -192px}.k-button:active .k-i-clock,.k-button:not(.k-state-disabled):hover .k-i-clock,.k-link:not(.k-state-disabled):hover>.k-i-clock,.k-state-hover>*>.k-i-clock,.k-state-hover>.k-i-clock,.k-textbox:hover .k-i-clock{background-position:-48px -192px}.k-si-plus{background-position:-32px -208px}.k-button:active .k-si-plus,.k-button:not(.k-state-disabled):hover .k-si-plus,.k-link:not(.k-state-disabled):hover>.k-si-plus,.k-state-hover>*>.k-si-plus,.k-state-hover>.k-si-plus,.k-textbox:hover .k-si-plus{background-position:-48px -208px}.k-si-minus{background-position:-32px -224px}.k-button:active .k-si-minus,.k-button:not(.k-state-disabled):hover .k-si-minus,.k-link:not(.k-state-disabled):hover>.k-si-minus,.k-state-hover>*>.k-si-minus,.k-state-hover>.k-si-minus,.k-textbox:hover .k-si-minus{background-position:-48px -224px}.k-i-search{background-position:-32px -240px}.k-button:active .k-i-search,.k-button:not(.k-state-disabled):hover .k-i-search,.k-link:not(.k-state-disabled):hover>.k-i-search,.k-state-hover>*>.k-i-search,.k-state-hover>.k-i-search,.k-textbox:hover .k-i-search{background-position:-48px -240px}.k-i-custom{background-position:-115px -113px}.k-button:active .k-i-custom,.k-button:not(.k-state-disabled):hover .k-i-custom,.k-link:not(.k-state-disabled):hover>.k-i-custom,.k-state-hover>*>.k-i-custom,.k-state-hover>.k-i-custom,.k-textbox:hover .k-i-custom{background-position:-141px -113px}.k-editor .k-i-custom{background-position:-111px -109px}.k-viewHtml{background-position:-288px -120px}.k-i-insert-n,.k-insert-top{background-position:-160px -32px}.k-button:active .k-i-insert-n,.k-button:active .k-insert-top,.k-button:not(.k-state-disabled):hover .k-i-insert-n,.k-button:not(.k-state-disabled):hover .k-insert-top,.k-link:not(.k-state-disabled):hover>.k-i-insert-n,.k-link:not(.k-state-disabled):hover>.k-insert-top,.k-state-hover>*>.k-i-insert-n,.k-state-hover>*>.k-insert-top,.k-state-hover>.k-i-insert-n,.k-state-hover>.k-insert-top,.k-textbox:hover .k-i-insert-n,.k-textbox:hover .k-insert-top{background-position:-176px -32px}.k-i-insert-m,.k-insert-middle{background-position:-160px -48px}.k-button:active .k-i-insert-m,.k-button:active .k-insert-middle,.k-button:not(.k-state-disabled):hover .k-i-insert-m,.k-button:not(.k-state-disabled):hover .k-insert-middle,.k-link:not(.k-state-disabled):hover>.k-i-insert-m,.k-link:not(.k-state-disabled):hover>.k-insert-middle,.k-state-hover>*>.k-i-insert-m,.k-state-hover>*>.k-insert-middle,.k-state-hover>.k-i-insert-m,.k-state-hover>.k-insert-middle,.k-textbox:hover .k-i-insert-m,.k-textbox:hover .k-insert-middle{background-position:-176px -48px}.k-i-insert-s,.k-insert-bottom{background-position:-160px -64px}.k-button:active .k-i-insert-s,.k-button:active .k-insert-bottom,.k-button:not(.k-state-disabled):hover .k-i-insert-s,.k-button:not(.k-state-disabled):hover .k-insert-bottom,.k-link:not(.k-state-disabled):hover>.k-i-insert-s,.k-link:not(.k-state-disabled):hover>.k-insert-bottom,.k-state-hover>*>.k-i-insert-s,.k-state-hover>*>.k-insert-bottom,.k-state-hover>.k-i-insert-s,.k-state-hover>.k-insert-bottom,.k-textbox:hover .k-i-insert-s,.k-textbox:hover .k-insert-bottom{background-position:-176px -64px}.k-drop-hint{background-position:0 -326px}.k-i-note,.k-warning{background-position:-160px -240px}.k-button:active .k-i-note,.k-button:active .k-warning,.k-button:not(.k-state-disabled):hover .k-i-note,.k-button:not(.k-state-disabled):hover .k-warning,.k-link:not(.k-state-disabled):hover>.k-i-note,.k-link:not(.k-state-disabled):hover>.k-warning,.k-state-hover>*>.k-i-note,.k-state-hover>*>.k-warning,.k-state-hover>.k-i-note,.k-state-hover>.k-warning,.k-textbox:hover .k-i-note,.k-textbox:hover .k-warning{background-position:-176px -240px}.k-i-sort-asc{background-position:-112px -240px}.k-button:active .k-i-sort-asc,.k-button:not(.k-state-disabled):hover .k-i-sort-asc,.k-link:not(.k-state-disabled):hover>.k-i-sort-asc,.k-state-hover>*>.k-i-sort-asc,.k-state-hover>.k-i-sort-asc,.k-textbox:hover .k-i-sort-asc{background-position:-128px -240px}.k-i-sort-desc{background-position:-112px -256px}.k-button:active .k-i-sort-desc,.k-button:not(.k-state-disabled):hover .k-i-sort-desc,.k-link:not(.k-state-disabled):hover>.k-i-sort-desc,.k-state-hover>*>.k-i-sort-desc,.k-state-hover>.k-i-sort-desc,.k-textbox:hover .k-i-sort-desc{background-position:-128px -256px}.k-i-group{background-position:-112px -272px}.k-button:active .k-i-group,.k-button:not(.k-state-disabled):hover .k-i-group,.k-link:not(.k-state-disabled):hover>.k-i-group,.k-state-hover>*>.k-i-group,.k-state-hover>.k-i-group,.k-textbox:hover .k-i-group{background-position:-128px -272px}.k-i-ungroup{background-position:-112px -288px}.k-button:active .k-i-ungroup,.k-button:not(.k-state-disabled):hover .k-i-ungroup,.k-link:not(.k-state-disabled):hover>.k-i-ungroup,.k-state-hover>*>.k-i-ungroup,.k-state-hover>.k-i-ungroup,.k-textbox:hover .k-i-ungroup{background-position:-128px -288px}.k-i-columns{background-position:-112px -304px}.k-button:active .k-i-columns,.k-button:not(.k-state-disabled):hover .k-i-columns,.k-link:not(.k-state-disabled):hover>.k-i-columns,.k-state-hover>*>.k-i-columns,.k-state-hover>.k-i-columns,.k-textbox:hover .k-i-columns{background-position:-128px -304px}.k-i-hbars{background-position:-64px -32px}.k-button:active .k-i-hbars,.k-button:not(.k-state-disabled):hover .k-i-hbars,.k-link:not(.k-state-disabled):hover>.k-i-hbars,.k-state-hover>*>.k-i-hbars,.k-state-hover>.k-i-hbars,.k-textbox:hover .k-i-hbars{background-position:-80px -32px}.k-i-vbars{background-position:-64px -48px}.k-button:active .k-i-vbars,.k-button:not(.k-state-disabled):hover .k-i-vbars,.k-link:not(.k-state-disabled):hover>.k-i-vbars,.k-state-hover>*>.k-i-vbars,.k-state-hover>.k-i-vbars,.k-textbox:hover .k-i-vbars{background-position:-80px -48px}.k-i-sum{background-position:-64px -64px}.k-button:active .k-i-sum,.k-button:not(.k-state-disabled):hover .k-i-sum,.k-link:not(.k-state-disabled):hover>.k-i-sum,.k-state-hover>*>.k-i-sum,.k-state-hover>.k-i-sum,.k-textbox:hover .k-i-sum{background-position:-80px -64px}.k-i-pdf{background-position:-64px -80px}.k-button:active .k-i-pdf,.k-button:not(.k-state-disabled):hover .k-i-pdf,.k-link:not(.k-state-disabled):hover>.k-i-pdf,.k-state-hover>*>.k-i-pdf,.k-state-hover>.k-i-pdf,.k-textbox:hover .k-i-pdf{background-position:-80px -80px}.k-i-excel{background-position:-64px -96px}.k-button:active .k-i-excel,.k-button:not(.k-state-disabled):hover .k-i-excel,.k-link:not(.k-state-disabled):hover>.k-i-excel,.k-state-hover>*>.k-i-excel,.k-state-hover>.k-i-excel,.k-textbox:hover .k-i-excel{background-position:-80px -96px}.k-i-rotatecw{background-position:-64px -112px}.k-button:active .k-i-rotatecw,.k-button:not(.k-state-disabled):hover .k-i-rotatecw,.k-link:not(.k-state-disabled):hover>.k-i-rotatecw,.k-state-hover>*>.k-i-rotatecw,.k-state-hover>.k-i-rotatecw,.k-textbox:hover .k-i-rotatecw{background-position:-80px -112px}.k-i-rotateccw{background-position:-64px -128px}.k-button:active .k-i-rotateccw,.k-button:not(.k-state-disabled):hover .k-i-rotateccw,.k-link:not(.k-state-disabled):hover>.k-i-rotateccw,.k-state-hover>*>.k-i-rotateccw,.k-state-hover>.k-i-rotateccw,.k-textbox:hover .k-i-rotateccw{background-position:-80px -128px}.k-i-undo{background-position:-64px -160px}.k-button:active .k-i-undo,.k-button:not(.k-state-disabled):hover .k-i-undo,.k-link:not(.k-state-disabled):hover>.k-i-undo,.k-state-hover>*>.k-i-undo,.k-state-hover>.k-i-undo,.k-textbox:hover .k-i-undo{background-position:-80px -160px}.k-i-redo{background-position:-64px -144px}.k-button:active .k-i-redo,.k-button:not(.k-state-disabled):hover .k-i-redo,.k-link:not(.k-state-disabled):hover>.k-i-redo,.k-state-hover>*>.k-i-redo,.k-state-hover>.k-i-redo,.k-textbox:hover .k-i-redo{background-position:-80px -144px}.k-i-shape{background-position:-64px -176px}.k-button:active .k-i-shape,.k-button:not(.k-state-disabled):hover .k-i-shape,.k-link:not(.k-state-disabled):hover>.k-i-shape,.k-state-hover>*>.k-i-shape,.k-state-hover>.k-i-shape,.k-textbox:hover .k-i-shape{background-position:-80px -176px}.k-i-connector{background-position:-64px -192px}.k-button:active .k-i-connector,.k-button:not(.k-state-disabled):hover .k-i-connector,.k-link:not(.k-state-disabled):hover>.k-i-connector,.k-state-hover>*>.k-i-connector,.k-state-hover>.k-i-connector,.k-textbox:hover .k-i-connector{background-position:-80px -192px}.k-i-kpi{background-position:-64px -208px}.k-button:active .k-i-kpi,.k-button:not(.k-state-disabled):hover .k-i-kpi,.k-link:not(.k-state-disabled):hover>.k-i-kpi,.k-state-hover>*>.k-i-kpi,.k-state-hover>.k-i-kpi,.k-textbox:hover .k-i-kpi{background-position:-80px -208px}.k-i-dimension{background-position:-64px -224px}.k-button:active .k-i-dimension,.k-button:not(.k-state-disabled):hover .k-i-dimension,.k-link:not(.k-state-disabled):hover>.k-i-dimension,.k-state-hover>*>.k-i-dimension,.k-state-hover>.k-i-dimension,.k-textbox:hover .k-i-dimension{background-position:-80px -224px}.k-file{background-position:0 0}.k-button:active .k-file,.k-button:not(.k-state-disabled):hover .k-file,.k-link:not(.k-state-disabled):hover>.k-file,.k-state-hover>*>.k-file,.k-state-hover>.k-file,.k-textbox:hover .k-file{background-position:-16px 0}.k-addfolder,.k-i-folder-add{background-position:-32px -272px}.k-button:active .k-addfolder,.k-button:active .k-i-folder-add,.k-button:not(.k-state-disabled):hover .k-addfolder,.k-button:not(.k-state-disabled):hover .k-i-folder-add,.k-link:not(.k-state-disabled):hover>.k-addfolder,.k-link:not(.k-state-disabled):hover>.k-i-folder-add,.k-state-hover>*>.k-addfolder,.k-state-hover>*>.k-i-folder-add,.k-state-hover>.k-addfolder,.k-state-hover>.k-i-folder-add,.k-textbox:hover .k-addfolder,.k-textbox:hover .k-i-folder-add{background-position:-48px -272px}.k-goup,.k-i-folder-up{background-position:-32px -288px}.k-button:active .k-goup,.k-button:active .k-i-folder-up,.k-button:not(.k-state-disabled):hover .k-goup,.k-button:not(.k-state-disabled):hover .k-i-folder-up,.k-link:not(.k-state-disabled):hover>.k-goup,.k-link:not(.k-state-disabled):hover>.k-i-folder-up,.k-state-hover>*>.k-goup,.k-state-hover>*>.k-i-folder-up,.k-state-hover>.k-goup,.k-state-hover>.k-i-folder-up,.k-textbox:hover .k-goup,.k-textbox:hover .k-i-folder-up{background-position:-48px -288px}.k-i-more{background-position:-64px -32px}.k-button:active .k-i-more,.k-button:not(.k-state-disabled):hover .k-i-more,.k-link:not(.k-state-disabled):hover>.k-i-more,.k-state-hover>*>.k-i-more,.k-state-hover>.k-i-more,.k-textbox:hover .k-i-more{background-position:-80px -32px}.k-i-gantt-toggle{background-position:-64px -240px}.k-button:active .k-i-gantt-toggle,.k-button:not(.k-state-disabled):hover .k-i-gantt-toggle,.k-link:not(.k-state-disabled):hover>.k-i-gantt-toggle,.k-state-hover>*>.k-i-gantt-toggle,.k-state-hover>.k-i-gantt-toggle,.k-textbox:hover .k-i-gantt-toggle{background-position:-80px -240px}.k-file>.k-icon{background-position:-115px -91px}.k-image{border:0}.k-breadcrumbs:hover .k-i-arrow-n{background-position:0 0}.k-breadcrumbs:hover .k-i-arrow-e{background-position:0 -16px}.k-gantt-views>.k-current-view>.k-link:after,.k-pager-numbers .k-current-page .k-link:after,.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view .k-link:after{background-position:0 -32px}.k-button:active .k-gantt-views>.k-current-view>.k-link:after,.k-button:active .k-pager-numbers .k-current-page .k-link:after,.k-button:active .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view .k-link:after,.k-button:not(.k-state-disabled):hover .k-gantt-views>.k-current-view>.k-link:after,.k-button:not(.k-state-disabled):hover .k-pager-numbers .k-current-page .k-link:after,.k-button:not(.k-state-disabled):hover .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view .k-link:after,.k-link:not(.k-state-disabled):hover>.k-gantt-views>.k-current-view>.k-link:after,.k-link:not(.k-state-disabled):hover>.k-pager-numbers .k-current-page .k-link:after,.k-link:not(.k-state-disabled):hover>.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view .k-link:after,.k-state-hover>*>.k-gantt-views>.k-current-view>.k-link:after,.k-state-hover>*>.k-pager-numbers .k-current-page .k-link:after,.k-state-hover>*>.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view .k-link:after,.k-state-hover>.k-gantt-views>.k-current-view>.k-link:after,.k-state-hover>.k-pager-numbers .k-current-page .k-link:after,.k-state-hover>.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view .k-link:after,.k-textbox:hover .k-gantt-views>.k-current-view>.k-link:after,.k-textbox:hover .k-pager-numbers .k-current-page .k-link:after,.k-textbox:hover .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view .k-link:after{background-position:-16px -32px}html .k-success-colored{color:#507f50;border-color:#d0dfd0;background-color:#f0fff0}html .k-info-colored{color:#50607f;border-color:#d0d9df;background-color:#f0f9ff}html .k-error-colored{color:#7f5050;border-color:#dfd0d0;background-color:#fff0f0}.k-inline-block{padding:0 2px}.k-loading,.k-loading-image{background-color:transparent;background-repeat:no-repeat;background-position:center center}.k-loading-image,.k-loading-mask,.k-loading-text{position:absolute}.k-loading-mask{z-index:100}.k-loading-mask .k-loading-progress{margin:auto;position:absolute;top:0;bottom:0;left:0;right:0}.k-loading-text{text-indent:-4000px;text-align:center}.k-loading-color,.k-loading-image{width:100%;height:100%}.k-loading-image{top:0;left:0;z-index:2}.k-loading-color{filter:alpha(opacity=30);opacity:.3}.k-content-frame{border:0;width:100%;height:100%}.k-pane>.k-splitter-overlay{filter:alpha(opacity=0);opacity:0;position:absolute}.k-drag-clue{position:absolute;z-index:10003;border-style:solid;border-width:1px;font-size:.9em;padding:.2em .4em;white-space:nowrap;cursor:default}.k-drag-status{margin-top:-3px;margin-right:4px;vertical-align:middle}.k-reorder-cue{position:absolute;width:1px;overflow:visible}.k-reorder-cue .k-icon{position:absolute;left:-4px;width:8px;height:4px}.k-reorder-cue .k-i-arrow-s{top:-4px;background-position:-4px -166px}.k-reorder-cue .k-i-arrow-n{bottom:-4px;background-position:-4px -134px}.k-scrollbar{position:absolute;overflow:scroll}.k-scrollbar-vertical{top:0;right:0;width:17px;height:100%;overflow-x:hidden}.k-touch-scrollbar{display:none;position:absolute;z-index:200000;height:8px;width:8px;border:1px solid #8a8a8a;background-color:#858585}@media only screen and (-webkit-min-device-pixel-ratio:2){body .k-touch-scrollbar{height:12px;width:12px;border-radius:7px}}.k-virtual-scrollable-wrap{overflow-x:auto}.k-current-time{background:red;position:absolute}.k-current-time-arrow-down{width:0;height:0;background:0 0;border-bottom:4px solid transparent;border-top:4px solid red;border-left:4px solid transparent;border-right:4px solid transparent}.k-current-time-arrow-left{width:0;height:0;background:0 0;border-bottom:4px solid transparent;border-top:4px solid transparent;border-left:4px solid transparent;border-right:4px solid red}.k-current-time-arrow-right{width:0;height:0;background:0 0;border-bottom:4px solid transparent;border-top:4px solid transparent;border-left:4px solid red;border-right:4px solid transparent}.k-animation-container,.k-animation-container *,.k-animation-container :after,.k-block .k-header,.k-list-container,.k-widget,.k-widget *,.k-widget :before{-webkit-box-sizing:content-box;box-sizing:content-box}.k-autocomplete,.k-block,.k-button,.k-edit-cell .k-widget,.k-grid-edit-row .k-widget,.k-grid-edit-row .text-box,.k-tabstrip>.k-content>.km-scroll-container,.k-textbox,.km-actionsheet>li,.km-shim,div.k-window-content{-webkit-box-sizing:border-box;box-sizing:border-box}.input-group .form-control{-webkit-box-sizing:border-box;box-sizing:border-box}.form-control.k-widget{padding:0}a.k-button:hover{text-decoration:none}.km-widget,.km-widget *{-webkit-background-clip:border-box;background-clip:border-box}.k-radio,input.k-checkbox{display:inline;opacity:0;width:0;margin:0;-webkit-appearance:none;overflow:hidden}.k-ff .k-radio,.k-ff input.k-checkbox{position:absolute}.k-checkbox-label{position:relative;padding-left:1.5em;vertical-align:middle;line-height:.875em;cursor:pointer}.k-checkbox-label:before{content:"";position:absolute;top:0;left:0;border-width:1px;border-style:solid;width:1em;height:1em;font-size:1em;line-height:1em;text-align:center}.k-checkbox:indeterminate+.k-checkbox-label:after{content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-width:1px;border-style:solid;width:8px;height:8px;font-size:1em;text-align:center;content:" ";margin-left:-2px}.k-checkbox:checked+.k-checkbox-label:before{content:"\2713"}.k-checkbox:disabled+.k-checkbox-label{cursor:auto}.k-radio-label{position:relative;padding-left:1.5em;vertical-align:middle;line-height:.875em;cursor:pointer}.k-radio-label:before{content:"";position:absolute;top:0;left:0;width:14px;height:14px;border-style:solid}.k-radio:checked+.k-radio-label:after{content:"";width:10px;height:10px;position:absolute;top:3px;left:3px}.k-radio:disabled+.k-radio-label{cursor:auto}.k-ie8 .k-radio,.k-ie8 input.k-checkbox{display:inline-block;width:auto}.k-ie8 .k-checkbox-label,.k-ie8 .k-radio-label{padding-left:0}.k-ie8 .k-checkbox-label:before,.k-ie8 .k-radio-label:after,.k-ie8 .k-radio-label:before{display:none}.k-rtl .k-checkbox-label,.k-rtl .k-radio-label{padding-right:1.5em}.k-rtl .k-checkbox-label:before,.k-rtl .k-radio-label:before{right:0}.k-rtl .k-radio:checked+.k-radio-label:after{right:3px}input.k-checkbox+label{-webkit-user-select:none}.k-pdf-export-shadow{position:absolute;overflow:hidden;left:-15000px;width:14400px}.km-native-scroller{overflow:auto;-webkit-overflow-scrolling:touch;-ms-touch-action:pan-x pan-y;-ms-overflow-style:-ms-autohiding-scrollbar;-ms-scroll-snap-type:proximity}.k-rpanel-left{-webkit-transform:translateX(-100%) translateZ(0);-ms-transform:translateX(-100%) translateZ(0);transform:translateX(-100%) translateZ(0);left:0}.k-rpanel-right{-webkit-transform:translateX(100%) translateZ(0);-ms-transform:translateX(100%) translateZ(0);transform:translateX(100%) translateZ(0);right:0}.k-rpanel-left,.k-rpanel-right{position:fixed;display:block;overflow:auto;min-width:320px;height:100%;top:0}.k-rpanel-left.k-rpanel-expanded,.k-rpanel-right.k-rpanel-expanded{-webkit-transform:translateX(0) translateZ(0);-ms-transform:translateX(0) translateZ(0);transform:translateX(0) translateZ(0)}.k-rpanel-left+*,.k-rpanel-right+*{overflow:auto}.k-rpanel-top{position:static;max-height:0}.k-rpanel-top.k-rpanel-expanded{max-height:568px;overflow:visible!important}.k-edit-form{margin:0;padding:0}.k-window>div.k-popup-edit-form{padding:1em 0}.k-grid-edit-row .k-edit-form td{border-bottom-width:0}.k-edit-form-container{position:relative;width:400px}.k-edit-form-container .editor-label,.k-edit-label{float:left;clear:both;width:30%;padding:.4em 0 1em;margin-left:2%;text-align:right}.k-edit-field,.k-edit-form-container .editor-field{float:right;clear:right;width:60%;margin-right:2%;padding:0 0 .6em}.k-edit-field>input[type=checkbox],.k-edit-field>input[type=radio]{margin-top:.4em}.k-edit-form-container .k-button{margin:0 .16em}.k-edit-field>.k-button:first-child,.k-edit-field>input[type=checkbox]:first-child,.k-edit-field>input[type=radio]:first-child,.k-edit-field>label:first-child>input[type=checkbox]{margin-left:0}.k-edit-form-container .k-edit-buttons{clear:both;text-align:right;border-width:1px 0 0;border-style:solid;position:relative;bottom:-1em;padding:.6em}div.k-window{display:inline-block;position:absolute;z-index:10001;border-style:solid;border-width:1px;padding-top:2em}.k-block>.k-header,.k-window-titlebar{position:absolute;width:100%;height:1.1em;border-bottom-style:solid;border-bottom-width:1px;margin-top:-2em;padding:.4em 0;font-size:1.2em;white-space:nowrap;min-height:16px}.k-block>.k-header{position:relative;margin:-2px 0 10px -2px;padding:.3em 2px}.k-window-title{position:absolute;left:.44em;right:.44em;overflow:hidden;cursor:default;text-overflow:ellipsis}.k-window-title .k-image{margin:0 5px 0 0;vertical-align:middle}div.k-window-titleless{padding-top:0}div.k-window-content{position:relative;height:100%;padding:.58em;overflow:auto;outline:0}div.k-window-iframecontent{padding:0;overflow:visible}.k-window-content>.km-scroll-container{height:100%}.k-window-titlebar .k-window-actions{position:absolute;top:0;right:.3em;padding-top:.3em;white-space:nowrap}.k-window-titlebar .k-window-action{display:inline-block;width:16px;height:16px;padding:2px;text-decoration:none;vertical-align:middle;opacity:.7}.k-window-titlebar .k-state-hover{border-style:solid;border-width:1px;padding:1px;opacity:1}.k-window-action .k-icon{margin:0;vertical-align:top}.k-window>.k-resize-handle{position:absolute;z-index:1;background-color:#fff;font-size:0;line-height:6px;filter:alpha(opacity=0);opacity:0;zoom:1}.k-resize-n{top:-3px;left:0;width:100%;height:6px;cursor:n-resize}.k-resize-e{top:0;right:-3px;width:6px;height:100%;cursor:e-resize}.k-resize-s{bottom:-3px;left:0;width:100%;height:6px;cursor:s-resize}.k-resize-w{top:0;left:-3px;width:6px;height:100%;cursor:w-resize}.k-resize-se{bottom:-3px;right:-3px;width:16px;height:16px;cursor:se-resize}.k-resize-sw{bottom:-3px;left:-3px;width:6px;height:6px;cursor:sw-resize}.k-resize-ne{top:-3px;right:-3px;width:6px;height:6px;cursor:ne-resize}.k-resize-nw{top:-3px;left:-3px;width:6px;height:6px;cursor:nw-resize}.k-overlay{position:fixed;top:0;left:0;z-index:10001;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);opacity:.5}.k-window .k-overlay{position:absolute;width:100%;height:100%;background-color:#fff;filter:alpha(opacity=0);opacity:0}.k-action-buttons{clear:both;text-align:right;border-width:1px 0 0;border-style:solid;position:relative;bottom:-1em;padding:.6em;margin:0 -1em}.k-action-buttons .k-button{display:inline-block;margin:0 0 0 6px;min-width:75px}.k-tabstrip{margin:0;padding:0;zoom:1;position:relative}.k-tabstrip-items{padding:.3em .3em 0}.k-tabstrip-scrollable .k-tabstrip-items{white-space:nowrap;overflow:hidden}.k-tabstrip>.k-button{position:absolute;top:.4em;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.k-tabstrip-bottom>.k-button{top:auto;bottom:.4em}.k-tabstrip-prev{left:.4em}.k-tabstrip-next{right:.4em}.k-panelbar .k-tabstrip-items .k-item,.k-tabstrip-items .k-item{list-style-type:none;display:inline-block;position:relative;border-style:solid;border-width:1px 1px 0;margin:0 -1px 0 0;padding:0;vertical-align:top}.k-panelbar .k-tabstrip-items .k-state-active,.k-tabstrip-items .k-state-active,.k-tabstrip-items .k-tab-on-top{margin-bottom:-1px;padding-bottom:1px}.k-tabstrip-items .k-tab-on-top{z-index:1}.k-panelbar .k-tabstrip-items .k-link,.k-tabstrip-items .k-link{display:inline-block;border-bottom-width:0;padding:.5em .92em}.k-panelbar .k-tabstrip-items .k-icon,.k-tabstrip-items .k-icon{margin:-1px 4px 0 -3px;vertical-align:top}.k-panelbar .k-tabstrip-items .k-item .k-image,.k-panelbar .k-tabstrip-items .k-item .k-sprite,.k-tabstrip-items .k-item .k-image,.k-tabstrip-items .k-item .k-sprite{margin:-3px 3px 0 -6px;vertical-align:middle}.k-tabstrip-items .k-loading{top:0;left:0;height:0;width:20%;position:absolute;background:0 0;border-top:1px solid transparent;border-color:inherit;-webkit-transition:width .2s linear;transition:width .2s linear;-webkit-transition:"width 200ms linear";transition:"width 200ms linear";-webkit-animation:k-tab-loader 1s ease-in-out infinite;animation:k-tab-loader 1s ease-in-out infinite}.k-tabstrip-items .k-progress{-webkit-animation:none;animation:none}.k-tabstrip-items .k-loading.k-complete{width:100%;-webkit-animation:none;animation:none}.k-panelbar .k-tabstrip>.k-content,.k-tabstrip>.k-content{position:static;border-style:solid;border-width:1px;margin:0 .286em .3em;padding:.3em .92em;zoom:1}.k-tabstrip>.k-content{display:none;overflow:auto}.k-tabstrip>.k-content.km-scroll-wrapper{padding:0}.k-tabstrip>.k-content>.km-scroll-container{padding:.3em .92em}@-webkit-keyframes k-tab-loader{0%{left:0}50%{left:80%}100%{left:0}}@keyframes k-tab-loader{0%{left:0}50%{left:80%}100%{left:0}}.k-tabstrip-left>div.k-content,.k-tabstrip-right>div.k-content{margin:.286em .3em}.k-tabstrip-left>.k-tabstrip-items .k-item,.k-tabstrip-right>.k-tabstrip-items .k-item{display:block;margin-bottom:-1px}.k-tabstrip-left>.k-tabstrip-items .k-link,.k-tabstrip-right>.k-tabstrip-items .k-link{display:block}.k-panelbar .k-tabstrip-left>.k-tabstrip-items .k-state-active,.k-panelbar .k-tabstrip-right>.k-tabstrip-items .k-state-active,.k-tabstrip-left>.k-tabstrip-items .k-state-active,.k-tabstrip-left>.k-tabstrip-items .k-tab-on-top,.k-tabstrip-right>.k-tabstrip-items .k-state-active,.k-tabstrip-right>.k-tabstrip-items .k-tab-on-top{margin-bottom:-1px;padding-bottom:0}.k-tabstrip-left>.k-tabstrip-items{float:left;padding:.25em 0 .3em .3em}.k-tabstrip-left>.k-tabstrip-items .k-item{border-width:1px 0 1px 1px;border-radius:3px 0 0 3px}.k-tabstrip-left>.k-tabstrip-items .k-state-active{border-width:1px 0 1px 1px}.k-panelbar .k-tabstrip-left>.k-tabstrip-items .k-state-active,.k-tabstrip-left>.k-tabstrip-items .k-state-active,.k-tabstrip-left>.k-tabstrip-items .k-tab-on-top{margin-right:-2px;padding-right:1px}.k-tabstrip-right>.k-tabstrip-items{float:right;padding:.25em .3em .3em 0}.k-tabstrip-right>.k-tabstrip-items .k-item{border-width:1px 1px 1px 0;border-radius:0 3px 3px 0}.k-tabstrip-right>.k-tabstrip-items .k-state-active{border-width:1px 1px 1px 0}.k-panelbar .k-tabstrip-right>.k-tabstrip-items .k-state-active,.k-tabstrip-right>.k-tabstrip-items .k-state-active,.k-tabstrip-right>.k-tabstrip-items .k-tab-on-top{margin-left:-1px;padding-left:1px}.k-tabstrip-bottom>.k-tabstrip-items{margin-top:-1px;padding:0 .3em .3em}.k-panelbar .k-tabstrip-bottom>.k-content,.k-tabstrip-bottom>.k-content{margin:.3em .286em 0;z-index:1;position:relative}.k-tabstrip-bottom>.k-tabstrip-items .k-item{border-width:0 1px 1px;border-radius:0 0 4px 4px}.k-tabstrip-bottom>.k-tabstrip-items .k-state-active{margin-bottom:0;padding-bottom:0}.k-tabstrip-bottom>.k-content{min-height:100px}.k-tabstrip-bottom>.k-tabstrip-items .k-loading{top:auto;bottom:0}.k-panelbar{zoom:1}.k-panel>.k-item,.k-panelbar>.k-item{list-style-type:none;display:block;border-width:0;margin:0;zoom:1;border-radius:0}.k-panelbar .k-link>.k-image,.k-panelbar .k-link>.k-sprite{float:left;margin-top:4px;margin-right:5px;vertical-align:middle}.k-panel>.k-item>.k-link,.k-panelbar>.k-item>.k-link{display:block;position:relative;border-bottom-style:solid;border-bottom-width:1px;padding:0 1em;line-height:2.34em;text-decoration:none;zoom:1}.k-panelbar-collapse,.k-panelbar-expand{position:absolute;top:50%;right:4px;margin-top:-8px}.k-panelbar .k-content,.k-panelbar .k-panel{position:relative;border-bottom-style:solid;border-bottom-width:1px;margin:0;padding:0;zoom:1}.k-panel>.k-item>.k-link{border-bottom:0;font-size:.95em;line-height:2.2}.k-panel .k-panel>.k-item>.k-link{padding-left:2em}.k-panelbar .k-i-seek-e .k-link{border-bottom:0}.k-panel .k-panel{border-bottom:0}.k-menu{cursor:default}.k-menu,.k-menu .k-menu-group{list-style:none;margin:0;padding:0;zoom:1}.k-menu:after{content:'';display:block;width:99%;height:0;float:inherit;clear:both}.k-menu .k-item{-webkit-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.k-menu .k-item div{-webkit-user-select:default;-moz-user-select:default;-ms-user-select:default;user-select:default}.k-menu .k-item .k-item,ul.k-menu-vertical>.k-item{display:block;float:none;border-width:0}.k-menu .k-image,.k-menu .k-item>.k-link>.k-icon,.k-menu .k-sprite{margin:-2px 4px 0 -4px;vertical-align:middle}.k-menu .k-item>.k-link>.k-icon{margin:-2px 0 0}.k-menu .k-item>.k-link{display:block;padding:.5em 1.1em .4em;line-height:1.34em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.k-menu .k-menu-group{display:none;border-style:solid;border-width:1px;overflow:visible;white-space:nowrap}.k-menu .k-menu-group>.k-item{display:block;border-width:0}.k-menu .k-item,.k-widget.k-menu-horizontal>.k-item{position:relative;float:left;border-style:solid;border-width:0 1px 0 0;vertical-align:top;zoom:1;-webkit-box-sizing:content-box;box-sizing:content-box}.k-context-menu.k-menu-vertical>.k-item>.k-link,.k-menu .k-menu-group .k-item>.k-link{padding:.28em 1.8em .38em .9em}.k-context-menu.k-menu-horizontal>.k-separator{display:none}.k-context-menu.k-menu-horizontal>.k-item{-webkit-box-sizing:border-box;box-sizing:border-box}.k-context-menu.k-menu-horizontal>.k-last{border:0}.k-menu .k-item>.k-link>.k-i-arrow-s{margin-right:-8px}.k-menu .k-item>.k-link>.k-i-arrow-e{position:absolute;top:50%;margin-top:-8px;right:2px;right:.2rem}.k-menu .k-animation-container{border:0}.k-menu .k-animation-container,.k-menu .k-menu-group{position:absolute;left:0}.k-menu .k-animation-container .k-animation-container,.k-menu .k-menu-group .k-menu-group,.k-menu-vertical .k-animation-container,.k-menu-vertical .k-menu-group{top:0;left:0}.k-menu .k-animation-container .k-menu-group{top:auto;left:auto;margin-left:-1px}.k-menu .k-animation-container,.k-popup .k-animation-container{margin-top:-1px;padding-left:1px}.k-ie .k-menu .k-animation-container,.k-ie .k-popup .k-animation-container{margin-top:-2px}.k-popup .k-animation-container .k-popup{margin-left:-1px}ul.k-menu .k-separator{padding:.25em 0;height:100%;width:1px;font-size:0;line-height:0;border-width:0 1px 0 0}.k-menu .k-menu-group .k-separator,ul.k-menu-vertical .k-separator{padding:0;height:1px;width:100%;border-width:1px 0 0}.k-context-menu{border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.k-calendar{position:relative;display:inline-block;width:16.917em;overflow:hidden}.k-calendar .k-link,.k-calendar td{text-decoration:none}.k-calendar .k-action-link{text-decoration:underline}.k-calendar .k-footer,.k-calendar .k-header{position:relative;text-align:center;zoom:1}.k-widget.k-calendar .k-nav-next,.k-widget.k-calendar .k-nav-prev{position:absolute;top:.16666em;line-height:1.8333em;height:1.8333em}.k-widget.k-calendar .k-nav-prev{left:1%}.k-widget.k-calendar .k-nav-next{right:1%}.k-calendar .k-content{float:left;border-spacing:0;width:100%;height:14.167em;border-width:0;margin:0;table-layout:fixed;outline:0}.k-calendar .k-content,.k-calendar .k-content th{text-align:right}.k-calendar .k-animation-container .k-content{height:100%}.k-widget.k-calendar .k-nav-fast{display:inline-block;width:75%;height:1.8333em;line-height:1.8333em;margin:.16666em -.08333em .3333em 0}.k-calendar .k-header .k-icon{vertical-align:middle}.k-calendar .k-header .k-link.k-nav-next,.k-calendar .k-header .k-link.k-nav-prev{height:1.8333em;width:1.8333em}.k-calendar th{border-bottom-style:solid;border-bottom-width:1px;padding:.4em .45em .4em .1em;font-weight:400;cursor:default}.k-calendar td{padding:.08333em;cursor:pointer}.k-calendar .k-state-focus{border-style:dotted;border-width:.08333em;padding:0}.k-calendar .k-content .k-link{display:block;overflow:hidden;min-height:1.8333em;line-height:1.8333em;padding:0 .45em 0 .1em}.k-calendar .k-meta-view .k-link{padding:.25em 0 .3em;text-align:center}.k-calendar .k-footer{clear:both}.k-calendar .k-footer .k-nav-today,.k-calendar .k-footer>.k-state-disabled{display:block;height:100%;padding:.5em 0}.k-calendar .k-nav-today:hover{text-decoration:underline}.k-toolbar .k-split-button,span.k-colorpicker,span.k-combobox,span.k-datepicker,span.k-datetimepicker,span.k-dropdown,span.k-numerictextbox,span.k-timepicker{background-image:none}.k-autocomplete,.k-colorpicker,.k-combobox,.k-datepicker,.k-datetimepicker,.k-dropdown,.k-numerictextbox,.k-selectbox,.k-textbox,.k-timepicker,.k-toolbar .k-split-button{position:relative;display:inline-block;width:12.4em;overflow:visible;border-width:0;vertical-align:middle}.k-filter-menu .k-combobox,.k-filter-menu .k-datepicker,.k-filter-menu .k-datetimepicker,.k-filter-menu .k-dropdown,.k-filter-menu .k-numerictextbox,.k-filter-menu .k-textbox,.k-filter-menu .k-timepicker{width:13.2em}.k-autocomplete,.k-colorpicker,.k-combobox,.k-datepicker,.k-datetimepicker,.k-dropdown,.k-numerictextbox,.k-selectbox,.k-timepicker,.k-toolbar .k-split-button{white-space:nowrap}.k-colorpicker,.k-toolbar .k-split-button{width:auto}.k-datetimepicker{width:15em}.k-autocomplete,.k-numeric-wrap,.k-picker-wrap{position:relative;cursor:default}.k-dropdown-wrap{position:relative}.k-dropdown-wrap,.k-numeric-wrap,.k-picker-wrap{display:block}.k-block,.k-content,.k-grid,.k-header-column-menu,.k-panelbar,.k-slider,.k-splitter,.k-treeview,.k-widget{outline:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.k-block,.k-calendar,.k-grid-header .k-link,.k-header-column-menu,.k-pager-wrap,.k-slider,.k-splitbar,.k-treeview{-webkit-touch-callout:none}.k-list-scroller{position:relative;overflow:auto}.k-popup.k-calendar-container,.k-popup.k-list-container{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);padding:2px;border-width:1px;border-style:solid}.k-autocomplete.k-state-border-down,.k-dropdown-wrap.k-state-border-down,.k-list-container.k-state-border-down,.k-numeric-wrap.k-state-border-down,.k-picker-wrap.k-state-border-down{border-bottom-width:0;padding-bottom:1px}.k-list-container .km-scroll-container{padding-bottom:6px}.k-autocomplete,.k-dropdown-wrap,.k-numeric-wrap,.k-picker-wrap,.k-textbox{border-width:1px;border-style:solid;padding:0 1.9em 0 0}.k-numeric-wrap.k-expand-padding{padding-right:0}.k-autocomplete,.k-textbox{padding:0}.k-textbox.k-space-left{padding-left:1.9em}.k-textbox.k-space-right{padding-right:1.9em}.k-textbox .k-icon{top:50%;margin:-8px 0 0;position:absolute}.k-space-left .k-icon{left:3px}.k-space-right .k-icon{right:3px}span.k-textbox:after{content:"\a0";display:block;height:.4px;overflow:hidden}.k-autocomplete,.k-dropdown-wrap.k-state-focused,.k-dropdown-wrap.k-state-hover,.k-numeric-wrap.k-state-focused,.k-numeric-wrap.k-state-hover,.k-picker-wrap.k-state-focused,.k-picker-wrap.k-state-hover{-webkit-transition:-webkit-box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-transition:"box-shadow .15s ease-out";transition:"box-shadow .15s ease-out"}.k-combobox .k-input,.k-numeric-wrap .k-input,.k-picker-wrap .k-input,.k-textbox>input{width:100%;vertical-align:top}.k-dropdown-wrap .k-input,.k-numeric-wrap .k-input,.k-picker-wrap .k-input,.k-selectbox .k-input{font-family:inherit;border-width:0;outline:0}.k-dropdown .k-input,.k-selectbox .k-input{background:0 0}.k-dropdown-wrap .k-select,.k-numeric-wrap .k-select,.k-picker-wrap .k-select{position:absolute;top:0;right:0;display:inline-block;vertical-align:top;text-decoration:none}.k-combobox .k-select,.k-numeric-wrap .k-select,.k-picker-wrap .k-select{border-style:solid;border-width:0 0 0 1px;border-color:inherit}span.k-datetimepicker .k-select,span.k-datetimepicker .k-select+.k-select{right:0}.k-autocomplete .k-input,.k-textbox>input{display:block}.k-dropdown .k-select,.k-selectbox .k-select{overflow:hidden;border:0;text-decoration:none;font:inherit;color:inherit}.k-dropdown .k-input,.k-selectbox .k-input{display:block;overflow:hidden;text-overflow:ellipsis}.k-autocomplete .k-input,.k-dropdown-wrap .k-input,.k-numeric-wrap .k-input,.k-picker-wrap .k-input,.k-selectbox .k-input,.k-textbox>input{height:1.65em;line-height:1.65em;padding:.177em 0;text-indent:.33em;border:0;margin:0}.k-combobox .k-dropdown-wrap:before,.k-numeric-wrap:before,.k-picker-wrap:before{content:"\a0";display:inline-block;width:0;height:1.65em;padding-bottom:.3em}.k-webkit .k-combobox .k-dropdown-wrap:before,.k-webkit .k-numeric-wrap:before,.k-webkit .k-picker-wrap:before{padding-bottom:.38em}.km.root .k-combobox .k-dropdown-wrap:before,.km.root .k-numeric-wrap:before,.km.root .k-picker-wrap:before{content:none}.k-combobox .k-input,.k-numeric-wrap .k-input,.k-picker-wrap .k-input{display:inline}.k-dropdown-wrap .k-select,.k-numeric-wrap .k-select,.k-picker-wrap .k-select{min-height:1.65em;line-height:2em;vertical-align:middle;-moz-box-sizing:border-box;text-align:center;width:1.9em;height:100%}.k-numeric-wrap .k-select{padding:0}body .k-datetimepicker .k-select{border-radius:0}.k-combobox .k-icon,.k-dropdown,.k-selectbox .k-icon{cursor:pointer}.k-popup{border-style:solid;border-width:1px}.k-list-optionlabel,.k-popup .k-item{cursor:default}.k-popup .k-calendar{border:0}.k-list{height:auto}.k-fieldselector .k-list .k-item,.k-list-optionlabel,.k-popup .k-list .k-item,.k-popup>.k-group-header,.k-popup>.k-virtual-wrap>.k-group-header{padding:1px 5px 1px 5px;line-height:1.8em;min-height:1.8em}.k-popup .k-list .k-item{border-width:1px;border-style:solid;border-color:transparent;padding:0 4px}.k-popup .k-list .k-item>.k-group{top:-1px}.k-group-header+div>.k-list>.k-item.k-first:before{content:" ";display:block;border-top-width:1px;border-top-style:solid;position:absolute;top:-1px;left:0;right:0}.k-popup>.k-group-header,.k-popup>.k-virtual-wrap>.k-group-header{padding-right:22px}.k-overflow-container .k-item{padding:1px}.k-overflow-container .k-button.k-state-disabled,.k-overflow-container .k-button.k-state-disabled:hover,.k-overflow-container>.k-state-disabled .k-button{border:0;background:0 0}.k-fieldselector .k-list .k-item,.k-list-optionlabel.k-state-focused,.k-list-optionlabel.k-state-selected,.k-overflow-container .k-state-focused,.k-overflow-container .k-state-hover,.k-overflow-container .k-state-selected,.k-popup .k-list .k-state-focused,.k-popup .k-list .k-state-hover,.k-popup .k-list .k-state-selected{padding:0 4px;border-width:1px;border-style:solid}.k-list-filter{position:relative;margin-bottom:2px}.k-list-filter>.k-textbox{padding-right:20px;width:100%}.k-list-filter>.k-icon{position:absolute;right:6px;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.km-root .k-list-filter>.k-textbox{padding-left:0;padding-right:0;border-left-width:0;border-right-width:0}.k-multiselect-wrap{position:relative;border-width:0;border-style:solid;border-radius:4px;border-color:#C5C5C5;background-color:#FFF;min-height:2.04em}.k-multiselect-wrap .k-input{background-color:transparent;height:1.31em;line-height:1.31em;padding:.18em 0;text-indent:.33em;border:0;margin:1px 0 0;float:left}.k-multiselect-wrap .k-input::-ms-clear{display:none}.k-multiselect-wrap li{margin:1px 0 1px 1px;padding:.1em 1.6em .1em .4em;line-height:1.5em;float:left;position:relative}.k-autocomplete .k-loading,.k-multiselect .k-loading{position:absolute;right:3px;bottom:4px}.k-multiselect .k-loading-hidden{visibility:hidden}.k-multiselect-wrap .k-select{position:absolute;top:0;bottom:0;right:0;padding:.1em .2em}.k-datetimepicker .k-picker-wrap{padding-right:3.8em}.k-datetimepicker .k-select{width:3.8em}.k-datetimepicker .k-picker-wrap .k-icon{margin:0 2px}.k-picker-wrap .k-icon{cursor:pointer}.k-button,.k-datepicker,.k-datetimepicker,.k-textbox,.k-timepicker{display:inline-block;vertical-align:middle}.k-picker-wrap .k-input{margin:0}.k-time-popup .k-item{padding:1px 3px}.k-input{padding:.25em 0}.k-input,.k-textbox>input{outline:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.k-textbox{outline:0}input.k-textbox,textarea.k-textbox{padding:2px .3em}input.k-textbox{height:2.13em;text-indent:.33em;line-height:1.6em}.k-ie input.k-textbox{text-indent:.165em}.k-ff input.k-textbox{height:2.17em}textarea.k-textbox{height:auto}span.k-numerictextbox{background-color:transparent}.k-numerictextbox .k-input{margin:0}.k-numerictextbox .k-link{display:block;height:1em;line-height:1em;vertical-align:middle;border-width:0;padding:0}.k-numerictextbox .k-icon{height:11px}.k-numeric-wrap .k-input::-webkit-inner-spin-button{-webkit-appearance:none}.k-colorpicker .k-picker-wrap{line-height:2em}.k-colorpicker .k-selected-color{vertical-align:top;line-height:0;display:inline-block;height:2em;width:2em}.k-colorpicker .k-tool-icon{position:relative;top:-2px;display:inline-block;padding:3px 3px 2px;font-size:0;line-height:0;margin-right:3px;margin-left:2px;margin-bottom:3px;background-repeat:no-repeat;vertical-align:middle;width:16px;height:16px;-ms-high-contrast-adjust:none}.k-colorpicker .k-tool-icon .k-selected-color{display:block;height:3px;width:16px;position:absolute;left:3px;bottom:-3px;border-radius:0!important}.k-colorpicker .k-select{cursor:pointer}.k-disabled-overlay{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;opacity:.5;filter:alpha(opacity=50)}.k-colorpalette{position:relative;line-height:0;border-width:0;display:inline-block}.k-colorpalette .k-palette{border-collapse:collapse;position:relative;width:100%;height:100%}.k-colorpalette .k-item{width:14px;height:14px;overflow:hidden;-ms-high-contrast-adjust:none}.k-colorpalette .k-item.k-state-selected,.k-colorpalette .k-item.k-state-selected:hover{z-index:100;background:0 0;-webkit-box-shadow:0 1px 3px 1px rgba(0,0,0,.7),inset 0 0 0 1px rgba(255,255,255,.45);box-shadow:0 1px 3px 1px rgba(0,0,0,.7),inset 0 0 0 1px rgba(255,255,255,.45);position:relative}.k-colorpalette .k-item:hover{z-index:101;position:relative;-webkit-box-shadow:0 1px 3px 1px rgba(0,0,0,.5),inset 0 0 0 1px rgba(255,255,255,.3);box-shadow:0 1px 3px 1px rgba(0,0,0,.5),inset 0 0 0 1px rgba(255,255,255,.3)}.k-flatcolorpicker{position:relative;display:inline-block;width:250px;padding-bottom:5px}div.k-flatcolorpicker{background-color:transparent;background-image:none}.k-flatcolorpicker .k-selected-color{background-image:url(textures/transtexture.png);background-position:50% 50%;text-align:right}.k-flatcolorpicker .k-selected-color input.k-color-value{font-family:Consolas,"Ubuntu Mono","Lucida Console","Courier New",monospace;padding:.75em .3em .65em 1em;border:0;margin:0;width:70%}.k-flatcolorpicker .k-hsv-rectangle{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pinch-zoom double-tap-zoom}.k-flatcolorpicker .k-hsv-rectangle .k-draghandle{cursor:pointer;position:absolute;z-index:10;left:50%;top:50%;width:8px;height:8px;border:1px solid #eee;margin-left:-5px;margin-top:-5px;border-radius:6px;-webkit-box-shadow:0 1px 2px #444;box-shadow:0 1px 2px #444;background:0 0}.k-flatcolorpicker .k-hsv-rectangle .k-draghandle:focus,.k-flatcolorpicker .k-hsv-rectangle .k-draghandle:hover{background:0 0;border-color:#fff;-webkit-box-shadow:0 1px 5px #000;box-shadow:0 1px 5px #000}.k-flatcolorpicker .k-hsv-rectangle.k-dragging,.k-flatcolorpicker .k-hsv-rectangle.k-dragging *{cursor:none}.k-flatcolorpicker .k-slider-horizontal{height:20px;width:90%;margin:0 5%}.k-flatcolorpicker .k-slider-horizontal .k-slider-track{-webkit-box-shadow:0 1px 0 #fff,0 -1px 0 #999;box-shadow:0 1px 0 #fff,0 -1px 0 #999}.k-flatcolorpicker .k-hue-slider,.k-flatcolorpicker .k-transparency-slider{display:block}.k-flatcolorpicker .k-hue-slider .k-slider-selection,.k-flatcolorpicker .k-transparency-slider .k-slider-selection{background:0 0}.k-flatcolorpicker .k-hue-slider .k-draghandle,.k-flatcolorpicker .k-transparency-slider .k-draghandle{background:0 0;border:3px solid #eee;margin-top:1px;height:8px;width:8px;-webkit-box-shadow:0 1px 4px #444;box-shadow:0 1px 4px #444}.k-flatcolorpicker .k-hue-slider .k-draghandle:focus,.k-flatcolorpicker .k-hue-slider .k-draghandle:hover,.k-flatcolorpicker .k-transparency-slider .k-draghandle:focus,.k-flatcolorpicker .k-transparency-slider .k-draghandle:hover{background:0 0;border-color:#fff;-webkit-box-shadow:0 1px 5px #000;box-shadow:0 1px 5px #000;border-width:2px;padding:1px}.k-flatcolorpicker .k-hue-slider .k-slider-track{background:-webkit-gradient(linear,left top,right top,from(red),color-stop(16%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(84%,#f0f),to(#ff0004));background:-webkit-linear-gradient(left,red 0,#ff0 16%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 84%,#ff0004 100%);background:linear-gradient(to right,red 0,#ff0 16%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 84%,#ff0004 100%)}.k-flatcolorpicker .k-transparency-slider .k-slider-track{background-image:url(textures/transparency.png);-webkit-background-size:100% auto;background-size:100% auto;background-position:100% 50%;background-repeat:no-repeat}.k-flatcolorpicker .k-controls{margin-top:10px;margin-bottom:5px;text-align:center;font-size:90%}.k-flatcolorpicker .k-controls .k-button{width:6em}.k-flatcolorpicker .k-hsv-gradient{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(#000)),-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:-webkit-linear-gradient(top,rgba(0,0,0,0) 0,#000 100%),-webkit-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:linear-gradient(to bottom,rgba(0,0,0,0) 0,#000 100%),linear-gradient(to right,#fff 0,rgba(255,255,255,0) 100%);height:180px;margin-bottom:5px}.k-ie9 .k-flatcolorpicker .k-hue-slider .k-slider-track{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmMDAwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjE2JSIgc3RvcC1jb2xvcj0iI2ZmZmYwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjMzJSIgc3RvcC1jb2xvcj0iIzAwZmYwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjY3JSIgc3RvcC1jb2xvcj0iIzAwMDBmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijg0JSIgc3RvcC1jb2xvcj0iI2ZmMDBmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZjAwMDQiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+)}.k-ie9 .k-flatcolorpicker .k-hsv-gradient{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+)}.k-ie8 .k-flatcolorpicker .k-hue-slider .k-slider-track{background:url(textures/hue.png) repeat 0 50%}.k-ie8 .k-flatcolorpicker .k-transparency-slider .k-slider-track{background:url(textures/transparency.png) repeat 0 50%}.k-ie8 .k-flatcolorpicker .k-hsv-gradient{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#00ffffff', GradientType=1) progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#ff000000',GradientType=0)}.k-notification-wrap{padding:.6em .5em;cursor:default;position:relative;white-space:nowrap}.k-notification-button .k-notification-wrap{padding-right:20px}.k-notification-wrap>.k-i-note{vertical-align:text-bottom;margin-right:4px}.k-notification-wrap>.k-i-close{position:absolute;top:7px;right:4px;display:none}.k-notification-button .k-notification-wrap>.k-i-close{display:block}.k-progressbar{display:inline-block;position:relative;vertical-align:middle}.k-progressbar{border-radius:4px}.k-progressbar-horizontal{width:27em;height:1.9em}.k-progressbar-vertical{width:1.9em;height:27em}.k-progressbar>.k-state-selected{position:absolute;border-style:solid;border-width:1px;overflow:hidden}.k-progressbar-horizontal>.k-state-selected,.k-rtl .k-progressbar-horizontal.k-progressbar-reverse>.k-state-selected{left:-1px;right:auto;top:-1px;height:100%;border-radius:4px 0 0 4px}.k-progressbar-horizontal.k-progressbar-reverse>.k-state-selected,.k-rtl .k-progressbar-horizontal>.k-state-selected{left:auto;right:-1px;border-radius:0 4px 4px 0}.k-progressbar-vertical>.k-state-selected{left:-1px;bottom:-1px;width:100%;border-radius:0 0 4px 4px}.k-progressbar-vertical.k-progressbar-reverse>.k-state-selected{bottom:auto;top:-1px;border-radius:4px 4px 0 0}.k-progressbar>.k-state-selected.k-complete,.k-rtl .k-progressbar>.k-state-selected.k-complete{border-radius:4px}.k-progressbar>.k-reset{list-style:none;margin:0;padding:0;position:absolute;left:-1px;top:-1px;width:100%;height:100%;border-radius:4px;white-space:nowrap}.k-progressbar-horizontal .k-item{display:inline-block;height:100%;border-style:solid;margin-left:-1px}.k-progressbar-horizontal .k-item.k-first{margin-left:0}.k-progressbar-horizontal .k-item.k-last{border-right-width:0}.k-progressbar-horizontal .k-item,.k-rtl .k-progressbar-horizontal.k-progressbar-reverse .k-item{border-width:1px 0 1px 1px}.k-progressbar-horizontal.k-progressbar-reverse .k-item,.k-rtl .k-progressbar-horizontal .k-item{border-width:1px 0 1px 1px}.k-progressbar-horizontal .k-first,.k-rtl .k-progressbar-horizontal .k-last,.k-rtl .k-progressbar-horizontal.k-progressbar-reverse .k-last{border-top-left-radius:4px;border-bottom-left-radius:4px;border-left-width:1px}.k-progressbar-horizontal .k-last,.k-rtl .k-progressbar-horizontal .k-first{border-top-right-radius:4px;border-bottom-right-radius:4px}.k-progressbar-horizontal.k-progressbar-reverse .k-last,.k-rtl .k-progressbar-horizontal .k-first{border-right-width:1px}.k-progressbar-horizontal .k-last.k-state-selected{border-right-width:1px}.k-progressbar-vertical .k-item{width:100%;border-style:solid;border-width:1px 1px 0 1px;margin-top:-1px}.k-progressbar-vertical .k-item.k-first{margin-top:0}.k-progressbar-vertical li.k-item.k-last{border-bottom-width:0}.k-progressbar-vertical .k-first{border-top-left-radius:4px;border-top-right-radius:4px}.k-progressbar-vertical .k-last{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom-width:1px}.k-progressbar-vertical.k-progressbar-reverse .k-item{border-width:0 1px 1px 1px}.k-progressbar-vertical.k-progressbar-reverse .k-first{border-top-width:1px}.k-progress-status-wrap{position:absolute;top:-1px;border:1px solid transparent;line-height:2em;width:100%;height:100%}.k-progress-status-wrap,.k-rtl .k-progressbar-horizontal.k-progressbar-reverse .k-progress-status-wrap{left:-1px;right:auto;text-align:right}.k-progressbar-horizontal.k-progressbar-reverse .k-progress-status-wrap,.k-rtl .k-progressbar-horizontal .k-progress-status-wrap{left:auto;right:-1px;text-align:left}.k-progressbar-vertical .k-progress-status-wrap{top:auto;bottom:-1px}.k-progressbar-vertical.k-progressbar-reverse .k-progress-status-wrap{bottom:auto;top:-1px}.k-progress-status{display:inline-block;padding:0 .5em;min-width:10px;white-space:nowrap}.k-progressbar-vertical.k-progressbar-reverse .k-progress-status{position:absolute;bottom:0;left:0}.k-progressbar-vertical .k-progress-status{-webkit-transform:rotate(-90deg) translateX(-100%);-ms-transform:rotate(-90deg) translateX(-100%);transform:rotate(-90deg) translateX(-100%);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.k-progressbar-vertical.k-progressbar-reverse .k-progress-status{-webkit-transform:rotate(90deg) translateX(-100%);-ms-transform:rotate(90deg) translateX(-100%);transform:rotate(90deg) translateX(-100%);-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.k-ie8 .k-progressbar-vertical .k-progress-status{-webkit-writing-mode:bt-lr;-ms-writing-mode:bt-lr;writing-mode:bt-lr;padding:.5em 0}div.k-slider{position:relative;border-width:0;background-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.k-slider-vertical{width:26px;height:200px}.k-slider-horizontal{display:inline-block;width:200px;height:26px}.k-slider-wrap{width:100%;height:100%}.k-grid .k-slider .k-button,.k-slider .k-button{position:absolute;top:0;width:24px;min-width:0;height:24px;margin:0;padding:0;outline:0}.k-slider .k-button .k-icon{margin-top:3px;vertical-align:top}.k-state-disabled .k-slider-wrap{filter:alpha(opacity=60);opacity:.6}.k-state-disabled .k-slider-wrap .k-slider-items{color:#333}.k-slider .k-button-decrease{left:0}.k-grid .k-slider-vertical .k-button-decrease,.k-slider-vertical .k-button-decrease{top:auto;bottom:0}.k-slider .k-button-increase{right:0}.k-slider .k-icon,.k-slider .k-tick,.k-slider-track{cursor:pointer}.k-slider-selection,.k-slider-track{position:absolute;margin:0;padding:0}.k-slider-horizontal .k-slider-selection,.k-slider-horizontal .k-slider-track{top:50%;left:0;height:8px;margin-top:-4px;background-repeat:repeat-x}.k-slider-horizontal .k-slider-buttons .k-slider-track{left:34px}.k-slider-vertical .k-slider-selection,.k-slider-vertical .k-slider-track{left:50%;bottom:0;width:8px;margin-left:-4px;background-repeat:repeat-y}.k-slider-vertical .k-slider-buttons .k-slider-track{bottom:34px}.k-draghandle{position:absolute;background-repeat:no-repeat;background-color:transparent;text-indent:-3333px;overflow:hidden;text-decoration:none;text-align:center;outline:0}.k-slider-horizontal .k-draghandle{top:-4px;width:13px;height:14px}.k-slider-vertical .k-draghandle{left:-4px;width:14px;height:13px}.k-slider-buttons .k-slider-items{margin-left:34px}.k-slider-horizontal .k-slider-items{height:100%}.k-slider-vertical .k-slider-items{padding-top:1px}.k-slider-vertical .k-slider-buttons .k-slider-items{padding-top:0}.k-slider-vertical .k-slider-buttons .k-slider-items{margin:0;padding-top:35px}.k-slider .k-tick{position:relative;margin:0;padding:0;background-color:transparent;background-repeat:no-repeat;background-position:center center}.k-slider-horizontal .k-tick{float:left;height:100%;text-align:center}.k-slider-horizontal .k-tick{background-position:center -92px}.k-slider-horizontal .k-slider-topleft .k-tick{background-position:center -122px}.k-slider-horizontal .k-slider-bottomright .k-tick{background-position:center -152px}.k-slider-horizontal .k-tick-large{background-position:center -2px}.k-slider-horizontal .k-slider-topleft .k-tick-large{background-position:center -32px}.k-slider-horizontal .k-slider-bottomright .k-tick-large{background-position:center -62px}.k-slider-vertical .k-tick{background-position:-92px center}.k-slider-vertical .k-slider-topleft .k-tick{background-position:-122px center}.k-slider-vertical .k-slider-bottomright .k-tick{background-position:-152px center}.k-slider-vertical .k-tick-large{background-position:-2px center}.k-slider-vertical .k-slider-topleft .k-tick-large{background-position:-32px center}.k-slider-vertical .k-slider-bottomright .k-tick-large{background-position:-62px center}.k-slider-horizontal .k-first{background-position:0 -92px}.k-slider-horizontal .k-tick-large.k-first{background-position:0 -2px}.k-slider-horizontal .k-slider-topleft .k-first{background-position:0 -122px}.k-slider-horizontal .k-slider-topleft .k-tick-large.k-first{background-position:0 -32px}.k-slider-horizontal .k-slider-bottomright .k-first{background-position:0 -152px}.k-slider-horizontal .k-slider-bottomright .k-tick-large.k-first{background-position:0 -62px}.k-slider-horizontal .k-last{background-position:100% -92px}.k-slider-horizontal .k-tick-large.k-last{background-position:100% -2px}.k-slider-horizontal .k-slider-topleft .k-last{background-position:100% -122px}.k-slider-horizontal .k-slider-topleft .k-tick-large.k-last{background-position:100% -32px}.k-slider-horizontal .k-slider-bottomright .k-last{background-position:100% -152px}.k-slider-horizontal .k-slider-bottomright .k-tick-large.k-last{background-position:100% -62px}.k-slider-vertical .k-first{background-position:-92px 100%}.k-slider-vertical .k-tick-large.k-first{background-position:-2px 100%}.k-slider-vertical .k-slider-topleft .k-first{background-position:-122px 100%}.k-slider-vertical .k-slider-topleft .k-tick-large.k-first{background-position:-32px 100%}.k-slider-vertical .k-slider-bottomright .k-first{background-position:-152px 100%}.k-slider-vertical .k-slider-bottomright .k-tick-large.k-first{background-position:-62px 100%}.k-slider-vertical .k-last{background-position:-92px 0}.k-slider-vertical .k-tick-large.k-last{background-position:-2px 0}.k-slider-vertical .k-slider-topleft .k-last{background-position:-122px 0}.k-slider-vertical .k-slider-topleft .k-tick-large.k-last{background-position:-32px 0}.k-slider-vertical .k-slider-bottomright .k-last{background-position:-152px 0}.k-slider-vertical .k-slider-bottomright .k-tick-large.k-last{background-position:-62px 0}.k-slider-vertical .k-tick{text-align:right}.k-slider-vertical .k-slider-topleft .k-tick{text-align:left}.k-slider .k-label{position:absolute;white-space:nowrap;font-size:.92em}.k-slider-horizontal .k-label{left:0;width:100%;line-height:1}.k-slider-horizontal .k-first .k-label{left:-50%}.k-slider-horizontal .k-last .k-label{left:auto;right:-50%}.k-slider-horizontal .k-label{bottom:-1.2em}.k-slider-horizontal .k-slider-topleft .k-label{top:-1.2em}.k-slider-vertical .k-label{left:120%;display:block;text-align:left}.k-slider-vertical .k-last .k-label{top:-.5em}.k-slider-vertical .k-first .k-label{bottom:-.5em}.k-slider-vertical .k-slider-topleft .k-label{left:auto;right:120%}.k-slider-tooltip{top:-4444px}.k-tooltip{position:absolute;z-index:12000;border-style:solid;border-width:0;padding:5px 5px 5px 6px;background-repeat:repeat-x;min-width:20px;text-align:center}.k-tooltip-button{text-align:right;height:0}.k-tooltip-content{height:100%}.k-tooltip-closable .k-tooltip-content{padding-right:20px}span.k-tooltip{position:static;display:inline-block;border-width:1px;padding:2px 5px 1px 6px}.k-invalid-msg{display:none}.k-callout{position:absolute;width:0;height:0;border-style:solid;border-width:6px;border-color:transparent}.k-callout-n{top:-12px;left:50%}.k-callout-w{top:50%;left:-12px}.k-callout-s{left:50%;bottom:-12px}.k-callout-e{top:50%;right:-12px}.k-slider-tooltip .k-callout-n,.k-slider-tooltip .k-callout-s{margin-left:-6px}.k-slider-tooltip .k-callout-e,.k-slider-tooltip .k-callout-w{margin-top:-6px}.k-tooltip-validation .k-warning{vertical-align:text-top;margin-right:3px}.k-tooltip-validation{z-index:9999}.k-toolbar{position:relative;display:block;vertical-align:middle;line-height:2.9em}.k-overflow-container .k-button .k-icon,.k-overflow-container .k-button .k-sprite,.k-toolbar .k-button .k-icon,.k-toolbar .k-button .k-sprite{vertical-align:middle;margin-top:-7px;margin-bottom:-5px}.k-toolbar .k-input{line-height:inherit;height:inherit;padding-top:2px;padding-bottom:2px}.k-toolbar .k-input:before{content:"\a0";display:inline-block;width:0}.k-ie .k-toolbar .k-input{height:1.65em}.k-toolbar .k-combobox .k-dropdown-wrap:before,.k-toolbar .k-numeric-wrap:before,.k-toolbar .k-picker-wrap:before{display:none}.k-overflow-container .k-sprite{margin-left:-4px}.k-toolbar-resizable{overflow:hidden;white-space:nowrap}.k-toolbar>.k-align-left{float:none}.k-toolbar>.k-align-right{float:right}.k-toolbar .k-button,.k-toolbar>*{display:inline-block;vertical-align:middle;line-height:1.72em}.k-toolbar .k-separator{border-width:0 0 0 1px;border-style:solid;width:1px;line-height:inherit}.k-toolbar .k-button-group{list-style-type:none}.k-toolbar .k-button-group>li{display:inline-block}.k-toolbar .k-button-group .k-button{margin:0 0 0 -1px;border-radius:0}.k-toolbar .k-button,.k-toolbar .k-button-group,.k-toolbar .k-separator,.k-toolbar .k-split-button,.k-toolbar .k-textbox,.k-toolbar .k-widget,.k-toolbar label{margin:0 .2em;line-height:1.72em;vertical-align:middle}.k-toolbar .k-split-button{padding-left:0}.k-toolbar .k-button-group .k-group-start,.k-toolbar .k-split-button .k-button{margin:0}.k-toolbar .k-split-button .k-split-button-arrow{margin:0 0 0 -1px}.k-toolbar .k-overflow-anchor{border-width:0 0 0 1px;border-style:solid;height:3em;width:3em;line-height:inherit;padding:0 .5em;margin:0;position:relative;float:right;border-radius:0}.k-overflow-container .k-item{float:none;border:0}.k-overflow-container .k-separator{border-width:0 0 1px;border-style:solid;height:1px;line-height:0;font-size:0;padding:0}.k-overflow-container .k-overflow-button,.k-split-container .k-button{text-align:left;display:block;background:0 0;border-color:transparent;white-space:nowrap}.k-split-container{margin-top:-1px}.k-overflow-container .k-button-group{padding:0}.k-overflow-container .k-button-group>li{display:block}.k-overflow-container .k-overflow-group{border-width:1px 0;border-style:solid;border-radius:0;padding:2px 0;margin:1px 0}.k-overflow-container .k-overflow-hidden{display:none}.k-overflow-container .k-overflow-group+.k-overflow-group,.k-overflow-container .k-separator+.k-overflow-group,.k-overflow-container .k-toolbar-first-visible{border-top:0;margin-top:0;padding-top:1px}.k-overflow-container .k-overflow-group+.k-separator{display:none}.k-overflow-container .k-toolbar-last-visible{border-bottom:0;margin-bottom:0;padding-bottom:1px}.k-splitter{position:relative;height:300px}.k-pane>.k-splitter{border-width:0;overflow:hidden}.k-splitter .k-pane{overflow:hidden}.k-splitter .k-scrollable{overflow:auto}.k-splitter .k-pane-loading{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.k-ghost-splitbar,.k-splitbar{position:absolute;border-style:solid;font-size:0;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.k-splitter .k-ghost-splitbar-horizontal,.k-splitter .k-splitbar-horizontal{top:0;width:5px;border-width:0 1px;background-repeat:repeat-y}.k-ghost-splitbar-vertical,.k-splitbar-vertical{left:0;height:5px;border-width:1px 0;background-repeat:repeat-x}.k-splitbar-draggable-horizontal{cursor:w-resize}.k-splitbar-draggable-vertical{cursor:n-resize}.k-splitbar .k-resize-handle{display:none}.k-restricted-size-horizontal,.k-restricted-size-vertical{background-color:red}.k-splitbar-horizontal .k-icon{position:absolute;top:50%;width:5px;height:20px;margin-top:-10px}.k-collapse-next,.k-collapse-prev,.k-expand-next,.k-expand-prev{cursor:pointer}.k-splitbar-horizontal .k-collapse-prev{margin-top:-31px}.k-splitbar-horizontal .k-collapse-next{margin-top:11px}.k-splitbar-static-horizontal{width:1px}.k-splitbar-static-vertical{height:1px}.k-splitbar-vertical .k-icon{position:absolute;left:50%;width:20px;height:5px;margin-left:-10px}.k-splitbar-vertical .k-collapse-prev{margin-left:-31px}.k-splitbar-vertical .k-collapse-next{margin-left:11px}.k-splitbar-draggable-horizontal .k-resize-handle,.k-splitbar-draggable-vertical .k-resize-handle{display:inline-block}.k-splitbar-horizontal .k-resize-handle{background-position:-165px -6px}.k-splitbar-horizontal-hover>.k-resize-handle{background-position:-181px -6px}.k-splitbar-horizontal .k-collapse-prev,.k-splitbar-horizontal .k-expand-next{background-position:-6px -174px}.k-splitbar-horizontal-hover>.k-collapse-prev,.k-splitbar-horizontal-hover>.k-expand-next{background-position:-22px -174px}.k-splitbar-horizontal .k-collapse-next,.k-splitbar-horizontal .k-expand-prev{background-position:-5px -142px}.k-splitbar-horizontal-hover>.k-collapse-next,.k-splitbar-horizontal-hover>.k-expand-prev{background-position:-21px -142px}.k-splitbar-vertical .k-resize-handle{background-position:-38px -309px}.k-splitbar-vertical-hover>.k-resize-handle{background-position:-70px -309px}.k-splitbar-vertical .k-collapse-prev,.k-splitbar-vertical .k-expand-next{background-position:2px -134px}.k-splitbar-vertical-hover>.k-collapse-prev,.k-splitbar-vertical-hover>.k-expand-next{background-position:-14px -134px}.k-splitbar-vertical .k-collapse-next,.k-splitbar-vertical .k-expand-prev{background-position:2px -165px}.k-splitbar-vertical-hover>.k-collapse-next,.k-splitbar-vertical-hover>.k-expand-prev{background-position:-14px -165px}.k-splitter-resizing{overflow:hidden}.k-virtual-wrap{position:relative}.k-virtual-wrap .k-list.k-virtual-list{height:auto}.k-virtual-content{overflow-y:scroll;-webkit-overflow-scrolling:touch;position:relative}.k-virtual-list>.k-virtual-content{position:absolute;top:0;width:100%;margin:0;padding:0;list-style-type:none}.k-virtual-option-label{width:100%;margin:0;padding:0;list-style-type:none}.k-virtual-wrap>.k-virtual-header{text-align:right}.k-popup .k-item.k-first{position:relative}.k-virtual-content>.k-virtual-list>.k-virtual-item{position:absolute;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;white-space:nowrap}.k-popup .k-list .k-item>.k-group,.k-popup>.k-group-header,.k-popup>.k-virtual-wrap>.k-group-header{text-transform:uppercase;font-size:.857em}.k-popup .k-list .k-item>.k-group{position:absolute;top:0;right:0;padding:0 .5em;line-height:1.8}.k-popup .k-state-hover>.k-group{right:-1px}.k-group-header+.k-list>.k-item.k-first,.k-static-header+.k-list>.k-item.k-first,.k-virtual-item.k-first{border-top-style:solid;border-top-width:1px;padding-top:0}.k-popup>.k-group-header,.k-popup>.k-virtual-wrap>.k-group-header{text-align:right}.k-fx-end .k-fx-current,.k-fx-end .k-fx-next{-webkit-transition:all 350ms ease-out;transition:all 350ms ease-out}.k-fx{position:relative}.k-fx .k-fx-current{z-index:0}.k-fx .k-fx-next{z-index:1}.k-fx-hidden,.k-fx-hidden *{visibility:hidden!important}.k-fx-reverse .k-fx-current{z-index:1}.k-fx-reverse .k-fx-next{z-index:0}.k-fx-zoom.k-fx-start .k-fx-next{-webkit-transform:scale(0)!important;-ms-transform:scale(0)!important;transform:scale(0)!important}.k-fx-zoom.k-fx-end .k-fx-next{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.k-fx-zoom.k-fx-reverse.k-fx-end .k-fx-next,.k-fx-zoom.k-fx-reverse.k-fx-start .k-fx-next{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.k-fx-zoom.k-fx-reverse.k-fx-start .k-fx-current{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.k-fx-zoom.k-fx-reverse.k-fx-end .k-fx-current{-webkit-transform:scale(0)!important;-ms-transform:scale(0)!important;transform:scale(0)!important}.k-fx-fade.k-fx-start .k-fx-next{will-change:opacity;opacity:0}.k-fx-fade.k-fx-end .k-fx-next{opacity:1}.k-fx-fade.k-fx-reverse.k-fx-start .k-fx-current{will-change:opacity;opacity:1}.k-fx-fade.k-fx-reverse.k-fx-end .k-fx-current{opacity:0}.k-fx-slide.k-fx-end .k-fx-current .km-content,.k-fx-slide.k-fx-end .k-fx-current .km-footer,.k-fx-slide.k-fx-end .k-fx-current .km-header,.k-fx-slide.k-fx-end .k-fx-next .km-content,.k-fx-slide.k-fx-end .k-fx-next .km-footer,.k-fx-slide.k-fx-end .k-fx-next .km-header{-webkit-transition:all 350ms ease-out;transition:all 350ms ease-out}.k-fx-slide.k-fx-start .k-fx-next .km-content{will-change:transform;-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-slide.k-fx-start .k-fx-next .km-footer,.k-fx-slide.k-fx-start .k-fx-next .km-header{will-change:opacity;opacity:0}.k-fx-slide.k-fx-end .k-fx-current .km-content{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-slide.k-fx-end .k-fx-next .km-footer,.k-fx-slide.k-fx-end .k-fx-next .km-header{opacity:1}.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-current .km-content{will-change:transform;-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-current .km-content{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-next .km-content{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-next .km-content{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-current .km-footer,.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-current .km-header{will-change:opacity;opacity:1}.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-next .km-footer,.k-fx-slide.k-fx-reverse.k-fx-start .k-fx-next .km-header{opacity:1}.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-current .km-footer,.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-current .km-header{opacity:0}.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-next .km-footer,.k-fx-slide.k-fx-reverse.k-fx-end .k-fx-next .km-header{opacity:1}.k-fx-slide.k-fx-right.k-fx-start .k-fx-next .km-content{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-slide.k-fx-right.k-fx-end .k-fx-current .km-content{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-start .k-fx-current .km-content{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-end .k-fx-current .km-content{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-start .k-fx-next .km-content{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-slide.k-fx-right.k-fx-reverse.k-fx-end .k-fx-next .km-content{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-start .k-fx-next{will-change:transform;-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-end .k-fx-current{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-current{will-change:transform;-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-current{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-next{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-next{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-right.k-fx-start .k-fx-next{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-right.k-fx-end .k-fx-current{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-current{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-current{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-next{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-next{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-start .k-fx-next{will-change:transform;-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-end .k-fx-current{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-current{will-change:transform;-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-current{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-reverse.k-fx-start .k-fx-next{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-reverse.k-fx-end .k-fx-next{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-right.k-fx-start .k-fx-next{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-right.k-fx-end .k-fx-current{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-current{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-current{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-start .k-fx-next{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx-tile.k-fx-right.k-fx-reverse.k-fx-end .k-fx-next{-webkit-transform:translatex(0);-ms-transform:translatex(0);transform:translatex(0)}.k-fx.k-fx-overlay.k-fx-left.k-fx-start .k-fx-next,.k-fx.k-fx-overlay.k-fx-start .k-fx-next{will-change:transform;-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx.k-fx-overlay.k-fx-right.k-fx-start .k-fx-next{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx.k-fx-overlay.k-fx-up.k-fx-start .k-fx-next{-webkit-transform:translatey(100%);-ms-transform:translatey(100%);transform:translatey(100%)}.k-fx.k-fx-overlay.k-fx-down.k-fx-start .k-fx-next{-webkit-transform:translatey(-100%);-ms-transform:translatey(-100%);transform:translatey(-100%)}.k-fx.k-fx-overlay.k-fx-reverse.k-fx-start .k-fx-next{-webkit-transform:none;-ms-transform:none;transform:none}.k-fx.k-fx-overlay.k-fx-reverse.k-fx-start .k-fx-current{will-change:transform;-webkit-transform:none;-ms-transform:none;transform:none}.k-fx.k-fx-overlay.k-fx-reverse.k-fx-end .k-fx-current,.k-fx.k-fx-overlay.k-fx-reverse.k-fx-left.k-fx-end .k-fx-current{-webkit-transform:translatex(100%);-ms-transform:translatex(100%);transform:translatex(100%)}.k-fx.k-fx-overlay.k-fx-reverse.k-fx-right.k-fx-end .k-fx-current{-webkit-transform:translatex(-100%);-ms-transform:translatex(-100%);transform:translatex(-100%)}.k-fx.k-fx-overlay.k-fx-reverse.k-fx-up.k-fx-end .k-fx-current{-webkit-transform:translatey(100%);-ms-transform:translatey(100%);transform:translatey(100%)}.k-fx.k-fx-overlay.k-fx-reverse.k-fx-down.k-fx-end .k-fx-current{-webkit-transform:translatey(-100%);-ms-transform:translatey(-100%);transform:translatey(-100%)}
/*# sourceMappingURL=kendo.common.core.min.css.map */
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/.k-theme-test-class,.ktb-theme-id-office365{opacity:0}.ktb-var-accent{color:#cde6f7}.ktb-var-base{color:#0072c6}.ktb-var-background{color:#fff}.ktb-var-border-radius{border-radius:0}.ktb-var-normal-background{color:#fff}.ktb-var-normal-gradient{background-image:none}.ktb-var-normal-text-color{color:#333}.ktb-var-hover-background{color:#f4f4f4}.ktb-var-hover-gradient{background-image:none}.ktb-var-hover-text-color{color:#000}.ktb-var-selected-background{color:#cde6f7}.ktb-var-selected-gradient{background-image:none}.ktb-var-selected-text-color{color:#333}.ktb-var-error{color:#ffcdd2}.ktb-var-warning{color:#fff19d}.ktb-var-success{color:#c8e6c9}.ktb-var-info{color:#bbdefb}.ktb-var-series-a{color:#0072c6}.ktb-var-series-b{color:#5db2ff}.ktb-var-series-c{color:#008a17}.ktb-var-series-d{color:#82ba00}.ktb-var-series-e{color:#ff8f32}.ktb-var-series-f{color:#ac193d}.k-grid-norecords-template{background-color:#fff;border:1px solid #c9c9c9}.k-in,.k-item,.k-window-action{border-color:transparent}.k-block,.k-widget{background-color:#fff}.k-autocomplete,.k-block,.k-button-group .k-tool,.k-calendar th,.k-colorpicker .k-i-arrow-s,.k-content,.k-dropdown-wrap,.k-dropzone-active,.k-editable-area,.k-filter-row>th,.k-footer-template td,.k-grid td,.k-grid td.k-state-selected,.k-grid-content-locked,.k-grid-footer,.k-grid-footer-locked,.k-grid-footer-wrap,.k-grid-header,.k-grid-header-locked,.k-grid-header-wrap,.k-group,.k-group-footer td,.k-grouping-header,.k-grouping-header .k-group-indicator,.k-header,.k-input,.k-pager-refresh,.k-pager-wrap,.k-pager-wrap .k-link,.k-panel>.k-item>.k-link,.k-panelbar .k-content,.k-panelbar .k-panel,.k-panelbar>.k-item>.k-link,.k-separator,.k-slider-track,.k-splitbar,.k-state-default,.k-state-default .k-select,.k-state-disabled,.k-textbox,.k-textbox>input,.k-tiles,.k-toolbar,.k-tooltip,.k-treemap-tile,.k-upload-files,.k-widget{border-color:#c9c9c9}.k-calendar th,.k-dropzone-hovered,.k-footer-template td,.k-grid-footer,.k-group,.k-group-footer td,.k-grouping-header,.k-pager-wrap,.k-toolbar,.k-widget .k-status,.k-widget.k-popup{background-color:#fff}.k-grouping-row td,.k-resize-handle-inner,td.k-group-cell{background-color:#fff}.k-list-container{border-color:#c9c9c9;background-color:#fff}.k-content,.k-editable-area,.k-panel>li.k-item,.k-panelbar>li.k-item,.k-tiles{background-color:#fff}.k-alt,.k-pivot-layout>tbody>tr:first-child>td:first-child,.k-resource.k-alt,.k-separator{background-color:#fff}.k-header.k-alt,.k-pivot-rowheaders .k-alt .k-alt{background-color:#ebebeb}.k-autocomplete.k-header,.k-dropdown-wrap.k-state-active,.k-numeric-wrap.k-state-active,.k-picker-wrap.k-state-active,.k-textbox{border-color:#c9c9c9;background-color:#0072c6}.k-autocomplete .k-input,.k-autocomplete.k-state-focused .k-input,.k-dropdown-wrap .k-input,.k-dropdown-wrap.k-state-focused .k-input,.k-numeric-wrap.k-state-focused .k-input,.k-picker-wrap.k-state-focused .k-input,.k-textbox>input{border-color:#c9c9c9}.k-textbox>input,input.k-textbox,input.k-textbox:hover,textarea.k-textbox,textarea.k-textbox:hover{background:0 0}.k-input,.k-multiselect-wrap,.k-textbox>input,input.k-textbox,input.k-textbox:hover,textarea.k-textbox,textarea.k-textbox:hover{background-color:#fff;color:#333}.k-input[readonly]{background-color:#fff;color:#333}.k-block,.k-content,.k-dropdown .k-input,.k-popup,.k-toolbar,.k-widget{color:#333}.k-inverse{color:#fff}.k-block{color:#333}.k-link:link,.k-link:visited,.k-nav-current.k-state-hover .k-link{color:#0072c6}.k-panelbar>li>.k-link,.k-tabstrip-items .k-link{color:#333}.k-grid-header .k-header>.k-link,.k-header,.k-treemap-title{color:#333}.k-autocomplete,.k-button,.k-draghandle,.k-dropdown-wrap,.k-grid-header,.k-grouping-header,.k-header,.k-numeric-wrap,.k-pager-wrap,.k-panelbar .k-tabstrip-items .k-item,.k-picker-wrap,.k-progressbar,.k-state-highlight,.k-tabstrip-items .k-item,.k-textbox,.k-toolbar,.km-pane-wrapper>.km-pane>.km-view>.km-content{background-image:none;background-position:50% 50%;background-color:#fff}.k-widget.k-tooltip{background-image:none}.k-block,.k-button,.k-draghandle,.k-grid-header,.k-grouping-header,.k-header,.k-pager-wrap,.k-toolbar,.k-treemap-tile,html .km-pane-wrapper .k-header{background-color:#fff}.k-column-menu .k-state-active .k-sprite,.k-column-menu .k-state-hover .k-sprite,.k-icon:hover,.k-pager-numbers .k-current-page .k-link:hover:after,.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view.k-state-hover>.k-link:after,.k-state-focused .k-icon,.k-state-hover .k-icon,.k-state-selected .k-icon{opacity:1}.k-column-menu .k-sprite,.k-icon,.k-pager-numbers .k-current-page .k-link:after,.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link:after,.k-state-disabled .k-icon{opacity:.6}.k-mobile-list .k-check:checked,.k-mobile-list .k-edit-field [type=checkbox]:checked,.k-mobile-list .k-edit-field [type=radio]:checked{opacity:.6}.k-tool{border-color:transparent}.k-column-menu .k-sprite,.k-drop-hint,.k-gantt-views>.k-current-view>.k-link:after,.k-grid-mobile .k-resize-handle-inner:after,.k-grid-mobile .k-resize-handle-inner:before,.k-grouping-dropclue,.k-icon,.k-pager-numbers .k-current-page .k-link:after,.k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link:after,.k-tool-icon{background-image:url(Office365/sprite.png);border-color:transparent}.k-mobile-list .k-check:checked,.k-mobile-list .k-edit-field [type=checkbox]:checked,.k-mobile-list .k-edit-field [type=radio]:checked{background-image:url(Office365/sprite.png);border-color:transparent}.k-loading,.k-state-hover .k-loading{background-image:url(Office365/loading.gif);background-position:50% 50%}.k-loading-image{background-image:url(Office365/loading-image.gif)}.k-loading-color{background-color:#fff}.k-button{color:#333;border-color:#f4f4f4;background-color:#f4f4f4}.k-draghandle{border-color:#0072c6;background-color:#0072c6;-webkit-box-shadow:none;box-shadow:none}.k-draghandle:hover{border-color:#0072c6;background-color:#0072c6;-webkit-box-shadow:none;box-shadow:none}.k-scheduler{color:#333;background-color:#fff}.k-scheduler-layout{color:#333}.k-scheduler-datecolumn,.k-scheduler-groupcolumn{background-color:#fff;color:#333}.k-scheduler-header th,.k-scheduler-header-wrap,.k-scheduler-table td,.k-scheduler-times,.k-scheduler-times th,.k-scheduler-times tr{border-color:#c9c9c9}.k-nonwork-hour{background-color:#fff}.k-gantt .k-nonwork-hour{background-color:rgba(0,0,0,.02)}.k-gantt .k-header.k-nonwork-hour{background-color:rgba(0,0,0,.2)}.k-scheduler-table .k-today,.k-today>.k-scheduler-datecolumn,.k-today>.k-scheduler-groupcolumn{background-color:#fff}.k-scheduler-now-arrow{border-left-color:#dbdbdb}.k-scheduler-now-line{background-color:#dbdbdb}.k-event,.k-task-complete{border-color:#5fb2f6;background:#5fb2f6 0 -257px none repeat-x;color:#333}.k-event-inverse{color:#333}.k-scheduler-content .k-event.k-state-selected{background-position:0 0;-webkit-box-shadow:0 0 0 2px #333,inset 4px 0 0 0 rgba(255,255,255,.5);box-shadow:0 0 0 2px #333,inset 4px 0 0 0 rgba(255,255,255,.5)}.k-event .k-resize-handle:after,.k-task-single .k-resize-handle:after{background-color:#fff}.k-scheduler-marquee:after,.k-scheduler-marquee:before{border-color:#cde6f7}.k-panelbar .k-content,.k-panelbar .k-item,.k-panelbar .k-panel{background-color:#fff;color:#333;border-color:#c9c9c9}.k-panelbar>li>.k-link{color:#333}.k-panelbar>.k-item>.k-link{border-color:#c9c9c9}.k-panel>li.k-item{background-color:#fff}.k-active-filter,.k-state-active,.k-state-active:hover,.k-tabstrip .k-state-active{background-color:#fff;border-color:#0072c6;color:#333}.k-fieldselector .k-list-container{background-color:#fff}.k-button.k-state-focused,.k-button:focus{border-color:#0072c6}.k-button.k-state-hover,.k-button:hover{color:#333;border-color:#eaeaea;background-color:#eaeaea}.k-button.k-state-active,.k-button:active{color:#333;background-color:#0072c6;border-color:#0072c6}.k-button.k-state-active:hover,.k-button:active:hover{color:#fff;border-color:#005b9d;background-color:#005b9d}.k-button:focus:not(.k-state-disabled):not([disabled]){-webkit-box-shadow:none;box-shadow:none}.k-button:focus:active:not(.k-state-disabled):not([disabled]){-webkit-box-shadow:none;box-shadow:none}.k-menu .k-state-hover>.k-state-active{background-color:transparent}.k-state-highlight{background:#fff;color:#333}.k-grouping-row .k-state-focused,.k-state-focused{border-color:#0072c6}.k-calendar .k-link{color:#333}.k-calendar .k-footer{padding:0}.k-calendar .k-footer .k-nav-today{color:#333;text-decoration:none;background-color:#fff}.k-calendar .k-footer .k-nav-today.k-state-hover,.k-calendar .k-footer .k-nav-today:hover{background-color:#fff;text-decoration:underline}.k-calendar .k-footer .k-nav-today:active{background-color:#fff}.k-calendar .k-link.k-nav-fast{color:#333}.k-calendar .k-nav-fast.k-state-hover{text-decoration:none;background-color:#f4f4f4;color:#000}.k-calendar .k-link.k-state-hover,.k-window-titlebar .k-link{border-radius:0}.k-calendar .k-footer .k-link{border-radius:0}.k-calendar th{background-color:#fff}.k-calendar-container.k-group{border-color:#c9c9c9}.k-draghandle.k-state-selected:hover,.k-ghost-splitbar-horizontal,.k-ghost-splitbar-vertical,.k-list>.k-state-highlight,.k-list>.k-state-selected,.k-marquee-color,.k-panel>.k-state-selected,.k-scheduler .k-scheduler-toolbar .k-state-selected,.k-scheduler .k-today.k-state-selected,.k-state-selected,.k-state-selected:link,.k-state-selected:visited{color:#333;background-color:#cde6f7;border-color:#cde6f7}.k-group-header+.k-list>.k-item.k-first,.k-static-header+.k-list>.k-item.k-first,.k-virtual-item.k-first{border-top-color:#8f8f8f}.k-group-header+div>.k-list>.k-item.k-first:before{border-top-color:#8f8f8f}.k-popup>.k-group-header,.k-popup>.k-virtual-wrap>.k-group-header{background:#8f8f8f;color:#333}.k-popup .k-list .k-item>.k-group{background:#8f8f8f;color:#fff;border-bottom-left-radius:0}.k-marquee-text{color:#333}.k-button.k-state-focused,.k-list>.k-state-focused,.k-state-focused,td.k-state-focused{-webkit-box-shadow:none;box-shadow:none}.k-listview>.k-state-focused,.k-listview>.k-state-focused.k-state-selected{-webkit-box-shadow:inset 0 0 0 1px #0072c6;box-shadow:inset 0 0 0 1px #0072c6}.k-list>.k-state-focused.k-state-selected,.k-state-focused.k-state-selected,td.k-state-focused.k-state-selected{-webkit-box-shadow:none;box-shadow:none}.k-ie8 .k-button.k-state-focused,.k-ie8 .k-button:focus,.k-ie8 .k-grid-header th.k-state-focused,.k-ie8 .k-listview>.k-state-focused,.k-ie8 .k-menu li.k-state-focused,.k-ie8 .k-panelbar span.k-state-focused,.k-ie8 .k-tool.k-state-hover,.k-ie8 td.k-state-focused,.k-list-optionlabel.k-state-selected.k-state-focused,.k-list>.k-state-selected.k-state-focused{-webkit-box-shadow:none;box-shadow:none}.k-panelbar>li.k-state-default>.k-link.k-state-selected,.k-panelbar>li>.k-state-selected,.k-state-selected>.k-link{color:#333}.k-dropdown .k-state-focused,.k-filebrowser-dropzone,.k-list>.k-state-hover,.k-mobile-list .k-edit-label.k-check:active,.k-mobile-list .k-item>.k-label:active,.k-mobile-list .k-item>.k-link:active,.k-mobile-list .k-recur-view .k-check:active,.k-pager-wrap .k-link:hover,.k-scheduler .k-scheduler-toolbar ul li.k-state-hover,.k-splitbar-horizontal-hover:hover,.k-splitbar-vertical-hover:hover,.k-state-hover,.k-state-hover:hover{color:#000;background-color:#f4f4f4;border-color:#8f8f8f}.k-mobile-list .k-scheduler-timezones .k-edit-field:nth-child(2):active{color:#000;background-color:#f4f4f4;border-color:#8f8f8f}.k-ie8 .k-window-titlebar .k-state-hover{border-color:#8f8f8f}.k-state-focused>.k-select,.k-state-hover>.k-select{border-color:#8f8f8f}.k-button.k-state-focused,.k-button.k-state-hover,.k-button:focus,.k-button:hover,.k-draghandle:hover,.k-other-month.k-state-hover .k-link,.k-pager-wrap .k-link:hover,.k-state-hover,.k-state-hover:hover,.k-textbox:hover,div.k-filebrowser-dropzone em{background-image:none}.k-pager-wrap{background-color:#fff;color:#333}.k-autocomplete.k-state-active,.k-button:active,.k-dropdown-wrap.k-state-active,.k-numeric-wrap.k-state-active,.k-panelbar>.k-item>.k-state-focused,.k-picker-wrap.k-state-active,.k-state-active,.k-state-active:hover,.k-state-active>.k-link{background-image:none}.k-button.k-state-active,.k-button:active,.k-draghandle.k-state-selected:hover,.k-state-selected{background-image:none}.k-button.k-state-active,.k-button:active,.k-draghandle.k-state-selected:hover{background-position:50% 50%}.k-tool-icon{background-image:url(Office365/sprite.png)}.k-other-month.k-state-hover .k-link,.k-state-hover>.k-link,div.k-filebrowser-dropzone em{color:#000}.k-autocomplete.k-state-focused,.k-autocomplete.k-state-hover,.k-dropdown-wrap.k-state-focused,.k-dropdown-wrap.k-state-hover,.k-numeric-wrap.k-state-focused,.k-numeric-wrap.k-state-hover,.k-picker-wrap.k-state-focused,.k-picker-wrap.k-state-hover{background-color:#eaeaea;background-image:none;background-position:50% 50%;border-color:#0072c6}.k-dropdown .k-state-focused .k-input,.km-pane-wrapper .k-mobile-list input:not([type=checkbox]):not([type=radio]),.km-pane-wrapper .k-mobile-list textarea,.km-pane-wrapper .km-pane .k-mobile-list select:not([multiple]){color:#333}.km-pane-wrapper .km-pane .k-mobile-list.k-filter-menu .k-space-right{background:#fff;border-color:#c9c9c9}.km-pane-wrapper .km-pane .k-mobile-list.k-filter-menu .k-space-right>input{background-color:#fff;border-color:#c9c9c9}.km-pane-wrapper .km-pane .k-mobile-list.k-filter-menu .k-space-right>input:focus{border-color:#0072c6}.k-dropdown .k-state-hover .k-input{color:#000}.k-state-error{border-color:#dbdbdb;background-color:#ffd7db;color:#6b6b6b}.k-state-disabled{opacity:.7}.k-ie8 .k-state-disabled{filter:alpha(opacity=70)}.k-loading-mask.k-state-selected,.k-tile-empty.k-state-selected{border-width:0;background-image:none;background-color:transparent}.k-dropzone .k-upload-status,.k-dropzone em,.k-other-month,.k-other-month .k-link,.k-slider .k-draghandle,.k-state-disabled,.k-state-disabled .k-button,.k-state-disabled .k-link,.k-tile-empty strong{color:#aaa}.k-progressbar-indeterminate{background:url(Office365/indeterminate.gif)}.k-progressbar-indeterminate .k-progress-status-wrap,.k-progressbar-indeterminate .k-state-selected{display:none}.k-slider-track{background-color:#c9c9c9}.k-slider-selection{background-color:#cde6f7}.k-slider-horizontal .k-tick{background-image:url(Office365/slider-h.gif)}.k-slider-vertical .k-tick{background-image:url(Office365/slider-v.gif)}.k-widget.k-tooltip{border-color:#c9c9c9;background-color:#fff;color:#333}.k-widget.k-tooltip-validation{border-color:#fff19d;background-color:#fff19d;color:#6a5b00}.input-append .k-tooltip-validation,.input-prepend .k-tooltip-validation{font-size:12px;position:relative;top:3px}.k-callout-n{border-bottom-color:#c9c9c9}.k-callout-w{border-right-color:#c9c9c9}.k-callout-s{border-top-color:#c9c9c9}.k-callout-e{border-left-color:#c9c9c9}.k-tooltip-validation .k-callout-n{border-bottom-color:#fff19d}.k-tooltip-validation .k-callout-w{border-right-color:#fff19d}.k-tooltip-validation .k-callout-s{border-top-color:#fff19d}.k-tooltip-validation .k-callout-e{border-left-color:#fff19d}.k-splitbar{background-color:#f4f4f4}.k-restricted-size-horizontal,.k-restricted-size-vertical{background-color:#6b6b6b}.k-file{background-color:#fff;border-color:#c9c9c9}.k-file-progress{color:#333}.k-file-progress .k-progress{background-color:#bbdefb}.k-file-success{color:#333}.k-file-success .k-progress{background-color:#c8e6c9}.k-file-error{color:#333}.k-file-error .k-progress{background-color:#ffcdd2}.k-tile{border-color:#fff}.k-textbox:hover,.k-tiles li.k-state-hover{border-color:#8f8f8f}.k-tiles li.k-state-selected{border-color:#cde6f7}.k-filebrowser .k-tile .k-file,.k-filebrowser .k-tile .k-folder{background-image:url(Office365/imagebrowser.png);-webkit-background-size:auto auto;background-size:auto auto}.k-leaf,.k-leaf.k-state-hover:hover{color:#fff}.k-leaf.k-inverse,.k-leaf.k-inverse.k-state-hover:hover{color:#000}.k-button,.k-widget{-webkit-box-shadow:none;box-shadow:none}.k-slider,.k-treeview,.k-upload{-webkit-box-shadow:none;box-shadow:none}.k-state-hover{-webkit-box-shadow:none;box-shadow:none}.k-autocomplete.k-state-focused,.k-dropdown-wrap.k-state-focused,.k-numeric-wrap.k-state-focused,.k-picker-wrap.k-state-focused,.k-textbox:focus{-webkit-box-shadow:none;box-shadow:none}.k-state-selected{-webkit-box-shadow:none;box-shadow:none}.k-state-active{-webkit-box-shadow:none;box-shadow:none}.k-grid td.k-state-selected.k-state-focused{background-color:#daedf9}.k-autocomplete.k-state-border-down,.k-autocomplete.k-state-border-up,.k-datepicker-calendar,.k-dropdown-wrap.k-state-active,.k-filebrowser .k-image,.k-grid .k-filter-options,.k-menu .k-menu-group,.k-multiselect.k-state-focused,.k-picker-wrap.k-state-active,.k-popup,.k-time-popup,.k-tooltip{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.18);box-shadow:0 2px 2px 0 rgba(0,0,0,.18)}.k-treemap-tile.k-state-hover{-webkit-box-shadow:inset 0 0 0 3px #c9c9c9;box-shadow:inset 0 0 0 3px #c9c9c9}.k-window{border-color:rgba(0,0,0,.18);-webkit-box-shadow:1px 1px 7px 1px rgba(128,128,128,.18);box-shadow:1px 1px 7px 1px rgba(128,128,128,.18);background-color:#fff}.k-window.k-state-focused{border-color:rgba(0,0,0,.18);-webkit-box-shadow:1px 1px 7px 1px rgba(0,0,0,.18);box-shadow:1px 1px 7px 1px rgba(0,0,0,.18)}.k-window-maximized .k-window-content,.k-window-maximized .k-window-titlebar,.k-window.k-window-maximized{border-radius:0}.k-shadow{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.18);box-shadow:0 1px 2px 0 rgba(0,0,0,.18)}.k-inset{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.18);box-shadow:inset 0 1px 1px rgba(0,0,0,.18)}.k-editor-inline ::-moz-selection{background-color:#cde6f7;text-shadow:none;color:#fff}.k-editor-inline ::selection{background-color:#cde6f7;text-shadow:none;color:#fff}.k-editor-inline ::-moz-selection{background-color:#cde6f7;text-shadow:none;color:#fff}.k-widget.k-notification.k-notification-info{background-color:#bbdefb;color:#4d4d4d;border-color:#bbdefb}.k-widget.k-notification.k-notification-success{background-color:#c8e6c9;color:#4d4d4d;border-color:#c8e6c9}.k-widget.k-notification.k-notification-warning{background-color:#fff19d;color:#4d4d4d;border-color:#fff19d}.k-widget.k-notification.k-notification-error{background-color:#ffcdd2;color:#4d4d4d;border-color:#ffcdd2}.k-gantt .k-treelist{background:#fff}.k-gantt .k-treelist .k-alt{background-color:#e6e6e6}.k-gantt .k-treelist .k-alt.k-state-selected,.k-gantt .k-treelist .k-alt.k-state-selected>td,.k-gantt .k-treelist .k-state-selected,.k-gantt .k-treelist .k-state-selected td{background-color:#cde6f7}.k-gantt .k-treelist .k-state-selected:hover,.k-gantt .k-treelist .k-state-selected:hover td{background-color:#d7e4ed}.k-task-dot:after{background-color:#333;border-color:#333}.k-task-dot:hover:after{background-color:#fff}.k-task-summary{border-color:#d1d1d1;background:#d1d1d1}.k-task-milestone,.k-task-summary-complete{border-color:#333;background:#333}.k-state-selected.k-task-summary{border-color:#000;background:#000}.k-state-selected .k-task-summary-complete,.k-state-selected.k-task-milestone{border-color:#cde6f7;background:#cde6f7}.k-task-single{background-color:#81c2f8;border-color:#5fb2f6;color:#333}.k-state-selected.k-task-single{border-color:#cde6f7}.k-line{background-color:#333;color:#333}.k-state-selected.k-line{background-color:#cde6f7;color:#cde6f7}.k-resource{background-color:#fff}.k-i-kpi-decrease,.k-i-kpi-denied,.k-i-kpi-equal,.k-i-kpi-hold,.k-i-kpi-increase,.k-i-kpi-open{background-image:url(Office365/sprite_kpi.png)}.k-autocomplete,.k-block,.k-button,.k-calendar .k-link,.k-calendar td,.k-calendar-container,.k-colorpicker,.k-combobox,.k-datepicker,.k-datetimepicker,.k-drag-clue,.k-dropdown,.k-dropdown-wrap,.k-editor-inline,.k-grid .k-filter-options,.k-grouping-header .k-group-indicator,.k-inline-block,.k-list-container,.k-multiselect,.k-notification,.k-numeric-wrap,.k-numerictextbox,.k-picker-wrap,.k-slider-selection,.k-slider-track,.k-textbox,.k-tile,.k-timepicker,.k-tooltip,.k-touch-scrollbar,.k-treeview .k-in,.k-upload,.k-window,.k-window-action,.k-window-titleless .k-window-content{border-radius:0}.k-tool{text-align:center;vertical-align:middle}.k-tool.k-group-start,.k-toolbar .k-button-group .k-group-start,.k-toolbar .k-split-button .k-button{border-radius:0}.k-rtl .k-tool.k-group-start,.k-rtl .k-toolbar .k-button-group .k-group-start,.k-rtl .k-toolbar .k-split-button .k-button{border-radius:0}.k-tool.k-group-end,.k-toolbar .k-button-group .k-group-end,.k-toolbar .k-split-button .k-split-button-arrow{border-radius:0}.k-rtl .k-tool.k-group-end,.k-rtl .k-toolbar .k-button-group .k-group-end,.k-rtl .k-toolbar .k-split-button .k-split-button-arrow{border-radius:0}.k-group-start.k-group-end.k-tool{border-radius:0}.k-autocomplete.k-state-border-up,.k-calendar-container.k-state-border-up,.k-dropdown-wrap.k-state-border-up,.k-filter-menu,.k-list-container.k-state-border-up,.k-multiselect.k-state-border-up,.k-numeric-wrap.k-state-border-up,.k-picker-wrap.k-state-border-up,.k-window-content{border-radius:0}.k-autocomplete.k-state-border-up .k-input,.k-dropdown-wrap.k-state-border-up .k-input,.k-numeric-wrap.k-state-border-up .k-input,.k-picker-wrap.k-state-border-up .k-input,.k-picker-wrap.k-state-border-up .k-selected-color{border-radius:0}.k-multiselect.k-state-border-up .k-multiselect-wrap{border-radius:0}.k-autocomplete.k-state-border-down,.k-block>.k-header,.k-calendar-container.k-state-border-down,.k-dropdown-wrap.k-state-border-down,.k-list-container.k-state-border-down,.k-multiselect.k-state-border-down,.k-numeric-wrap.k-state-border-down,.k-panelbar .k-tabstrip-items .k-item,.k-picker-wrap.k-state-border-down,.k-tabstrip-items .k-item,.k-tabstrip-items .k-link,.k-window-titlebar{border-radius:0}.k-split-button.k-state-border-down>.k-button{border-radius:0}.k-split-button.k-state-border-up>.k-button{border-radius:0}.k-split-button.k-state-border-down>.k-split-button-arrow{border-radius:0}.k-split-button.k-state-border-up>.k-split-button-arrow{border-radius:0}.k-dropdown-wrap .k-input,.k-numeric-wrap .k-input,.k-picker-wrap .k-input{border-radius:0}.k-rtl .k-dropdown-wrap .k-input,.k-rtl .k-numeric-wrap .k-input,.k-rtl .k-picker-wrap .k-input{border-radius:0}.k-numeric-wrap .k-link{border-radius:0}.k-numeric-wrap .k-link+.k-link{border-radius:0}.k-colorpicker .k-selected-color{border-radius:0}.k-rtl .k-colorpicker .k-selected-color{border-radius:0}.k-autocomplete.k-state-border-down .k-input{border-radius:0}.k-dropdown-wrap.k-state-border-down .k-input,.k-numeric-wrap.k-state-border-down .k-input,.k-picker-wrap.k-state-border-down .k-input,.k-picker-wrap.k-state-border-down .k-selected-color{border-radius:0}.k-numeric-wrap .k-link.k-state-selected{background-color:#0072c6}.k-multiselect.k-state-border-down .k-multiselect-wrap{border-radius:0}.k-datetimepicker .k-select+.k-select,.k-dropdown-wrap .k-select,.k-list-container.k-state-border-right,.k-numeric-wrap .k-select,.k-picker-wrap .k-select{border-radius:0}.k-rtl .k-datetimepicker .k-select+.k-select,.k-rtl .k-dropdown-wrap .k-select,.k-rtl .k-list-container.k-state-border-right,.k-rtl .k-numeric-wrap .k-select,.k-rtl .k-picker-wrap .k-select{border-radius:0}.k-numeric-wrap.k-expand-padding .k-input{border-radius:0}.k-autocomplete .k-input,.k-multiselect-wrap,.k-textbox>input{border-radius:0}.k-dropzone,.k-fieldselector .k-list .k-item,.k-list .k-state-focused,.k-list .k-state-highlight,.k-list .k-state-hover,.k-list .k-state-selected,.k-list-optionlabel{border-radius:0}.k-grid .k-slider .k-button,.k-slider .k-button{border-radius:0}.k-draghandle{border-radius:0}.k-scheduler-toolbar>ul li:first-child,.k-scheduler-toolbar>ul li:first-child .k-link,.k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li,.k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li .k-link{border-radius:0}.k-rtl .k-scheduler-toolbar>ul li:first-child,.k-rtl .k-scheduler-toolbar>ul li:first-child .k-link,.k-rtl .k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li,.k-rtl .k-scheduler-toolbar>ul.k-scheduler-views li:first-child+li .k-link,.km-view.k-popup-edit-form .k-scheduler-toolbar>ul li:last-child,.km-view.k-popup-edit-form .k-scheduler-toolbar>ul li:last-child .k-link{border-radius:0}.k-edit-field>.k-scheduler-navigation,.k-scheduler-phone .k-scheduler-toolbar>ul li.k-nav-today,.k-scheduler-phone .k-scheduler-toolbar>ul li.k-nav-today .k-link{border-radius:0}.k-scheduler-toolbar .k-nav-next,.k-scheduler-toolbar .k-nav-next .k-link,.k-scheduler-toolbar ul+ul li:last-child,.k-scheduler-toolbar ul+ul li:last-child .k-link{border-top-right-radius:0;border-bottom-right-radius:0}.k-rtl .k-scheduler-toolbar .k-nav-next,.k-rtl .k-scheduler-toolbar .k-nav-next .k-link,.k-rtl .k-scheduler-toolbar ul+ul li:last-child,.k-rtl .k-scheduler-toolbar ul+ul li:last-child .k-link{border-radius:0}.k-scheduler div.k-scheduler-footer .k-link,.k-scheduler div.k-scheduler-footer ul li{border-radius:0}.k-event,.k-event .k-link,.k-more-events,.k-task-complete,.k-task-single{border-radius:0}.k-scheduler-mobile .k-event{border-radius:-1}.k-grid-mobile .k-column-active+th.k-header{border-left-color:#333}.k-ie .km-pane-wrapper .k-content,.k-ie .km-pane-wrapper .k-group,.k-ie .km-pane-wrapper .k-header,.k-ie .km-pane-wrapper .k-popup-edit-form .k-edit-field .k-button,.k-ie .km-pane-wrapper .k-widget,.km-pane-wrapper .k-mobile-list .k-edit-field,.km-pane-wrapper .k-mobile-list .k-edit-label,.km-pane-wrapper .k-mobile-list .k-item,html .km-pane-wrapper .km-widget{color:#333}@media screen and (-ms-high-contrast:active) and (-ms-high-contrast:none){div.km-pane-wrapper a{color:#333}}.km-pane-wrapper .k-mobile-list .k-edit-field,.km-pane-wrapper .k-mobile-list .k-item,.km-pane-wrapper .k-mobile-list .k-recur-view>.k-edit-field .k-check{background-color:#fff;border-top:1px solid #c9c9c9}.km-pane-wrapper .k-mobile-list .k-edit-field textarea{outline-width:0}.km-pane-wrapper .k-mobile-list .k-item.k-state-selected{background-color:#cde6f7;border-top-color:#cde6f7}.km-pane-wrapper .k-mobile-list .k-recur-view>.k-edit-field .k-check:first-child{border-top-color:transparent}.km-pane-wrapper .k-mobile-list .k-item:last-child{-webkit-box-shadow:inset 0 -1px 0 #c9c9c9;box-shadow:inset 0 -1px 0 #c9c9c9}.km-pane-wrapper #recurrence .km-scroll-container>.k-edit-label:first-child,.km-pane-wrapper .k-mobile-list .k-recur-view>.k-edit-label:nth-child(3),.km-pane-wrapper .k-mobile-list>ul>li>.k-link{color:#7d7d7d}.km-pane-wrapper .k-mobile-list>ul>li>.k-link{border-bottom:1px solid #c9c9c9}.km-pane-wrapper .k-mobile-list .k-edit-field{-webkit-box-shadow:0 1px 1px #c9c9c9;box-shadow:0 1px 1px #c9c9c9}.km-actionsheet .k-grid-delete,.km-actionsheet .k-scheduler-delete,.km-pane-wrapper .k-filter-menu .k-button[type=reset],.km-pane-wrapper .k-scheduler-delete{color:#fff;border-color:#dbdbdb;background-color:red;background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,.3)),to(rgba(255,255,255,.15)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.3),rgba(255,255,255,.15));background-image:linear-gradient(to bottom,rgba(255,255,255,.3),rgba(255,255,255,.15))}.km-actionsheet .k-grid-delete:active,.km-actionsheet .k-scheduler-delete:active,.km-pane-wrapper .k-filter-menu .k-button[type=reset]:active,.km-pane-wrapper .k-scheduler-delete:active{background-color:#900}.k-autocomplete.k-state-default,.k-dropdown-wrap.k-state-default,.k-numeric-wrap.k-state-default,.k-picker-wrap.k-state-default{background-image:none;background-position:50% 50%;background-color:#fff;border-color:#bababa}.k-autocomplete.k-state-hover,.k-dropdown-wrap.k-state-hover,.k-numeric-wrap.k-state-hover,.k-picker-wrap.k-state-hover{background-color:#eaeaea;background-image:none;background-position:50% 50%;border-color:#8b8b8b}.k-multiselect.k-header{border-color:#bababa}.k-multiselect.k-header.k-state-hover{border-color:#8b8b8b}.k-autocomplete.k-state-focused,.k-dropdown-wrap.k-state-focused,.k-multiselect.k-header.k-state-focused,.k-numeric-wrap.k-state-focused,.k-picker-wrap.k-state-focused{background-color:#eaeaea;background-image:none;background-position:50% 50%;border-color:#0072c6;-webkit-box-shadow:none;box-shadow:none}.k-list-container{color:#333}.k-dropdown .k-input,.k-dropdown .k-state-focused .k-input,.k-menu .k-popup{color:#333}.k-state-default>.k-select{border-color:#bababa}.k-state-hover>.k-select{border-color:#8b8b8b}.k-state-focused>.k-select{border-color:#0072c6}.k-tabstrip:focus{-webkit-box-shadow:none;box-shadow:none}.k-panelbar>li.k-state-default>.k-link,.k-tabstrip-items .k-state-default .k-link{color:#333}.k-tabstrip-items .k-state-active .k-link,.k-tabstrip-items .k-state-hover .k-link{color:#0072c6}.k-panelbar>li.k-state-default>.k-link.k-state-hover,.k-panelbar>li.k-state-hover>.k-link{color:#000}.k-panelbar>li>.k-state-focused.k-state-hover{background:#f4f4f4;-webkit-box-shadow:none;box-shadow:none}.k-tabstrip-items .k-state-default{border-color:transparent}.k-tabstrip-items .k-state-hover{border-color:#8f8f8f}.k-panelbar .k-tabstrip-items .k-state-active,.k-tabstrip-items .k-state-active{background-color:#fff;background-image:none;border-color:#0072c6}.k-tabstrip .k-content.k-state-active{background-color:#fff;color:#333}.k-menu .k-item,.k-menu.k-header{border-color:#fff}.k-column-menu,.k-column-menu .k-item,.k-overflow-container .k-overflow-group{border-color:#c9c9c9}.k-overflow-container .k-overflow-group{-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff,0 1px 0 #fff}.k-overflow-container .k-overflow-group+.k-overflow-group,.k-toolbar-first-visible.k-overflow-group{-webkit-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff}.k-toolbar-last-visible.k-overflow-group{-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.k-column-menu .k-separator{border-color:#c9c9c9;background-color:transparent}.k-menu .k-group{border-color:#c9c9c9}.k-menu .k-link.k-state-active{background-color:#0072c6;color:#fff}.k-menu .k-state-hover .k-state-active{background-color:#005b9d}.k-grid-filter.k-state-active{background-color:#fff}.k-grid-filter.k-state-active .k-icon{opacity:1}.k-grid-footer td,.k-group-footer td,.k-grouping-row td{color:#333;border-color:#c9c9c9;font-weight:700}.k-grouping-header{color:#333}.k-gantt-toolbar .k-state-default,.k-grid .k-grouping-header,.k-grid-header,.k-grid-header-wrap,.k-grouping-header .k-group-indicator,.k-header,.k-pager-wrap,.k-pager-wrap .k-link,.k-pager-wrap .k-textbox{border-color:#c9c9c9}.k-overflow-container .k-primary,.k-primary{color:#fff;border-color:#0072c6;background-image:none;background-position:50% 50%;background-color:#0072c6;-webkit-box-shadow:none;box-shadow:none}.k-primary.k-state-focused,.k-primary:focus{color:#fff;border-color:#00467a;background-image:none;-webkit-box-shadow:none;box-shadow:none}.k-primary:hover{color:#fff;border-color:#005b9d;background-image:none;background-color:#005b9d;-webkit-box-shadow:none;box-shadow:none}.k-primary:focus:active:not(.k-state-disabled):not([disabled]),.k-primary:focus:not(.k-state-disabled):not([disabled]){-webkit-box-shadow:none;box-shadow:none}.k-primary:active{color:#fff;border-color:#004c84;background-image:none;background-color:#004c84;-webkit-box-shadow:none;box-shadow:none}.k-primary.k-state-disabled,.k-primary.k-state-disabled:active,.k-primary.k-state-disabled:hover,.k-state-disabled .k-primary,.k-state-disabled .k-primary:active,.k-state-disabled .k-primary:hover{color:#7d7d7d;border-color:#e5e5e5;background-color:#e5e5e5;background-image:none;-webkit-box-shadow:none;box-shadow:none}.k-pager-numbers .k-link,.k-treeview .k-in{border-color:transparent}.k-grid .k-hierarchy-cell .k-icon,.k-scheduler-table .k-icon,.k-treeview .k-icon{background-color:transparent;border-radius:0}.k-scheduler-table .k-state-hover .k-icon{background-color:transparent}.k-button:focus,.k-split-button:focus{outline:0}.k-split-button:focus{-webkit-box-shadow:0 0 0 1px #0072c6;box-shadow:0 0 0 1px #0072c6}.k-split-button:focus>.k-button{background:0 0;border-color:transparent}.k-split-button:focus>.k-button.k-split-button-arrow{border-left-color:#0072c6}.k-editor .k-tool:focus{outline:0;border-color:#0072c6;-webkit-box-shadow:none;box-shadow:none}.k-checkbox-label:before{border-color:#666;background:#fff;border-radius:1px}.k-checkbox-label:hover:before,.k-checkbox:checked+.k-checkbox-label:hover:before{border-color:#212121;-webkit-box-shadow:none;box-shadow:none}.k-checkbox:checked+.k-checkbox-label:before{background-color:#fff;border-color:#666;color:#333}.k-checkbox-label:active:before{-webkit-box-shadow:none;box-shadow:none;border-color:#0072c6}.k-checkbox:checked+.k-checkbox-label:active:before{-webkit-box-shadow:none;box-shadow:none;border-color:#0072c6}.k-checkbox:disabled+.k-checkbox-label{color:#aaa}.k-checkbox:disabled+.k-checkbox-label:hover:before{-webkit-box-shadow:none;box-shadow:none}.k-checkbox:checked:disabled+.k-checkbox-label:active:before,.k-checkbox:checked:disabled+.k-checkbox-label:before,.k-checkbox:checked:disabled+.k-checkbox-label:hover:before,.k-checkbox:disabled+.k-checkbox-label:before{color:#aaa;background:#fff;border-color:#aaa;border-radius:1px}.k-checkbox:focus+.k-checkbox-label:before{border-color:#0072c6;-webkit-box-shadow:none;box-shadow:none}.k-checkbox:indeterminate+.k-checkbox-label:after{background-color:#666;background-image:none;border-color:#666;border-radius:0}.k-checkbox:indeterminate:hover+.k-checkbox-label:after{border-color:#212121;background-color:#212121}.k-radio-label:before{border-color:#666;border-radius:50%;background-color:#fff;border-width:1px}.k-radio-label:hover:before,.k-radio:checked+.k-radio-label:hover:before{border-color:#212121;-webkit-box-shadow:none;box-shadow:none}.k-radio:checked+.k-radio-label:after{background-color:#212121;border-radius:50%}.k-radio-label:active:before{border-color:#666;-webkit-box-shadow:none;box-shadow:none}.k-radio:checked+.k-radio-label:active:before{-webkit-box-shadow:none;box-shadow:none;border-color:#666}.k-radio:disabled+.k-radio-label{color:#aaa}.k-radio:disabled+.k-radio-label:active:before,.k-radio:disabled+.k-radio-label:before,.k-radio:disabled+.k-radio-label:hover:after,.k-radio:disabled+.k-radio-label:hover:before{background:#fff;border-color:#bfbfbf;-webkit-box-shadow:none;box-shadow:none}.k-radio:focus+.k-radio-label:before{border-color:#666;-webkit-box-shadow:none;box-shadow:none}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.k-callout,.k-column-menu .k-sprite,.k-drop-hint,.k-grouping-dropclue,.k-icon:not(.k-loading),.k-mobile-list .k-check:checked,.k-mobile-list .k-edit-field [type=checkbox]:checked,.k-mobile-list .k-edit-field [type=radio]:checked,.k-state-active .k-tool-icon,.k-state-active.k-state-hover .k-tool-icon,.k-state-hover .k-tool-icon,.k-state-selected .k-tool-icon,.k-state-selected.k-state-hover .k-tool-icon,.k-tool-icon{background-image:url('data:image/png;base64,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');-webkit-background-size:340px 336px;background-size:340px 336px}.k-dropdown-wrap .k-input,.k-numeric-wrap .k-input,.k-picker-wrap .k-input{border-radius:0}.k-i-kpi-decrease,.k-i-kpi-denied,.k-i-kpi-equal,.k-i-kpi-hold,.k-i-kpi-increase,.k-i-kpi-open{background-image:url(Office365/sprite_kpi_2x.png);-webkit-background-size:96px 16px;background-size:96px 16px}}@media screen and (-ms-high-contrast:active){.k-editor-toolbar-wrap .k-button-group .k-tool:focus,.k-editor-toolbar-wrap .k-dropdown-wrap.k-state-focused{border-color:#fff}}@media only screen and (max-width:1024px){.k-ff .k-pager-numbers .k-current-page .k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ie11 .k-pager-numbers .k-current-page .k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-safari .k-pager-numbers .k-current-page .k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-webkit .k-pager-numbers .k-current-page .k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view{background-image:none;background-position:50% 50%;background-color:#fff;border-color:#c9c9c9}.k-ff .k-pager-numbers .k-current-page .k-link,.k-ie11 .k-pager-numbers .k-current-page .k-link,.k-safari .k-pager-numbers .k-current-page .k-link,.k-webkit .k-pager-numbers .k-current-page .k-link{border-color:#c9c9c9}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view{border-radius:0}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li{border-radius:0}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view{border-radius:0}.k-ff .k-scheduler-toolbar>ul li:first-child,.k-ff .k-scheduler-toolbar>ul li:first-child .k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-ie11 .k-scheduler-toolbar>ul li:first-child,.k-ie11 .k-scheduler-toolbar>ul li:first-child .k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-safari .k-scheduler-toolbar>ul li:first-child,.k-safari .k-scheduler-toolbar>ul li:first-child .k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-webkit .k-scheduler-toolbar>ul li:first-child,.k-webkit .k-scheduler-toolbar>ul li:first-child .k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li .k-link{border-radius:0}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link{border-radius:0}.k-ff .k-pager-numbers .k-current-page .k-link:hover,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-ie11 .k-pager-numbers .k-current-page .k-link:hover,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-safari .k-pager-numbers .k-current-page .k-link:hover,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-webkit .k-pager-numbers .k-current-page .k-link:hover,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover{border-color:#8f8f8f;background-image:none;background-color:#f4f4f4}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link{color:#333;min-width:75px}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link{color:#000}.k-ff .k-pager-numbers .k-current-page .k-link:after,.k-ff .k-scheduler-views>li.k-state-selected>.k-link:after,.k-ie11 .k-pager-numbers .k-current-page .k-link:after,.k-ie11 .k-scheduler-views>li.k-state-selected>.k-link:after,.k-safari .k-pager-numbers .k-current-page .k-link:after,.k-safari .k-scheduler-views>li.k-state-selected>.k-link:after,.k-webkit .k-pager-numbers .k-current-page .k-link:after,.k-webkit .k-scheduler-views>li.k-state-selected>.k-link:after{display:block;content:"";position:absolute;top:50%;margin-top:-.5em;right:.333em;width:1.333em;height:1.333em}.k-ff .k-pager-numbers.k-state-expanded,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ie11 .k-pager-numbers.k-state-expanded,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-safari .k-pager-numbers.k-state-expanded,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-webkit .k-pager-numbers.k-state-expanded,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded{border-width:1px 1px 0 1px;border-style:solid;border-color:#c9c9c9;background-color:#fff;border-radius:0;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.18);box-shadow:0 2px 2px 0 rgba(0,0,0,.18)}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded{border-width:1px;background-image:none;border-radius:0}.k-ff .k-pager-numbers .k-link,.k-ff .k-pager-numbers .k-state-selected,.k-ie11 .k-pager-numbers .k-link,.k-ie11 .k-pager-numbers .k-state-selected,.k-safari .k-pager-numbers .k-link,.k-safari .k-pager-numbers .k-state-selected,.k-webkit .k-pager-numbers .k-link,.k-webkit .k-pager-numbers .k-state-selected{border-radius:0}.k-ff .k-widget.k-grid .k-pager-nav+.k-pager-numbers,.k-ie11 .k-widget.k-grid .k-pager-nav+.k-pager-numbers,.k-safari .k-widget.k-grid .k-pager-nav+.k-pager-numbers,.k-webkit .k-widget.k-grid .k-pager-nav+.k-pager-numbers{position:absolute}}.k-button:hover .k-icon,.k-button:hover .k-tool-icon,.k-field-actions .k-icon,.k-gantt-toolbar .k-icon,.k-grid-toolbar .k-button:hover>.k-i-excel,.k-grid-toolbar .k-button:hover>.k-i-pdf,.k-grid-toolbar .k-i-excel,.k-grid-toolbar .k-i-pdf,.k-grid-toolbar .k-icon,.k-grouping-header .k-button-icon:hover>.k-icon.k-group-delete,.k-grouping-header .k-group-delete,.k-grouping-header .k-link:hover>.k-icon.k-si-arrow-n,.k-grouping-header .k-link:hover>.k-icon.k-si-arrow-s,.k-grouping-header .k-si-arrow-n,.k-grouping-header .k-si-arrow-s,.k-notification .k-icon,.k-pivot-configurator-settings .k-icon:hover,.k-scheduler-content .k-icon,.k-scheduler-footer .k-icon,.k-scheduler-toolbar .k-icon,.k-splitbar.k-splitbar-horizontal-hover .k-icon,.k-splitbar.k-splitbar-vertical-hover .k-icon,.k-state-focused .k-tool-icon,.k-state-hover .k-tool-icon,.k-state-selected .k-tool-icon,.k-textbox:hover>.k-icon,.k-tool-icon:hover,div.k-splitbar.k-state-focused .k-icon{opacity:.8}.k-button.k-state-disabled .k-icon,.k-state-disabled .k-icon{opacity:.3}.k-button.k-state-active,.k-button:active{color:#fff}.k-button.k-state-active:hover,.k-button:active:hover{color:#fff;border-color:#0072c6;background-color:#0072c6}.k-button.k-state-focused,.k-button:focus{background-color:#eaeaea}.k-button.k-state-focused:hover,.k-button:focus:hover{border-color:#0072c6}.k-primary.k-grid-update{color:#fff}.k-primary.k-state-active:hover,.k-primary.k-state-focused,.k-primary.k-state-focused:hover,.k-primary:active,.k-primary:active:hover,.k-primary:focus,.k-primary:focus:hover{background-color:#005b9d;border-color:#00467a}.k-button.k-state-disabled,.k-button.k-state-disabled:active,.k-button.k-state-disabled:hover,.k-button[disabled],.k-state-disabled .k-button,.k-state-disabled .k-button:active,.k-state-disabled .k-button:hover{color:#aaa;border-color:#f4f4f4;background-color:#f4f4f4;background-image:none}.k-primary.k-state-disabled,.k-primary.k-state-disabled:active,.k-primary.k-state-disabled:hover,.k-state-disabled .k-primary,.k-state-disabled .k-primary:active,.k-state-disabled .k-primary:hover{color:#7d7d7d;background-color:#e5e5e5}.k-combobox .k-select,.k-numerictextbox .k-select,.k-picker-wrap .k-select{border-color:#fff}.k-autocomplete.k-state-focused,.k-dropdown-wrap.k-state-focused,.k-multiselect.k-header.k-state-focused,.k-numeric-wrap.k-state-focused,.k-picker-wrap.k-state-focused{background-color:#fff}.k-autocomplete.k-state-disabled,.k-dropdown-wrap.k-state-disabled,.k-multiselect.k-state-disabled,.k-numeric-wrap.k-state-disabled,.k-picker-wrap.k-state-disabled,.k-state-disabled .k-picker-wrap,.k-textbox.k-state-disabled{border-color:#e5e5e5}.k-autocomplete.k-state-border-down{border-bottom-width:1px;border-bottom-style:solid;padding-bottom:0}input.k-textbox:focus{border-color:#0072c6}.k-multiselect.k-header.k-state-focused .k-button,.k-multiselect.k-header.k-state-hover .k-button{background-color:#eaeaea}.k-multiselect .k-button.k-state-hover,.k-multiselect .k-button:hover{color:#333;border-color:#eaeaea;background-color:#eaeaea}.k-multiselect.k-header.k-state-focused .k-button{border-color:#0072c6}.k-multiselect.k-state-focused.k-state-border-down .k-button,.k-multiselect.k-state-focused.k-state-border-up .k-button{color:#fff;background-color:#0072c6;border-color:#0072c6}.k-dropdown-wrap.k-state-default.k-state-active,.k-picker-wrap.k-state-default.k-state-active{background-color:#0072c6;border-color:#0072c6}.k-dropdown-wrap.k-state-default.k-state-active .k-select,.k-picker-wrap.k-state-default.k-state-active .k-select{border-color:#0072c6}.k-dropdown .k-state-default.k-state-active .k-input,.k-state-selected .k-progress-status{color:#fff}.k-list>.k-state-hover{border-color:#f4f4f4}.k-list>.k-state-selected{background-color:#cde6f7;border-color:#cde6f7}.k-popup{-webkit-box-shadow:0 0 5px 2px rgba(0,0,0,.18);box-shadow:0 0 5px 2px rgba(0,0,0,.18)}.k-calendar .k-state-focused,.k-calendar .k-state-selected.k-state-focused{-webkit-box-shadow:inset 0 0 0 1px #0072c6;box-shadow:inset 0 0 0 1px #0072c6}.k-calendar .k-state-selected{background-color:#cde6f7}.k-calendar .k-state-selected.k-state-hover,.k-calendar td:active{background-color:#c2dbec}.k-calendar .k-nav-fast.k-state-hover,.k-calendar .k-nav-next.k-state-hover,.k-calendar .k-nav-prev.k-state-hover{background-color:#fff}.k-calendar .k-today{background-color:#0072c6}.k-calendar .k-today .k-link{color:#fff}.k-calendar .k-today.k-state-hover{background-color:#005b9d}.k-calendar .k-today.k-state-focused,.k-calendar .k-today.k-state-selected:active,.k-calendar .k-today:active{-webkit-box-shadow:inset 0 0 0 1px #00467a;box-shadow:inset 0 0 0 1px #00467a}.k-calendar .k-footer .k-nav-today{color:#0072c6}.k-calendar .k-footer{border-color:#c9c9c9}.k-popup.k-context-menu.k-group .k-state-hover{color:#0072c6;background-color:#fff}.k-splitbar{border-color:#f4f4f4}.k-splitbar-horizontal-hover:hover,.k-splitbar-vertical-hover:hover{background-color:#eaeaea;border-color:#eaeaea}.k-splitbar.k-state-focused{background-color:#0072c6;border-color:#0072c6}.k-marquee-color{background-color:#0072c6}.k-grid .k-state-selected,.k-grid td.k-state-selected.k-state-focused{background-color:#cde6f7}.k-gantt .k-treelist tr:hover,.k-grid tr:hover{background-color:#f4f4f4}.k-pivot-rowheaders .k-grid tr:hover{background:0 0}.k-grid td.k-state-selected:hover,.k-grid tr.k-state-selected:hover{background-color:#d7e4ed}.k-gantt .k-header.k-nonwork-hour,.k-gantt .k-treelist .k-alt{background-color:#fff}.k-grid td.k-state-focused,.k-grid-header th.k-state-focused{-webkit-box-shadow:inset 0 0 0 1px #0072c6;box-shadow:inset 0 0 0 1px #0072c6}.k-grid .k-grouping-header,.k-grid td,.k-grid-header-wrap,.k-header.k-grid-toolbar{border-color:transparent}.k-grid tr th{border-left-color:transparent}.k-pivot .k-grid-header th.k-header,.k-pivot-layout>tbody>tr:first-child>td:first-child{border-color:#c9c9c9}.k-group-footer td{border-top-color:#c9c9c9}.k-grouping-header,.k-pager-info{color:#aaa}.k-grouping-header .k-group-indicator{background-color:#f4f4f4;border-color:#f4f4f4}.k-grouping-header .k-group-indicator .k-link{color:#333}.k-pager-numbers .k-link,.k-pager-numbers .k-link:hover,.k-pager-numbers .k-state-selected,.k-pager-wrap>.k-link{background:0 0;border-radius:0}.k-pager-numbers .k-link:hover,.k-pager-wrap>.k-link,.k-pager-wrap>.k-link.k-state-disabled:hover,.k-pager-wrap>.k-link:hover{border-radius:0;border-color:transparent;background:0 0}.k-pager-numbers .k-link{border-color:transparent;color:#333}.k-pager-numbers .k-state-selected{color:#0072c6;border-color:#0072c6}.k-progressbar{background-color:#e5e5e5;border-color:#e5e5e5}.k-progressbar .k-state-default{border-color:#e5e5e5 #fff #e5e5e5}.k-progressbar .k-state-selected{background-color:#0072c6;border-color:#0072c6}.k-progressbar.k-progressbar-vertical .k-state-selected{border-color:#0072c6}.k-toolbar .k-toggle-button{background-color:#fff;border-color:#fff}.k-toolbar .k-toggle-button:hover{background-color:#f4f4f4;border-color:#f4f4f4}.k-toolbar .k-toggle-button.k-state-active,.k-toolbar .k-toggle-button:active,.k-toolbar .k-toggle-button:active:hover{background-color:#cde6f7;border-color:#cde6f7}.k-toolbar .k-toggle-button.k-state-active,.k-toolbar .k-toggle-button.k-state-active:hover,.k-toolbar .k-toggle-button:active,.k-toolbar .k-toggle-button:active:hover{color:#333}.k-toolbar .k-toggle-button.k-state-disabled,.k-toolbar .k-toggle-button.k-state-disabled:active,.k-toolbar .k-toggle-button.k-state-disabled:active:hover{color:#aaa;border-color:#f4f4f4;background-color:#f4f4f4;background-image:none}.k-toolbar .k-overflow-anchor{background-color:#fff;border-color:#c9c9c9}.k-toolbar .k-overflow-anchor:hover{background-color:#eaeaea;border-color:#eaeaea}.k-toolbar .k-overflow-anchor.k-state-active{border-color:#eaeaea}.k-toolbar .k-overflow-anchor.k-state-border-down,.k-toolbar .k-overflow-anchor.k-state-border-up{background-color:#0072c6;border-color:#0072c6}.k-tabstrip.k-header{background-color:#f4f4f4}.k-tabstrip .k-item{background-color:#f4f4f4;border-color:#f4f4f4}.k-tabstrip .k-item.k-state-active{background-color:#fff;border-color:#fff}.k-tabstrip .k-content{border-color:transparent}.k-slider-track{background-color:#bababa}.k-slider-selection{background-color:#0072c6}.k-draghandle{background-color:#0072c6;border-color:#0072c6}.k-draghandle.k-state-selected,.k-draghandle.k-state-selected:hover,.k-draghandle:hover{background-color:#005b9d;border-color:#005b9d}.k-flatcolorpicker .k-hsv-rectangle,.k-flatcolorpicker .k-selected-color input.k-color-value{border-color:#c9c9c9}.k-flatcolorpicker .k-hue-slider .k-draghandle,.k-flatcolorpicker .k-hue-slider .k-draghandle:focus,.k-flatcolorpicker .k-hue-slider .k-draghandle:hover,.k-flatcolorpicker .k-transparency-slider .k-draghandle,.k-flatcolorpicker .k-transparency-slider .k-draghandle:focus,.k-flatcolorpicker .k-transparency-slider .k-draghandle:hover{background-color:#666;border-color:#666}.k-flatcolorpicker .k-slider-horizontal .k-slider-track{-webkit-box-shadow:none;box-shadow:none}.k-treeview .k-state-selected{color:#0072c6;background-color:#fff}.k-gantt-toolbar .k-link,.k-scheduler-toolbar .k-link{color:#333}.k-gantt-toolbar .k-state-selected .k-link,.k-scheduler-toolbar .k-state-selected .k-link{color:#0072c6}.k-gantt-toolbar .k-nav-current .k-link,.k-scheduler-toolbar .k-nav-current .k-link{color:#0072c6}.k-gantt .k-gantt-toolbar ul li,.k-gantt .k-gantt-toolbar ul li.k-state-hover,.k-gantt .k-gantt-toolbar ul li.k-state-selected,.k-scheduler .k-scheduler-toolbar ul li,.k-scheduler .k-scheduler-toolbar ul li.k-state-hover,.k-scheduler .k-scheduler-toolbar ul li.k-state-selected{background-color:#fff;border-color:transparent}.k-fieldselector .k-item.k-header{border-color:#f4f4f4;background-color:#f4f4f4}.k-fieldselector .k-item.k-header.k-state-hover{border-color:#eaeaea;background-color:#eaeaea}.k-scheduler-footer ul li{border-color:transparent}.k-scheduler .k-event-inverse,.k-scheduler .k-event-template{color:#fff}.k-scheduler .k-nonwork-hour{background-color:#e3f1fb}.k-scheduler-content .k-event{-webkit-box-shadow:inset 4px 0 0 0 rgba(255,255,255,.5);box-shadow:inset 4px 0 0 0 rgba(255,255,255,.5)}.k-scheduler-header th,.k-scheduler-header-wrap,.k-scheduler-table td,.k-scheduler-times,.k-scheduler-times th,.k-scheduler-times tr{border-left-color:transparent;border-right-color:transparent}.k-gantt .k-gantt-timeline tr:first-child th{border-color:#c9c9c9}.k-gantt .k-treelist .k-alt{background-color:#fff}.k-panelbar .k-state-selected.k-state-hover{background-color:#cde6f7}.k-panelbar>li.k-state-default>.k-link.k-state-selected,.k-panelbar>li>.k-state-focused.k-state-hover,.k-panelbar>li>.k-state-selected,.k-panelbar>li>.k-state-selected.k-state-hover{color:#fff;background-color:#0072c6}.k-panelbar .k-content,.k-panelbar .k-item,.k-panelbar .k-panel,.k-panelbar.k-header,.k-panelbar>.k-item>.k-link{border-color:#fff}.k-window>.k-header{border-color:transparent}.k-window-titlebar .k-state-hover{background-color:transparent;border-color:transparent}.k-notification,.k-tooltip-validation{-webkit-box-shadow:none;box-shadow:none}.k-editor .k-tool{border-color:#fff}.k-editor .k-tool.k-state-selected{border-color:#cde6f7}.k-editor .k-tool.k-state-hover{border-color:#f4f4f4}.k-ff .k-nav-current>.k-link span+span,.k-ie11 .k-nav-current>.k-link span+span,.k-safari .k-nav-current>.k-link span+span,.k-webkit .k-nav-current>.k-link span+span{max-width:400px}@media only screen and (max-width:1420px){.k-ff .k-nav-current>.k-link span+span,.k-ie11 .k-nav-current>.k-link span+span,.k-safari .k-nav-current>.k-link span+span,.k-webkit .k-nav-current>.k-link span+span{max-width:200px}}@media only screen and (max-width:1024px){.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover{background-image:none;background-position:50% 50%;background-color:transparent;border-color:#c9c9c9;border-radius:0;text-align:right}.k-ff .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-ie11 .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-safari .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view,.k-webkit .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view{text-align:left}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li{border-radius:0}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded>li.k-current-view{border-radius:0}.k-ff .k-scheduler-toolbar>ul li:first-child,.k-ff .k-scheduler-toolbar>ul li:first-child .k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-ie11 .k-scheduler-toolbar>ul li:first-child,.k-ie11 .k-scheduler-toolbar>ul li:first-child .k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-safari .k-scheduler-toolbar>ul li:first-child,.k-safari .k-scheduler-toolbar>ul li:first-child .k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li .k-link,.k-webkit .k-scheduler-toolbar>ul li:first-child,.k-webkit .k-scheduler-toolbar>ul li:first-child .k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li .k-link{border-radius:0;padding-top:0}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li:last-child,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views li:last-child .k-link{border-radius:0}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover{border-color:#8f8f8f;background-image:none;background-color:#f4f4f4}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-ff .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view:hover>.k-link,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views>li.k-current-view>.k-link{color:#333;min-width:20px}.k-ff .k-scheduler-views>li.k-state-selected>.k-link:after,.k-ie11 .k-scheduler-views>li.k-state-selected>.k-link:after,.k-safari .k-scheduler-views>li.k-state-selected>.k-link:after,.k-webkit .k-scheduler-views>li.k-state-selected>.k-link:after{display:block;content:"";position:absolute;top:50%;margin-top:-.5em;right:.333em;width:16px;height:16px}.k-ff .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ie11 .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-safari .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-webkit .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded{border-width:1px 1px 0 1px;border-style:solid;border-color:#c9c9c9;background-color:#fff;border-radius:0;border-width:1px;background-image:none;-webkit-box-shadow:0 0 5px 2px rgba(0,0,0,.18);box-shadow:0 0 5px 2px rgba(0,0,0,.18)}.k-ff .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-ie11 .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-safari .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded,.k-webkit .k-rtl .k-scheduler-toolbar>ul.k-scheduler-views.k-state-expanded{text-align:left}.k-ff .k-pager-input,.k-ff .k-pager-wrap .k-pager-nav,.k-ie11 .k-pager-input,.k-ie11 .k-pager-wrap .k-pager-nav,.k-safari .k-pager-input,.k-safari .k-pager-wrap .k-pager-nav,.k-webkit .k-pager-input,.k-webkit .k-pager-wrap .k-pager-nav{display:inline-block;vertical-align:top}.k-ff .k-grid .k-pager-numbers,.k-ff .k-pager-numbers,.k-ie11 .k-grid .k-pager-numbers,.k-ie11 .k-pager-numbers,.k-safari .k-grid .k-pager-numbers,.k-safari .k-pager-numbers,.k-webkit .k-grid .k-pager-numbers,.k-webkit .k-pager-numbers{position:absolute;left:5em;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;overflow:visible;height:auto;-webkit-transform:translatey(-100%);-ms-transform:translatey(-100%);transform:translatey(-100%)}.k-ff .km-pane-wrapper .k-pager-numbers .k-link,.k-ff .km-pane-wrapper .k-pager-numbers .k-state-selected,.k-ff .km-pane-wrapper .k-pager-wrap>.k-link,.k-ff .km-pane-wrapper .k-pager-wrap>.k-pager-info,.k-ie11 .km-pane-wrapper .k-pager-numbers .k-link,.k-ie11 .km-pane-wrapper .k-pager-numbers .k-state-selected,.k-ie11 .km-pane-wrapper .k-pager-wrap>.k-link,.k-ie11 .km-pane-wrapper .k-pager-wrap>.k-pager-info,.k-safari .km-pane-wrapper .k-pager-numbers .k-link,.k-safari .km-pane-wrapper .k-pager-numbers .k-state-selected,.k-safari .km-pane-wrapper .k-pager-wrap>.k-link,.k-safari .km-pane-wrapper .k-pager-wrap>.k-pager-info,.k-webkit .km-pane-wrapper .k-pager-numbers .k-link,.k-webkit .km-pane-wrapper .k-pager-numbers .k-state-selected,.k-webkit .km-pane-wrapper .k-pager-wrap>.k-link,.k-webkit .km-pane-wrapper .k-pager-wrap>.k-pager-info{padding-top:0;padding-bottom:0}.k-ff .k-rtl .k-grid .k-pager-numbers,.k-ff .k-rtl .k-pager-numbers,.k-ie11 .k-rtl .k-grid .k-pager-numbers,.k-ie11 .k-rtl .k-pager-numbers,.k-safari .k-rtl .k-grid .k-pager-numbers,.k-safari .k-rtl .k-pager-numbers,.k-webkit .k-rtl .k-grid .k-pager-numbers,.k-webkit .k-rtl .k-pager-numbers{right:5em;width:5.15em}.k-ff .k-grid .k-pager-numbers .k-current-page,.k-ff .k-pager-numbers .k-current-page,.k-ie11 .k-grid .k-pager-numbers .k-current-page,.k-ie11 .k-pager-numbers .k-current-page,.k-safari .k-grid .k-pager-numbers .k-current-page,.k-safari .k-pager-numbers .k-current-page,.k-webkit .k-grid .k-pager-numbers .k-current-page,.k-webkit .k-pager-numbers .k-current-page{display:block;border-left:0;-webkit-transform:translatey(100%);-ms-transform:translatey(100%);transform:translatey(100%)}.k-ff .k-pager-numbers li:not(.k-current-page),.k-ie11 .k-pager-numbers li:not(.k-current-page),.k-safari .k-pager-numbers li:not(.k-current-page),.k-webkit .k-pager-numbers li:not(.k-current-page){display:none}.k-ff .k-pager-wrap .k-pager-numbers .k-current-page .k-link,.k-ie11 .k-pager-wrap .k-pager-numbers .k-current-page .k-link,.k-safari .k-pager-wrap .k-pager-numbers .k-current-page .k-link,.k-webkit .k-pager-wrap .k-pager-numbers .k-current-page .k-link{width:3.8em;line-height:1.429em;padding:.3em .429em .3em .8em;border-radius:0;background-image:none;background-position:50% 50%;background-color:#fff;border:1px solid #c9c9c9}.k-ff .k-pager-numbers .k-current-page:hover .k-link,.k-ie11 .k-pager-numbers .k-current-page:hover .k-link,.k-safari .k-pager-numbers .k-current-page:hover .k-link,.k-webkit .k-pager-numbers .k-current-page:hover .k-link{border-radius:0;background-color:#f4f4f4;border:1px solid #8f8f8f}.k-ff .k-pager-numbers .k-current-page .k-link:after,.k-ie11 .k-pager-numbers .k-current-page .k-link:after,.k-safari .k-pager-numbers .k-current-page .k-link:after,.k-webkit .k-pager-numbers .k-current-page .k-link:after{display:block;content:"";position:absolute;top:50%;margin-top:-.6em;right:.6em;width:16px;height:16px}.k-ff .k-pager-numbers+.k-link,.k-ie11 .k-pager-numbers+.k-link,.k-safari .k-pager-numbers+.k-link,.k-webkit .k-pager-numbers+.k-link{margin-left:5.7em}.k-ff .k-rtl .k-pager-numbers+.k-link,.k-ie11 .k-rtl .k-pager-numbers+.k-link,.k-safari .k-rtl .k-pager-numbers+.k-link,.k-webkit .k-rtl .k-pager-numbers+.k-link{margin-right:6em;margin-left:0}.k-ff .k-pager-wrap .k-pager-numbers .k-link,.k-ff .k-pager-wrap .k-pager-numbers .k-state-selected,.k-ie11 .k-pager-wrap .k-pager-numbers .k-link,.k-ie11 .k-pager-wrap .k-pager-numbers .k-state-selected,.k-safari .k-pager-wrap .k-pager-numbers .k-link,.k-safari .k-pager-wrap .k-pager-numbers .k-state-selected,.k-webkit .k-pager-wrap .k-pager-numbers .k-link,.k-webkit .k-pager-wrap .k-pager-numbers .k-state-selected{display:block;margin-top:0;margin-right:0;padding:1px 5px 1px .8em;text-align:left;border-width:0}.k-ff .k-pager-wrap .k-pager-numbers .k-state-selected,.k-ie11 .k-pager-wrap .k-pager-numbers .k-state-selected,.k-safari .k-pager-wrap .k-pager-numbers .k-state-selected,.k-webkit .k-pager-wrap .k-pager-numbers .k-state-selected{background-color:#cde6f7}.k-ff .k-pager-wrap .k-pager-numbers li:not(.k-current-page) .k-link:hover,.k-ie11 .k-pager-wrap .k-pager-numbers li:not(.k-current-page) .k-link:hover,.k-safari .k-pager-wrap .k-pager-numbers li:not(.k-current-page) .k-link:hover,.k-webkit .k-pager-wrap .k-pager-numbers li:not(.k-current-page) .k-link:hover{background-color:#f4f4f4}.k-ff .k-pager-numbers.k-state-expanded,.k-ie11 .k-pager-numbers.k-state-expanded,.k-safari .k-pager-numbers.k-state-expanded,.k-webkit .k-pager-numbers.k-state-expanded{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0;border-style:solid;border-color:#c9c9c9;background-color:#fff;border-radius:0;-webkit-box-shadow:0 0 5px 2px rgba(0,0,0,.18);box-shadow:0 0 5px 2px rgba(0,0,0,.18)}.k-ff .k-pager-numbers.k-state-expanded .k-current-page,.k-ie11 .k-pager-numbers.k-state-expanded .k-current-page,.k-safari .k-pager-numbers.k-state-expanded .k-current-page,.k-webkit .k-pager-numbers.k-state-expanded .k-current-page{margin:-2.2em -1px 0;padding:0}.k-ff .k-pager-numbers.k-state-expanded .k-current-page .k-link,.k-ie11 .k-pager-numbers.k-state-expanded .k-current-page .k-link,.k-safari .k-pager-numbers.k-state-expanded .k-current-page .k-link,.k-webkit .k-pager-numbers.k-state-expanded .k-current-page .k-link{border-radius:0;background-color:#0072c6;border:1px solid #0072c6;border-top-color:#c9c9c9;color:#fff}.k-ff .k-pager-numbers.k-state-expanded .k-current-page .k-link:after,.k-ie11 .k-pager-numbers.k-state-expanded .k-current-page .k-link:after,.k-safari .k-pager-numbers.k-state-expanded .k-current-page .k-link:after,.k-webkit .k-pager-numbers.k-state-expanded .k-current-page .k-link:after{background-position:0 0;opacity:1}.k-ff .k-pager-numbers.k-state-expanded li,.k-ie11 .k-pager-numbers.k-state-expanded li,.k-safari .k-pager-numbers.k-state-expanded li,.k-webkit .k-pager-numbers.k-state-expanded li{display:inline-block}}@media only screen and (max-width:640px){.k-ff .k-pager-info,.k-ie11 .k-pager-info,.k-safari .k-pager-info,.k-webkit .k-pager-info{display:none}}@media only screen and (max-width:480px){.k-ff .k-pager-sizes,.k-ie11 .k-pager-sizes,.k-safari .k-pager-sizes,.k-webkit .k-pager-sizes{display:none}.k-ff .k-scheduler-toolbar .k-i-calendar,.k-ie11 .k-scheduler-toolbar .k-i-calendar,.k-safari .k-scheduler-toolbar .k-i-calendar,.k-webkit .k-scheduler-toolbar .k-i-calendar{display:inline-block}}.k-chart .k-mask{background-color:#fff;filter:alpha(opacity=68);opacity:.68}.k-chart .k-selection{border-color:#e5e5e5}.k-chart .k-handle{width:15px;height:15px;background-color:#00b0ff;border-radius:10px}.k-chart .k-leftHandle{left:-8px}.k-chart .k-rightHandle{right:-8px}.k-chart .k-handle:hover{background-color:#00b0ff;border-color:#00b0ff}.k-chart .k-navigator-hint .k-tooltip{border:3px solid #fff;-webkit-box-shadow:0 0 0 3px rgba(0,0,0,.2);box-shadow:0 0 0 3px rgba(0,0,0,.2);background:#fff;color:#242424}.k-chart .k-navigator-hint .k-scroll{background:#0072c6;height:4px}.k-chart-tooltip{background-image:none}.k-map .k-marker{background-image:url(Office365/markers.png)}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.k-map .k-marker{background-image:url(Office365/markers_2x.png)}}.k-map .k-attribution{color:#666}.k-spreadsheet-column-header,.k-spreadsheet-row-header{background-color:#fff}.k-spreadsheet-column-header,.k-spreadsheet-row-header,.k-spreadsheet-top-corner{background-color:#fff;background-image:none;color:#000;border-color:#dadada}.k-spreadsheet-top-corner{border-color:#dadada}.k-spreadsheet-top-corner:after{border-color:transparent #dadada #dadada transparent}.k-spreadsheet-pane{border-color:#c8c8c8}.k-spreadsheet-pane .k-spreadsheet-haxis,.k-spreadsheet-pane .k-spreadsheet-vaxis{border-color:#c8c8c8}.k-spreadsheet-pane .k-spreadsheet-column-header,.k-spreadsheet-pane .k-spreadsheet-row-header{border-color:#dadada}.k-spreadsheet-pane .k-spreadsheet-merged-cell{background-color:#fff}.k-spreadsheet-pane .k-selection-full,.k-spreadsheet-pane .k-selection-partial{border-color:rgba(0,114,198,.2);background-color:rgba(0,114,198,.2)}.k-spreadsheet-pane .k-filter-range{border-color:#0072c6}.k-spreadsheet-pane .k-spreadsheet-column-header .k-selection-full,.k-spreadsheet-pane .k-spreadsheet-column-header .k-selection-partial{border-bottom-color:#0072c6}.k-spreadsheet-pane .k-spreadsheet-row-header .k-selection-full,.k-spreadsheet-pane .k-spreadsheet-row-header .k-selection-partial{border-right-color:#0072c6}.k-auto-fill,.k-spreadsheet-selection{border-color:#0072c6;-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 1px #0072c6;box-shadow:inset 0 0 0 1px #fff,0 0 0 1px #0072c6}.k-spreadsheet-selection{background-color:rgba(0,114,198,.2)}.k-spreadsheet-active-cell{border-color:#0072c6!important;background-color:#fff}.k-spreadsheet-active-cell.k-single{background-color:#fff}.k-spreadsheet>.k-spreadsheet-formula-bar{background-color:#fff;border-color:#fff #fff #dadada}.k-spreadsheet>.k-spreadsheet-formula-bar:before{border-color:#dadada}.k-spreadsheet>.k-spreadsheet-formula-bar:after{border-color:#fff}.k-spreadsheet .k-spreadsheet-formula-input{background-color:#fff;color:#333}.k-spreadsheet .k-resize-handle,.k-spreadsheet .k-resize-hint-handle,.k-spreadsheet .k-resize-hint-marker{background-color:#cde6f7}.k-spreadsheet .k-resize-hint-vertical .k-resize-hint-handle,.k-spreadsheet .k-resize-hint-vertical .k-resize-hint-marker{background-color:#cde6f7}.k-spreadsheet .k-single-selection::after{background-color:#0072c6;border-color:#fff}.k-spreadsheet .k-auto-fill-punch{background-color:rgba(255,255,255,.5)}.k-spreadsheet .k-single-selection.k-dim-auto-fill-handle::after{background-color:rgba(0,114,198,.5)}.k-spreadsheet-format-cells .k-spreadsheet-preview{border-color:#c9c9c9}.k-spreadsheet-filter{border-radius:0;background-color:#fff;-webkit-box-shadow:inset 0 0 0 1px #c8c8c8;box-shadow:inset 0 0 0 1px #c8c8c8}.k-spreadsheet-filter.k-state-active{color:#333;background-color:#cde6f7}.k-spreadsheet-filter:hover{color:#000;background:#f4f4f4;border-color:#e0e0e0}.k-action-window .k-action-buttons{border-color:#c9c9c9}.k-spreadsheet-sample{color:grey}.k-state-selected .k-spreadsheet-sample{color:inherit}.k-spreadsheet-window .k-list,.k-spreadsheet-window .k-list-wrapper{border-color:#c9c9c9;border-radius:0}.k-spreadsheet-window .export-config,.k-spreadsheet-window .k-edit-field>.k-orientation-label{border-color:#c9c9c9}.k-spreadsheet-window .k-edit-field>input[type=radio]:checked+.k-orientation-label{background-image:none;background-color:#cde6f7;color:#525252}.k-spreadsheet-window .k-page-orientation{border-color:#0075cb;-webkit-box-shadow:0 5px 5px 0 rgba(0,0,0,.1);box-shadow:0 5px 5px 0 rgba(0,0,0,.1)}.k-spreadsheet-window .k-page-orientation:before{background:#fff;border-color:transparent;border-bottom-color:#0075cb;border-left-color:#0075cb}.k-spreadsheet-window .k-margins-horizontal,.k-spreadsheet-window .k-margins-vertical{background:0 0;border-color:#c9c9c9}.k-spreadsheet-toolbar.k-toolbar .k-button-group .k-button{border-radius:0}.k-spreadsheet-toolbar>.k-button,.k-spreadsheet-toolbar>.k-button-group,.k-spreadsheet-toolbar>.k-widget{border-radius:0}.k-spreadsheet-toolbar>.k-separator{border-color:#c9c9c9}.k-spreadsheet-toolbar .k-overflow-anchor{border-radius:0}.k-spreadsheet-popup{border-radius:0}.k-spreadsheet-popup .k-separator{background-color:#c9c9c9}.k-spreadsheet-popup .k-button{background-color:transparent}.k-spreadsheet-popup .k-button:hover{background-color:#f4f4f4}.k-spreadsheet-popup .k-state-active{background-color:#cde6f7;color:#fff}.k-spreadsheet-popup .k-state-active:hover{background-color:#a1d0f0}.k-spreadsheet-filter-menu .k-details{border-color:#c9c9c9}.k-spreadsheet-filter-menu .k-details-content .k-space-right{background-color:#fff}.k-spreadsheet-filter-menu .k-spreadsheet-value-treeview-wrapper{background-color:#fff;border-color:#c9c9c9;border-radius:0}.k-syntax-ref{color:#f82}.k-syntax-num{color:#09f}.k-syntax-func{font-weight:700}.k-syntax-str{color:#38b714}.k-syntax-error{color:red}.k-syntax-bool{color:#a9169c}.k-syntax-startexp{font-weight:700}.k-syntax-paren-match{background-color:#caf200}.k-series-a{border-color:#0072c6;background-color:rgba(0,114,198,.15)}.k-series-b{border-color:#5db2ff;background-color:rgba(93,178,255,.15)}.k-series-c{border-color:#008a17;background-color:rgba(0,138,23,.15)}.k-series-d{border-color:#82ba00;background-color:rgba(130,186,0,.15)}.k-series-e{border-color:#ff8f32;background-color:rgba(255,143,50,.15)}.k-series-f{border-color:#ac193d;background-color:rgba(172,25,61,.15)}.k-spreadsheet-sheets-remove:hover .k-icon{color:#c22}.k-spreadsheet-formula-list .k-state-focused{background-color:#cde6f7;color:#333}@media only screen and (-webkit-min-device-pixel-ratio:2){.k-icon.k-font-icon{background-image:none}}.k-spreadsheet-sheets-bar{background-color:#f4f4f4}.k-spreadsheet-sheets-bar .k-item,.k-spreadsheet-sheets-bar .k-item.k-state-active{border-color:#dadada}
/*# sourceMappingURL=kendo.office365.min.css.map */
This file has been truncated, but you can view the full file.
module powerbi.visuals {
import SelectionManager = utility.SelectionManager;
import DataViewTransform = powerbi.data.DataViewTransform;
export interface CategoryViewModel {
id: string;
value: string;
identity: any;
selectionId: SelectionId;
key: string;
categories: CategoryViewModel[];
parentPath: string;
path: string;
level: number;
}
export interface ViewModel {
categories: CategoryViewModel[];
}
export class MultiSelectDropDown implements IVisual {
public static capabilities: VisualCapabilities = {
// This is what will appear in the 'Field Wells' in reports
dataRoles: [
{
displayName: 'Category',
name: 'Category',
kind: powerbi.VisualDataRoleKind.Grouping,
cartesianKind: 0 //CartesianRoleKind.X
}
],
// This tells power bi how to map your roles above into the dataview you will receive
dataViewMappings: [{
categorical: {
categories: {
for: { in: 'Category' },
dataReductionAlgorithm: { top: {} }
},
values: {
group: {
by: 'Category',
select: [
{ for: { in: 'Category' } }
],
dataReductionAlgorithm: { top: {} }
}
}
}
}],
// Objects light up the formatting pane
objects: {
general: {
displayName: data.createDisplayNameGetter('Visual_General'),
properties: {
formatString: {
type: { formatting: { formatString: true } },
},
},
},
}
};
public static converter(dataView: DataView): ViewModel {
var viewModel: ViewModel = {
categories: []
}
if (dataView) {
var categorical = dataView.categorical;
if (categorical) {
var categories = categorical.categories;
if (categories && categories.length > 0 ) {
for ( var h= 0; h < categories.length; h++)
{
var categoryValsFlat = new Array();
for (var i = 0, catLength = categories[h].values.length; i < catLength; i++) {
//var identity = SelectionIdBuilder.builder().withCategory(dataView.categorical.categories[h], i).createSelectionId();
var selectionId =dataView.categorical.categories[h].identity
? SelectionId.createWithId(dataView.categorical.categories[h].identity[i])
: SelectionId.createNull();
var identity = dataView.categorical.categories[h].identity[i]
;
var path;
var parentPath = "";
var level = 1;
// Set parent path
if (typeof(dataView.categorical.categories[h].identity[i].expr.left) != 'undefined')
{
var x = dataView.categorical.categories[h].identity[i].expr;
while (typeof(x.left) != 'undefined')
{
if (typeof(x.left.ref) == 'undefined')
{
parentPath += ":" + x.right.left.ref + '|' + x.right.right.valueEncoded;
}
else
{
parentPath += ":" + x.left.ref + '|' + x.right.valueEncoded;
}
level ++;
x = x.left;
}
}
// Set path
if (typeof(dataView.categorical.categories[h].identity[i].expr.right.left) != 'undefined')
{
path = parentPath + '>' + dataView.categorical.categories[h].identity[i].expr.right.left.ref + '|' + dataView.categorical.categories[h].identity[i].expr.right.right.valueEncoded;
}
else
{
path = parentPath;
}
categoryValsFlat.push({
value: categories[h].values[i],
identity: identity,
selectionId: selectionId,
key: selectionId.getKey(),
parentPath: parentPath,
path : path ,
level: level
})
}
var dataSourceGroup = new kendo.data.HierarchicalDataSource({data: categoryValsFlat});
dataSourceGroup.group({ field: "value" });
// Load child items
var topCategories = new Array;
for (i = 0; i < dataSourceGroup.view().length; i++)
{
var categoryItems = new Array();
var categoryIdentities = new Array();
var categoryIdentitiesExpr = new Array();
for (var j = 0 ; j < dataSourceGroup.view()[i].items.length; j++)
{
var d = dataSourceGroup.view()[i].items[j];
categoryItems.push({id: j.toString(), categories: [] , value: d.value,selectionId: d.selectionId, identity: d.identity, key: d.key, parentPath: d.parentPath, path: d.path , level: 2});
categoryIdentities.push(d.identity);
categoryIdentitiesExpr.push(d.identity.expr);
}
var SQExpr = data.SQExprBuilder.or.apply(data, categoryIdentitiesExpr);
var identityExpr = data.createDataViewScopeIdentity(SQExpr);
var selectionIdExpr = SelectionId.createWithId(identityExpr);
var selectionId = SelectionId.createWithIds.apply(SelectionId, categoryIdentities);
topCategories.push({id: i.toString(), categories: categoryItems , value: dataSourceGroup.view()[i].value, selectionId: selectionIdExpr, identity: null, key: null, parentPath: null, path: null , level: 1 });
}
viewModel.categories.push({id: h.toString(), categories: topCategories, value: categories[h].source.displayName,selectionId: null, identity: null, key: null, parentPath: null, path: null , level: 0 });
}
}
}
}
//dataView.categorical.categories = [];
return viewModel;
}
private hostContainer: JQuery;
private div: D3.Selection;
private colorPalette: IDataColorPalette;
private selectionManager: SelectionManager;
private multiSelects: any[];
/** This is called once when the visual is initialially created */
public init(options: VisualInitOptions): void {
this.colorPalette = options.style.colorPalette.dataColors;
// element is the element in which your visual will be hosted.
this.hostContainer = options.element.css('overflow-x', 'hidden');
this.div = d3.select(options.element.get(0))
.append("div")
.attr("id","myDiv")
.attr("class","container");
this.selectionManager = new SelectionManager({ hostServices: options.host });
this.multiSelects = new Array();
}
/** Update is called for data updates, resizes & formatting changes */
public update(options: VisualUpdateOptions) {
var dataViews = options.dataViews;
if (!dataViews) return;
this.updateContainerViewports(options.viewport);
var viewModel = MultiSelectDropDown.converter(dataViews[0]);
var dataSource= null;
for (var i = 0 ; i < viewModel.categories.length; i++)
{
var multiSelect = <kendo.ui.MultiSelect>$("#myMultiSelect" + viewModel.categories[i].id).data("kendoMultiSelect");
if (typeof(multiSelect) != 'undefined')
{
multiSelect.destroy();
}
}
$("#myDiv").html("<span id='myListView'></span>");
for (var i = 0 ; i < viewModel.categories.length; i++)
{
var multiSelect = <kendo.ui.MultiSelect>$("#myMultiSelect" + viewModel.categories[i].id).data("kendoMultiSelect");
dataSource = new kendo.data.HierarchicalDataSource({data: viewModel.categories[i].categories,
schema: { model: {
"path": { type: "string"},
"parentPath": { type: "string"},
"selector": { type: "string"},
children: "categories",
hasChildren: true }
}});
dataSource.read();
//dataSource.group({ field: "value" });
var selected = "";
if (typeof(multiSelect) == 'undefined')
{
$("#myDiv").append("<div id='myMulitiSelectHeader'></div><div class='row'><label for='myMultiSelect" + viewModel.categories[i].id + "'>" + viewModel.categories[i].value + ": </label><select data-placeholder='Select ...' id='myMultiSelect" + viewModel.categories[i].id + "'><option></option></select></div>");
var selectionManager = this.selectionManager;
var multiSelects = this.multiSelects;
multiSelect = $("#myMultiSelect" + viewModel.categories[i].id).kendoMultiSelect({
dataTextField: "value",
dataValueField: "value",
dataSource: dataSource.view(),
filter: "contains",
select: function(e)
{
},
change: function(e) {
kendo.ui.progress($("#myDiv"), true);
var mutltiSelected= this;
var selectionIds = new Array;
var selectionIdsSimple;
var deferredClear = selectionManager.clear();
$.when.apply(null, deferredClear);
var selected = "";
// for each multiSelect
for (var m = 0; m < multiSelects.length; m++)
{
var multiSelect = multiSelects[m];
// for all rows in datasource
for (var g = 0 ; g < multiSelect.dataSource.data().length; g++)
{
// For items in selected category
for ( var h = 0; h < mutltiSelected.value().length; h++ )
{
var item = multiSelect.dataSource.at(g);
var firstentity = "";
//$("#myListView").text (' of ' + this.dataSource.data().length);
if (item.value == mutltiSelected.value()[h])
{
item.load();
var s= '';
for (var i = 0; i < item.children.data().length ; i++)
{
s = s + item.children.data()[i].path + "<br>";
if (selectionIds.indexOf(item.children.data()[i].selectionId) == -1)
{
selectionIds.push(item.children.data()[i].selectionId);
}
}
selectionIdsSimple = item.selectionId;
$("#myListView").text();
}
}
}
}
// $("#myListView").text(JSON.stringify(selectionIdsSimple) + "------------------------------------" + JSON.stringify(selectionIds));
//$("#myMulitiSelectHeader").text(JSON.stringify(selectionIds);
if (typeof(selectionIdsSimple) != 'undefined')
var selectionDeffered = selectionManager.select(selectionIdsSimple, true);
//var selectionDeffered = selectionIds.map(function (id) { return selectionManager.select(id, true); });
//$.when.apply(null, selectionDeffered);
kendo.ui.progress($("#myDiv"), false);
}
}).data("kendoMultiSelect");
}
else
{
multiSelect.dataSource.data(dataSource.view());
}
this.multiSelects.push(multiSelect);
multiSelects = this.multiSelects;
// $("#myListView").text (JSON.stringify(viewModel));
}
}
private updateContainerViewports(viewport: IViewport) {
var width = viewport.width;
var height = viewport.height;
this.hostContainer.css({
'height': height,
'width': width
});
this.div.attr('width', width);
}
private format(d: number){
var prefix = d3.formatPrefix(d);
return d3.round(prefix.scale(d),2) + ' ' +prefix.symbol
}
}
}
// type definitions for Kendo UI
declare module kendo {
function culture(): {
name: string;
calendar: {
AM: string[];
PM: string[];
days: {
names: string[];
namesAbbr: string[];
namesShort: string[];
firstDay: number;
};
months: {
names: string[];
namesAbbr: string[];
};
patterns: {
D: string;
F: string;
G: string;
M: string;
T: string;
Y: string;
d: string;
g: string;
m: string;
s: string;
t: string;
u: string;
y: string;
};
twoDigitYearMax: number;
};
calendars: {
standard: {
AM: string[];
PM: string[];
days: {
names: string[];
namesAbbr: string[];
namesShort: string[];
firstDay: number;
};
months: {
names: string[];
namesAbbr: string[];
};
patterns: {
D: string;
F: string;
G: string;
M: string;
T: string;
Y: string;
d: string;
g: string;
m: string;
s: string;
t: string;
u: string;
y: string;
};
twoDigitYearMax: number;
};
};
numberFormat: {
currency: {
decimals: number;
groupSize: number[];
pattern: string[];
symbol: string;
};
decimals: number;
groupSize: number[];
pattern: string[];
percent: {
decimals: number;
groupSize: number[];
pattern: string[];
symbol: string;
};
};
};
var cultures: {[culture: string] : {
name?: string;
calendar?: {
AM: string[];
PM: string[];
days: {
names: string[];
namesAbbr: string[];
namesShort: string[];
firstDay: number;
};
months: {
names: string[];
namesAbbr: string[];
};
patterns: {
D: string;
F: string;
G: string;
M: string;
T: string;
Y: string;
d: string;
g: string;
m: string;
s: string;
t: string;
u: string;
y: string;
};
twoDigitYearMax: number;
};
calendars?: {
standard: {
AM: string[];
PM: string[];
days: {
names: string[];
namesAbbr: string[];
namesShort: string[];
firstDay: number;
};
months: {
names: string[];
namesAbbr: string[];
};
patterns: {
D: string;
F: string;
G: string;
M: string;
T: string;
Y: string;
d: string;
g: string;
m: string;
s: string;
t: string;
u: string;
y: string;
};
twoDigitYearMax: number;
};
};
numberFormat?: {
currency: {
decimals: number;
groupSize: number[];
pattern: string[];
symbol: string;
};
decimals: number;
groupSize: number[];
pattern: string[];
percent: {
decimals: number;
groupSize: number[];
pattern: string[];
symbol: string;
};
};
}};
function format(format: string, ...values: any[]): string;
function fx(selector: string): effects.Element;
function fx(element: Element): effects.Element;
function fx(element: JQuery): effects.Element;
function init(selector: string, ...namespaces: any[]): void;
function init(element: JQuery, ...namespaces: any[]): void;
function init(element: Element, ...namespaces: any[]): void;
function observable(data: any): kendo.data.ObservableObject;
function observableHierarchy(array: any[]): kendo.data.ObservableArray;
function render(template: (data: any) => string, data: any[]): string;
function template(template: string, options?: TemplateOptions): (data: any) => string;
function guid(): string;
function widgetInstance(element: JQuery, suite: typeof kendo.ui): kendo.ui.Widget;
var ns: string;
var keys: {
INSERT: number;
DELETE: number;
BACKSPACE: number;
TAB: number;
ENTER: number;
ESC: number;
LEFT: number;
UP: number;
RIGHT: number;
DOWN: number;
END: number;
HOME: number;
SPACEBAR: number;
PAGEUP: number;
PAGEDOWN: number;
F2: number;
F10: number;
F12: number;
};
var support: {
touch: boolean;
pointers: boolean;
scrollbar(): number;
hasHW3D: boolean;
hasNativeScrolling: boolean;
devicePixelRatio: number;
placeHolder: boolean;
zoomLevel: number;
mobileOS: {
device: string;
tablet: any;
browser: string;
name: string;
majorVersion: string;
minorVersion: string;
flatVersion: number;
appMode: boolean;
};
browser: {
msie: boolean;
webkit: boolean;
safari: boolean;
opera: boolean;
version: string;
};
};
var version: string;
interface TemplateOptions {
paramName?: string;
useWithBlock?: boolean;
}
class Class {
static fn: Class;
static extend(prototype: Object): Class;
}
class Observable extends Class {
static fn: Observable;
static extend(prototype: Object): Observable;
bind(eventName: string, handler: Function): Observable;
one(eventName: string, handler: Function): Observable;
trigger(eventName: string, e?: any): boolean;
unbind(eventName: string, handler?: any): Observable;
}
interface ViewOptions {
tagName?: string;
wrap?: boolean;
model?: Object;
evalTemplate?: boolean;
init?: (e: ViewEvent) => void;
show?: (e: ViewEvent) => void;
hide?: (e: ViewEvent) => void;
}
interface ViewEvent {
sender: View;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class View extends Observable {
constructor(element: Element, options?: ViewOptions);
constructor(element: string, options?: ViewOptions);
element: JQuery;
content: any;
tagName: string;
model: Object;
init(element: Element, options?: ViewOptions): void;
init(element: string, options?: ViewOptions): void;
render(container?: any): JQuery;
destroy(): void;
}
class ViewContainer extends Observable {
view: View;
}
class Layout extends View {
containers: { [selector: string]: ViewContainer; };
showIn(selector: string, view: View, transitionClass?: string): void;
}
class History extends Observable {
current: string;
root: string;
start(options: Object): void;
stop(): void;
change(callback: Function): void;
navigate(location: string, silent?: boolean): void;
}
var history: History;
interface RouterOptions {
init?: (e: RouterEvent) => void;
pushState?: boolean;
hashBang?: boolean;
root?: string;
ignoreCase?: boolean;
change?(e: RouterChangeEvent): void;
routeMissing?(e: RouterRouteMissingEvent): void;
same?(e: RouterEvent): void;
}
interface RouterEvent {
sender: Router;
url: string;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface RouterChangeEvent extends RouterEvent {
params: any;
backButtonPressed: boolean;
}
interface RouterRouteMissingEvent extends RouterEvent {
params: any;
}
class Route extends Class {
route: RegExp;
callback(url: string): void;
worksWith(url: string): void;
}
class Router extends Observable {
constructor(options?: RouterOptions);
routes: Route[];
init(options?: RouterOptions): void;
start(): void;
destroy(): void;
route(route: string, callback: Function): void;
navigate(location: string, silent?: boolean): void;
replace(location: string, silent?: boolean): void;
}
}
declare module kendo.effects {
function enable(): void;
function disable(): void;
interface Element {
expand(direction: string): effects.Expand;
expandHorizontal(): effects.Expand;
expandVertical(): effects.Expand;
fade(direction: string): effects.Fade;
fadeIn(): effects.Fade;
fadeOut(): effects.Fade;
flip(axis: string, face: JQuery, back: JQuery): effects.Flip;
flipHorizontal(face: JQuery, back: JQuery): effects.Flip;
flipVertical(face: JQuery, back: JQuery): effects.Flip;
pageturn(axis: string, face: JQuery, back: JQuery): effects.PageTurn;
pageturnHorizontal(face: JQuery, back: JQuery): effects.PageTurn;
pageturnVertical(face: JQuery, back: JQuery): effects.PageTurn;
slideIn(direction: string): effects.SlideIn;
slideInDown(): effects.SlideIn;
slideInLeft(): effects.SlideIn;
slideInRight(): effects.SlideIn;
slideInUp(): effects.SlideIn;
tile(direction: string, previous: JQuery): effects.Tile;
tileDown(previous: JQuery): effects.Tile;
tileLeft(previous: JQuery): effects.Tile;
tileRight(previous: JQuery): effects.Tile;
tileUp(previous: JQuery): effects.Tile;
transfer(target: JQuery): effects.Transfer;
zoom(direction: string): effects.Zoom;
zoomIn(): effects.Zoom;
zoomOut(): effects.Zoom;
}
interface Effect {
play(): JQueryPromise<any>;
reverse(): JQueryPromise<any>;
duration(value: number): Effect;
add(effect: Effect): Effect;
stop(): Effect;
}
interface Expand extends Effect {
duration(value: number): Expand;
direction(value: string): Expand;
stop(): Expand;
add(effect: Effect): Expand;
}
interface Fade extends Effect {
duration(value: number): Fade;
direction(value: string): Fade;
stop(): Fade;
add(effect: Effect): Fade;
startValue(value: number): Fade;
endValue(value: number): Fade;
}
interface Flip extends Effect {
duration(value: number): Flip;
direction(value: string): Flip;
stop(): Flip;
add(effect: Effect): Flip;
}
interface PageTurn extends Effect {
duration(value: number): PageTurn;
direction(value: string): PageTurn;
stop(): PageTurn;
add(effect: Effect): PageTurn;
}
interface SlideIn extends Effect {
duration(value: number): SlideIn;
direction(value: string): SlideIn;
stop(): SlideIn;
add(effect: Effect): SlideIn;
}
interface Tile extends Effect {
duration(value: number): Tile;
direction(value: string): Tile;
stop(): Tile;
add(effect: Effect): Tile;
}
interface Transfer extends Effect {
duration(value: number): Transfer;
stop(): Transfer;
add(effect: Effect): Transfer;
}
interface Zoom extends Effect {
duration(value: number): Zoom;
direction(value: string): Zoom;
stop(): Zoom;
add(effect: Effect): Zoom;
startValue(value: number): Zoom;
endValue(value: number): Zoom;
}
}
declare module kendo.data {
interface ObservableObjectEvent {
sender?: ObservableObject;
field?: string;
}
interface ObservableObjectSetEvent extends ObservableObjectEvent {
value?: any;
preventDefault?: Function;
}
class Binding extends Observable {
source: any;
parents: any[];
path: string;
observable: boolean;
dependencies: { [path: string]: boolean; };
constructor(parents: any[], path: string);
change(e: Object): void;
start(source: kendo.Observable): void;
stop(source: kendo.Observable): void;
get (): any;
set (value: any): void;
destroy(): void;
}
class BindingTarget {
target: any;
options: any;
source: any;
}
class EventBinding extends Binding {
get (): void;
}
class TemplateBinding extends Binding {
constructor(source: kendo.Observable, path: string, template: Function);
render(value: Object): string;
}
module binders { }
interface Bindings {
[key: string]: Binding;
}
class Binder extends Class {
static fn: Binder;
element: any;
bindings: Bindings;
options: BinderOptions;
constructor(element: any, bindings: Bindings, options?: BinderOptions);
static extend(prototype: Object): Binder;
init(element: any, bindings: Bindings, options?: BinderOptions): void;
bind(binding: Binding, attribute: string): void;
destroy(): void;
refresh(): void;
refresh(attribute: string): void;
}
interface BinderOptions {
}
class ObservableObject extends Observable{
constructor(value?: any);
uid: string;
init(value?: any): void;
get(name: string): any;
parent(): ObservableObject;
set(name: string, value: any): void;
toJSON(): Object;
}
class Model extends ObservableObject {
static idField: string;
static fields: DataSourceSchemaModelFields;
idField: string;
_defaultId: any;
fields: DataSourceSchemaModelFields;
defaults: {
[field: string]: any;
};
id: any;
dirty: boolean;
static define(options: DataSourceSchemaModelWithFieldsObject): typeof Model;
static define(options: DataSourceSchemaModelWithFieldsArray): typeof Model;
constructor(data?: any);
init(data?: any): void;
accept(data?: any): void;
editable(field: string): boolean;
isNew(): boolean;
}
interface SchedulerEventData {
description?: string;
end?: Date;
endTimezone?: string;
isAllDay?: boolean;
id?: any;
start?: Date;
startTimezone?: string;
recurrenceId?: any;
recurrenceRule?: string;
recurrenceException?: string;
title?: string;
}
class SchedulerEvent extends Model {
static idField: string;
static fields: DataSourceSchemaModelFields;
constructor(data?: SchedulerEventData);
description: string;
end: Date;
endTimezone: string;
isAllDay: boolean;
id: any;
start: Date;
startTimezone: string;
recurrenceId: any;
recurrenceRule: string;
recurrenceException: string;
title: string;
static define(options: DataSourceSchemaModelWithFieldsObject): typeof SchedulerEvent;
static define(options: DataSourceSchemaModelWithFieldsArray): typeof SchedulerEvent;
init(data?: SchedulerEventData): void;
clone(options: any, updateUid: boolean): SchedulerEvent;
duration(): number;
expand(start: Date, end: Date, zone: any): SchedulerEvent[];
update(eventInfo: SchedulerEventData): void;
isMultiDay(): boolean;
isException(): boolean;
isOccurrence(): boolean;
isRecurring(): boolean;
isRecurrenceHead(): boolean;
toOccurrence(options: any): SchedulerEvent;
}
class TreeListModel extends Model {
static idField: string;
static fields: DataSourceSchemaModelFields;
id: any;
parentId: any;
static define(options: DataSourceSchemaModelWithFieldsObject): typeof TreeListModel;
static define(options: DataSourceSchemaModelWithFieldsArray): typeof TreeListModel;
constructor(data?: any);
init(data?: any): void;
loaded(value: boolean): void;
loaded(): boolean;
}
class TreeListDataSource extends DataSource {
load(model: kendo.data.TreeListModel): JQueryPromise<any>;
childNodes(model: kendo.data.TreeListModel): kendo.data.TreeListModel[];
rootNodes(): kendo.data.TreeListModel[];
parentNode(model: kendo.data.TreeListModel): kendo.data.TreeListModel;
level(model: kendo.data.TreeListModel): number;
level(model: any): number;
add(model: Object): kendo.data.TreeListModel;
add(model: kendo.data.TreeListModel): kendo.data.TreeListModel;
at(index: number): kendo.data.TreeListModel;
cancelChanges(model?: kendo.data.TreeListModel): void;
get(id: any): kendo.data.TreeListModel;
getByUid(uid: string): kendo.data.TreeListModel;
indexOf(value: kendo.data.TreeListModel): number;
insert(index: number, model: kendo.data.TreeListModel): kendo.data.TreeListModel;
insert(index: number, model: Object): kendo.data.TreeListModel;
remove(model: kendo.data.TreeListModel): void;
}
class GanttTask extends Model {
static idField: string;
static fields: DataSourceSchemaModelFields;
id: any;
parentId: number;
orderId: number;
title: string;
start: Date;
end: Date;
percentComplete: number;
summary: boolean;
expanded: boolean;
static define(options: DataSourceSchemaModelWithFieldsObject): typeof GanttTask;
static define(options: DataSourceSchemaModelWithFieldsArray): typeof GanttTask;
constructor(data?: any);
init(data?: any): void;
}
class GanttDependency extends Model {
static idField: string;
static fields: DataSourceSchemaModelFields;
id: any;
predecessorId: number;
successorId: number;
type: number;
static define(options: DataSourceSchemaModelWithFieldsObject): typeof GanttDependency;
static define(options: DataSourceSchemaModelWithFieldsArray): typeof GanttDependency;
constructor(data?: any);
init(data?: any): void;
}
class Node extends Model {
children: HierarchicalDataSource;
append(model: any): void;
level(): number;
load(id: any): void;
loaded(value: boolean): void;
loaded(): boolean;
parentNode(): Node;
}
class SchedulerDataSource extends DataSource {
add(model: Object): kendo.data.SchedulerEvent;
add(model: kendo.data.SchedulerEvent): kendo.data.SchedulerEvent;
at(index: number): kendo.data.SchedulerEvent;
cancelChanges(model?: kendo.data.SchedulerEvent): void;
get(id: any): kendo.data.SchedulerEvent;
getByUid(uid: string): kendo.data.SchedulerEvent;
indexOf(value: kendo.data.SchedulerEvent): number;
insert(index: number, model: kendo.data.SchedulerEvent): kendo.data.SchedulerEvent;
insert(index: number, model: Object): kendo.data.SchedulerEvent;
remove(model: kendo.data.SchedulerEvent): void;
}
class GanttDataSource extends DataSource {
add(model: Object): kendo.data.GanttTask;
add(model: kendo.data.GanttTask): kendo.data.GanttTask;
at(index: number): kendo.data.GanttTask;
cancelChanges(model?: kendo.data.GanttTask): void;
get(id: any): kendo.data.GanttTask;
getByUid(uid: string): kendo.data.GanttTask;
indexOf(value: kendo.data.GanttTask): number;
insert(index: number, model: Object): kendo.data.GanttTask;
insert(index: number, model: kendo.data.GanttTask): kendo.data.GanttTask;
remove(model: kendo.data.GanttTask): void;
}
class GanttDependencyDataSource extends DataSource {
add(model: Object): kendo.data.GanttDependency;
add(model: kendo.data.GanttDependency): kendo.data.GanttDependency;
at(index: number): kendo.data.GanttDependency;
cancelChanges(model?: kendo.data.GanttDependency): void;
get(id: any): kendo.data.GanttDependency;
getByUid(uid: string): kendo.data.GanttDependency;
indexOf(value: kendo.data.GanttDependency): number;
insert(index: number, model: Object): kendo.data.GanttDependency;
insert(index: number, model: kendo.data.GanttDependency): kendo.data.GanttDependency;
remove(model: kendo.data.GanttDependency): void;
}
class HierarchicalDataSource extends DataSource {
constructor(options?: HierarchicalDataSourceOptions);
init(options?: HierarchicalDataSourceOptions): void;
}
interface HierarchicalDataSourceOptions extends DataSourceOptions {
schema?: HierarchicalDataSourceSchema;
}
interface HierarchicalDataSourceSchema extends DataSourceSchemaWithOptionsModel {
model?: HierarchicalDataSourceSchemaModel;
}
interface HierarchicalDataSourceSchemaModel extends DataSourceSchemaModel {
hasChildren?: any;
children?: any;
}
interface PivotDiscoverRequestRestrictionOptions {
catalogName: string;
cubeName: string;
}
interface PivotDiscoverRequestDataOptions {
command: string;
restrictions: PivotDiscoverRequestRestrictionOptions;
}
interface PivotDiscoverRequestOptions {
data: PivotDiscoverRequestDataOptions;
}
interface PivotTransportConnection {
catalog?: string;
cube?: string;
}
interface PivotTransportDiscover {
cache?: boolean;
contentType?: string;
data?: any;
dataType?: string;
type?: string;
url?: any;
}
interface PivotTransport {
discover?: any;
read?: any;
}
interface PivotTransportWithObjectOperations extends PivotTransport {
connection: PivotTransportConnection;
discover?: PivotTransportDiscover;
read?: DataSourceTransportRead;
}
interface PivotTransportWithFunctionOperations extends PivotTransport {
discover?: (options: DataSourceTransportOptions) => void;
read?: (options: DataSourceTransportOptions) => void;
}
interface PivotDataSourceAxisOptions {
name: string;
expand?: boolean;
}
interface PivotDataSourceMeasureOptions {
values: string[];
axis?: string;
}
interface PivotDataSourceOptions extends DataSourceOptions {
columns?: PivotDataSourceAxisOptions[];
measures?: PivotDataSourceMeasureOptions[];
rows?: PivotDataSourceAxisOptions[];
transport?: PivotTransport;
schema?: PivotSchema;
}
interface PivotTupleModel {
children: PivotTupleModel[];
caption?: string;
name: string;
levelName?: string;
levelNum: number;
hasChildren?: boolean;
hierarchy?: string;
}
interface PivotSchemaRowAxis {
tuples: PivotTupleModel[];
}
interface PivotSchemaColumnAxis {
tuples: PivotTupleModel[];
}
interface PivotSchemaAxes {
rows: PivotSchemaRowAxis;
columns: PivotSchemaColumnAxis;
}
interface PivotSchema extends DataSourceSchema{
axes?: any;
catalogs?: any;
cubes?: any;
data?: any;
dimensions?: any;
hierarchies?: any;
levels?: any;
measures?: any;
}
class PivotDataSource extends DataSource {
axes(): PivotSchemaAxes;
constructor(options?: PivotDataSourceOptions);
init(options?: PivotDataSourceOptions): void;
catalog(val: string): void;
columns(val: string[]): string[];
cube(val: string): void;
discover(options: PivotDiscoverRequestOptions): JQueryPromise<any>;
measures(val: string[]): string[];
measuresAxis(): string;
rows(val: string[]): string[];
schemaCatalogs(): JQueryPromise<any>;
schemaCubes(): JQueryPromise<any>;
schemaDimensions(): JQueryPromise<any>;
schemaHierarchies(): JQueryPromise<any>;
schemaLevels(): JQueryPromise<any>;
schemaMeasures(): JQueryPromise<any>;
}
interface DataSourceTransport {
create?: DataSourceTransportCreate;
destroy?: DataSourceTransportDestroy;
push?: Function;
read?: DataSourceTransportRead;
signalr?: DataSourceTransportSignalr;
update?: DataSourceTransportUpdate;
parameterMap?(data: DataSourceTransportParameterMapData, type: string): any;
}
interface DataSourceTransportSignalrClient {
create?: string;
destroy?: string;
read?: string;
update?: string;
}
interface DataSourceTransportSignalrServer {
create?: string;
destroy?: string;
read?: string;
update?: string;
}
interface DataSourceTransportSignalr {
client?: DataSourceTransportSignalrClient;
hub?: any;
promise?: any;
server?: DataSourceTransportSignalrServer;
}
interface DataSourceParameterMapDataAggregate {
field?: string;
aggregate?: string;
}
interface DataSourceParameterMapDataGroup {
aggregate?: DataSourceParameterMapDataAggregate[];
field?: string;
dir?: string;
}
interface DataSourceParameterMapDataFilter {
field?: string;
filters?: DataSourceParameterMapDataFilter[];
logic?: string;
operator?: string;
value?: any;
}
interface DataSourceParameterMapDataSort {
field?: string;
dir?: string;
}
interface DataSourceTransportParameterMapData {
aggregate?: DataSourceParameterMapDataAggregate[];
group?: DataSourceParameterMapDataGroup[];
filter?: DataSourceParameterMapDataFilter;
models?: Model[];
page?: number;
pageSize?: number;
skip?: number;
sort?: DataSourceParameterMapDataSort[];
take?: number;
}
interface DataSourceSchema {
model?: any;
}
interface DataSourceSchemaWithOptionsModel extends DataSourceSchema {
model?: DataSourceSchemaModel;
}
interface DataSourceSchemaWithConstructorModel extends DataSourceSchema {
model?: typeof Model;
}
interface DataSourceSchemaModel {
id?: string;
fields?: any;
[index: string]: any;
}
interface DataSourceSchemaModelWithFieldsArray extends DataSourceSchemaModel {
fields?: DataSourceSchemaModelField[];
}
interface DataSourceSchemaModelWithFieldsObject extends DataSourceSchemaModel {
fields?: DataSourceSchemaModelFields;
}
interface DataSourceSchemaModelFields {
[index: string]: DataSourceSchemaModelField;
}
interface DataSourceSchemaModelField {
field?: string;
from?: string;
defaultValue?: any;
editable?: boolean;
nullable?: boolean;
parse?: Function;
type?: string;
validation?: DataSourceSchemaModelFieldValidation;
}
interface DataSourceSchemaModelFieldValidation {
required?: boolean;
min?: any;
max?: any;
}
class ObservableArray extends Observable {
length: number;
[index: number]: any;
constructor(array: any[]);
init(array: any[]): void;
empty(): void;
every(callback: (item: Object, index: number, source: ObservableArray) => boolean): boolean;
filter(callback: (item: Object, index: number, source: ObservableArray) => boolean): any[];
find(callback: (item: Object, index: number, source: ObservableArray) => boolean): any;
forEach(callback: (item: Object, index: number, source: ObservableArray) => void ): void;
indexOf(item: any): number;
join(separator: string): string;
map(callback: (item: Object, index: number, source: ObservableArray) => any): any[];
parent(): ObservableObject;
pop(): ObservableObject;
push(...items: any[]): number;
remove(item: Object): void;
shift(): any;
slice(begin: number, end?: number): any[];
some(callback: (item: Object, index: number, source: ObservableArray) => boolean): boolean;
splice(start: number): any[];
splice(start: number, deleteCount: number, ...items: any[]): any[];
toJSON(): any[];
unshift(...items: any[]): number;
wrap(object: Object, parent: Object): any;
wrapAll(source: Object, target: Object): any;
}
interface ObservableArrayEvent {
field?: string;
action?: string;
index?: number;
items?: kendo.data.Model[];
}
class DataSource extends Observable{
options: DataSourceOptions;
static create(options?: DataSourceOptions): DataSource;
constructor(options?: DataSourceOptions);
init(options?: DataSourceOptions): void;
add(model: Object): kendo.data.Model;
add(model: kendo.data.Model): kendo.data.Model;
aggregate(val: any): void;
aggregate(): any;
aggregates(): any;
at(index: number): kendo.data.ObservableObject;
cancelChanges(model?: kendo.data.Model): void;
data(): kendo.data.ObservableArray;
data(value: any): void;
fetch(callback?: Function): JQueryPromise<any>;
filter(filters: DataSourceFilterItem): void;
filter(filters: DataSourceFilterItem[]): void;
filter(filters: DataSourceFilters): void;
filter(): DataSourceFilters;
get(id: any): kendo.data.Model;
getByUid(uid: string): kendo.data.Model;
group(groups: any): void;
group(): any;
hasChanges(): boolean;
indexOf(value: kendo.data.ObservableObject): number;
insert(index: number, model: kendo.data.Model): kendo.data.Model;
insert(index: number, model: Object): kendo.data.Model;
online(value: boolean): void;
online(): boolean;
offlineData(data: any[]): void;
offlineData(): any[];
page(): number;
page(page: number): void;
pageSize(): number;
pageSize(size: number): void;
pushCreate(model: Object): void;
pushCreate(models: any[]): void;
pushDestroy(model: Object): void;
pushDestroy(models: any[]): void;
pushUpdate(model: Object): void;
pushUpdate(models: any[]): void;
query(options?: any): JQueryPromise<any>;
read(data?: any): JQueryPromise<any>;
remove(model: kendo.data.ObservableObject): void;
sort(sort: DataSourceSortItem): void;
sort(sort: DataSourceSortItem[]): void;
sort(): DataSourceSortItem[];
sync(): JQueryPromise<any>;
total(): number;
totalPages(): number;
view(): kendo.data.ObservableArray;
}
class Query {
data: any[];
static process(data: any[], options: DataSourceTransportReadOptionsData): QueryResult;
constructor(data: any[]);
toArray(): any[];
range(intex: number, count: number): kendo.data.Query;
skip(count: number): kendo.data.Query;
take(count: number): kendo.data.Query;
select(selector: Function): kendo.data.Query;
order(selector: string, dir?: string): kendo.data.Query;
order(selector: Function, dir?: string): kendo.data.Query;
filter(filters: DataSourceFilterItem): kendo.data.Query;
filter(filters: DataSourceFilterItem[]): kendo.data.Query;
filter(filters: DataSourceFilters): kendo.data.Query;
group(descriptors: DataSourceGroupItem): kendo.data.Query;
group(descriptors: DataSourceGroupItem[]): kendo.data.Query;
}
interface QueryResult {
total?: number;
data?: any[];
}
interface DataSourceAggregateItem {
field?: string;
aggregate?: string;
}
interface DataSourceFilter {
}
interface DataSourceFilterItem extends DataSourceFilter {
operator?: string;
field?: string;
value?: any;
}
interface DataSourceFilters extends DataSourceFilter {
logic?: string;
filters?: DataSourceFilter[];
}
interface DataSourceGroupItemAggregate {
field?: string;
aggregate?: string;
}
interface DataSourceGroupItem {
field?: string;
dir?: string;
aggregates?: DataSourceGroupItemAggregate[];
}
interface DataSourceSchema {
aggregates?: any;
data?: any;
errors?: any;
groups?: any;
parse?: Function;
total?: any;
type?: string;
}
interface DataSourceSortItem {
field?: string;
dir?: string;
}
interface DataSourceTransportCreate extends JQueryAjaxSettings {
cache?: boolean;
contentType?: string;
data?: any;
dataType?: string;
type?: string;
url?: any;
}
interface DataSourceTransportDestroy extends JQueryAjaxSettings {
cache?: boolean;
contentType?: string;
data?: any;
dataType?: string;
type?: string;
url?: any;
}
interface DataSourceTransportRead extends JQueryAjaxSettings {
cache?: boolean;
contentType?: string;
data?: any;
dataType?: string;
type?: string;
url?: any;
}
interface DataSourceTransportUpdate extends JQueryAjaxSettings {
cache?: boolean;
contentType?: string;
data?: any;
dataType?: string;
type?: string;
url?: any;
}
interface DataSourceTransportWithObjectOperations extends DataSourceTransport {
create?: DataSourceTransportCreate;
destroy?: DataSourceTransportDestroy;
read?: DataSourceTransportRead;
update?: DataSourceTransportUpdate;
}
interface DataSourceTransportWithFunctionOperations extends DataSourceTransport {
create?: (options: DataSourceTransportOptions) => void;
destroy?: (options: DataSourceTransportOptions) => void;
read?: (options: DataSourceTransportReadOptions) => void;
update?: (options: DataSourceTransportOptions) => void;
}
interface DataSourceTransportOptions {
success: (data?: any) => void;
error: (error?: any) => void;
data: any;
}
interface DataSourceTransportReadOptionsData {
sort?: DataSourceSortItem[];
filter?: DataSourceFilters;
group?: DataSourceGroupItem[];
take?: number;
skip?: number;
}
interface DataSourceTransportReadOptions extends DataSourceTransportOptions {
data: DataSourceTransportReadOptionsData;
}
interface DataSourceTransportBatchOptionsData {
models: any[];
}
interface DataSourceTransportBatchOptions extends DataSourceTransportOptions {
data: DataSourceTransportBatchOptionsData;
}
interface DataSourceOptions {
aggregate?: DataSourceAggregateItem[];
autoSync?: boolean;
batch?: boolean;
data?: any;
filter?: any;
group?: DataSourceGroupItem[];
offlineStorage?: any;
page?: number;
pageSize?: number;
schema?: DataSourceSchema;
serverAggregates?: boolean;
serverFiltering?: boolean;
serverGrouping?: boolean;
serverPaging?: boolean;
serverSorting?: boolean;
sort?: any;
transport?: DataSourceTransport;
type?: string;
change? (e: DataSourceChangeEvent): void;
error?(e: DataSourceErrorEvent): void;
sync?(e: DataSourceEvent): void;
requestStart?(e: DataSourceRequestStartEvent): void;
requestEnd?(e: DataSourceRequestEndEvent): void;
}
interface DataSourceEvent {
sender?: DataSource;
}
interface DataSourceItemOrGroup {
}
interface DataSourceGroup extends DataSourceItemOrGroup {
aggregates: any[];
field: string;
hasSubgroups: boolean;
items: DataSourceItemOrGroup[];
value: any;
}
interface DataSourceChangeEvent extends DataSourceEvent {
field?: string;
value?: Model;
action?: string;
index?: number;
items?: DataSourceItemOrGroup[];
node?: any;
}
interface DataSourceErrorEvent extends DataSourceEvent {
xhr: JQueryXHR;
status: string;
errorThrown: any;
errors?: any;
}
interface DataSourceRequestStartEvent extends DataSourceEvent {
type?: string;
}
interface DataSourceRequestEndEvent extends DataSourceEvent {
response?: any;
type?: string;
}
}
declare module kendo.data.transports {
var odata: DataSourceTransport;
}
declare module kendo.ui {
function progress(container: JQuery, toggle: boolean): void;
class Widget extends Observable {
static fn: Widget;
element: JQuery;
options: Object;
events: string[];
static extend(prototype: Object): Widget;
constructor(element: Element, options?: Object);
constructor(element: JQuery, options?: Object);
constructor(selector: String, options?: Object);
init(element: Element, options?: Object): void;
init(element: JQuery, options?: Object): void;
init(selector: String, options?: Object): void;
destroy(): void;
setOptions(options: Object): void;
resize(force?: boolean): void;
}
function plugin(widget: typeof kendo.ui.Widget, register?: typeof kendo.ui, prefix?: String): void;
function plugin(widget: any, register?: typeof kendo.ui, prefix?: String): void;
class Draggable extends kendo.ui.Widget{
element: JQuery;
currentTarget: JQuery;
constructor(element: Element, options?: DraggableOptions);
options: DraggableOptions;
}
interface DraggableEvent {
sender?: Draggable;
}
class DropTarget extends kendo.ui.Widget{
element: JQuery;
constructor(element: Element, options?: DropTargetOptions);
options: DropTargetOptions;
static destroyGroup(groupName: string): void;
}
interface DropTargetOptions {
group?: string;
dragenter?(e: DropTargetDragenterEvent): void;
dragleave?(e: DropTargetDragleaveEvent): void;
drop?(e: DropTargetDropEvent): void;
}
interface DropTargetEvent {
sender?: DropTarget;
}
interface DropTargetDragenterEvent extends DropTargetEvent {
draggable?: kendo.ui.Draggable;
}
interface DropTargetDragleaveEvent extends DropTargetEvent {
draggable?: kendo.ui.Draggable;
}
interface DropTargetDropEvent extends DropTargetEvent {
draggable?: kendo.ui.Draggable;
}
class DropTargetArea extends kendo.ui.Widget{
element: JQuery;
constructor(element: Element, options?: DropTargetAreaOptions);
options: DropTargetAreaOptions;
}
interface DropTargetAreaOptions {
group?: string;
filter?: string;
dragenter?(e: DropTargetAreaDragenterEvent): void;
dragleave?(e: DropTargetAreaDragleaveEvent): void;
drop?(e: DropTargetAreaDropEvent): void;
}
interface DropTargetAreaEvent {
sender: DropTargetArea;
}
interface DropTargetAreaDragenterEvent extends DropTargetAreaEvent {
draggable?: JQuery;
dropTarget?: JQuery;
}
interface DropTargetAreaDragleaveEvent extends DropTargetAreaEvent {
draggable?: JQuery;
dropTarget?: JQuery;
}
interface DropTargetAreaDropEvent extends DropTargetAreaEvent {
draggable?: kendo.ui.Draggable;
dropTarget?: JQuery;
}
interface DraggableOptions {
axis?: string;
container?: JQuery;
cursorOffset?: any;
distance?: number;
filter?: string;
group?: string;
hint?: Function;
ignore?: string;
drag?(e: DraggableEvent): void;
dragcancel?(e: DraggableEvent): void;
dragend?(e: DraggableEvent): void;
dragstart?(e: DraggableEvent): void;
}
interface GridColumnEditorOptions {
field?: string;
format?: string;
model?: kendo.data.Model;
values?: any[];
}
interface GridColumn {
editor?(container: JQuery, options: GridColumnEditorOptions): void;
}
interface TreeListEditorOptions {
field?: string;
format?: string;
model?: kendo.data.Model;
values?: any[];
}
interface TreeListColumn {
editor?(container: JQuery, options: TreeListEditorOptions): void;
}
}
declare module kendo.geometry {
class Arc extends Observable {
options: ArcOptions;
anticlockwise: boolean;
center: kendo.geometry.Point;
endAngle: number;
radiusX: number;
radiusY: number;
startAngle: number;
bbox(matrix: kendo.geometry.Matrix): kendo.geometry.Rect;
getAnticlockwise(): boolean;
getCenter(): kendo.geometry.Point;
getEndAngle(): number;
getRadiusX(): number;
getRadiusY(): number;
getStartAngle(): number;
pointAt(angle: number): kendo.geometry.Point;
setAnticlockwise(value: boolean): kendo.geometry.Arc;
setCenter(value: kendo.geometry.Point): kendo.geometry.Arc;
setEndAngle(value: number): kendo.geometry.Arc;
setRadiusX(value: number): kendo.geometry.Arc;
setRadiusY(value: number): kendo.geometry.Arc;
setStartAngle(value: number): kendo.geometry.Arc;
}
interface ArcOptions {
name?: string;
}
interface ArcEvent {
sender: Arc;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Circle extends Observable {
options: CircleOptions;
center: kendo.geometry.Point;
radius: number;
bbox(matrix: kendo.geometry.Matrix): kendo.geometry.Rect;
clone(): kendo.geometry.Circle;
equals(other: kendo.geometry.Circle): boolean;
getCenter(): kendo.geometry.Point;
getRadius(): number;
pointAt(angle: number): kendo.geometry.Point;
setCenter(value: kendo.geometry.Point): kendo.geometry.Point;
setCenter(value: any): kendo.geometry.Point;
setRadius(value: number): kendo.geometry.Circle;
}
interface CircleOptions {
name?: string;
}
interface CircleEvent {
sender: Circle;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Matrix extends Observable {
options: MatrixOptions;
a: number;
b: number;
c: number;
d: number;
e: number;
f: number;
static rotate(angle: number, x: number, y: number): kendo.geometry.Matrix;
static scale(scaleX: number, scaleY: number): kendo.geometry.Matrix;
static translate(x: number, y: number): kendo.geometry.Matrix;
static unit(): kendo.geometry.Matrix;
clone(): kendo.geometry.Matrix;
equals(other: kendo.geometry.Matrix): boolean;
round(digits: number): kendo.geometry.Matrix;
multiplyCopy(matrix: kendo.geometry.Matrix): kendo.geometry.Matrix;
toArray(digits: number): any;
toString(digits: number, separator: string): string;
}
interface MatrixOptions {
name?: string;
}
interface MatrixEvent {
sender: Matrix;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Point extends Observable {
options: PointOptions;
x: number;
y: number;
constructor(x: number, y: number);
static create(x: number, y: number): kendo.geometry.Point;
static create(x: any, y: number): kendo.geometry.Point;
static create(x: kendo.geometry.Point, y: number): kendo.geometry.Point;
static min(): kendo.geometry.Point;
static max(): kendo.geometry.Point;
static minPoint(): kendo.geometry.Point;
static maxPoint(): kendo.geometry.Point;
clone(): kendo.geometry.Point;
distanceTo(point: kendo.geometry.Point): number;
equals(other: kendo.geometry.Point): boolean;
getX(): number;
getY(): number;
move(x: number, y: number): kendo.geometry.Point;
rotate(angle: number, center: kendo.geometry.Point): kendo.geometry.Point;
rotate(angle: number, center: any): kendo.geometry.Point;
round(digits: number): kendo.geometry.Point;
scale(scaleX: number, scaleY: number): kendo.geometry.Point;
scaleCopy(scaleX: number, scaleY: number): kendo.geometry.Point;
setX(value: number): kendo.geometry.Point;
setY(value: number): kendo.geometry.Point;
toArray(digits: number): any;
toString(digits: number, separator: string): string;
transform(tansformation: kendo.geometry.Transformation): kendo.geometry.Point;
transformCopy(tansformation: kendo.geometry.Transformation): kendo.geometry.Point;
translate(dx: number, dy: number): kendo.geometry.Point;
translateWith(vector: kendo.geometry.Point): kendo.geometry.Point;
translateWith(vector: any): kendo.geometry.Point;
}
interface PointOptions {
name?: string;
}
interface PointEvent {
sender: Point;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Rect extends Observable {
options: RectOptions;
origin: kendo.geometry.Point;
size: kendo.geometry.Size;
constructor(origin: kendo.geometry.Point, size: kendo.geometry.Size);
static fromPoints(pointA: kendo.geometry.Point, pointB: kendo.geometry.Point): kendo.geometry.Rect;
static union(rectA: kendo.geometry.Rect, rectB: kendo.geometry.Rect): kendo.geometry.Rect;
bbox(matrix: kendo.geometry.Matrix): kendo.geometry.Rect;
bottomLeft(): kendo.geometry.Point;
bottomRight(): kendo.geometry.Point;
center(): kendo.geometry.Point;
clone(): kendo.geometry.Rect;
equals(other: kendo.geometry.Rect): boolean;
getOrigin(): kendo.geometry.Point;
getSize(): kendo.geometry.Size;
height(): number;
setOrigin(value: kendo.geometry.Point): kendo.geometry.Rect;
setOrigin(value: any): kendo.geometry.Rect;
setSize(value: kendo.geometry.Size): kendo.geometry.Rect;
setSize(value: any): kendo.geometry.Rect;
topLeft(): kendo.geometry.Point;
topRight(): kendo.geometry.Point;
width(): number;
}
interface RectOptions {
name?: string;
}
interface RectEvent {
sender: Rect;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Size extends Observable {
options: SizeOptions;
width: number;
height: number;
static create(width: number, height: number): kendo.geometry.Size;
static create(width: any, height: number): kendo.geometry.Size;
static create(width: kendo.geometry.Size, height: number): kendo.geometry.Size;
clone(): kendo.geometry.Size;
equals(other: kendo.geometry.Size): boolean;
getWidth(): number;
getHeight(): number;
setWidth(value: number): kendo.geometry.Size;
setHeight(value: number): kendo.geometry.Size;
}
interface SizeOptions {
name?: string;
}
interface SizeEvent {
sender: Size;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Transformation extends Observable {
options: TransformationOptions;
clone(): kendo.geometry.Transformation;
equals(other: kendo.geometry.Transformation): boolean;
matrix(): kendo.geometry.Matrix;
multiply(transformation: kendo.geometry.Transformation): kendo.geometry.Transformation;
rotate(angle: number, center: any): kendo.geometry.Transformation;
rotate(angle: number, center: kendo.geometry.Point): kendo.geometry.Transformation;
scale(scaleX: number, scaleY: number): kendo.geometry.Transformation;
translate(x: number, y: number): kendo.geometry.Transformation;
}
interface TransformationOptions {
name?: string;
}
interface TransformationEvent {
sender: Transformation;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
}
declare module kendo.drawing {
class Arc extends kendo.drawing.Element {
options: ArcOptions;
constructor(geometry: kendo.geometry.Arc, options?: ArcOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
geometry(): kendo.geometry.Arc;
geometry(value: kendo.geometry.Arc): void;
fill(color: string, opacity?: number): kendo.drawing.Arc;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Arc;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface ArcOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface ArcEvent {
sender: Arc;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Circle extends kendo.drawing.Element {
options: CircleOptions;
constructor(geometry: kendo.geometry.Circle, options?: CircleOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
geometry(): kendo.geometry.Circle;
geometry(value: kendo.geometry.Circle): void;
fill(color: string, opacity?: number): kendo.drawing.Circle;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Circle;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface CircleOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface CircleEvent {
sender: Circle;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Element extends kendo.Class {
options: ElementOptions;
constructor(options?: ElementOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
opacity(): number;
opacity(opacity: number): void;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface ElementOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
opacity?: number;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface ElementEvent {
sender: Element;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface FillOptions {
color?: string;
opacity?: number;
}
class Gradient extends kendo.Class {
options: GradientOptions;
stops: any;
constructor(options?: GradientOptions);
addStop(offset: number, color: string, opacity: number): kendo.drawing.GradientStop;
removeStop(stop: kendo.drawing.GradientStop): void;
}
interface GradientOptions {
name?: string;
stops?: any;
}
interface GradientEvent {
sender: Gradient;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class GradientStop extends kendo.Class {
options: GradientStopOptions;
constructor(options?: GradientStopOptions);
}
interface GradientStopOptions {
name?: string;
offset?: number;
color?: string;
opacity?: number;
}
interface GradientStopEvent {
sender: GradientStop;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Group extends kendo.drawing.Element {
options: GroupOptions;
children: any;
constructor(options?: GroupOptions);
append(element: kendo.drawing.Element): void;
clear(): void;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
insert(position: number, element: kendo.drawing.Element): void;
opacity(): number;
opacity(opacity: number): void;
remove(element: kendo.drawing.Element): void;
removeAt(index: number): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface GroupOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
opacity?: number;
pdf?: kendo.drawing.PDFOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface GroupEvent {
sender: Group;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Image extends kendo.drawing.Element {
options: ImageOptions;
constructor(src: string, rect: kendo.geometry.Rect);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
opacity(): number;
opacity(opacity: number): void;
src(): string;
src(value: string): void;
rect(): kendo.geometry.Rect;
rect(value: kendo.geometry.Rect): void;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface ImageOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
opacity?: number;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface ImageEvent {
sender: Image;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Layout extends kendo.drawing.Group {
options: LayoutOptions;
constructor(rect: kendo.geometry.Rect, options?: LayoutOptions);
rect(): kendo.geometry.Rect;
rect(rect: kendo.geometry.Rect): void;
reflow(): void;
}
interface LayoutOptions {
name?: string;
alignContent?: string;
alignItems?: string;
justifyContent?: string;
lineSpacing?: number;
spacing?: number;
orientation?: string;
wrap?: boolean;
}
interface LayoutEvent {
sender: Layout;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class LinearGradient extends kendo.drawing.Gradient {
options: LinearGradientOptions;
stops: any;
constructor(options?: LinearGradientOptions);
addStop(offset: number, color: string, opacity: number): kendo.drawing.GradientStop;
end(): kendo.geometry.Point;
end(end: any): void;
end(end: kendo.geometry.Point): void;
start(): kendo.geometry.Point;
start(start: any): void;
start(start: kendo.geometry.Point): void;
removeStop(stop: kendo.drawing.GradientStop): void;
}
interface LinearGradientOptions {
name?: string;
stops?: any;
}
interface LinearGradientEvent {
sender: LinearGradient;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class MultiPath extends kendo.drawing.Element {
options: MultiPathOptions;
paths: any;
constructor(options?: MultiPathOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
close(): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: any, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
fill(color: string, opacity?: number): kendo.drawing.MultiPath;
lineTo(x: number, y?: number): kendo.drawing.MultiPath;
lineTo(x: any, y?: number): kendo.drawing.MultiPath;
lineTo(x: kendo.geometry.Point, y?: number): kendo.drawing.MultiPath;
moveTo(x: number, y?: number): kendo.drawing.MultiPath;
moveTo(x: any, y?: number): kendo.drawing.MultiPath;
moveTo(x: kendo.geometry.Point, y?: number): kendo.drawing.MultiPath;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.MultiPath;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface MultiPathOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface MultiPathEvent {
sender: MultiPath;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class OptionsStore extends kendo.Class {
options: OptionsStoreOptions;
observer: any;
constructor(options?: OptionsStoreOptions);
get(field: string): any;
set(field: string, value: any): void;
}
interface OptionsStoreOptions {
name?: string;
}
interface OptionsStoreEvent {
sender: OptionsStore;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface PDFOptions {
creator?: string;
date?: Date;
keywords?: string;
landscape?: boolean;
margin?: any;
paperSize?: any;
subject?: string;
title?: string;
}
class Path extends kendo.drawing.Element {
options: PathOptions;
segments: any;
constructor(options?: PathOptions);
static fromPoints(points: any): kendo.drawing.Path;
static fromRect(rect: kendo.geometry.Rect): kendo.drawing.Path;
static parse(svgPath: string, options?: any): kendo.drawing.Path;
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
close(): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: any, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.Path;
fill(color: string, opacity?: number): kendo.drawing.Path;
lineTo(x: number, y?: number): kendo.drawing.Path;
lineTo(x: any, y?: number): kendo.drawing.Path;
lineTo(x: kendo.geometry.Point, y?: number): kendo.drawing.Path;
moveTo(x: number, y?: number): kendo.drawing.Path;
moveTo(x: any, y?: number): kendo.drawing.Path;
moveTo(x: kendo.geometry.Point, y?: number): kendo.drawing.Path;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Path;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface PathOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface PathEvent {
sender: Path;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class RadialGradient extends kendo.drawing.Gradient {
options: RadialGradientOptions;
stops: any;
constructor(options?: RadialGradientOptions);
addStop(offset: number, color: string, opacity: number): kendo.drawing.GradientStop;
center(): kendo.geometry.Point;
center(center: any): void;
center(center: kendo.geometry.Point): void;
radius(): number;
radius(value: number): void;
removeStop(stop: kendo.drawing.GradientStop): void;
}
interface RadialGradientOptions {
name?: string;
center?: any|kendo.geometry.Point;
radius?: number;
stops?: any;
}
interface RadialGradientEvent {
sender: RadialGradient;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Rect extends kendo.drawing.Element {
options: RectOptions;
constructor(geometry: kendo.geometry.Rect, options?: RectOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
geometry(): kendo.geometry.Rect;
geometry(value: kendo.geometry.Rect): void;
fill(color: string, opacity?: number): kendo.drawing.Rect;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Rect;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface RectOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface RectEvent {
sender: Rect;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Segment extends kendo.Class {
options: SegmentOptions;
constructor(anchor: kendo.geometry.Point, controlIn: kendo.geometry.Point, controlOut: kendo.geometry.Point);
anchor(): kendo.geometry.Point;
anchor(value: kendo.geometry.Point): void;
controlIn(): kendo.geometry.Point;
controlIn(value: kendo.geometry.Point): void;
controlOut(): kendo.geometry.Point;
controlOut(value: kendo.geometry.Point): void;
}
interface SegmentOptions {
name?: string;
}
interface SegmentEvent {
sender: Segment;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface StrokeOptions {
color?: string;
dashType?: string;
lineCap?: string;
lineJoin?: string;
opacity?: number;
width?: number;
}
class Surface extends kendo.Observable {
options: SurfaceOptions;
constructor(options?: SurfaceOptions);
static create(element: JQuery, options?: any): kendo.drawing.Surface;
static create(element: Element, options?: any): kendo.drawing.Surface;
clear(): void;
draw(element: kendo.drawing.Element): void;
eventTarget(e: any): kendo.drawing.Element;
resize(force?: boolean): void;
}
interface SurfaceOptions {
name?: string;
type?: string;
height?: string;
width?: string;
click?(e: SurfaceClickEvent): void;
mouseenter?(e: SurfaceMouseenterEvent): void;
mouseleave?(e: SurfaceMouseleaveEvent): void;
}
interface SurfaceEvent {
sender: Surface;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SurfaceClickEvent extends SurfaceEvent {
element?: kendo.drawing.Element;
originalEvent?: any;
}
interface SurfaceMouseenterEvent extends SurfaceEvent {
element?: kendo.drawing.Element;
originalEvent?: any;
}
interface SurfaceMouseleaveEvent extends SurfaceEvent {
element?: kendo.drawing.Element;
originalEvent?: any;
}
class Text extends kendo.drawing.Element {
options: TextOptions;
constructor(content: string, position: kendo.geometry.Point, options?: TextOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
content(): string;
content(value: string): void;
fill(color: string, opacity?: number): kendo.drawing.Text;
opacity(): number;
opacity(opacity: number): void;
position(): kendo.geometry.Point;
position(value: kendo.geometry.Point): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Text;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface TextOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
font?: string;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface TextEvent {
sender: Text;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
}
declare module kendo.ui {
class AutoComplete extends kendo.ui.Widget {
static fn: AutoComplete;
options: AutoCompleteOptions;
dataSource: kendo.data.DataSource;
list: JQuery;
ul: JQuery;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): AutoComplete;
constructor(element: Element, options?: AutoCompleteOptions);
close(): void;
dataItem(index: number): any;
destroy(): void;
enable(enable: boolean): void;
focus(): void;
items(): any;
readonly(readonly: boolean): void;
refresh(): void;
search(word: string): void;
select(item: string): void;
select(item: Element): void;
select(item: JQuery): void;
setDataSource(dataSource: kendo.data.DataSource): void;
suggest(value: string): void;
value(): string;
value(value: string): void;
}
interface AutoCompleteAnimationClose {
duration?: number;
effects?: string;
}
interface AutoCompleteAnimationOpen {
duration?: number;
effects?: string;
}
interface AutoCompleteAnimation {
close?: AutoCompleteAnimationClose;
open?: AutoCompleteAnimationOpen;
}
interface AutoCompleteVirtual {
itemHeight?: number;
valueMapper?: Function;
}
interface AutoCompleteOptions {
name?: string;
animation?: AutoCompleteAnimation;
dataSource?: any|any|kendo.data.DataSource;
dataTextField?: string;
delay?: number;
enable?: boolean;
filter?: string;
fixedGroupTemplate?: string|Function;
groupTemplate?: string|Function;
height?: number;
highlightFirst?: boolean;
ignoreCase?: boolean;
minLength?: number;
placeholder?: string;
popup?: any;
separator?: string;
suggest?: boolean;
headerTemplate?: string|Function;
template?: string|Function;
valuePrimitive?: boolean;
virtual?: AutoCompleteVirtual;
change?(e: AutoCompleteChangeEvent): void;
close?(e: AutoCompleteCloseEvent): void;
dataBound?(e: AutoCompleteDataBoundEvent): void;
filtering?(e: AutoCompleteFilteringEvent): void;
open?(e: AutoCompleteOpenEvent): void;
select?(e: AutoCompleteSelectEvent): void;
}
interface AutoCompleteEvent {
sender: AutoComplete;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface AutoCompleteChangeEvent extends AutoCompleteEvent {
}
interface AutoCompleteCloseEvent extends AutoCompleteEvent {
}
interface AutoCompleteDataBoundEvent extends AutoCompleteEvent {
}
interface AutoCompleteFilteringEvent extends AutoCompleteEvent {
filter?: any;
}
interface AutoCompleteOpenEvent extends AutoCompleteEvent {
}
interface AutoCompleteSelectEvent extends AutoCompleteEvent {
item?: JQuery;
}
class Button extends kendo.ui.Widget {
static fn: Button;
options: ButtonOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Button;
constructor(element: Element, options?: ButtonOptions);
enable(toggle: boolean): void;
}
interface ButtonOptions {
name?: string;
enable?: boolean;
icon?: string;
imageUrl?: string;
spriteCssClass?: string;
click?(e: ButtonClickEvent): void;
}
interface ButtonEvent {
sender: Button;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ButtonClickEvent extends ButtonEvent {
event?: any;
}
class Calendar extends kendo.ui.Widget {
static fn: Calendar;
options: CalendarOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Calendar;
constructor(element: Element, options?: CalendarOptions);
current(): Date;
destroy(): void;
max(): Date;
max(value: Date): void;
max(value: string): void;
min(): Date;
min(value: Date): void;
min(value: string): void;
navigate(value: Date, view: string): void;
navigateDown(value: Date): void;
navigateToFuture(): void;
navigateToPast(): void;
navigateUp(): void;
value(): Date;
value(value: Date): void;
value(value: string): void;
view(): any;
}
interface CalendarMonth {
content?: string;
empty?: string;
}
interface CalendarOptions {
name?: string;
culture?: string;
dates?: any;
depth?: string;
disableDates?: any|Function;
footer?: string|Function;
format?: string;
max?: Date;
min?: Date;
month?: CalendarMonth;
start?: string;
value?: Date;
change?(e: CalendarEvent): void;
navigate?(e: CalendarEvent): void;
}
interface CalendarEvent {
sender: Calendar;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class ColorPalette extends kendo.ui.Widget {
static fn: ColorPalette;
options: ColorPaletteOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ColorPalette;
constructor(element: Element, options?: ColorPaletteOptions);
value(): string;
value(color?: string): void;
color(): kendo.Color;
color(color?: kendo.Color): void;
enable(enable?: boolean): void;
}
interface ColorPaletteTileSize {
width?: number;
height?: number;
}
interface ColorPaletteOptions {
name?: string;
palette?: string|any;
columns?: number;
tileSize?: ColorPaletteTileSize;
value?: string;
change?(e: ColorPaletteEvent): void;
}
interface ColorPaletteEvent {
sender: ColorPalette;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class ColorPicker extends kendo.ui.Widget {
static fn: ColorPicker;
options: ColorPickerOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ColorPicker;
constructor(element: Element, options?: ColorPickerOptions);
close(): void;
open(): void;
toggle(): void;
value(): string;
value(color?: string): void;
color(): kendo.Color;
color(color?: kendo.Color): void;
enable(enable?: boolean): void;
}
interface ColorPickerMessages {
apply?: string;
cancel?: string;
}
interface ColorPickerTileSize {
width?: number;
height?: number;
}
interface ColorPickerOptions {
name?: string;
buttons?: boolean;
columns?: number;
tileSize?: ColorPickerTileSize;
messages?: ColorPickerMessages;
palette?: string|any;
opacity?: boolean;
preview?: boolean;
toolIcon?: string;
value?: string;
change?(e: ColorPickerChangeEvent): void;
select?(e: ColorPickerSelectEvent): void;
open?(e: ColorPickerEvent): void;
close?(e: ColorPickerEvent): void;
}
interface ColorPickerEvent {
sender: ColorPicker;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ColorPickerChangeEvent extends ColorPickerEvent {
value?: string;
}
interface ColorPickerSelectEvent extends ColorPickerEvent {
value?: string;
}
class ComboBox extends kendo.ui.Widget {
static fn: ComboBox;
options: ComboBoxOptions;
dataSource: kendo.data.DataSource;
input: JQuery;
list: JQuery;
ul: JQuery;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ComboBox;
constructor(element: Element, options?: ComboBoxOptions);
close(): void;
dataItem(index?: number): any;
destroy(): void;
enable(enable: boolean): void;
focus(): void;
items(): any;
open(): void;
readonly(readonly: boolean): void;
refresh(): void;
search(word: string): void;
select(): number;
select(li: JQuery): void;
select(li: number): void;
select(li: Function): void;
setDataSource(dataSource: kendo.data.DataSource): void;
suggest(value: string): void;
text(): string;
text(text: string): void;
toggle(toggle: boolean): void;
value(): string;
value(value: string): void;
}
interface ComboBoxAnimationClose {
effects?: string;
duration?: number;
}
interface ComboBoxAnimationOpen {
effects?: string;
duration?: number;
}
interface ComboBoxAnimation {
close?: ComboBoxAnimationClose;
open?: ComboBoxAnimationOpen;
}
interface ComboBoxPopup {
appendTo?: string;
origin?: string;
position?: string;
}
interface ComboBoxVirtual {
itemHeight?: number;
valueMapper?: Function;
}
interface ComboBoxOptions {
name?: string;
animation?: ComboBoxAnimation;
autoBind?: boolean;
cascadeFrom?: string;
cascadeFromField?: string;
dataSource?: any|any|kendo.data.DataSource;
dataTextField?: string;
dataValueField?: string;
delay?: number;
enable?: boolean;
filter?: string;
fixedGroupTemplate?: string|Function;
groupTemplate?: string|Function;
height?: number;
highlightFirst?: boolean;
ignoreCase?: boolean;
index?: number;
minLength?: number;
placeholder?: string;
popup?: ComboBoxPopup;
suggest?: boolean;
headerTemplate?: string|Function;
template?: string|Function;
text?: string;
value?: string;
valuePrimitive?: boolean;
virtual?: ComboBoxVirtual;
change?(e: ComboBoxChangeEvent): void;
close?(e: ComboBoxCloseEvent): void;
dataBound?(e: ComboBoxDataBoundEvent): void;
filtering?(e: ComboBoxFilteringEvent): void;
open?(e: ComboBoxOpenEvent): void;
select?(e: ComboBoxSelectEvent): void;
cascade?(e: ComboBoxCascadeEvent): void;
}
interface ComboBoxEvent {
sender: ComboBox;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ComboBoxChangeEvent extends ComboBoxEvent {
}
interface ComboBoxCloseEvent extends ComboBoxEvent {
}
interface ComboBoxDataBoundEvent extends ComboBoxEvent {
}
interface ComboBoxFilteringEvent extends ComboBoxEvent {
filter?: any;
}
interface ComboBoxOpenEvent extends ComboBoxEvent {
}
interface ComboBoxSelectEvent extends ComboBoxEvent {
item?: JQuery;
}
interface ComboBoxCascadeEvent extends ComboBoxEvent {
}
class ContextMenu extends kendo.ui.Widget {
static fn: ContextMenu;
options: ContextMenuOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ContextMenu;
constructor(element: Element, options?: ContextMenuOptions);
append(item: any, referenceItem: string): kendo.ui.ContextMenu;
append(item: any, referenceItem: JQuery): kendo.ui.ContextMenu;
close(element: Element): kendo.ui.ContextMenu;
close(element: JQuery): kendo.ui.ContextMenu;
destroy(): void;
enable(element: string, enable: boolean): kendo.ui.ContextMenu;
enable(element: Element, enable: boolean): kendo.ui.ContextMenu;
enable(element: JQuery, enable: boolean): kendo.ui.ContextMenu;
insertAfter(item: any, referenceItem: string): kendo.ui.ContextMenu;
insertAfter(item: any, referenceItem: Element): kendo.ui.ContextMenu;
insertAfter(item: any, referenceItem: JQuery): kendo.ui.ContextMenu;
insertBefore(item: any, referenceItem: string): kendo.ui.ContextMenu;
insertBefore(item: any, referenceItem: Element): kendo.ui.ContextMenu;
insertBefore(item: any, referenceItem: JQuery): kendo.ui.ContextMenu;
open(x: number, y?: number): kendo.ui.ContextMenu;
open(x: Element, y?: number): kendo.ui.ContextMenu;
open(x: JQuery, y?: number): kendo.ui.ContextMenu;
remove(element: string): kendo.ui.ContextMenu;
remove(element: Element): kendo.ui.ContextMenu;
remove(element: JQuery): kendo.ui.ContextMenu;
}
interface ContextMenuAnimationClose {
effects?: string;
duration?: number;
}
interface ContextMenuAnimationOpen {
effects?: string;
duration?: number;
}
interface ContextMenuAnimation {
close?: ContextMenuAnimationClose;
open?: ContextMenuAnimationOpen;
}
interface ContextMenuOptions {
name?: string;
alignToAnchor?: boolean;
animation?: ContextMenuAnimation;
closeOnClick?: boolean;
dataSource?: any|any;
direction?: string;
filter?: string;
hoverDelay?: number;
orientation?: string;
popupCollision?: string;
showOn?: string;
target?: string|JQuery;
close?(e: ContextMenuCloseEvent): void;
open?(e: ContextMenuOpenEvent): void;
activate?(e: ContextMenuActivateEvent): void;
deactivate?(e: ContextMenuDeactivateEvent): void;
select?(e: ContextMenuSelectEvent): void;
}
interface ContextMenuEvent {
sender: ContextMenu;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ContextMenuCloseEvent extends ContextMenuEvent {
item?: Element;
type?: string;
target?: Element;
event?: JQueryEventObject;
}
interface ContextMenuOpenEvent extends ContextMenuEvent {
item?: Element;
type?: string;
target?: Element;
event?: JQueryEventObject;
}
interface ContextMenuActivateEvent extends ContextMenuEvent {
item?: Element;
type?: string;
target?: Element;
}
interface ContextMenuDeactivateEvent extends ContextMenuEvent {
item?: Element;
type?: string;
target?: Element;
}
interface ContextMenuSelectEvent extends ContextMenuEvent {
item?: Element;
type?: string;
target?: Element;
}
class DatePicker extends kendo.ui.Widget {
static fn: DatePicker;
options: DatePickerOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): DatePicker;
constructor(element: Element, options?: DatePickerOptions);
close(): void;
destroy(): void;
enable(enable: boolean): void;
readonly(readonly: boolean): void;
max(): Date;
max(value: Date): void;
max(value: string): void;
min(): Date;
min(value: Date): void;
min(value: string): void;
open(): void;
setOptions(options: any): void;
value(): Date;
value(value: Date): void;
value(value: string): void;
}
interface DatePickerAnimationClose {
effects?: string;
duration?: number;
}
interface DatePickerAnimationOpen {
effects?: string;
duration?: number;
}
interface DatePickerAnimation {
close?: DatePickerAnimationClose;
open?: DatePickerAnimationOpen;
}
interface DatePickerMonth {
content?: string;
empty?: string;
}
interface DatePickerOptions {
name?: string;
animation?: DatePickerAnimation;
ARIATemplate?: string;
culture?: string;
dates?: any;
depth?: string;
disableDates?: any|Function;
footer?: string|Function;
format?: string;
max?: Date;
min?: Date;
month?: DatePickerMonth;
parseFormats?: any;
start?: string;
value?: Date;
change?(e: DatePickerChangeEvent): void;
close?(e: DatePickerCloseEvent): void;
open?(e: DatePickerOpenEvent): void;
}
interface DatePickerEvent {
sender: DatePicker;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface DatePickerChangeEvent extends DatePickerEvent {
}
interface DatePickerCloseEvent extends DatePickerEvent {
}
interface DatePickerOpenEvent extends DatePickerEvent {
}
class DateTimePicker extends kendo.ui.Widget {
static fn: DateTimePicker;
options: DateTimePickerOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): DateTimePicker;
constructor(element: Element, options?: DateTimePickerOptions);
close(view: string): void;
destroy(): void;
enable(enable: boolean): void;
readonly(readonly: boolean): void;
max(): Date;
max(value: Date): void;
max(value: string): void;
min(): Date;
min(value: Date): void;
min(value: string): void;
open(view: string): void;
setOptions(options: any): void;
toggle(view: string): void;
value(): Date;
value(value: Date): void;
value(value: string): void;
}
interface DateTimePickerAnimationClose {
effects?: string;
duration?: number;
}
interface DateTimePickerAnimationOpen {
effects?: string;
duration?: number;
}
interface DateTimePickerAnimation {
close?: DateTimePickerAnimationClose;
open?: DateTimePickerAnimationOpen;
}
interface DateTimePickerMonth {
content?: string;
empty?: string;
}
interface DateTimePickerOptions {
name?: string;
animation?: DateTimePickerAnimation;
ARIATemplate?: string;
culture?: string;
dates?: any;
depth?: string;
disableDates?: any|Function;
footer?: string;
format?: string;
interval?: number;
max?: Date;
min?: Date;
month?: DateTimePickerMonth;
parseFormats?: any;
start?: string;
timeFormat?: string;
value?: Date;
change?(e: DateTimePickerChangeEvent): void;
close?(e: DateTimePickerCloseEvent): void;
open?(e: DateTimePickerOpenEvent): void;
}
interface DateTimePickerEvent {
sender: DateTimePicker;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface DateTimePickerChangeEvent extends DateTimePickerEvent {
}
interface DateTimePickerCloseEvent extends DateTimePickerEvent {
view?: string;
}
interface DateTimePickerOpenEvent extends DateTimePickerEvent {
view?: string;
}
class DropDownList extends kendo.ui.Widget {
static fn: DropDownList;
options: DropDownListOptions;
dataSource: kendo.data.DataSource;
span: JQuery;
filterInput: JQuery;
list: JQuery;
ul: JQuery;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): DropDownList;
constructor(element: Element, options?: DropDownListOptions);
close(): void;
dataItem(index?: JQuery): any;
dataItem(index?: number): any;
destroy(): void;
focus(): void;
items(): any;
enable(enable: boolean): void;
open(): void;
readonly(readonly: boolean): void;
refresh(): void;
search(word: string): void;
select(): number;
select(li: JQuery): void;
select(li: number): void;
select(li: Function): void;
setDataSource(dataSource: kendo.data.DataSource): void;
text(): string;
text(text: string): void;
toggle(toggle: boolean): void;
value(): string;
value(value: string): void;
}
interface DropDownListAnimationClose {
effects?: string;
duration?: number;
}
interface DropDownListAnimationOpen {
effects?: string;
duration?: number;
}
interface DropDownListAnimation {
close?: DropDownListAnimationClose;
open?: DropDownListAnimationOpen;
}
interface DropDownListPopup {
appendTo?: string;
origin?: string;
position?: string;
}
interface DropDownListVirtual {
itemHeight?: number;
valueMapper?: Function;
}
interface DropDownListOptions {
name?: string;
animation?: DropDownListAnimation;
autoBind?: boolean;
cascadeFrom?: string;
cascadeFromField?: string;
dataSource?: any|any|kendo.data.DataSource;
dataTextField?: string;
dataValueField?: string;
delay?: number;
enable?: boolean;
filter?: string;
fixedGroupTemplate?: string|Function;
groupTemplate?: string|Function;
height?: number;
ignoreCase?: boolean;
index?: number;
minLength?: number;
popup?: DropDownListPopup;
optionLabel?: string|any;
optionLabelTemplate?: string|Function;
headerTemplate?: string|Function;
template?: string|Function;
valueTemplate?: string|Function;
text?: string;
value?: string;
valuePrimitive?: boolean;
virtual?: DropDownListVirtual;
change?(e: DropDownListChangeEvent): void;
close?(e: DropDownListCloseEvent): void;
dataBound?(e: DropDownListDataBoundEvent): void;
filtering?(e: DropDownListFilteringEvent): void;
open?(e: DropDownListOpenEvent): void;
select?(e: DropDownListSelectEvent): void;
cascade?(e: DropDownListCascadeEvent): void;
}
interface DropDownListEvent {
sender: DropDownList;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface DropDownListChangeEvent extends DropDownListEvent {
}
interface DropDownListCloseEvent extends DropDownListEvent {
}
interface DropDownListDataBoundEvent extends DropDownListEvent {
}
interface DropDownListFilteringEvent extends DropDownListEvent {
filter?: any;
}
interface DropDownListOpenEvent extends DropDownListEvent {
}
interface DropDownListSelectEvent extends DropDownListEvent {
item?: JQuery;
}
interface DropDownListCascadeEvent extends DropDownListEvent {
}
class Editor extends kendo.ui.Widget {
static fn: Editor;
options: EditorOptions;
body: Element;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Editor;
constructor(element: Element, options?: EditorOptions);
createRange(document?: Document): Range;
destroy(): void;
encodedValue(): void;
exec(name: string, params: any): void;
focus(): void;
getRange(): Range;
getSelection(): Selection;
paste(html: string, options: any): void;
selectedHtml(): string;
refresh(): void;
saveAsPDF(): JQueryPromise<any>;
selectRange(range: Range): void;
update(): void;
state(toolName: string): boolean;
value(): string;
value(value: string): void;
}
interface EditorFileBrowserMessages {
uploadFile?: string;
orderBy?: string;
orderByName?: string;
orderBySize?: string;
directoryNotFound?: string;
emptyFolder?: string;
deleteFile?: string;
invalidFileType?: string;
overwriteFile?: string;
search?: string;
}
interface EditorFileBrowserSchemaModelFieldsName {
field?: string;
parse?: Function;
}
interface EditorFileBrowserSchemaModelFieldsSize {
field?: string;
parse?: Function;
}
interface EditorFileBrowserSchemaModelFieldsType {
parse?: Function;
field?: string;
}
interface EditorFileBrowserSchemaModelFields {
name?: EditorFileBrowserSchemaModelFieldsName;
type?: EditorFileBrowserSchemaModelFieldsType;
size?: EditorFileBrowserSchemaModelFieldsSize;
}
interface EditorFileBrowserSchemaModel {
id?: string;
fields?: EditorFileBrowserSchemaModelFields;
}
interface EditorFileBrowserSchema {
}
interface EditorFileBrowserTransportCreate {
contentType?: string;
data?: any|string|Function;
dataType?: string;
type?: string;
url?: string|Function;
}
interface EditorFileBrowserTransportDestroy {
contentType?: string;
data?: any|string|Function;
dataType?: string;
type?: string;
url?: string|Function;
}
interface EditorFileBrowserTransportRead {
contentType?: string;
data?: any|string|Function;
dataType?: string;
type?: string;
url?: string|Function;
}
interface EditorFileBrowserTransport {
read?: EditorFileBrowserTransportRead;
uploadUrl?: string;
fileUrl?: string|Function;
destroy?: EditorFileBrowserTransportDestroy;
create?: EditorFileBrowserTransportCreate;
}
interface EditorFileBrowser {
fileTypes?: string;
path?: string;
transport?: EditorFileBrowserTransport;
schema?: EditorFileBrowserSchema;
messages?: EditorFileBrowserMessages;
}
interface EditorImageBrowserMessages {
uploadFile?: string;
orderBy?: string;
orderByName?: string;
orderBySize?: string;
directoryNotFound?: string;
emptyFolder?: string;
deleteFile?: string;
invalidFileType?: string;
overwriteFile?: string;
search?: string;
}
interface EditorImageBrowserSchemaModelFieldsName {
field?: string;
parse?: Function;
}
interface EditorImageBrowserSchemaModelFieldsSize {
field?: string;
parse?: Function;
}
interface EditorImageBrowserSchemaModelFieldsType {
parse?: Function;
field?: string;
}
interface EditorImageBrowserSchemaModelFields {
name?: EditorImageBrowserSchemaModelFieldsName;
type?: EditorImageBrowserSchemaModelFieldsType;
size?: EditorImageBrowserSchemaModelFieldsSize;
}
interface EditorImageBrowserSchemaModel {
id?: string;
fields?: EditorImageBrowserSchemaModelFields;
}
interface EditorImageBrowserSchema {
}
interface EditorImageBrowserTransportCreate {
contentType?: string;
data?: any|string|Function;
dataType?: string;
type?: string;
url?: string|Function;
}
interface EditorImageBrowserTransportDestroy {
contentType?: string;
data?: any|string|Function;
dataType?: string;
type?: string;
url?: string|Function;
}
interface EditorImageBrowserTransportRead {
contentType?: string;
data?: any|string|Function;
dataType?: string;
type?: string;
url?: string|Function;
}
interface EditorImageBrowserTransport {
read?: EditorImageBrowserTransportRead;
thumbnailUrl?: string|Function;
uploadUrl?: string;
imageUrl?: string|Function;
destroy?: EditorImageBrowserTransportDestroy;
create?: EditorImageBrowserTransportCreate;
}
interface EditorImageBrowser {
fileTypes?: string;
path?: string;
transport?: EditorImageBrowserTransport;
schema?: EditorImageBrowserSchema;
messages?: EditorImageBrowserMessages;
}
interface EditorMessages {
bold?: string;
italic?: string;
underline?: string;
strikethrough?: string;
superscript?: string;
subscript?: string;
justifyCenter?: string;
justifyLeft?: string;
justifyRight?: string;
justifyFull?: string;
insertUnorderedList?: string;
insertOrderedList?: string;
indent?: string;
outdent?: string;
createLink?: string;
unlink?: string;
insertImage?: string;
insertFile?: string;
insertHtml?: string;
viewHtml?: string;
fontName?: string;
fontNameInherit?: string;
fontSize?: string;
fontSizeInherit?: string;
formatBlock?: string;
formatting?: string;
foreColor?: string;
backColor?: string;
style?: string;
emptyFolder?: string;
uploadFile?: string;
editAreaTitle?: string;
orderBy?: string;
orderBySize?: string;
orderByName?: string;
invalidFileType?: string;
deleteFile?: string;
overwriteFile?: string;
directoryNotFound?: string;
imageWebAddress?: string;
imageAltText?: string;
imageWidth?: string;
imageHeight?: string;
fileWebAddress?: string;
fileTitle?: string;
linkWebAddress?: string;
linkText?: string;
linkToolTip?: string;
linkOpenInNewWindow?: string;
dialogUpdate?: string;
dialogInsert?: string;
dialogCancel?: string;
createTable?: string;
createTableHint?: string;
addColumnLeft?: string;
addColumnRight?: string;
addRowAbove?: string;
addRowBelow?: string;
deleteRow?: string;
deleteColumn?: string;
}
interface EditorPdfMargin {
bottom?: number|string;
left?: number|string;
right?: number|string;
top?: number|string;
}
interface EditorPdf {
author?: string;
avoidLinks?: boolean|string;
creator?: string;
date?: Date;
fileName?: string;
forceProxy?: boolean;
keywords?: string;
landscape?: boolean;
margin?: EditorPdfMargin;
paperSize?: string|any;
proxyURL?: string;
proxyTarget?: string;
subject?: string;
title?: string;
}
interface EditorResizable {
content?: boolean;
min?: number;
max?: number;
toolbar?: boolean;
}
interface EditorSerialization {
entities?: boolean;
scripts?: boolean;
semantic?: boolean;
}
interface EditorToolItem {
text?: string;
value?: string;
context?: string;
}
interface EditorTool {
name?: string;
tooltip?: string;
exec?: Function;
items?: EditorToolItem[];
template?: string;
}
interface EditorExecParams {
value?: any;
}
interface EditorPasteOptions {
split?: boolean;
}
interface EditorOptions {
name?: string;
domain?: string;
encoded?: boolean;
messages?: EditorMessages;
pdf?: EditorPdf;
resizable?: EditorResizable;
serialization?: EditorSerialization;
stylesheets?: any;
tools?: EditorTool[];
imageBrowser?: EditorImageBrowser;
fileBrowser?: EditorFileBrowser;
change?(e: EditorEvent): void;
execute?(e: EditorExecuteEvent): void;
keydown?(e: EditorEvent): void;
keyup?(e: EditorEvent): void;
paste?(e: EditorPasteEvent): void;
pdfExport?(e: EditorPdfExportEvent): void;
select?(e: EditorEvent): void;
}
interface EditorEvent {
sender: Editor;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface EditorExecuteEvent extends EditorEvent {
name?: string;
command?: any;
}
interface EditorPasteEvent extends EditorEvent {
html?: any;
}
interface EditorPdfExportEvent extends EditorEvent {
promise?: JQueryPromise<any>;
}
class FlatColorPicker extends kendo.ui.Widget {
static fn: FlatColorPicker;
options: FlatColorPickerOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): FlatColorPicker;
constructor(element: Element, options?: FlatColorPickerOptions);
focus(): void;
value(): string;
value(color?: string): void;
color(): kendo.Color;
color(color?: kendo.Color): void;
enable(enable?: boolean): void;
}
interface FlatColorPickerMessages {
apply?: string;
cancel?: string;
}
interface FlatColorPickerOptions {
name?: string;
opacity?: boolean;
buttons?: boolean;
value?: string;
preview?: boolean;
autoupdate?: boolean;
messages?: FlatColorPickerMessages;
change?(e: FlatColorPickerChangeEvent): void;
}
interface FlatColorPickerEvent {
sender: FlatColorPicker;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface FlatColorPickerChangeEvent extends FlatColorPickerEvent {
value?: string;
}
class Gantt extends kendo.ui.Widget {
static fn: Gantt;
options: GanttOptions;
dataSource: kendo.data.DataSource;
dependencies: kendo.data.GanttDependencyDataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Gantt;
constructor(element: Element, options?: GanttOptions);
clearSelection(): void;
dataItem(row: string): kendo.data.GanttTask;
dataItem(row: Element): kendo.data.GanttTask;
dataItem(row: JQuery): kendo.data.GanttTask;
destroy(): void;
refresh(): void;
refreshDependencies(): void;
removeDependency(dependency: string): void;
removeDependency(dependency: kendo.data.GanttDependency): void;
removeTask(task: string): void;
removeTask(task: kendo.data.GanttTask): void;
saveAsPDF(): JQueryPromise<any>;
select(): JQuery;
select(row: string): void;
select(row: Element): void;
select(row: JQuery): void;
setDataSource(dataSource: kendo.data.GanttDataSource): void;
setDependenciesDataSource(dataSource: kendo.data.GanttDependencyDataSource): void;
view(): kendo.ui.GanttView;
view(type?: string): void;
}
interface GanttAssignments {
dataSource?: any|any|kendo.data.DataSource;
dataResourceIdField?: string;
dataTaskIdField?: string;
dataValueField?: string;
}
interface GanttColumn {
field?: string;
title?: string;
format?: string;
width?: string|number;
editable?: boolean;
sortable?: boolean;
}
interface GanttCurrentTimeMarker {
updateInterval?: number;
}
interface GanttEditable {
confirmation?: boolean;
template?: string|Function;
}
interface GanttMessagesActions {
addChild?: string;
append?: string;
insertAfter?: string;
insertBefore?: string;
pdf?: string;
}
interface GanttMessagesEditor {
assignButton?: string;
editorTitle?: string;
end?: string;
percentComplete?: string;
resources?: string;
resourcesEditorTitle?: string;
resourcesHeader?: string;
start?: string;
title?: string;
unitsHeader?: string;
}
interface GanttMessagesViews {
day?: string;
end?: string;
month?: string;
start?: string;
week?: string;
year?: string;
}
interface GanttMessages {
actions?: GanttMessagesActions;
cancel?: string;
deleteDependencyConfirmation?: string;
deleteDependencyWindowTitle?: string;
deleteTaskConfirmation?: string;
deleteTaskWindowTitle?: string;
destroy?: string;
editor?: GanttMessagesEditor;
save?: string;
views?: GanttMessagesViews;
}
interface GanttPdfMargin {
bottom?: number|string;
left?: number|string;
right?: number|string;
top?: number|string;
}
interface GanttPdf {
author?: string;
avoidLinks?: boolean|string;
creator?: string;
date?: Date;
fileName?: string;
forceProxy?: boolean;
keywords?: string;
landscape?: boolean;
margin?: GanttPdfMargin;
paperSize?: string|any;
proxyURL?: string;
proxyTarget?: string;
subject?: string;
title?: string;
}
interface GanttResources {
dataFormatField?: string;
dataColorField?: string;
dataSource?: any|any|kendo.data.DataSource;
dataTextField?: string;
field?: string;
}
interface GanttToolbarItem {
name?: string;
template?: string|Function;
text?: string;
}
interface GanttTooltip {
template?: string|Function;
visible?: boolean;
}
interface GanttView {
type?: string;
selected?: boolean;
slotSize?: number|string;
timeHeaderTemplate?: string|Function;
dayHeaderTemplate?: string|Function;
weekHeaderTemplate?: string|Function;
monthHeaderTemplate?: string|Function;
yearHeaderTemplate?: string|Function;
resizeTooltipFormat?: string;
}
interface GanttOptions {
name?: string;
assignments?: GanttAssignments;
autoBind?: boolean;
columnResizeHandleWidth?: number;
columns?: GanttColumn[];
currentTimeMarker?: GanttCurrentTimeMarker;
dataSource?: any|any|kendo.data.GanttDataSource;
dependencies?: any|any|kendo.data.GanttDependencyDataSource;
editable?: GanttEditable;
navigatable?: boolean;
workDayStart?: Date;
workDayEnd?: Date;
workWeekStart?: number;
workWeekEnd?: number;
hourSpan?: number;
snap?: boolean;
height?: number|string;
listWidth?: string|number;
messages?: GanttMessages;
pdf?: GanttPdf;
resizable?: boolean;
selectable?: boolean;
showWorkDays?: boolean;
showWorkHours?: boolean;
taskTemplate?: string|Function;
toolbar?: GanttToolbarItem[];
tooltip?: GanttTooltip;
views?: GanttView[];
resources?: GanttResources;
rowHeight?: number|string;
dataBinding?(e: GanttDataBindingEvent): void;
dataBound?(e: GanttDataBoundEvent): void;
add?(e: GanttAddEvent): void;
edit?(e: GanttEditEvent): void;
remove?(e: GanttRemoveEvent): void;
cancel?(e: GanttCancelEvent): void;
save?(e: GanttSaveEvent): void;
change?(e: GanttChangeEvent): void;
columnResize?(e: GanttColumnResizeEvent): void;
navigate?(e: GanttNavigateEvent): void;
moveStart?(e: GanttMoveStartEvent): void;
move?(e: GanttMoveEvent): void;
moveEnd?(e: GanttMoveEndEvent): void;
pdfExport?(e: GanttPdfExportEvent): void;
resizeStart?(e: GanttResizeStartEvent): void;
resize?(e: GanttResizeEvent): void;
resizeEnd?(e: GanttResizeEndEvent): void;
}
interface GanttEvent {
sender: Gantt;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface GanttDataBindingEvent extends GanttEvent {
}
interface GanttDataBoundEvent extends GanttEvent {
}
interface GanttAddEvent extends GanttEvent {
task?: kendo.data.GanttTask;
dependency?: kendo.data.GanttDependency;
}
interface GanttEditEvent extends GanttEvent {
container?: JQuery;
task?: kendo.data.GanttTask;
}
interface GanttRemoveEvent extends GanttEvent {
task?: kendo.data.GanttTask;
dependencies?: any;
}
interface GanttCancelEvent extends GanttEvent {
container?: JQuery;
task?: kendo.data.GanttTask;
}
interface GanttSaveEvent extends GanttEvent {
task?: kendo.data.GanttTask;
values?: any;
}
interface GanttChangeEvent extends GanttEvent {
}
interface GanttColumnResizeEvent extends GanttEvent {
column?: any;
newWidth?: number;
oldWidth?: number;
}
interface GanttNavigateEvent extends GanttEvent {
view?: string;
}
interface GanttMoveStartEvent extends GanttEvent {
task?: kendo.data.GanttTask;
}
interface GanttMoveEvent extends GanttEvent {
task?: kendo.data.GanttTask;
start?: Date;
end?: Date;
}
interface GanttMoveEndEvent extends GanttEvent {
task?: kendo.data.GanttTask;
start?: Date;
end?: Date;
}
interface GanttPdfExportEvent extends GanttEvent {
promise?: JQueryPromise<any>;
}
interface GanttResizeStartEvent extends GanttEvent {
task?: kendo.data.GanttTask;
}
interface GanttResizeEvent extends GanttEvent {
task?: kendo.data.GanttTask;
start?: Date;
end?: Date;
}
interface GanttResizeEndEvent extends GanttEvent {
task?: kendo.data.GanttTask;
start?: Date;
end?: Date;
}
class Grid extends kendo.ui.Widget {
static fn: Grid;
options: GridOptions;
dataSource: kendo.data.DataSource;
columns: GridColumn[];
footer: JQuery;
pager: kendo.ui.Pager;
table: JQuery;
tbody: JQuery;
thead: JQuery;
content: JQuery;
lockedHeader: JQuery;
lockedTable: JQuery;
lockedContent: JQuery;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Grid;
constructor(element: Element, options?: GridOptions);
addRow(): void;
autoFitColumn(column: number): void;
autoFitColumn(column: string): void;
autoFitColumn(column: any): void;
cancelChanges(): void;
cancelRow(): void;
cellIndex(cell: string): number;
cellIndex(cell: Element): number;
cellIndex(cell: JQuery): number;
clearSelection(): void;
closeCell(isCancel?: boolean): void;
collapseGroup(row: string): void;
collapseGroup(row: Element): void;
collapseGroup(row: JQuery): void;
collapseRow(row: string): void;
collapseRow(row: Element): void;
collapseRow(row: JQuery): void;
current(): JQuery;
current(cell: JQuery): void;
dataItem(row: string): kendo.data.ObservableObject;
dataItem(row: Element): kendo.data.ObservableObject;
dataItem(row: JQuery): kendo.data.ObservableObject;
destroy(): void;
editCell(cell: JQuery): void;
editRow(row: JQuery): void;
expandGroup(row: string): void;
expandGroup(row: Element): void;
expandGroup(row: JQuery): void;
expandRow(row: string): void;
expandRow(row: Element): void;
expandRow(row: JQuery): void;
getOptions(): GridOptions;
hideColumn(column: number): void;
hideColumn(column: string): void;
hideColumn(column: any): void;
items(): any;
lockColumn(column: number): void;
lockColumn(column: string): void;
refresh(): void;
removeRow(row: string): void;
removeRow(row: Element): void;
removeRow(row: JQuery): void;
reorderColumn(destIndex: number, column: any): void;
saveAsExcel(): void;
saveAsPDF(): JQueryPromise<any>;
saveChanges(): void;
saveRow(): void;
select(): JQuery;
select(rows: string): void;
select(rows: Element): void;
select(rows: JQuery): void;
setDataSource(dataSource: kendo.data.DataSource): void;
setOptions(options: any): void;
showColumn(column: number): void;
showColumn(column: string): void;
showColumn(column: any): void;
unlockColumn(column: number): void;
unlockColumn(column: string): void;
}
interface GridAllowCopy {
delimeter?: string|any;
}
interface GridColumnMenuMessages {
columns?: string;
filter?: string;
sortAscending?: string;
sortDescending?: string;
settings?: string;
done?: string;
lock?: string;
unlock?: string;
}
interface GridColumnMenu {
columns?: boolean;
filterable?: boolean;
sortable?: boolean;
messages?: GridColumnMenuMessages;
}
interface GridColumnCommandItemText {
edit?: string;
cancel?: string;
update?: string;
}
interface GridColumnCommandItem {
name?: string;
text?: GridColumnCommandItemText;
className?: string;
click?: Function;
}
interface GridColumnFilterableCell {
dataSource?: any|kendo.data.DataSource;
dataTextField?: string;
delay?: number;
inputWidth?: number;
suggestionOperator?: string;
minLength?: number;
enabled?: boolean;
operator?: string;
showOperators?: boolean;
template?: Function;
}
interface GridColumnFilterable {
cell?: GridColumnFilterableCell;
multi?: boolean;
dataSource?: any|any|kendo.data.DataSource;
checkAll?: boolean;
itemTemplate?: Function;
operators?: any;
search?: boolean;
ignoreCase?: boolean;
ui?: string|Function;
}
interface GridColumnSortable {
compare?: Function;
}
interface GridColumn {
aggregates?: any;
attributes?: any;
columns?: any;
command?: GridColumnCommandItem[];
encoded?: boolean;
field?: string;
filterable?: GridColumnFilterable;
footerTemplate?: string|Function;
format?: string;
groupable?: boolean;
groupHeaderTemplate?: string|Function;
groupFooterTemplate?: string|Function;
headerAttributes?: any;
headerTemplate?: string|Function;
hidden?: boolean;
locked?: boolean;
lockable?: boolean;
minScreenWidth?: number;
sortable?: GridColumnSortable;
template?: string|Function;
title?: string;
width?: string|number;
values?: any;
menu?: boolean;
}
interface GridEditable {
confirmation?: boolean|string|Function;
cancelDelete?: string;
confirmDelete?: string;
createAt?: string;
destroy?: boolean;
mode?: string;
template?: string|Function;
update?: boolean;
window?: any;
}
interface GridExcel {
allPages?: boolean;
fileName?: string;
filterable?: boolean;
forceProxy?: boolean;
proxyURL?: string;
}
interface GridFilterableMessages {
and?: string;
clear?: string;
filter?: string;
info?: string;
isFalse?: string;
isTrue?: string;
or?: string;
search?: string;
selectValue?: string;
cancel?: string;
operator?: string;
value?: string;
checkAll?: string;
}
interface GridFilterableOperatorsDate {
eq?: string;
neq?: string;
isnull?: string;
isnotnull?: string;
gte?: string;
gt?: string;
lte?: string;
lt?: string;
}
interface GridFilterableOperatorsEnums {
eq?: string;
neq?: string;
isnull?: string;
isnotnull?: string;
}
interface GridFilterableOperatorsNumber {
eq?: string;
neq?: string;
isnull?: string;
isnotnull?: string;
gte?: string;
gt?: string;
lte?: string;
lt?: string;
}
interface GridFilterableOperatorsString {
eq?: string;
neq?: string;
isnull?: string;
isnotnull?: string;
isempty?: string;
isnotempty?: string;
startswith?: string;
contains?: string;
doesnotcontain?: string;
endswith?: string;
}
interface GridFilterableOperators {
string?: GridFilterableOperatorsString;
number?: GridFilterableOperatorsNumber;
date?: GridFilterableOperatorsDate;
enums?: GridFilterableOperatorsEnums;
}
interface GridFilterable {
extra?: boolean;
messages?: GridFilterableMessages;
operators?: GridFilterableOperators;
mode?: string;
}
interface GridGroupableMessages {
empty?: string;
}
interface GridGroupable {
enabled?: boolean;
showFooter?: boolean;
messages?: GridGroupableMessages;
}
interface GridMessagesCommands {
cancel?: string;
canceledit?: string;
create?: string;
destroy?: string;
edit?: string;
excel?: string;
save?: string;
update?: string;
}
interface GridMessages {
commands?: GridMessagesCommands;
noRecords?: string;
}
interface GridNoRecords {
template?: string|Function;
}
interface GridPageableMessages {
display?: string;
empty?: string;
page?: string;
of?: string;
itemsPerPage?: string;
first?: string;
last?: string;
next?: string;
previous?: string;
refresh?: string;
morePages?: string;
}
interface GridPageable {
pageSize?: number;
previousNext?: boolean;
numeric?: boolean;
buttonCount?: number;
input?: boolean;
pageSizes?: boolean|any;
refresh?: boolean;
info?: boolean;
messages?: GridPageableMessages;
}
interface GridPdfMargin {
bottom?: number|string;
left?: number|string;
right?: number|string;
top?: number|string;
}
interface GridPdf {
allPages?: boolean;
author?: string;
avoidLinks?: boolean|string;
creator?: string;
date?: Date;
fileName?: string;
forceProxy?: boolean;
keywords?: string;
landscape?: boolean;
margin?: GridPdfMargin;
paperSize?: string|any;
proxyURL?: string;
proxyTarget?: string;
subject?: string;
title?: string;
}
interface GridScrollable {
virtual?: boolean;
}
interface GridSortable {
allowUnsort?: boolean;
mode?: string;
}
interface GridToolbarItem {
name?: string;
template?: string|Function;
text?: string;
}
interface GridOptions {
name?: string;
allowCopy?: GridAllowCopy;
altRowTemplate?: string|Function;
autoBind?: boolean;
columnResizeHandleWidth?: number;
columns?: GridColumn[];
columnMenu?: GridColumnMenu;
dataSource?: any|any|kendo.data.DataSource;
detailTemplate?: string|Function;
editable?: GridEditable;
excel?: GridExcel;
filterable?: GridFilterable;
groupable?: GridGroupable;
height?: number|string;
messages?: GridMessages;
mobile?: boolean|string;
navigatable?: boolean;
noRecords?: GridNoRecords;
pageable?: GridPageable;
pdf?: GridPdf;
reorderable?: boolean;
resizable?: boolean;
rowTemplate?: string|Function;
scrollable?: GridScrollable;
selectable?: boolean|string;
sortable?: GridSortable;
toolbar?: GridToolbarItem[] | any;
cancel?(e: GridCancelEvent): void;
change?(e: GridChangeEvent): void;
columnHide?(e: GridColumnHideEvent): void;
columnMenuInit?(e: GridColumnMenuInitEvent): void;
columnReorder?(e: GridColumnReorderEvent): void;
columnResize?(e: GridColumnResizeEvent): void;
columnShow?(e: GridColumnShowEvent): void;
dataBinding?(e: GridDataBindingEvent): void;
dataBound?(e: GridDataBoundEvent): void;
detailCollapse?(e: GridDetailCollapseEvent): void;
detailExpand?(e: GridDetailExpandEvent): void;
detailInit?(e: GridDetailInitEvent): void;
edit?(e: GridEditEvent): void;
excelExport?(e: GridExcelExportEvent): void;
pdfExport?(e: GridPdfExportEvent): void;
filterMenuInit?(e: GridFilterMenuInitEvent): void;
remove?(e: GridRemoveEvent): void;
save?(e: GridSaveEvent): void;
saveChanges?(e: GridSaveChangesEvent): void;
columnLock?(e: GridColumnLockEvent): void;
columnUnlock?(e: GridColumnUnlockEvent): void;
navigate?(e: GridNavigateEvent): void;
}
interface GridEvent {
sender: Grid;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface GridCancelEvent extends GridEvent {
container?: JQuery;
model?: kendo.data.Model;
}
interface GridChangeEvent extends GridEvent {
}
interface GridColumnHideEvent extends GridEvent {
column?: any;
}
interface GridColumnMenuInitEvent extends GridEvent {
container?: JQuery;
field?: string;
}
interface GridColumnReorderEvent extends GridEvent {
column?: any;
newIndex?: number;
oldIndex?: number;
}
interface GridColumnResizeEvent extends GridEvent {
column?: any;
newWidth?: number;
oldWidth?: number;
}
interface GridColumnShowEvent extends GridEvent {
column?: any;
}
interface GridDataBindingEvent extends GridEvent {
action?: string;
index?: number;
items?: any;
}
interface GridDataBoundEvent extends GridEvent {
}
interface GridDetailCollapseEvent extends GridEvent {
detailRow?: JQuery;
masterRow?: JQuery;
}
interface GridDetailExpandEvent extends GridEvent {
detailRow?: JQuery;
masterRow?: JQuery;
}
interface GridDetailInitEvent extends GridEvent {
data?: kendo.data.ObservableObject;
detailCell?: JQuery;
detailRow?: JQuery;
masterRow?: JQuery;
}
interface GridEditEvent extends GridEvent {
container?: JQuery;
model?: kendo.data.Model;
}
interface GridExcelExportEvent extends GridEvent {
data?: any;
workbook?: kendo.ooxml.Workbook;
}
interface GridPdfExportEvent extends GridEvent {
promise?: JQueryPromise<any>;
}
interface GridFilterMenuInitEvent extends GridEvent {
container?: JQuery;
field?: string;
}
interface GridRemoveEvent extends GridEvent {
model?: kendo.data.Model;
row?: JQuery;
}
interface GridSaveEvent extends GridEvent {
model?: kendo.data.Model;
container?: JQuery;
values?: any;
}
interface GridSaveChangesEvent extends GridEvent {
}
interface GridColumnLockEvent extends GridEvent {
column?: any;
}
interface GridColumnUnlockEvent extends GridEvent {
column?: any;
}
interface GridNavigateEvent extends GridEvent {
element?: JQuery;
}
class ListView extends kendo.ui.Widget {
static fn: ListView;
options: ListViewOptions;
dataSource: kendo.data.DataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ListView;
constructor(element: Element, options?: ListViewOptions);
add(): void;
cancel(): void;
clearSelection(): void;
dataItem(row: string): kendo.data.ObservableObject;
dataItem(row: Element): kendo.data.ObservableObject;
dataItem(row: JQuery): kendo.data.ObservableObject;
dataItems(): void;
destroy(): void;
edit(item: JQuery): void;
items(): any;
refresh(): void;
remove(item: any): void;
save(): void;
select(): JQuery;
select(items: JQuery): void;
select(items: any): void;
setDataSource(dataSource: kendo.data.DataSource): void;
}
interface ListViewOptions {
name?: string;
autoBind?: boolean;
dataSource?: any|any|kendo.data.DataSource;
editTemplate?: Function;
navigatable?: boolean;
selectable?: boolean|string;
template?: Function;
altTemplate?: Function;
cancel?(e: ListViewCancelEvent): void;
change?(e: ListViewEvent): void;
dataBound?(e: ListViewEvent): void;
dataBinding?(e: ListViewEvent): void;
edit?(e: ListViewEditEvent): void;
remove?(e: ListViewRemoveEvent): void;
save?(e: ListViewSaveEvent): void;
}
interface ListViewEvent {
sender: ListView;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ListViewCancelEvent extends ListViewEvent {
container?: JQuery;
model?: kendo.data.Model;
}
interface ListViewEditEvent extends ListViewEvent {
item?: JQuery;
model?: kendo.data.Model;
}
interface ListViewRemoveEvent extends ListViewEvent {
item?: JQuery;
model?: kendo.data.Model;
}
interface ListViewSaveEvent extends ListViewEvent {
model?: kendo.data.Model;
item?: JQuery;
}
class MaskedTextBox extends kendo.ui.Widget {
static fn: MaskedTextBox;
options: MaskedTextBoxOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): MaskedTextBox;
constructor(element: Element, options?: MaskedTextBoxOptions);
destroy(): void;
enable(enable: boolean): void;
readonly(readonly: boolean): void;
raw(): string;
value(): string;
value(value: string): void;
}
interface MaskedTextBoxOptions {
name?: string;
clearPromptChar?: boolean;
culture?: string;
mask?: string;
promptChar?: string;
rules?: any;
unmaskOnPost?: boolean;
value?: string;
change?(e: MaskedTextBoxChangeEvent): void;
}
interface MaskedTextBoxEvent {
sender: MaskedTextBox;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface MaskedTextBoxChangeEvent extends MaskedTextBoxEvent {
}
class Menu extends kendo.ui.Widget {
static fn: Menu;
options: MenuOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Menu;
constructor(element: Element, options?: MenuOptions);
append(item: any, referenceItem: string): kendo.ui.Menu;
append(item: any, referenceItem: JQuery): kendo.ui.Menu;
close(element: string): kendo.ui.Menu;
close(element: Element): kendo.ui.Menu;
close(element: JQuery): kendo.ui.Menu;
destroy(): void;
enable(element: string, enable: boolean): kendo.ui.Menu;
enable(element: Element, enable: boolean): kendo.ui.Menu;
enable(element: JQuery, enable: boolean): kendo.ui.Menu;
insertAfter(item: any, referenceItem: string): kendo.ui.Menu;
insertAfter(item: any, referenceItem: Element): kendo.ui.Menu;
insertAfter(item: any, referenceItem: JQuery): kendo.ui.Menu;
insertBefore(item: any, referenceItem: string): kendo.ui.Menu;
insertBefore(item: any, referenceItem: Element): kendo.ui.Menu;
insertBefore(item: any, referenceItem: JQuery): kendo.ui.Menu;
open(element: string): kendo.ui.Menu;
open(element: Element): kendo.ui.Menu;
open(element: JQuery): kendo.ui.Menu;
remove(element: string): kendo.ui.Menu;
remove(element: Element): kendo.ui.Menu;
remove(element: JQuery): kendo.ui.Menu;
}
interface MenuAnimationClose {
effects?: string;
duration?: number;
}
interface MenuAnimationOpen {
effects?: string;
duration?: number;
}
interface MenuAnimation {
close?: MenuAnimationClose;
open?: MenuAnimationOpen;
}
interface MenuOptions {
name?: string;
animation?: MenuAnimation;
closeOnClick?: boolean;
dataSource?: any|any;
direction?: string;
hoverDelay?: number;
openOnClick?: boolean;
orientation?: string;
popupCollision?: string;
close?(e: MenuCloseEvent): void;
open?(e: MenuOpenEvent): void;
activate?(e: MenuActivateEvent): void;
deactivate?(e: MenuDeactivateEvent): void;
select?(e: MenuSelectEvent): void;
}
interface MenuEvent {
sender: Menu;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface MenuCloseEvent extends MenuEvent {
item?: HTMLElement;
}
interface MenuOpenEvent extends MenuEvent {
item?: HTMLElement;
}
interface MenuActivateEvent extends MenuEvent {
item?: HTMLElement;
}
interface MenuDeactivateEvent extends MenuEvent {
item?: HTMLElement;
}
interface MenuSelectEvent extends MenuEvent {
item?: HTMLElement;
}
class MultiSelect extends kendo.ui.Widget {
static fn: MultiSelect;
options: MultiSelectOptions;
dataSource: kendo.data.DataSource;
input: JQuery;
list: JQuery;
ul: JQuery;
tagList: JQuery;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): MultiSelect;
constructor(element: Element, options?: MultiSelectOptions);
close(): void;
dataItems(): any;
destroy(): void;
enable(enable: boolean): void;
focus(): void;
items(): any;
open(): void;
readonly(readonly: boolean): void;
refresh(): void;
search(word: string): void;
setDataSource(dataSource: kendo.data.DataSource): void;
toggle(toggle: boolean): void;
value(): any;
value(value: any): void;
value(value: string): void;
}
interface MultiSelectAnimationClose {
effects?: string;
duration?: number;
}
interface MultiSelectAnimationOpen {
effects?: string;
duration?: number;
}
interface MultiSelectAnimation {
close?: MultiSelectAnimationClose;
open?: MultiSelectAnimationOpen;
}
interface MultiSelectPopup {
appendTo?: string;
origin?: string;
position?: string;
}
interface MultiSelectVirtual {
itemHeight?: number;
valueMapper?: Function;
}
interface MultiSelectOptions {
name?: string;
animation?: MultiSelectAnimation;
autoBind?: boolean;
autoClose?: boolean;
dataSource?: any|any|kendo.data.DataSource;
dataTextField?: string;
dataValueField?: string;
delay?: number;
enable?: boolean;
filter?: string;
fixedGroupTemplate?: string|Function;
groupTemplate?: string|Function;
height?: number;
highlightFirst?: boolean;
ignoreCase?: boolean;
minLength?: number;
maxSelectedItems?: number;
placeholder?: string;
popup?: MultiSelectPopup;
headerTemplate?: string|Function;
itemTemplate?: string|Function;
tagTemplate?: string;
tagMode?: string;
value?: any;
valuePrimitive?: boolean;
virtual?: MultiSelectVirtual;
change?(e: MultiSelectChangeEvent): void;
close?(e: MultiSelectCloseEvent): void;
dataBound?(e: MultiSelectDataBoundEvent): void;
filtering?(e: MultiSelectFilteringEvent): void;
open?(e: MultiSelectOpenEvent): void;
select?(e: MultiSelectSelectEvent): void;
}
interface MultiSelectEvent {
sender: MultiSelect;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface MultiSelectChangeEvent extends MultiSelectEvent {
}
interface MultiSelectCloseEvent extends MultiSelectEvent {
}
interface MultiSelectDataBoundEvent extends MultiSelectEvent {
}
interface MultiSelectFilteringEvent extends MultiSelectEvent {
filter?: any;
}
interface MultiSelectOpenEvent extends MultiSelectEvent {
}
interface MultiSelectSelectEvent extends MultiSelectEvent {
item?: JQuery;
}
class Notification extends kendo.ui.Widget {
static fn: Notification;
options: NotificationOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Notification;
constructor(element: Element, options?: NotificationOptions);
error(data: any): void;
error(data: string): void;
error(data: Function): void;
getNotifications(): JQuery;
hide(): void;
info(data: any): void;
info(data: string): void;
info(data: Function): void;
show(data: any, type: string): void;
show(data: string, type: string): void;
show(data: Function, type: string): void;
showText(data: any, type: string): void;
showText(data: string, type: string): void;
showText(data: Function, type: string): void;
success(data: any): void;
success(data: string): void;
success(data: Function): void;
warning(data: any): void;
warning(data: string): void;
warning(data: Function): void;
}
interface NotificationPosition {
bottom?: number;
left?: number;
pinned?: boolean;
right?: number;
top?: number;
}
interface NotificationTemplate {
type?: string;
template?: string;
}
interface NotificationOptions {
name?: string;
allowHideAfter?: number;
animation?: any|boolean;
appendTo?: string|JQuery;
autoHideAfter?: number;
button?: boolean;
height?: number|string;
hideOnClick?: boolean;
position?: NotificationPosition;
stacking?: string;
templates?: NotificationTemplate[];
width?: number|string;
hide?(e: NotificationHideEvent): void;
show?(e: NotificationShowEvent): void;
}
interface NotificationEvent {
sender: Notification;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface NotificationHideEvent extends NotificationEvent {
element?: JQuery;
}
interface NotificationShowEvent extends NotificationEvent {
element?: JQuery;
}
class NumericTextBox extends kendo.ui.Widget {
static fn: NumericTextBox;
options: NumericTextBoxOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): NumericTextBox;
constructor(element: Element, options?: NumericTextBoxOptions);
destroy(): void;
enable(enable: boolean): void;
readonly(readonly: boolean): void;
focus(): void;
max(): number;
max(value: number): void;
max(value: string): void;
min(): number;
min(value: number): void;
min(value: string): void;
step(): number;
step(value: number): void;
step(value: string): void;
value(): number;
value(value: number): void;
value(value: string): void;
}
interface NumericTextBoxOptions {
name?: string;
culture?: string;
decimals?: number;
downArrowText?: string;
format?: string;
max?: number;
min?: number;
placeholder?: string;
spinners?: boolean;
step?: number;
upArrowText?: string;
value?: number;
change?(e: NumericTextBoxChangeEvent): void;
spin?(e: NumericTextBoxSpinEvent): void;
}
interface NumericTextBoxEvent {
sender: NumericTextBox;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface NumericTextBoxChangeEvent extends NumericTextBoxEvent {
}
interface NumericTextBoxSpinEvent extends NumericTextBoxEvent {
}
class Pager extends kendo.ui.Widget {
static fn: Pager;
options: PagerOptions;
dataSource: kendo.data.DataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Pager;
constructor(element: Element, options?: PagerOptions);
totalPages(): number;
pageSize(): number;
page(): number;
page(page: number): void;
refresh(): void;
destroy(): void;
}
interface PagerMessages {
display?: string;
empty?: string;
allPages?: string;
page?: string;
of?: string;
itemsPerPage?: string;
first?: string;
previous?: string;
next?: string;
last?: string;
refresh?: string;
}
interface PagerOptions {
name?: string;
autoBind?: boolean;
buttonCount?: number;
dataSource?: any|kendo.data.DataSource;
selectTemplate?: string;
linkTemplate?: string;
info?: boolean;
input?: boolean;
numeric?: boolean;
pageSizes?: boolean|any;
previousNext?: boolean;
refresh?: boolean;
messages?: PagerMessages;
change?(e: PagerChangeEvent): void;
}
interface PagerEvent {
sender: Pager;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface PagerChangeEvent extends PagerEvent {
}
class PanelBar extends kendo.ui.Widget {
static fn: PanelBar;
options: PanelBarOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): PanelBar;
constructor(element: Element, options?: PanelBarOptions);
append(item: string, referenceItem: string): kendo.ui.PanelBar;
append(item: string, referenceItem: Element): kendo.ui.PanelBar;
append(item: string, referenceItem: JQuery): kendo.ui.PanelBar;
append(item: Element, referenceItem: string): kendo.ui.PanelBar;
append(item: Element, referenceItem: Element): kendo.ui.PanelBar;
append(item: Element, referenceItem: JQuery): kendo.ui.PanelBar;
append(item: JQuery, referenceItem: string): kendo.ui.PanelBar;
append(item: JQuery, referenceItem: Element): kendo.ui.PanelBar;
append(item: JQuery, referenceItem: JQuery): kendo.ui.PanelBar;
append(item: any, referenceItem: string): kendo.ui.PanelBar;
append(item: any, referenceItem: Element): kendo.ui.PanelBar;
append(item: any, referenceItem: JQuery): kendo.ui.PanelBar;
clearSelection(): void;
collapse(element: string, useAnimation: boolean): kendo.ui.PanelBar;
collapse(element: Element, useAnimation: boolean): kendo.ui.PanelBar;
collapse(element: JQuery, useAnimation: boolean): kendo.ui.PanelBar;
destroy(): void;
enable(element: string, enable: boolean): void;
enable(element: Element, enable: boolean): void;
enable(element: JQuery, enable: boolean): void;
expand(element: string, useAnimation: boolean): kendo.ui.PanelBar;
expand(element: Element, useAnimation: boolean): kendo.ui.PanelBar;
expand(element: JQuery, useAnimation: boolean): kendo.ui.PanelBar;
insertAfter(item: string, referenceItem: string): void;
insertAfter(item: string, referenceItem: Element): void;
insertAfter(item: string, referenceItem: JQuery): void;
insertAfter(item: Element, referenceItem: string): void;
insertAfter(item: Element, referenceItem: Element): void;
insertAfter(item: Element, referenceItem: JQuery): void;
insertAfter(item: JQuery, referenceItem: string): void;
insertAfter(item: JQuery, referenceItem: Element): void;
insertAfter(item: JQuery, referenceItem: JQuery): void;
insertAfter(item: any, referenceItem: string): void;
insertAfter(item: any, referenceItem: Element): void;
insertAfter(item: any, referenceItem: JQuery): void;
insertBefore(item: string, referenceItem: string): kendo.ui.PanelBar;
insertBefore(item: string, referenceItem: Element): kendo.ui.PanelBar;
insertBefore(item: string, referenceItem: JQuery): kendo.ui.PanelBar;
insertBefore(item: Element, referenceItem: string): kendo.ui.PanelBar;
insertBefore(item: Element, referenceItem: Element): kendo.ui.PanelBar;
insertBefore(item: Element, referenceItem: JQuery): kendo.ui.PanelBar;
insertBefore(item: JQuery, referenceItem: string): kendo.ui.PanelBar;
insertBefore(item: JQuery, referenceItem: Element): kendo.ui.PanelBar;
insertBefore(item: JQuery, referenceItem: JQuery): kendo.ui.PanelBar;
insertBefore(item: any, referenceItem: string): kendo.ui.PanelBar;
insertBefore(item: any, referenceItem: Element): kendo.ui.PanelBar;
insertBefore(item: any, referenceItem: JQuery): kendo.ui.PanelBar;
reload(element: string): void;
reload(element: Element): void;
reload(element: JQuery): void;
remove(element: string): void;
remove(element: Element): void;
remove(element: JQuery): void;
select(): JQuery;
select(element?: string): void;
select(element?: Element): void;
select(element?: JQuery): void;
}
interface PanelBarAnimationCollapse {
duration?: number;
effects?: string;
}
interface PanelBarAnimationExpand {
duration?: number;
effects?: string;
}
interface PanelBarAnimation {
collapse?: PanelBarAnimationCollapse;
expand?: PanelBarAnimationExpand;
}
interface PanelBarOptions {
name?: string;
animation?: PanelBarAnimation;
contentUrls?: any;
dataSource?: any|any;
expandMode?: string;
activate?(e: PanelBarActivateEvent): void;
collapse?(e: PanelBarCollapseEvent): void;
contentLoad?(e: PanelBarContentLoadEvent): void;
error?(e: PanelBarErrorEvent): void;
expand?(e: PanelBarExpandEvent): void;
select?(e: PanelBarSelectEvent): void;
}
interface PanelBarEvent {
sender: PanelBar;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface PanelBarActivateEvent extends PanelBarEvent {
item?: Element;
}
interface PanelBarCollapseEvent extends PanelBarEvent {
item?: Element;
}
interface PanelBarContentLoadEvent extends PanelBarEvent {
item?: Element;
contentElement?: Element;
}
interface PanelBarErrorEvent extends PanelBarEvent {
xhr?: JQueryXHR;
status?: string;
}
interface PanelBarExpandEvent extends PanelBarEvent {
item?: Element;
}
interface PanelBarSelectEvent extends PanelBarEvent {
item?: Element;
}
class PivotConfigurator extends kendo.ui.Widget {
static fn: PivotConfigurator;
options: PivotConfiguratorOptions;
dataSource: kendo.data.DataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): PivotConfigurator;
constructor(element: Element, options?: PivotConfiguratorOptions);
destroy(): void;
refresh(): void;
setDataSource(dataSource: kendo.data.PivotDataSource): void;
}
interface PivotConfiguratorMessagesFieldMenuOperators {
contains?: string;
doesnotcontain?: string;
startswith?: string;
endswith?: string;
eq?: string;
neq?: string;
}
interface PivotConfiguratorMessagesFieldMenu {
info?: string;
sortAscending?: string;
sortDescending?: string;
filterFields?: string;
filter?: string;
include?: string;
title?: string;
clear?: string;
ok?: string;
cancel?: string;
operators?: PivotConfiguratorMessagesFieldMenuOperators;
}
interface PivotConfiguratorMessages {
measures?: string;
columns?: string;
rows?: string;
measuresLabel?: string;
rowsLabel?: string;
columnsLabel?: string;
fieldsLabel?: string;
fieldMenu?: PivotConfiguratorMessagesFieldMenu;
}
interface PivotConfiguratorSortable {
allowUnsort?: boolean;
}
interface PivotConfiguratorOptions {
name?: string;
dataSource?: any|kendo.data.PivotDataSource;
filterable?: boolean;
sortable?: PivotConfiguratorSortable;
height?: number|string;
messages?: PivotConfiguratorMessages;
}
interface PivotConfiguratorEvent {
sender: PivotConfigurator;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class PivotGrid extends kendo.ui.Widget {
static fn: PivotGrid;
options: PivotGridOptions;
dataSource: kendo.data.DataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): PivotGrid;
constructor(element: Element, options?: PivotGridOptions);
cellInfo(columnIndex: number, rowIndex: number): any;
cellInfoByElement(cell: string): any;
cellInfoByElement(cell: Element): any;
cellInfoByElement(cell: JQuery): any;
destroy(): void;
refresh(): void;
setDataSource(dataSource: kendo.data.PivotDataSource): void;
saveAsExcel(): void;
saveAsPDF(): JQueryPromise<any>;
}
interface PivotGridExcel {
fileName?: string;
filterable?: boolean;
forceProxy?: boolean;
proxyURL?: string;
}
interface PivotGridMessagesFieldMenuOperators {
contains?: string;
doesnotcontain?: string;
startswith?: string;
endswith?: string;
eq?: string;
neq?: string;
}
interface PivotGridMessagesFieldMenu {
info?: string;
sortAscending?: string;
sortDescending?: string;
filterFields?: string;
filter?: string;
include?: string;
title?: string;
clear?: string;
ok?: string;
cancel?: string;
operators?: PivotGridMessagesFieldMenuOperators;
}
interface PivotGridMessages {
measureFields?: string;
columnFields?: string;
rowFields?: string;
fieldMenu?: PivotGridMessagesFieldMenu;
}
interface PivotGridPdfMargin {
bottom?: number|string;
left?: number|string;
right?: number|string;
top?: number|string;
}
interface PivotGridPdf {
author?: string;
avoidLinks?: boolean|string;
creator?: string;
date?: Date;
fileName?: string;
forceProxy?: boolean;
keywords?: string;
landscape?: boolean;
margin?: PivotGridPdfMargin;
paperSize?: string|any;
proxyURL?: string;
proxyTarget?: string;
subject?: string;
title?: string;
}
interface PivotGridSortable {
allowUnsort?: boolean;
}
interface PivotGridOptions {
name?: string;
dataSource?: any|kendo.data.PivotDataSource;
autoBind?: boolean;
reorderable?: boolean;
excel?: PivotGridExcel;
pdf?: PivotGridPdf;
filterable?: boolean;
sortable?: PivotGridSortable;
columnWidth?: number;
height?: number|string;
columnHeaderTemplate?: string|Function;
dataCellTemplate?: string|Function;
kpiStatusTemplate?: string|Function;
kpiTrendTemplate?: string|Function;
rowHeaderTemplate?: string|Function;
messages?: PivotGridMessages;
dataBinding?(e: PivotGridDataBindingEvent): void;
dataBound?(e: PivotGridDataBoundEvent): void;
expandMember?(e: PivotGridExpandMemberEvent): void;
collapseMember?(e: PivotGridCollapseMemberEvent): void;
excelExport?(e: PivotGridExcelExportEvent): void;
pdfExport?(e: PivotGridPdfExportEvent): void;
}
interface PivotGridEvent {
sender: PivotGrid;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface PivotGridDataBindingEvent extends PivotGridEvent {
}
interface PivotGridDataBoundEvent extends PivotGridEvent {
}
interface PivotGridExpandMemberEvent extends PivotGridEvent {
axis?: string;
path?: string;
}
interface PivotGridCollapseMemberEvent extends PivotGridEvent {
axis?: string;
path?: string;
}
interface PivotGridExcelExportEvent extends PivotGridEvent {
data?: any;
workbook?: any;
}
interface PivotGridPdfExportEvent extends PivotGridEvent {
promise?: JQueryPromise<any>;
}
class Popup extends kendo.ui.Widget {
static fn: Popup;
options: PopupOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Popup;
constructor(element: Element, options?: PopupOptions);
close(): void;
open(): void;
position(): void;
setOptions(options: any): void;
visible(): boolean;
}
interface PopupAnimationClose {
effects?: string;
duration?: number;
}
interface PopupAnimationOpen {
effects?: string;
duration?: number;
}
interface PopupAnimation {
close?: PopupAnimationClose;
open?: PopupAnimationOpen;
}
interface PopupOptions {
name?: string;
adjustSize?: any;
animation?: PopupAnimation;
anchor?: string|JQuery;
appendTo?: string|JQuery;
collision?: string;
origin?: string;
position?: string;
activate?(e: PopupActivateEvent): void;
close?(e: PopupCloseEvent): void;
deactivate?(e: PopupDeactivateEvent): void;
open?(e: PopupOpenEvent): void;
}
interface PopupEvent {
sender: Popup;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface PopupActivateEvent extends PopupEvent {
}
interface PopupCloseEvent extends PopupEvent {
}
interface PopupDeactivateEvent extends PopupEvent {
}
interface PopupOpenEvent extends PopupEvent {
}
class ProgressBar extends kendo.ui.Widget {
static fn: ProgressBar;
options: ProgressBarOptions;
progressStatus: JQuery;
progressWrapper: JQuery;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ProgressBar;
constructor(element: Element, options?: ProgressBarOptions);
enable(enable: boolean): void;
value(): number;
value(value: number): void;
}
interface ProgressBarAnimation {
duration?: number;
}
interface ProgressBarOptions {
name?: string;
animation?: ProgressBarAnimation;
chunkCount?: number;
enable?: boolean;
max?: number;
min?: number;
orientation?: string;
reverse?: boolean;
showStatus?: boolean;
type?: string;
value?: number;
change?(e: ProgressBarChangeEvent): void;
complete?(e: ProgressBarCompleteEvent): void;
}
interface ProgressBarEvent {
sender: ProgressBar;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ProgressBarChangeEvent extends ProgressBarEvent {
value?: number;
}
interface ProgressBarCompleteEvent extends ProgressBarEvent {
value?: number;
}
class RangeSlider extends kendo.ui.Widget {
static fn: RangeSlider;
options: RangeSliderOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): RangeSlider;
constructor(element: Element, options?: RangeSliderOptions);
destroy(): void;
enable(enable: boolean): void;
value(): any;
value(selectionStart: number, selectionEnd: number): void;
resize(): void;
}
interface RangeSliderTooltip {
enabled?: boolean;
format?: string;
template?: string;
}
interface RangeSliderOptions {
name?: string;
largeStep?: number;
max?: number;
min?: number;
orientation?: string;
selectionEnd?: number;
selectionStart?: number;
smallStep?: number;
tickPlacement?: string;
tooltip?: RangeSliderTooltip;
change?(e: RangeSliderChangeEvent): void;
slide?(e: RangeSliderSlideEvent): void;
}
interface RangeSliderEvent {
sender: RangeSlider;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface RangeSliderChangeEvent extends RangeSliderEvent {
value?: any;
}
interface RangeSliderSlideEvent extends RangeSliderEvent {
value?: any;
}
class ResponsivePanel extends kendo.ui.Widget {
static fn: ResponsivePanel;
options: ResponsivePanelOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ResponsivePanel;
constructor(element: Element, options?: ResponsivePanelOptions);
close(): void;
destroy(): void;
open(): void;
}
interface ResponsivePanelOptions {
name?: string;
autoClose?: boolean;
breakpoint?: number;
orientation?: string;
toggleButton?: string;
close?(e: ResponsivePanelEvent): void;
open?(e: ResponsivePanelEvent): void;
}
interface ResponsivePanelEvent {
sender: ResponsivePanel;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Scheduler extends kendo.ui.Widget {
static fn: Scheduler;
options: SchedulerOptions;
dataSource: kendo.data.DataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Scheduler;
constructor(element: Element, options?: SchedulerOptions);
addEvent(data: any): void;
cancelEvent(): void;
data(): void;
date(): Date;
date(value?: Date): void;
destroy(): void;
editEvent(event: string): void;
editEvent(event: kendo.data.SchedulerEvent): void;
items(): any;
occurrenceByUid(uid: string): kendo.data.SchedulerEvent;
occurrencesInRange(start: Date, end: Date): any;
refresh(): void;
removeEvent(event: string): void;
removeEvent(event: kendo.data.SchedulerEvent): void;
resourcesBySlot(slot: any): any;
saveAsPDF(): JQueryPromise<any>;
saveEvent(): void;
select(): void;
select(events: any, options: any): void;
setDataSource(dataSource: kendo.data.SchedulerDataSource): void;
slotByPosition(xPosition: number, yPosition: number): any;
slotByElement(element: Element): any;
slotByElement(element: JQuery): any;
view(): kendo.ui.SchedulerView;
view(type?: string): void;
viewName(): string;
}
interface SchedulerCurrentTimeMarker {
updateInterval?: number;
useLocalTimezone?: boolean;
}
interface SchedulerEditable {
confirmation?: boolean|string;
create?: boolean;
destroy?: boolean;
editRecurringMode?: string;
move?: boolean;
resize?: boolean;
template?: string|Function;
update?: boolean;
window?: any;
}
interface SchedulerFooter {
command?: string|boolean;
}
interface SchedulerGroup {
resources?: any;
orientation?: string;
}
interface SchedulerMessagesEditable {
confirmation?: string;
}
interface SchedulerMessagesEditor {
allDayEvent?: string;
description?: string;
editorTitle?: string;
end?: string;
endTimezone?: string;
repeat?: string;
separateTimezones?: string;
start?: string;
startTimezone?: string;
timezone?: string;
timezoneEditorButton?: string;
timezoneEditorTitle?: string;
title?: string;
}
interface SchedulerMessagesRecurrenceEditorDaily {
interval?: string;
repeatEvery?: string;
}
interface SchedulerMessagesRecurrenceEditorEnd {
after?: string;
occurrence?: string;
label?: string;
never?: string;
mobileLabel?: string;
on?: string;
}
interface SchedulerMessagesRecurrenceEditorFrequencies {
daily?: string;
monthly?: string;
never?: string;
weekly?: string;
yearly?: string;
}
interface SchedulerMessagesRecurrenceEditorMonthly {
day?: string;
interval?: string;
repeatEvery?: string;
repeatOn?: string;
}
interface SchedulerMessagesRecurrenceEditorOffsetPositions {
first?: string;
second?: string;
third?: string;
fourth?: string;
last?: string;
}
interface SchedulerMessagesRecurrenceEditorWeekdays {
day?: string;
weekday?: string;
weekend?: string;
}
interface SchedulerMessagesRecurrenceEditorWeekly {
interval?: string;
repeatEvery?: string;
repeatOn?: string;
}
interface SchedulerMessagesRecurrenceEditorYearly {
of?: string;
repeatEvery?: string;
repeatOn?: string;
interval?: string;
}
interface SchedulerMessagesRecurrenceEditor {
daily?: SchedulerMessagesRecurrenceEditorDaily;
end?: SchedulerMessagesRecurrenceEditorEnd;
frequencies?: SchedulerMessagesRecurrenceEditorFrequencies;
monthly?: SchedulerMessagesRecurrenceEditorMonthly;
offsetPositions?: SchedulerMessagesRecurrenceEditorOffsetPositions;
weekly?: SchedulerMessagesRecurrenceEditorWeekly;
weekdays?: SchedulerMessagesRecurrenceEditorWeekdays;
yearly?: SchedulerMessagesRecurrenceEditorYearly;
}
interface SchedulerMessagesRecurrenceMessages {
deleteRecurring?: string;
deleteWindowOccurrence?: string;
deleteWindowSeries?: string;
deleteWindowTitle?: string;
editRecurring?: string;
editWindowOccurrence?: string;
editWindowSeries?: string;
editWindowTitle?: string;
}
interface SchedulerMessagesViews {
day?: string;
week?: string;
month?: string;
agenda?: string;
}
interface SchedulerMessages {
allDay?: string;
ariaEventLabel?: string;
ariaSlotLabel?: string;
cancel?: string;
date?: string;
deleteWindowTitle?: string;
destroy?: string;
event?: string;
defaultRowText?: string;
pdf?: string;
save?: string;
showFullDay?: string;
showWorkDay?: string;
time?: string;
today?: string;
editable?: SchedulerMessagesEditable;
editor?: SchedulerMessagesEditor;
recurrenceEditor?: SchedulerMessagesRecurrenceEditor;
recurrenceMessages?: SchedulerMessagesRecurrenceMessages;
views?: SchedulerMessagesViews;
}
interface SchedulerPdfMargin {
bottom?: number|string;
left?: number|string;
right?: number|string;
top?: number|string;
}
interface SchedulerPdf {
author?: string;
avoidLinks?: boolean|string;
creator?: string;
date?: Date;
fileName?: string;
forceProxy?: boolean;
keywords?: string;
landscape?: boolean;
margin?: SchedulerPdfMargin;
paperSize?: string|any;
proxyURL?: string;
proxyTarget?: string;
subject?: string;
title?: string;
}
interface SchedulerResource {
dataColorField?: string;
dataSource?: any|any|kendo.data.DataSource;
dataTextField?: string;
dataValueField?: string;
field?: string;
multiple?: boolean;
name?: string;
title?: string;
valuePrimitive?: boolean;
}
interface SchedulerToolbarItem {
name?: string;
}
interface SchedulerViewEditable {
create?: boolean;
destroy?: boolean;
update?: boolean;
}
interface SchedulerViewGroup {
orientation?: string;
}
interface SchedulerView {
allDayEventTemplate?: string|Function;
allDaySlot?: boolean;
allDaySlotTemplate?: string|Function;
columnWidth?: number;
dateHeaderTemplate?: string|Function;
dayTemplate?: string|Function;
editable?: SchedulerViewEditable;
endTime?: Date;
eventHeight?: number;
eventTemplate?: string|Function;
eventTimeTemplate?: string|Function;
group?: SchedulerViewGroup;
majorTick?: number;
majorTimeHeaderTemplate?: string|Function;
minorTickCount?: number;
minorTimeHeaderTemplate?: string|Function;
selected?: boolean;
selectedDateFormat?: string;
showWorkHours?: boolean;
slotTemplate?: string|Function;
startTime?: Date;
title?: string;
type?: string;
workWeekStart?: number;
workWeekEnd?: number;
}
interface SchedulerSelectOptions {
events?: any;
resources?: any;
start?: Date;
end?: Date;
isAllDay?: boolean;
}
interface SchedulerOptions {
name?: string;
allDayEventTemplate?: string|Function;
allDaySlot?: boolean;
autoBind?: boolean;
currentTimeMarker?: SchedulerCurrentTimeMarker;
dataSource?: any|any|kendo.data.SchedulerDataSource;
date?: Date;
dateHeaderTemplate?: string|Function;
editable?: SchedulerEditable;
endTime?: Date;
eventTemplate?: string|Function;
footer?: SchedulerFooter;
group?: SchedulerGroup;
height?: number|string;
majorTick?: number;
majorTimeHeaderTemplate?: string|Function;
max?: Date;
messages?: SchedulerMessages;
min?: Date;
minorTickCount?: number;
minorTimeHeaderTemplate?: string|Function;
mobile?: boolean|string;
pdf?: SchedulerPdf;
resources?: SchedulerResource[];
selectable?: boolean;
showWorkHours?: boolean;
snap?: boolean;
startTime?: Date;
timezone?: string;
toolbar?: SchedulerToolbarItem[];
views?: SchedulerView[];
groupHeaderTemplate?: string|Function;
width?: number|string;
workDayStart?: Date;
workDayEnd?: Date;
workWeekStart?: number;
workWeekEnd?: number;
add?(e: SchedulerAddEvent): void;
cancel?(e: SchedulerCancelEvent): void;
change?(e: SchedulerChangeEvent): void;
dataBinding?(e: SchedulerDataBindingEvent): void;
dataBound?(e: SchedulerDataBoundEvent): void;
edit?(e: SchedulerEditEvent): void;
moveStart?(e: SchedulerMoveStartEvent): void;
move?(e: SchedulerMoveEvent): void;
moveEnd?(e: SchedulerMoveEndEvent): void;
navigate?(e: SchedulerNavigateEvent): void;
pdfExport?(e: SchedulerPdfExportEvent): void;
remove?(e: SchedulerRemoveEvent): void;
resizeStart?(e: SchedulerResizeStartEvent): void;
resize?(e: SchedulerResizeEvent): void;
resizeEnd?(e: SchedulerResizeEndEvent): void;
save?(e: SchedulerSaveEvent): void;
}
interface SchedulerEvent {
sender: Scheduler;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SchedulerAddEvent extends SchedulerEvent {
event?: any;
}
interface SchedulerCancelEvent extends SchedulerEvent {
container?: JQuery;
event?: kendo.data.SchedulerEvent;
}
interface SchedulerChangeEvent extends SchedulerEvent {
start?: Date;
end?: Date;
events?: any;
slots?: any;
resources?: any;
}
interface SchedulerDataBindingEvent extends SchedulerEvent {
}
interface SchedulerDataBoundEvent extends SchedulerEvent {
}
interface SchedulerEditEvent extends SchedulerEvent {
container?: JQuery;
event?: kendo.data.SchedulerEvent;
}
interface SchedulerMoveStartEvent extends SchedulerEvent {
event?: kendo.data.SchedulerEvent;
}
interface SchedulerMoveEvent extends SchedulerEvent {
event?: kendo.data.SchedulerEvent;
slot?: any;
}
interface SchedulerMoveEndEvent extends SchedulerEvent {
start?: Date;
end?: Date;
event?: kendo.data.SchedulerEvent;
slot?: any;
resources?: any;
}
interface SchedulerNavigateEvent extends SchedulerEvent {
action?: string;
date?: Date;
view?: string;
}
interface SchedulerPdfExportEvent extends SchedulerEvent {
promise?: JQueryPromise<any>;
}
interface SchedulerRemoveEvent extends SchedulerEvent {
event?: kendo.data.SchedulerEvent;
}
interface SchedulerResizeStartEvent extends SchedulerEvent {
event?: kendo.data.SchedulerEvent;
}
interface SchedulerResizeEvent extends SchedulerEvent {
event?: kendo.data.SchedulerEvent;
slot?: any;
}
interface SchedulerResizeEndEvent extends SchedulerEvent {
event?: kendo.data.SchedulerEvent;
slot?: any;
}
interface SchedulerSaveEvent extends SchedulerEvent {
container?: JQuery;
event?: kendo.data.SchedulerEvent;
}
class Slider extends kendo.ui.Widget {
static fn: Slider;
options: SliderOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Slider;
constructor(element: Element, options?: SliderOptions);
destroy(): void;
enable(enable: boolean): void;
value(): number;
value(value: number): void;
resize(): void;
}
interface SliderTooltip {
enabled?: boolean;
format?: string;
template?: string;
}
interface SliderOptions {
name?: string;
decreaseButtonTitle?: string;
increaseButtonTitle?: string;
largeStep?: number;
max?: number;
min?: number;
orientation?: string;
showButtons?: boolean;
smallStep?: number;
tickPlacement?: string;
tooltip?: SliderTooltip;
value?: number;
change?(e: SliderChangeEvent): void;
slide?(e: SliderSlideEvent): void;
}
interface SliderEvent {
sender: Slider;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SliderChangeEvent extends SliderEvent {
value?: number;
}
interface SliderSlideEvent extends SliderEvent {
value?: number;
}
class Sortable extends kendo.ui.Widget {
static fn: Sortable;
options: SortableOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Sortable;
constructor(element: Element, options?: SortableOptions);
indexOf(element: JQuery): number;
items(): JQuery;
}
interface SortableCursorOffset {
left?: number;
top?: number;
}
interface SortableOptions {
name?: string;
axis?: string;
autoScroll?: boolean;
container?: string|JQuery;
connectWith?: string;
cursor?: string;
cursorOffset?: SortableCursorOffset;
disabled?: string;
filter?: string;
handler?: string;
hint?: Function|string|JQuery;
holdToDrag?: boolean;
ignore?: string;
placeholder?: Function|string|JQuery;
start?(e: SortableStartEvent): void;
move?(e: SortableMoveEvent): void;
end?(e: SortableEndEvent): void;
change?(e: SortableChangeEvent): void;
cancel?(e: SortableCancelEvent): void;
}
interface SortableEvent {
sender: Sortable;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SortableStartEvent extends SortableEvent {
draggableEvent?: any;
item?: JQuery;
}
interface SortableMoveEvent extends SortableEvent {
item?: JQuery;
target?: JQuery;
list?: kendo.ui.Sortable;
draggableEvent?: any;
}
interface SortableEndEvent extends SortableEvent {
action?: string;
item?: JQuery;
oldIndex?: number;
newIndex?: number;
draggableEvent?: any;
}
interface SortableChangeEvent extends SortableEvent {
action?: string;
item?: JQuery;
oldIndex?: number;
newIndex?: number;
draggableEvent?: any;
}
interface SortableCancelEvent extends SortableEvent {
item?: JQuery;
}
class Splitter extends kendo.ui.Widget {
static fn: Splitter;
options: SplitterOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Splitter;
constructor(element: Element, options?: SplitterOptions);
ajaxRequest(pane: string, url: string, data: any): void;
ajaxRequest(pane: string, url: string, data: string): void;
ajaxRequest(pane: Element, url: string, data: any): void;
ajaxRequest(pane: Element, url: string, data: string): void;
ajaxRequest(pane: JQuery, url: string, data: any): void;
ajaxRequest(pane: JQuery, url: string, data: string): void;
append(config?: any): JQuery;
collapse(pane: string): void;
collapse(pane: Element): void;
collapse(pane: JQuery): void;
destroy(): void;
expand(pane: string): void;
expand(pane: Element): void;
expand(pane: JQuery): void;
insertAfter(config: any, referencePane: string): JQuery;
insertAfter(config: any, referencePane: Element): JQuery;
insertAfter(config: any, referencePane: JQuery): JQuery;
insertBefore(config: any, referencePane: string): JQuery;
insertBefore(config: any, referencePane: Element): JQuery;
insertBefore(config: any, referencePane: JQuery): JQuery;
max(pane: string, value: string): void;
max(pane: Element, value: string): void;
max(pane: JQuery, value: string): void;
min(pane: string, value: string): void;
min(pane: Element, value: string): void;
min(pane: JQuery, value: string): void;
remove(pane: string): void;
remove(pane: Element): void;
remove(pane: JQuery): void;
size(pane: string, value: string): void;
size(pane: Element, value: string): void;
size(pane: JQuery, value: string): void;
toggle(pane: string, expand?: boolean): void;
toggle(pane: Element, expand?: boolean): void;
toggle(pane: JQuery, expand?: boolean): void;
}
interface SplitterPane {
collapsed?: boolean;
collapsedSize?: string;
collapsible?: boolean;
contentUrl?: string;
max?: string;
min?: string;
resizable?: boolean;
scrollable?: boolean;
size?: string;
}
interface SplitterOptions {
name?: string;
orientation?: string;
panes?: SplitterPane[];
collapse?(e: SplitterCollapseEvent): void;
contentLoad?(e: SplitterContentLoadEvent): void;
error?(e: SplitterErrorEvent): void;
expand?(e: SplitterExpandEvent): void;
layoutChange?(e: SplitterEvent): void;
resize?(e: SplitterEvent): void;
}
interface SplitterEvent {
sender: Splitter;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SplitterCollapseEvent extends SplitterEvent {
pane?: Element;
}
interface SplitterContentLoadEvent extends SplitterEvent {
pane?: Element;
}
interface SplitterErrorEvent extends SplitterEvent {
xhr?: JQueryXHR;
status?: string;
}
interface SplitterExpandEvent extends SplitterEvent {
pane?: Element;
}
class Spreadsheet extends kendo.ui.Widget {
static fn: Spreadsheet;
options: SpreadsheetOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Spreadsheet;
constructor(element: Element, options?: SpreadsheetOptions);
activeSheet(): kendo.spreadsheet.Sheet;
activeSheet(sheet?: kendo.spreadsheet.Sheet): void;
sheets(): any;
fromFile(blob: Blob): JQueryPromise<any>;
fromFile(blob: File): JQueryPromise<any>;
saveAsExcel(): void;
saveAsPDF(): JQueryPromise<any>;
sheetByName(name: string): kendo.spreadsheet.Sheet;
sheetIndex(sheet: kendo.spreadsheet.Sheet): number;
sheetByIndex(index: number): kendo.spreadsheet.Sheet;
insertSheet(options: any): kendo.spreadsheet.Sheet;
moveSheetToIndex(sheet: kendo.spreadsheet.Sheet, index: number): void;
removeSheet(sheet: kendo.spreadsheet.Sheet): void;
renameSheet(sheet: kendo.spreadsheet.Sheet, newSheetName: string): kendo.spreadsheet.Sheet;
toJSON(): any;
fromJSON(data: any): void;
}
interface SpreadsheetExcel {
fileName?: string;
forceProxy?: boolean;
proxyURL?: string;
}
interface SpreadsheetPdfMargin {
bottom?: number|string;
left?: number|string;
right?: number|string;
top?: number|string;
}
interface SpreadsheetPdf {
area?: string;
author?: string;
creator?: string;
date?: Date;
fileName?: string;
fitWidth?: boolean;
forceProxy?: boolean;
guidelines?: boolean;
hCenter?: boolean;
keywords?: string;
landscape?: boolean;
margin?: SpreadsheetPdfMargin;
paperSize?: string|any;
proxyURL?: string;
proxyTarget?: string;
subject?: string;
title?: string;
vCenter?: boolean;
}
interface SpreadsheetSheetColumn {
index?: number;
width?: number;
}
interface SpreadsheetSheetFilterColumnCriteriaItem {
operator?: string;
value?: string;
}
interface SpreadsheetSheetFilterColumn {
criteria?: SpreadsheetSheetFilterColumnCriteriaItem[];
filter?: string;
index?: number;
logic?: string;
type?: string;
value?: number|string|Date;
values?: any;
}
interface SpreadsheetSheetFilter {
columns?: SpreadsheetSheetFilterColumn[];
ref?: string;
}
interface SpreadsheetSheetRowCellBorderBottom {
color?: string;
size?: string;
}
interface SpreadsheetSheetRowCellBorderLeft {
color?: string;
size?: string;
}
interface SpreadsheetSheetRowCellBorderRight {
color?: string;
size?: string;
}
interface SpreadsheetSheetRowCellBorderTop {
color?: string;
size?: string;
}
interface SpreadsheetSheetRowCellValidation {
type?: string;
comparerType?: string;
dataType?: string;
from?: string;
to?: string;
allowNulls?: boolean;
messageTemplate?: string;
titleTemplate?: string;
}
interface SpreadsheetSheetRowCell {
background?: string;
borderBottom?: SpreadsheetSheetRowCellBorderBottom;
borderLeft?: SpreadsheetSheetRowCellBorderLeft;
borderTop?: SpreadsheetSheetRowCellBorderTop;
borderRight?: SpreadsheetSheetRowCellBorderRight;
color?: string;
fontFamily?: string;
fontSize?: number;
italic?: boolean;
bold?: boolean;
enable?: boolean;
format?: string;
formula?: string;
index?: number;
textAlign?: string;
underline?: boolean;
value?: number|string|boolean|Date;
validation?: SpreadsheetSheetRowCellValidation;
verticalAlign?: string;
wrap?: boolean;
}
interface SpreadsheetSheetRow {
cells?: SpreadsheetSheetRowCell[];
height?: number;
index?: number;
}
interface SpreadsheetSheetSortColumn {
ascending?: boolean;
index?: number;
}
interface SpreadsheetSheetSort {
columns?: SpreadsheetSheetSortColumn[];
ref?: string;
}
interface SpreadsheetSheet {
activeCell?: string;
name?: string;
columns?: SpreadsheetSheetColumn[];
dataSource?: kendo.data.DataSource;
filter?: SpreadsheetSheetFilter;
frozenColumns?: number;
frozenRows?: number;
mergedCells?: any;
rows?: SpreadsheetSheetRow[];
selection?: string;
showGridLines?: boolean;
sort?: SpreadsheetSheetSort;
}
interface SpreadsheetToolbar {
home?: boolean|any;
insert?: boolean|any;
data?: boolean|any;
}
interface SpreadsheetInsertSheetOptions {
rows?: number;
columns?: number;
rowHeight?: number;
columnWidth?: number;
headerHeight?: number;
headerWidth?: number;
dataSource?: kendo.data.DataSource;
data?: any;
}
interface SpreadsheetOptions {
name?: string;
activeSheet?: string;
columnWidth?: number;
columns?: number;
headerHeight?: number;
headerWidth?: number;
excel?: SpreadsheetExcel;
pdf?: SpreadsheetPdf;
rowHeight?: number;
rows?: number;
sheets?: SpreadsheetSheet[];
sheetsbar?: boolean;
toolbar?: SpreadsheetToolbar;
change?(e: SpreadsheetChangeEvent): void;
render?(e: SpreadsheetRenderEvent): void;
excelExport?(e: SpreadsheetExcelExportEvent): void;
excelImport?(e: SpreadsheetExcelImportEvent): void;
pdfExport?(e: SpreadsheetPdfExportEvent): void;
}
interface SpreadsheetEvent {
sender: Spreadsheet;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SpreadsheetChangeEvent extends SpreadsheetEvent {
range?: kendo.spreadsheet.Range;
}
interface SpreadsheetRenderEvent extends SpreadsheetEvent {
}
interface SpreadsheetExcelExportEvent extends SpreadsheetEvent {
data?: any;
workbook?: kendo.ooxml.Workbook;
}
interface SpreadsheetExcelImportEvent extends SpreadsheetEvent {
file?: Blob|File;
progress?: JQueryPromise<any>;
}
interface SpreadsheetPdfExportEvent extends SpreadsheetEvent {
promise?: JQueryPromise<any>;
}
class TabStrip extends kendo.ui.Widget {
static fn: TabStrip;
options: TabStripOptions;
dataSource: kendo.data.DataSource;
tabGroup: JQuery;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): TabStrip;
constructor(element: Element, options?: TabStripOptions);
activateTab(item: JQuery): void;
append(tab: any): kendo.ui.TabStrip;
contentElement(itemIndex: number): Element;
contentHolder(itemIndex: number): Element;
deactivateTab(item: JQuery): void;
destroy(): void;
disable(element: string): kendo.ui.TabStrip;
disable(element: Element): kendo.ui.TabStrip;
disable(element: JQuery): kendo.ui.TabStrip;
enable(element: string, enable?: boolean): kendo.ui.TabStrip;
enable(element: Element, enable?: boolean): kendo.ui.TabStrip;
enable(element: JQuery, enable?: boolean): kendo.ui.TabStrip;
insertAfter(item: any, referenceTab: string): kendo.ui.TabStrip;
insertAfter(item: any, referenceTab: Element): kendo.ui.TabStrip;
insertAfter(item: any, referenceTab: JQuery): kendo.ui.TabStrip;
insertAfter(item: string, referenceTab: string): kendo.ui.TabStrip;
insertAfter(item: string, referenceTab: Element): kendo.ui.TabStrip;
insertAfter(item: string, referenceTab: JQuery): kendo.ui.TabStrip;
insertAfter(item: Element, referenceTab: string): kendo.ui.TabStrip;
insertAfter(item: Element, referenceTab: Element): kendo.ui.TabStrip;
insertAfter(item: Element, referenceTab: JQuery): kendo.ui.TabStrip;
insertAfter(item: JQuery, referenceTab: string): kendo.ui.TabStrip;
insertAfter(item: JQuery, referenceTab: Element): kendo.ui.TabStrip;
insertAfter(item: JQuery, referenceTab: JQuery): kendo.ui.TabStrip;
insertBefore(item: any, referenceTab: string): kendo.ui.TabStrip;
insertBefore(item: any, referenceTab: Element): kendo.ui.TabStrip;
insertBefore(item: any, referenceTab: JQuery): kendo.ui.TabStrip;
insertBefore(item: string, referenceTab: string): kendo.ui.TabStrip;
insertBefore(item: string, referenceTab: Element): kendo.ui.TabStrip;
insertBefore(item: string, referenceTab: JQuery): kendo.ui.TabStrip;
insertBefore(item: Element, referenceTab: string): kendo.ui.TabStrip;
insertBefore(item: Element, referenceTab: Element): kendo.ui.TabStrip;
insertBefore(item: Element, referenceTab: JQuery): kendo.ui.TabStrip;
insertBefore(item: JQuery, referenceTab: string): kendo.ui.TabStrip;
insertBefore(item: JQuery, referenceTab: Element): kendo.ui.TabStrip;
insertBefore(item: JQuery, referenceTab: JQuery): kendo.ui.TabStrip;
items(): HTMLCollection;
reload(element: string): kendo.ui.TabStrip;
reload(element: Element): kendo.ui.TabStrip;
reload(element: JQuery): kendo.ui.TabStrip;
remove(element: string): kendo.ui.TabStrip;
remove(element: number): kendo.ui.TabStrip;
remove(element: JQuery): kendo.ui.TabStrip;
select(): JQuery;
select(element: string): void;
select(element: Element): void;
select(element: JQuery): void;
select(element: number): void;
setDataSource(dataSource: any): void;
setDataSource(dataSource: kendo.data.DataSource): void;
}
interface TabStripAnimationClose {
duration?: number;
effects?: string;
}
interface TabStripAnimationOpen {
duration?: number;
effects?: string;
}
interface TabStripAnimation {
close?: TabStripAnimationClose;
open?: TabStripAnimationOpen;
}
interface TabStripScrollable {
distance?: number;
}
interface TabStripOptions {
name?: string;
animation?: TabStripAnimation;
collapsible?: boolean;
contentUrls?: any;
dataContentField?: string;
dataContentUrlField?: string;
dataImageUrlField?: string;
dataSource?: any|any|kendo.data.DataSource;
dataSpriteCssClass?: string;
dataTextField?: string;
dataUrlField?: string;
navigatable?: boolean;
scrollable?: TabStripScrollable;
tabPosition?: string;
value?: string;
activate?(e: TabStripActivateEvent): void;
contentLoad?(e: TabStripContentLoadEvent): void;
error?(e: TabStripErrorEvent): void;
select?(e: TabStripSelectEvent): void;
show?(e: TabStripShowEvent): void;
}
interface TabStripEvent {
sender: TabStrip;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface TabStripActivateEvent extends TabStripEvent {
item?: Element;
contentElement?: Element;
}
interface TabStripContentLoadEvent extends TabStripEvent {
item?: Element;
contentElement?: Element;
}
interface TabStripErrorEvent extends TabStripEvent {
xhr?: JQueryXHR;
status?: string;
}
interface TabStripSelectEvent extends TabStripEvent {
item?: Element;
contentElement?: Element;
}
interface TabStripShowEvent extends TabStripEvent {
item?: Element;
contentElement?: Element;
}
class TimePicker extends kendo.ui.Widget {
static fn: TimePicker;
options: TimePickerOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): TimePicker;
constructor(element: Element, options?: TimePickerOptions);
close(): void;
destroy(): void;
enable(enable: boolean): void;
readonly(readonly: boolean): void;
max(): Date;
max(value: Date): void;
max(value: string): void;
min(): Date;
min(value: Date): void;
min(value: string): void;
open(): void;
setOptions(options: any): void;
value(): Date;
value(value: Date): void;
value(value: string): void;
}
interface TimePickerAnimationClose {
effects?: string;
duration?: number;
}
interface TimePickerAnimationOpen {
effects?: string;
duration?: number;
}
interface TimePickerAnimation {
close?: TimePickerAnimationClose;
open?: TimePickerAnimationOpen;
}
interface TimePickerOptions {
name?: string;
animation?: TimePickerAnimation;
culture?: string;
dates?: any;
format?: string;
interval?: number;
max?: Date;
min?: Date;
parseFormats?: any;
value?: Date;
change?(e: TimePickerChangeEvent): void;
close?(e: TimePickerCloseEvent): void;
open?(e: TimePickerOpenEvent): void;
}
interface TimePickerEvent {
sender: TimePicker;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface TimePickerChangeEvent extends TimePickerEvent {
}
interface TimePickerCloseEvent extends TimePickerEvent {
}
interface TimePickerOpenEvent extends TimePickerEvent {
}
class ToolBar extends kendo.ui.Widget {
static fn: ToolBar;
options: ToolBarOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): ToolBar;
constructor(element: Element, options?: ToolBarOptions);
add(command: any): void;
destroy(): void;
enable(command: string, enable: boolean): void;
enable(command: Element, enable: boolean): void;
enable(command: JQuery, enable: boolean): void;
getSelectedFromGroup(groupName: string): void;
hide(command: string): void;
hide(command: Element): void;
hide(command: JQuery): void;
remove(command: string): void;
remove(command: Element): void;
remove(command: JQuery): void;
show(command: string): void;
show(command: Element): void;
show(command: JQuery): void;
toggle(): void;
}
interface ToolBarItemButton {
attributes?: any;
click?: Function;
enable?: boolean;
group?: string;
hidden?: boolean;
icon?: string;
id?: string;
imageUrl?: string;
selected?: boolean;
showIcon?: string;
showText?: string;
spriteCssClass?: string;
toggle?: Function;
togglable?: boolean;
text?: string;
url?: string;
}
interface ToolBarItemMenuButton {
attributes?: any;
enable?: boolean;
hidden?: boolean;
icon?: string;
id?: string;
imageUrl?: string;
spriteCssClass?: string;
text?: string;
url?: string;
}
interface ToolBarItem {
attributes?: any;
buttons?: ToolBarItemButton[];
click?: Function;
enable?: boolean;
group?: string;
hidden?: boolean;
icon?: string;
id?: string;
imageUrl?: string;
menuButtons?: ToolBarItemMenuButton[];
overflow?: string;
overflowTemplate?: string|Function;
primary?: boolean;
selected?: boolean;
showIcon?: string;
showText?: string;
spriteCssClass?: string;
template?: string|Function;
text?: string;
togglable?: boolean;
toggle?: Function;
type?: string;
url?: string;
}
interface ToolBarOptions {
name?: string;
resizable?: boolean;
items?: ToolBarItem[];
click?(e: ToolBarClickEvent): void;
close?(e: ToolBarCloseEvent): void;
open?(e: ToolBarOpenEvent): void;
toggle?(e: ToolBarToggleEvent): void;
overflowClose?(e: ToolBarOverflowCloseEvent): void;
overflowOpen?(e: ToolBarOverflowOpenEvent): void;
}
interface ToolBarEvent {
sender: ToolBar;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ToolBarClickEvent extends ToolBarEvent {
target?: JQuery;
id?: string;
}
interface ToolBarCloseEvent extends ToolBarEvent {
SplitButton?: JQuery;
}
interface ToolBarOpenEvent extends ToolBarEvent {
SplitButton?: JQuery;
}
interface ToolBarToggleEvent extends ToolBarEvent {
target?: JQuery;
checked?: boolean;
id?: string;
}
interface ToolBarOverflowCloseEvent extends ToolBarEvent {
}
interface ToolBarOverflowOpenEvent extends ToolBarEvent {
}
class Tooltip extends kendo.ui.Widget {
static fn: Tooltip;
options: TooltipOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Tooltip;
constructor(element: Element, options?: TooltipOptions);
show(element: JQuery): void;
hide(): void;
refresh(): void;
target(): JQuery;
}
interface TooltipAnimationClose {
effects?: string;
duration?: number;
}
interface TooltipAnimationOpen {
effects?: string;
duration?: number;
}
interface TooltipAnimation {
close?: TooltipAnimationClose;
open?: TooltipAnimationOpen;
}
interface TooltipContent {
url?: string;
}
interface TooltipOptions {
name?: string;
autoHide?: boolean;
animation?: TooltipAnimation;
content?: TooltipContent;
callout?: boolean;
filter?: string;
iframe?: boolean;
height?: number;
width?: number;
position?: string;
showAfter?: number;
showOn?: string;
contentLoad?(e: TooltipEvent): void;
show?(e: TooltipEvent): void;
hide?(e: TooltipEvent): void;
requestStart?(e: TooltipRequestStartEvent): void;
error?(e: TooltipErrorEvent): void;
}
interface TooltipEvent {
sender: Tooltip;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface TooltipRequestStartEvent extends TooltipEvent {
target?: JQuery;
options?: any;
}
interface TooltipErrorEvent extends TooltipEvent {
xhr?: JQueryXHR;
status?: string;
}
class TreeList extends kendo.ui.Widget {
static fn: TreeList;
options: TreeListOptions;
dataSource: kendo.data.DataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): TreeList;
constructor(element: Element, options?: TreeListOptions);
addRow(parentRow: string): void;
addRow(parentRow: Element): void;
addRow(parentRow: JQuery): void;
autoFitColumn(column: number): void;
autoFitColumn(column: string): void;
autoFitColumn(column: any): void;
cancelRow(): void;
clearSelection(): void;
collapse(): void;
dataItem(row: string): kendo.data.TreeListModel;
dataItem(row: Element): kendo.data.TreeListModel;
dataItem(row: JQuery): kendo.data.TreeListModel;
destroy(): void;
editRow(row: JQuery): void;
expand(row: string): void;
expand(row: Element): void;
expand(row: JQuery): void;
itemFor(model: kendo.data.TreeListModel): JQuery;
itemFor(model: any): JQuery;
items(): any;
refresh(): void;
removeRow(row: string): void;
removeRow(row: Element): void;
removeRow(row: JQuery): void;
saveAsExcel(): void;
saveAsPDF(): JQueryPromise<any>;
saveRow(): void;
select(): JQuery;
select(rows: Element): void;
select(rows: JQuery): void;
setDataSource(dataSource: kendo.data.TreeListDataSource): void;
showColumn(column: number): void;
showColumn(column: string): void;
hideColumn(column: number): void;
hideColumn(column: string): void;
lockColumn(column: number): void;
lockColumn(column: string): void;
unlockColumn(column: number): void;
unlockColumn(column: string): void;
reorderColumn(destIndex: number, column: any): void;
}
interface TreeListColumnMenuMessages {
columns?: string;
filter?: string;
sortAscending?: string;
sortDescending?: string;
}
interface TreeListColumnMenu {
columns?: boolean;
filterable?: boolean;
sortable?: boolean;
messages?: TreeListColumnMenuMessages;
}
interface TreeListColumnCommandItem {
className?: string;
click?: Function;
name?: string;
text?: string;
}
interface TreeListColumnFilterable {
ui?: string|Function;
}
interface TreeListColumnSortable {
compare?: Function;
}
interface TreeListColumn {
attributes?: any;
command?: TreeListColumnCommandItem[];
encoded?: boolean;
expandable?: boolean;
field?: string;
filterable?: TreeListColumnFilterable;
footerTemplate?: string|Function;
format?: string;
headerAttributes?: any;
headerTemplate?: string|Function;
minScreenWidth?: number;
sortable?: TreeListColumnSortable;
template?: string|Function;
title?: string;
width?: string|number;
hidden?: boolean;
menu?: boolean;
locked?: boolean;
lockable?: boolean;
}
interface TreeListEditable {
mode?: string;
move?: boolean;
template?: string|Function;
window?: any;
}
interface TreeListExcel {
fileName?: string;
filterable?: boolean;
forceProxy?: boolean;
proxyURL?: string;
}
interface TreeListFilterableMessages {
and?: string;
clear?: string;
filter?: string;
info?: string;
isFalse?: string;
isTrue?: string;
or?: string;
selectValue?: string;
cancel?: string;
operator?: string;
}
interface TreeListFilterable {
extra?: boolean;
messages?: TreeListFilterableMessages;
}
interface TreeListMessagesCommands {
canceledit?: string;
create?: string;
createchild?: string;
destroy?: string;
edit?: string;
excel?: string;
pdf?: string;
update?: string;
}
interface TreeListMessages {
commands?: TreeListMessagesCommands;
loading?: string;
noRows?: string;
requestFailed?: string;
retry?: string;
}
interface TreeListPdfMargin {
bottom?: number|string;
left?: number|string;
right?: number|string;
top?: number|string;
}
interface TreeListPdf {
author?: string;
avoidLinks?: boolean|string;
creator?: string;
date?: Date;
fileName?: string;
forceProxy?: boolean;
keywords?: string;
landscape?: boolean;
margin?: TreeListPdfMargin;
paperSize?: string|any;
proxyURL?: string;
proxyTarget?: string;
subject?: string;
title?: string;
}
interface TreeListSortable {
allowUnsort?: boolean;
mode?: string;
}
interface TreeListToolbarItem {
name?: string;
text?: string;
}
interface TreeListOptions {
name?: string;
autoBind?: boolean;
columns?: TreeListColumn[];
resizable?: boolean;
reorderable?: boolean;
columnMenu?: TreeListColumnMenu;
dataSource?: any|any|kendo.data.TreeListDataSource;
editable?: TreeListEditable;
excel?: TreeListExcel;
filterable?: TreeListFilterable;
height?: number|string;
messages?: TreeListMessages;
pdf?: TreeListPdf;
scrollable?: boolean|any;
selectable?: boolean|string;
sortable?: TreeListSortable;
toolbar?: TreeListToolbarItem[];
cancel?(e: TreeListCancelEvent): void;
change?(e: TreeListChangeEvent): void;
collapse?(e: TreeListCollapseEvent): void;
dataBinding?(e: TreeListDataBindingEvent): void;
dataBound?(e: TreeListDataBoundEvent): void;
dragstart?(e: TreeListDragstartEvent): void;
drag?(e: TreeListDragEvent): void;
dragend?(e: TreeListDragendEvent): void;
drop?(e: TreeListDropEvent): void;
edit?(e: TreeListEditEvent): void;
excelExport?(e: TreeListExcelExportEvent): void;
expand?(e: TreeListExpandEvent): void;
filterMenuInit?(e: TreeListFilterMenuInitEvent): void;
pdfExport?(e: TreeListPdfExportEvent): void;
remove?(e: TreeListRemoveEvent): void;
save?(e: TreeListSaveEvent): void;
columnShow?(e: TreeListColumnShowEvent): void;
columnHide?(e: TreeListColumnHideEvent): void;
columnReorder?(e: TreeListColumnReorderEvent): void;
columnResize?(e: TreeListColumnResizeEvent): void;
columnMenuInit?(e: TreeListColumnMenuInitEvent): void;
columnLock?(e: TreeListColumnLockEvent): void;
columnUnlock?(e: TreeListColumnUnlockEvent): void;
}
interface TreeListEvent {
sender: TreeList;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface TreeListCancelEvent extends TreeListEvent {
container?: JQuery;
model?: kendo.data.TreeListModel;
}
interface TreeListChangeEvent extends TreeListEvent {
}
interface TreeListCollapseEvent extends TreeListEvent {
model?: kendo.data.TreeListModel;
}
interface TreeListDataBindingEvent extends TreeListEvent {
}
interface TreeListDataBoundEvent extends TreeListEvent {
}
interface TreeListDragstartEvent extends TreeListEvent {
source?: kendo.data.TreeListModel;
}
interface TreeListDragEvent extends TreeListEvent {
source?: kendo.data.TreeListModel;
target?: JQuery;
}
interface TreeListDragendEvent extends TreeListEvent {
source?: kendo.data.TreeListModel;
destination?: kendo.data.TreeListModel;
}
interface TreeListDropEvent extends TreeListEvent {
source?: kendo.data.TreeListModel;
destination?: kendo.data.TreeListModel;
valid?: boolean;
setValid?: boolean;
}
interface TreeListEditEvent extends TreeListEvent {
container?: JQuery;
model?: kendo.data.TreeListModel;
}
interface TreeListExcelExportEvent extends TreeListEvent {
data?: any;
workbook?: any;
}
interface TreeListExpandEvent extends TreeListEvent {
model?: kendo.data.TreeListModel;
}
interface TreeListFilterMenuInitEvent extends TreeListEvent {
container?: JQuery;
field?: string;
}
interface TreeListPdfExportEvent extends TreeListEvent {
promise?: JQueryPromise<any>;
}
interface TreeListRemoveEvent extends TreeListEvent {
model?: kendo.data.TreeListModel;
row?: JQuery;
}
interface TreeListSaveEvent extends TreeListEvent {
model?: kendo.data.TreeListModel;
container?: JQuery;
}
interface TreeListColumnShowEvent extends TreeListEvent {
column?: any;
}
interface TreeListColumnHideEvent extends TreeListEvent {
column?: any;
}
interface TreeListColumnReorderEvent extends TreeListEvent {
column?: any;
newIndex?: number;
oldIndex?: number;
}
interface TreeListColumnResizeEvent extends TreeListEvent {
column?: any;
newWidth?: number;
oldWidth?: number;
}
interface TreeListColumnMenuInitEvent extends TreeListEvent {
container?: JQuery;
field?: string;
}
interface TreeListColumnLockEvent extends TreeListEvent {
column?: any;
}
interface TreeListColumnUnlockEvent extends TreeListEvent {
column?: any;
}
class TreeView extends kendo.ui.Widget {
static fn: TreeView;
options: TreeViewOptions;
dataSource: kendo.data.DataSource;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): TreeView;
constructor(element: Element, options?: TreeViewOptions);
append(nodeData: any, parentNode?: JQuery, success?: Function): JQuery;
append(nodeData: JQuery, parentNode?: JQuery, success?: Function): JQuery;
collapse(nodes: JQuery): void;
collapse(nodes: Element): void;
collapse(nodes: string): void;
dataItem(node: JQuery): kendo.data.Node;
dataItem(node: Element): kendo.data.Node;
dataItem(node: string): kendo.data.Node;
destroy(): void;
detach(node: JQuery): JQuery;
detach(node: Element): JQuery;
detach(node: string): JQuery;
enable(nodes: JQuery, enable?: boolean): void;
enable(nodes: Element, enable?: boolean): void;
enable(nodes: string, enable?: boolean): void;
expand(nodes: JQuery): void;
expand(nodes: Element): void;
expand(nodes: string): void;
expandPath(path: any, complete: Function): void;
expandTo(targetNode: kendo.data.Node): void;
expandTo(targetNode: any): void;
findByText(text: string): JQuery;
findByUid(text: string): JQuery;
insertAfter(nodeData: any, referenceNode: JQuery): void;
insertBefore(nodeData: any, referenceNode: JQuery): void;
items(): any;
parent(node: JQuery): JQuery;
parent(node: Element): JQuery;
parent(node: string): JQuery;
remove(node: JQuery): void;
remove(node: Element): void;
remove(node: string): void;
select(): JQuery;
select(node?: JQuery): void;
select(node?: Element): void;
select(node?: string): void;
setDataSource(dataSource: kendo.data.HierarchicalDataSource): void;
text(node: JQuery): string;
text(node: Element): string;
text(node: string): string;
text(node: JQuery, newText: string): void;
text(node: Element, newText: string): void;
text(node: string, newText: string): void;
toggle(node: JQuery): void;
toggle(node: Element): void;
toggle(node: string): void;
updateIndeterminate(node: JQuery): void;
}
interface TreeViewAnimationCollapse {
duration?: number;
effects?: string;
}
interface TreeViewAnimationExpand {
duration?: number;
effects?: string;
}
interface TreeViewAnimation {
collapse?: TreeViewAnimationCollapse;
expand?: TreeViewAnimationExpand;
}
interface TreeViewCheckboxes {
checkChildren?: boolean;
name?: string;
template?: string|Function;
}
interface TreeViewMessages {
loading?: string;
requestFailed?: string;
retry?: string;
}
interface TreeViewOptions {
name?: string;
animation?: TreeViewAnimation;
autoBind?: boolean;
autoScroll?: boolean;
checkboxes?: TreeViewCheckboxes;
dataImageUrlField?: string;
dataSource?: any|any|kendo.data.HierarchicalDataSource;
dataSpriteCssClassField?: string;
dataTextField?: string|any;
dataUrlField?: string;
dragAndDrop?: boolean;
loadOnDemand?: boolean;
messages?: TreeViewMessages;
template?: string|Function;
change?(e: TreeViewEvent): void;
check?(e: TreeViewCheckEvent): void;
collapse?(e: TreeViewCollapseEvent): void;
dataBound?(e: TreeViewDataBoundEvent): void;
drag?(e: TreeViewDragEvent): void;
dragend?(e: TreeViewDragendEvent): void;
dragstart?(e: TreeViewDragstartEvent): void;
drop?(e: TreeViewDropEvent): void;
expand?(e: TreeViewExpandEvent): void;
navigate?(e: TreeViewNavigateEvent): void;
select?(e: TreeViewSelectEvent): void;
}
interface TreeViewEvent {
sender: TreeView;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface TreeViewCheckEvent extends TreeViewEvent {
node?: Element;
}
interface TreeViewCollapseEvent extends TreeViewEvent {
node?: Element;
}
interface TreeViewDataBoundEvent extends TreeViewEvent {
node?: JQuery;
}
interface TreeViewDragEvent extends TreeViewEvent {
sourceNode?: Element;
dropTarget?: Element;
pageX?: number;
pageY?: number;
statusClass?: string;
setStatusClass?: Function;
}
interface TreeViewDragendEvent extends TreeViewEvent {
sourceNode?: Element;
destinationNode?: Element;
dropPosition?: string;
}
interface TreeViewDragstartEvent extends TreeViewEvent {
sourceNode?: Element;
}
interface TreeViewDropEvent extends TreeViewEvent {
sourceNode?: Element;
destinationNode?: Element;
valid?: boolean;
setValid?: Function;
dropTarget?: Element;
dropPosition?: string;
}
interface TreeViewExpandEvent extends TreeViewEvent {
node?: Element;
}
interface TreeViewNavigateEvent extends TreeViewEvent {
node?: Element;
}
interface TreeViewSelectEvent extends TreeViewEvent {
node?: Element;
}
class Upload extends kendo.ui.Widget {
static fn: Upload;
options: UploadOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Upload;
constructor(element: Element, options?: UploadOptions);
destroy(): void;
disable(): void;
enable(enable?: boolean): void;
toggle(enable: boolean): void;
}
interface UploadAsync {
autoUpload?: boolean;
batch?: boolean;
removeField?: string;
removeUrl?: string;
removeVerb?: string;
saveField?: string;
saveUrl?: string;
withCredentials?: boolean;
}
interface UploadFile {
extension?: string;
name?: string;
size?: number;
}
interface UploadLocalization {
cancel?: string;
dropFilesHere?: string;
headerStatusUploaded?: string;
headerStatusUploading?: string;
remove?: string;
retry?: string;
select?: string;
statusFailed?: string;
statusUploaded?: string;
statusUploading?: string;
uploadSelectedFiles?: string;
}
interface UploadOptions {
name?: string;
async?: UploadAsync;
enabled?: boolean;
files?: UploadFile[];
localization?: UploadLocalization;
multiple?: boolean;
showFileList?: boolean;
template?: string|Function;
cancel?(e: UploadCancelEvent): void;
complete?(e: UploadEvent): void;
error?(e: UploadErrorEvent): void;
progress?(e: UploadProgressEvent): void;
remove?(e: UploadRemoveEvent): void;
select?(e: UploadSelectEvent): void;
success?(e: UploadSuccessEvent): void;
upload?(e: UploadUploadEvent): void;
}
interface UploadEvent {
sender: Upload;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface UploadCancelEvent extends UploadEvent {
files?: UploadFile[];
}
interface UploadErrorEvent extends UploadEvent {
files?: UploadFile[];
operation?: string;
XMLHttpRequest?: any;
}
interface UploadProgressEvent extends UploadEvent {
files?: UploadFile[];
percentComplete?: number;
}
interface UploadRemoveEvent extends UploadEvent {
files?: UploadFile[];
data?: any;
}
interface UploadSelectEvent extends UploadEvent {
e?: any;
files?: UploadFile[];
}
interface UploadSuccessEvent extends UploadEvent {
files?: UploadFile[];
operation?: string;
response?: any;
XMLHttpRequest?: any;
}
interface UploadUploadEvent extends UploadEvent {
files?: UploadFile[];
data?: any;
formData?: any;
XMLHttpRequest?: any;
}
class Validator extends kendo.ui.Widget {
static fn: Validator;
options: ValidatorOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Validator;
constructor(element: Element, options?: ValidatorOptions);
errors(): any;
hideMessages(): void;
validate(): boolean;
validateInput(input: Element): boolean;
validateInput(input: JQuery): boolean;
}
interface ValidatorOptions {
name?: string;
errorTemplate?: string;
messages?: any;
rules?: any;
validateOnBlur?: boolean;
validate?(e: ValidatorValidateEvent): void;
}
interface ValidatorEvent {
sender: Validator;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface ValidatorValidateEvent extends ValidatorEvent {
valid?: boolean;
}
class Window extends kendo.ui.Widget {
static fn: Window;
options: WindowOptions;
element: JQuery;
wrapper: JQuery;
static extend(proto: Object): Window;
constructor(element: Element, options?: WindowOptions);
center(): kendo.ui.Window;
close(): kendo.ui.Window;
content(): string;
content(content?: string): kendo.ui.Window;
content(content?: JQuery): kendo.ui.Window;
destroy(): void;
maximize(): kendo.ui.Window;
minimize(): kendo.ui.Window;
open(): kendo.ui.Window;
pin(): void;
refresh(options: any): kendo.ui.Window;
restore(): kendo.ui.Window;
setOptions(options: any): void;
title(): string;
title(text?: string): kendo.ui.Window;
toFront(): kendo.ui.Window;
toggleMaximization(): kendo.ui.Window;
unpin(): void;
}
interface WindowAnimationClose {
effects?: string;
duration?: number;
}
interface WindowAnimationOpen {
effects?: string;
duration?: number;
}
interface WindowAnimation {
close?: WindowAnimationClose;
open?: WindowAnimationOpen;
}
interface WindowContent {
template?: string;
}
interface WindowPosition {
top?: number|string;
left?: number|string;
}
interface WindowRefreshOptions {
url?: string;
cache?: boolean;
data?: any;
type?: string;
template?: string;
iframe?: boolean;
}
interface WindowOptions {
name?: string;
actions?: any;
animation?: WindowAnimation;
appendTo?: any|string;
autoFocus?: boolean;
content?: WindowContent;
draggable?: boolean;
iframe?: boolean;
height?: number|string;
maxHeight?: number;
maxWidth?: number;
minHeight?: number;
minWidth?: number;
modal?: boolean;
pinned?: boolean;
position?: WindowPosition;
resizable?: boolean;
scrollable?: boolean;
title?: string|boolean;
visible?: boolean;
width?: number|string;
activate?(e: WindowEvent): void;
close?(e: WindowCloseEvent): void;
deactivate?(e: WindowEvent): void;
dragend?(e: WindowEvent): void;
dragstart?(e: WindowEvent): void;
error?(e: WindowErrorEvent): void;
maximize?(e: WindowEvent): void;
minimize?(e: WindowEvent): void;
open?(e: WindowEvent): void;
refresh?(e: WindowEvent): void;
resize?(e: WindowEvent): void;
}
interface WindowEvent {
sender: Window;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface WindowCloseEvent extends WindowEvent {
userTriggered?: boolean;
}
interface WindowErrorEvent extends WindowEvent {
xhr?: JQueryXHR;
status?: string;
}
}
declare module kendo {
class Color extends Observable {
options: ColorOptions;
diff(): number;
equals(): boolean;
toHSV(): any;
toRGB(): any;
toBytes(): any;
toHex(): string;
toCss(): string;
toCssRgba(): string;
toDisplay(): string;
}
interface ColorOptions {
name?: string;
}
interface ColorEvent {
sender: Color;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
module drawing {
function align(elements: any, rect: kendo.geometry.Rect, alignment: string): void;
function drawDOM(element: JQuery, options: any): JQueryPromise<any>;
function exportImage(group: kendo.drawing.Group, options: any): JQueryPromise<any>;
function exportPDF(group: kendo.drawing.Group, options: kendo.drawing.PDFOptions): JQueryPromise<any>;
function exportSVG(group: kendo.drawing.Group, options: any): JQueryPromise<any>;
function fit(element: kendo.drawing.Element, rect: kendo.geometry.Rect): void;
function stack(elements: any): void;
function vAlign(elements: any, rect: kendo.geometry.Rect, alignment: string): void;
function vStack(elements: any): void;
function vWrap(elements: any, rect: kendo.geometry.Rect): any;
function wrap(elements: any, rect: kendo.geometry.Rect): any;
}
module effects {
function box(element: HTMLElement): any;
function fillScale(firstElement: HTMLElement, secondElement: HTMLElement): number;
function fitScale(firstElement: HTMLElement, secondElement: HTMLElement): number;
function transformOrigin(firstElement: HTMLElement, secondElement: HTMLElement): any;
}
function antiForgeryTokens(): any;
function bind(element: string, viewModel: any, namespace?: any): void;
function bind(element: string, viewModel: kendo.data.ObservableObject, namespace?: any): void;
function bind(element: JQuery, viewModel: any, namespace?: any): void;
function bind(element: JQuery, viewModel: kendo.data.ObservableObject, namespace?: any): void;
function bind(element: Element, viewModel: any, namespace?: any): void;
function bind(element: Element, viewModel: kendo.data.ObservableObject, namespace?: any): void;
function observableHierarchy(array: any): void;
function culture(culture: string): void;
function destroy(element: string): void;
function destroy(element: JQuery): void;
function destroy(element: Element): void;
function htmlEncode(value: string): string;
function parseDate(value: string, formats?: string, culture?: string): Date;
function parseDate(value: string, formats?: any, culture?: string): Date;
function parseFloat(value: string, culture?: string): number;
function parseInt(value: string, culture?: string): number;
function parseColor(color: string, noerror: boolean): kendo.Color;
function proxyModelSetters(): void;
function proxyModelSetters(data: kendo.data.Model): void;
function resize(element: string, force: boolean): void;
function resize(element: JQuery, force: boolean): void;
function resize(element: Element, force: boolean): void;
function saveAs(options: any): void;
function stringify(value: any): string;
function throttle(fn: Function, timeout: number): void;
function touchScroller(element: string): void;
function touchScroller(element: JQuery): void;
function touchScroller(element: Element): void;
function toString(value: Date, format: string, culture?: string): string;
function toString(value: number, format: string, culture?: string): string;
function unbind(element: string): void;
function unbind(element: JQuery): void;
function unbind(element: Element): void;
module pdf {
function defineFont(map: any): void;
}
}
declare module kendo.spreadsheet {
class CustomFilter extends Observable {
options: CustomFilterOptions;
init(options: any): void;
}
interface CustomFilterOptions {
name?: string;
}
interface CustomFilterEvent {
sender: CustomFilter;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class DynamicFilter extends Observable {
options: DynamicFilterOptions;
init(options: any): void;
}
interface DynamicFilterOptions {
name?: string;
}
interface DynamicFilterEvent {
sender: DynamicFilter;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Range extends Observable {
options: RangeOptions;
background(): string;
background(value?: string): void;
bold(): boolean;
bold(value?: boolean): void;
borderBottom(): any;
borderBottom(value?: any): void;
borderLeft(): any;
borderLeft(value?: any): void;
borderRight(): any;
borderRight(value?: any): void;
borderTop(): any;
borderTop(value?: any): void;
color(): string;
color(value?: string): void;
clear(options?: any): void;
clearFilter(indices: any): void;
clearFilter(indices: number): void;
enable(): boolean;
enable(value?: boolean): void;
fillFrom(srcRange: Range, direction?: number): void;
fillFrom(srcRange: string, direction?: number): void;
filter(filter: boolean): void;
filter(filter: any): void;
fontFamily(): string;
fontFamily(value?: string): void;
fontSize(): number;
fontSize(value?: number): void;
forEachCell(callback: Function): void;
format(): string;
format(format?: string): void;
formula(): string;
formula(formula?: string): void;
hasFilter(): boolean;
input(): any;
input(value?: string): void;
input(value?: number): void;
input(value?: Date): void;
isSortable(): boolean;
isFilterable(): boolean;
italic(): boolean;
italic(value?: boolean): void;
merge(): void;
select(): void;
sort(sort: number): void;
sort(sort: any): void;
textAlign(): string;
textAlign(value?: string): void;
unmerge(): void;
values(values: any): void;
validation(): any;
validation(value?: any): void;
value(): any;
value(value?: string): void;
value(value?: number): void;
value(value?: Date): void;
verticalAlign(): string;
verticalAlign(value?: string): void;
wrap(): boolean;
wrap(value?: boolean): void;
}
interface RangeOptions {
name?: string;
}
interface RangeEvent {
sender: Range;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Sheet extends Observable {
options: SheetOptions;
clearFilter(indexes: number): void;
clearFilter(indexes: any): void;
columnWidth(): void;
columnWidth(index: number, width?: number): void;
batch(callback: Function, changeEventArgs: any): void;
deleteColumn(index: number): void;
fromJSON(data: any): void;
frozenColumns(): number;
frozenColumns(count?: number): void;
frozenRows(): number;
frozenRows(count?: number): void;
hideColumn(index: number): void;
hideRow(index: number): void;
insertColumn(index: number): void;
insertRow(index: number): void;
range(ref: string): kendo.spreadsheet.Range;
rowHeight(): void;
rowHeight(index: number, width?: number): void;
selection(): kendo.spreadsheet.Range;
setDataSource(dataSource: kendo.data.DataSource, columns?: any): void;
unhideColumn(index: number): void;
unhideRow(index: number): void;
}
interface SheetOptions {
name?: string;
change?(e: SheetChangeEvent): void;
}
interface SheetEvent {
sender: Sheet;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SheetChangeEvent extends SheetEvent {
}
class TopFilter extends Observable {
options: TopFilterOptions;
init(options: any): void;
}
interface TopFilterOptions {
name?: string;
}
interface TopFilterEvent {
sender: TopFilter;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class ValueFilter extends Observable {
options: ValueFilterOptions;
init(options: any): void;
}
interface ValueFilterOptions {
name?: string;
}
interface ValueFilterEvent {
sender: ValueFilter;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
}
declare module kendo.ooxml {
class Workbook extends Observable {
options: WorkbookOptions;
sheets: WorkbookSheet[];
constructor(options?: WorkbookOptions);
toDataURL(): string;
}
interface WorkbookSheetColumn {
autoWidth?: boolean;
index?: number;
width?: number;
}
interface WorkbookSheetFilter {
from?: number;
to?: number;
}
interface WorkbookSheetFreezePane {
colSplit?: number;
rowSplit?: number;
}
interface WorkbookSheetRowCellBorderBottom {
color?: string;
size?: number;
}
interface WorkbookSheetRowCellBorderLeft {
color?: string;
size?: number;
}
interface WorkbookSheetRowCellBorderRight {
color?: string;
size?: number;
}
interface WorkbookSheetRowCellBorderTop {
color?: string;
size?: number;
}
interface WorkbookSheetRowCell {
background?: string;
borderBottom?: WorkbookSheetRowCellBorderBottom;
borderLeft?: WorkbookSheetRowCellBorderLeft;
borderTop?: WorkbookSheetRowCellBorderTop;
borderRight?: WorkbookSheetRowCellBorderRight;
bold?: boolean;
color?: string;
colSpan?: number;
fontFamily?: string;
fontName?: string;
fontSize?: number;
format?: string;
formula?: string;
hAlign?: string;
index?: any;
italic?: boolean;
rowSpan?: number;
textAlign?: string;
underline?: boolean;
wrap?: boolean;
vAlign?: string;
verticalAlign?: string;
value?: Date|number|string|boolean;
}
interface WorkbookSheetRow {
cells?: WorkbookSheetRowCell[];
index?: number;
height?: number;
}
interface WorkbookSheet {
columns?: WorkbookSheetColumn[];
freezePane?: WorkbookSheetFreezePane;
frozenColumns?: number;
frozenRows?: number;
filter?: WorkbookSheetFilter;
name?: string;
rows?: WorkbookSheetRow[];
title?: string;
}
interface WorkbookOptions {
name?: string;
creator?: string;
date?: Date;
sheets?: WorkbookSheet[];
}
interface WorkbookEvent {
sender: Workbook;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
}
declare module kendo.dataviz.geometry {
class Arc extends Observable {
options: ArcOptions;
anticlockwise: boolean;
center: kendo.geometry.Point;
endAngle: number;
radiusX: number;
radiusY: number;
startAngle: number;
bbox(matrix: kendo.geometry.Matrix): kendo.geometry.Rect;
getAnticlockwise(): boolean;
getCenter(): kendo.geometry.Point;
getEndAngle(): number;
getRadiusX(): number;
getRadiusY(): number;
getStartAngle(): number;
pointAt(angle: number): kendo.geometry.Point;
setAnticlockwise(value: boolean): kendo.geometry.Arc;
setCenter(value: kendo.geometry.Point): kendo.geometry.Arc;
setEndAngle(value: number): kendo.geometry.Arc;
setRadiusX(value: number): kendo.geometry.Arc;
setRadiusY(value: number): kendo.geometry.Arc;
setStartAngle(value: number): kendo.geometry.Arc;
}
interface ArcOptions {
name?: string;
}
interface ArcEvent {
sender: Arc;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Circle extends Observable {
options: CircleOptions;
center: kendo.geometry.Point;
radius: number;
bbox(matrix: kendo.geometry.Matrix): kendo.geometry.Rect;
clone(): kendo.geometry.Circle;
equals(other: kendo.geometry.Circle): boolean;
getCenter(): kendo.geometry.Point;
getRadius(): number;
pointAt(angle: number): kendo.geometry.Point;
setCenter(value: kendo.geometry.Point): kendo.geometry.Point;
setCenter(value: any): kendo.geometry.Point;
setRadius(value: number): kendo.geometry.Circle;
}
interface CircleOptions {
name?: string;
}
interface CircleEvent {
sender: Circle;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Matrix extends Observable {
options: MatrixOptions;
a: number;
b: number;
c: number;
d: number;
e: number;
f: number;
static rotate(angle: number, x: number, y: number): kendo.geometry.Matrix;
static scale(scaleX: number, scaleY: number): kendo.geometry.Matrix;
static translate(x: number, y: number): kendo.geometry.Matrix;
static unit(): kendo.geometry.Matrix;
clone(): kendo.geometry.Matrix;
equals(other: kendo.geometry.Matrix): boolean;
round(digits: number): kendo.geometry.Matrix;
multiplyCopy(matrix: kendo.geometry.Matrix): kendo.geometry.Matrix;
toArray(digits: number): any;
toString(digits: number, separator: string): string;
}
interface MatrixOptions {
name?: string;
}
interface MatrixEvent {
sender: Matrix;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Point extends Observable {
options: PointOptions;
x: number;
y: number;
constructor(x: number, y: number);
static create(x: number, y: number): kendo.geometry.Point;
static create(x: any, y: number): kendo.geometry.Point;
static create(x: kendo.geometry.Point, y: number): kendo.geometry.Point;
static min(): kendo.geometry.Point;
static max(): kendo.geometry.Point;
static minPoint(): kendo.geometry.Point;
static maxPoint(): kendo.geometry.Point;
clone(): kendo.geometry.Point;
distanceTo(point: kendo.geometry.Point): number;
equals(other: kendo.geometry.Point): boolean;
getX(): number;
getY(): number;
move(x: number, y: number): kendo.geometry.Point;
rotate(angle: number, center: kendo.geometry.Point): kendo.geometry.Point;
rotate(angle: number, center: any): kendo.geometry.Point;
round(digits: number): kendo.geometry.Point;
scale(scaleX: number, scaleY: number): kendo.geometry.Point;
scaleCopy(scaleX: number, scaleY: number): kendo.geometry.Point;
setX(value: number): kendo.geometry.Point;
setY(value: number): kendo.geometry.Point;
toArray(digits: number): any;
toString(digits: number, separator: string): string;
transform(tansformation: kendo.geometry.Transformation): kendo.geometry.Point;
transformCopy(tansformation: kendo.geometry.Transformation): kendo.geometry.Point;
translate(dx: number, dy: number): kendo.geometry.Point;
translateWith(vector: kendo.geometry.Point): kendo.geometry.Point;
translateWith(vector: any): kendo.geometry.Point;
}
interface PointOptions {
name?: string;
}
interface PointEvent {
sender: Point;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Rect extends Observable {
options: RectOptions;
origin: kendo.geometry.Point;
size: kendo.geometry.Size;
constructor(origin: kendo.geometry.Point, size: kendo.geometry.Size);
static fromPoints(pointA: kendo.geometry.Point, pointB: kendo.geometry.Point): kendo.geometry.Rect;
static union(rectA: kendo.geometry.Rect, rectB: kendo.geometry.Rect): kendo.geometry.Rect;
bbox(matrix: kendo.geometry.Matrix): kendo.geometry.Rect;
bottomLeft(): kendo.geometry.Point;
bottomRight(): kendo.geometry.Point;
center(): kendo.geometry.Point;
clone(): kendo.geometry.Rect;
equals(other: kendo.geometry.Rect): boolean;
getOrigin(): kendo.geometry.Point;
getSize(): kendo.geometry.Size;
height(): number;
setOrigin(value: kendo.geometry.Point): kendo.geometry.Rect;
setOrigin(value: any): kendo.geometry.Rect;
setSize(value: kendo.geometry.Size): kendo.geometry.Rect;
setSize(value: any): kendo.geometry.Rect;
topLeft(): kendo.geometry.Point;
topRight(): kendo.geometry.Point;
width(): number;
}
interface RectOptions {
name?: string;
}
interface RectEvent {
sender: Rect;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Size extends Observable {
options: SizeOptions;
width: number;
height: number;
static create(width: number, height: number): kendo.geometry.Size;
static create(width: any, height: number): kendo.geometry.Size;
static create(width: kendo.geometry.Size, height: number): kendo.geometry.Size;
clone(): kendo.geometry.Size;
equals(other: kendo.geometry.Size): boolean;
getWidth(): number;
getHeight(): number;
setWidth(value: number): kendo.geometry.Size;
setHeight(value: number): kendo.geometry.Size;
}
interface SizeOptions {
name?: string;
}
interface SizeEvent {
sender: Size;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Transformation extends Observable {
options: TransformationOptions;
clone(): kendo.geometry.Transformation;
equals(other: kendo.geometry.Transformation): boolean;
matrix(): kendo.geometry.Matrix;
multiply(transformation: kendo.geometry.Transformation): kendo.geometry.Transformation;
rotate(angle: number, center: any): kendo.geometry.Transformation;
rotate(angle: number, center: kendo.geometry.Point): kendo.geometry.Transformation;
scale(scaleX: number, scaleY: number): kendo.geometry.Transformation;
translate(x: number, y: number): kendo.geometry.Transformation;
}
interface TransformationOptions {
name?: string;
}
interface TransformationEvent {
sender: Transformation;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
}
declare module kendo.dataviz.drawing {
class Arc extends kendo.drawing.Element {
options: ArcOptions;
constructor(geometry: kendo.geometry.Arc, options?: ArcOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
geometry(): kendo.geometry.Arc;
geometry(value: kendo.geometry.Arc): void;
fill(color: string, opacity?: number): kendo.drawing.Arc;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Arc;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface ArcOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface ArcEvent {
sender: Arc;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Circle extends kendo.drawing.Element {
options: CircleOptions;
constructor(geometry: kendo.geometry.Circle, options?: CircleOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
geometry(): kendo.geometry.Circle;
geometry(value: kendo.geometry.Circle): void;
fill(color: string, opacity?: number): kendo.drawing.Circle;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Circle;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface CircleOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface CircleEvent {
sender: Circle;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Element extends kendo.Class {
options: ElementOptions;
constructor(options?: ElementOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
opacity(): number;
opacity(opacity: number): void;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface ElementOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
opacity?: number;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface ElementEvent {
sender: Element;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface FillOptions {
color?: string;
opacity?: number;
}
class Gradient extends kendo.Class {
options: GradientOptions;
stops: any;
constructor(options?: GradientOptions);
addStop(offset: number, color: string, opacity: number): kendo.drawing.GradientStop;
removeStop(stop: kendo.drawing.GradientStop): void;
}
interface GradientOptions {
name?: string;
stops?: any;
}
interface GradientEvent {
sender: Gradient;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class GradientStop extends kendo.Class {
options: GradientStopOptions;
constructor(options?: GradientStopOptions);
}
interface GradientStopOptions {
name?: string;
offset?: number;
color?: string;
opacity?: number;
}
interface GradientStopEvent {
sender: GradientStop;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Group extends kendo.drawing.Element {
options: GroupOptions;
children: any;
constructor(options?: GroupOptions);
append(element: kendo.drawing.Element): void;
clear(): void;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
insert(position: number, element: kendo.drawing.Element): void;
opacity(): number;
opacity(opacity: number): void;
remove(element: kendo.drawing.Element): void;
removeAt(index: number): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface GroupOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
opacity?: number;
pdf?: kendo.drawing.PDFOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface GroupEvent {
sender: Group;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Image extends kendo.drawing.Element {
options: ImageOptions;
constructor(src: string, rect: kendo.geometry.Rect);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
opacity(): number;
opacity(opacity: number): void;
src(): string;
src(value: string): void;
rect(): kendo.geometry.Rect;
rect(value: kendo.geometry.Rect): void;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface ImageOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
opacity?: number;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface ImageEvent {
sender: Image;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Layout extends kendo.drawing.Group {
options: LayoutOptions;
constructor(rect: kendo.geometry.Rect, options?: LayoutOptions);
rect(): kendo.geometry.Rect;
rect(rect: kendo.geometry.Rect): void;
reflow(): void;
}
interface LayoutOptions {
name?: string;
alignContent?: string;
alignItems?: string;
justifyContent?: string;
lineSpacing?: number;
spacing?: number;
orientation?: string;
wrap?: boolean;
}
interface LayoutEvent {
sender: Layout;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class LinearGradient extends kendo.drawing.Gradient {
options: LinearGradientOptions;
stops: any;
constructor(options?: LinearGradientOptions);
addStop(offset: number, color: string, opacity: number): kendo.drawing.GradientStop;
end(): kendo.geometry.Point;
end(end: any): void;
end(end: kendo.geometry.Point): void;
start(): kendo.geometry.Point;
start(start: any): void;
start(start: kendo.geometry.Point): void;
removeStop(stop: kendo.drawing.GradientStop): void;
}
interface LinearGradientOptions {
name?: string;
stops?: any;
}
interface LinearGradientEvent {
sender: LinearGradient;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class MultiPath extends kendo.drawing.Element {
options: MultiPathOptions;
paths: any;
constructor(options?: MultiPathOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
close(): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: any, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.MultiPath;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.MultiPath;
fill(color: string, opacity?: number): kendo.drawing.MultiPath;
lineTo(x: number, y?: number): kendo.drawing.MultiPath;
lineTo(x: any, y?: number): kendo.drawing.MultiPath;
lineTo(x: kendo.geometry.Point, y?: number): kendo.drawing.MultiPath;
moveTo(x: number, y?: number): kendo.drawing.MultiPath;
moveTo(x: any, y?: number): kendo.drawing.MultiPath;
moveTo(x: kendo.geometry.Point, y?: number): kendo.drawing.MultiPath;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.MultiPath;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface MultiPathOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface MultiPathEvent {
sender: MultiPath;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class OptionsStore extends kendo.Class {
options: OptionsStoreOptions;
observer: any;
constructor(options?: OptionsStoreOptions);
get(field: string): any;
set(field: string, value: any): void;
}
interface OptionsStoreOptions {
name?: string;
}
interface OptionsStoreEvent {
sender: OptionsStore;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface PDFOptions {
creator?: string;
date?: Date;
keywords?: string;
landscape?: boolean;
margin?: any;
paperSize?: any;
subject?: string;
title?: string;
}
class Path extends kendo.drawing.Element {
options: PathOptions;
segments: any;
constructor(options?: PathOptions);
static fromPoints(points: any): kendo.drawing.Path;
static fromRect(rect: kendo.geometry.Rect): kendo.drawing.Path;
static parse(svgPath: string, options?: any): kendo.drawing.Path;
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
close(): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: any, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: any, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: any, endPoint: kendo.geometry.Point): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: any): kendo.drawing.Path;
curveTo(controlOut: kendo.geometry.Point, controlIn: kendo.geometry.Point, endPoint: kendo.geometry.Point): kendo.drawing.Path;
fill(color: string, opacity?: number): kendo.drawing.Path;
lineTo(x: number, y?: number): kendo.drawing.Path;
lineTo(x: any, y?: number): kendo.drawing.Path;
lineTo(x: kendo.geometry.Point, y?: number): kendo.drawing.Path;
moveTo(x: number, y?: number): kendo.drawing.Path;
moveTo(x: any, y?: number): kendo.drawing.Path;
moveTo(x: kendo.geometry.Point, y?: number): kendo.drawing.Path;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Path;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface PathOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface PathEvent {
sender: Path;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class RadialGradient extends kendo.drawing.Gradient {
options: RadialGradientOptions;
stops: any;
constructor(options?: RadialGradientOptions);
addStop(offset: number, color: string, opacity: number): kendo.drawing.GradientStop;
center(): kendo.geometry.Point;
center(center: any): void;
center(center: kendo.geometry.Point): void;
radius(): number;
radius(value: number): void;
removeStop(stop: kendo.drawing.GradientStop): void;
}
interface RadialGradientOptions {
name?: string;
center?: any|kendo.geometry.Point;
radius?: number;
stops?: any;
}
interface RadialGradientEvent {
sender: RadialGradient;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Rect extends kendo.drawing.Element {
options: RectOptions;
constructor(geometry: kendo.geometry.Rect, options?: RectOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
geometry(): kendo.geometry.Rect;
geometry(value: kendo.geometry.Rect): void;
fill(color: string, opacity?: number): kendo.drawing.Rect;
opacity(): number;
opacity(opacity: number): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Rect;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface RectOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface RectEvent {
sender: Rect;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
class Segment extends kendo.Class {
options: SegmentOptions;
constructor(anchor: kendo.geometry.Point, controlIn: kendo.geometry.Point, controlOut: kendo.geometry.Point);
anchor(): kendo.geometry.Point;
anchor(value: kendo.geometry.Point): void;
controlIn(): kendo.geometry.Point;
controlIn(value: kendo.geometry.Point): void;
controlOut(): kendo.geometry.Point;
controlOut(value: kendo.geometry.Point): void;
}
interface SegmentOptions {
name?: string;
}
interface SegmentEvent {
sender: Segment;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface StrokeOptions {
color?: string;
dashType?: string;
lineCap?: string;
lineJoin?: string;
opacity?: number;
width?: number;
}
class Surface extends kendo.Observable {
options: SurfaceOptions;
constructor(options?: SurfaceOptions);
static create(element: JQuery, options?: any): kendo.drawing.Surface;
static create(element: Element, options?: any): kendo.drawing.Surface;
clear(): void;
draw(element: kendo.drawing.Element): void;
eventTarget(e: any): kendo.drawing.Element;
resize(force?: boolean): void;
}
interface SurfaceOptions {
name?: string;
type?: string;
height?: string;
width?: string;
click?(e: SurfaceClickEvent): void;
mouseenter?(e: SurfaceMouseenterEvent): void;
mouseleave?(e: SurfaceMouseleaveEvent): void;
}
interface SurfaceEvent {
sender: Surface;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
interface SurfaceClickEvent extends SurfaceEvent {
element?: kendo.drawing.Element;
originalEvent?: any;
}
interface SurfaceMouseenterEvent extends SurfaceEvent {
element?: kendo.drawing.Element;
originalEvent?: any;
}
interface SurfaceMouseleaveEvent extends SurfaceEvent {
element?: kendo.drawing.Element;
originalEvent?: any;
}
class Text extends kendo.drawing.Element {
options: TextOptions;
constructor(content: string, position: kendo.geometry.Point, options?: TextOptions);
bbox(): kendo.geometry.Rect;
clip(): kendo.drawing.Path;
clip(clip: kendo.drawing.Path): void;
clippedBBox(): kendo.geometry.Rect;
content(): string;
content(value: string): void;
fill(color: string, opacity?: number): kendo.drawing.Text;
opacity(): number;
opacity(opacity: number): void;
position(): kendo.geometry.Point;
position(value: kendo.geometry.Point): void;
stroke(color: string, width?: number, opacity?: number): kendo.drawing.Text;
transform(): kendo.geometry.Transformation;
transform(transform: kendo.geometry.Transformation): void;
visible(): boolean;
visible(visible: boolean): void;
}
interface TextOptions {
name?: string;
clip?: kendo.drawing.Path;
cursor?: string;
fill?: kendo.drawing.FillOptions;
font?: string;
opacity?: number;
stroke?: kendo.drawing.StrokeOptions;
transform?: kendo.geometry.Transformation;
visible?: boolean;
}
interface TextEvent {
sender: Text;
preventDefault: Function;
isDefaultPrevented(): boolean;
}
}
interface HTMLElement {
kendoBindingTarget: kendo.data.BindingTarget;
}
interface JQueryXHR {
}
interface JQueryEventObject {
}
interface JQueryPromise<T> {
}
interface JQuery {
kendoDraggable(): JQuery;
kendoDraggable(options: kendo.ui.DraggableOptions): JQuery;
kendoDropTarget(): JQuery;
kendoDropTarget(options: kendo.ui.DropTargetOptions): JQuery;
kendoDropTargetArea(): JQuery;
kendoDropTargetArea(options: kendo.ui.DropTargetAreaOptions): JQuery;
data(key: any): any;
kendoAutoComplete(): JQuery;
kendoAutoComplete(options: kendo.ui.AutoCompleteOptions): JQuery;
data(key: "kendoAutoComplete"): kendo.ui.AutoComplete;
kendoButton(): JQuery;
kendoButton(options: kendo.ui.ButtonOptions): JQuery;
data(key: "kendoButton"): kendo.ui.Button;
kendoCalendar(): JQuery;
kendoCalendar(options: kendo.ui.CalendarOptions): JQuery;
data(key: "kendoCalendar"): kendo.ui.Calendar;
kendoColorPalette(): JQuery;
kendoColorPalette(options: kendo.ui.ColorPaletteOptions): JQuery;
data(key: "kendoColorPalette"): kendo.ui.ColorPalette;
kendoColorPicker(): JQuery;
kendoColorPicker(options: kendo.ui.ColorPickerOptions): JQuery;
data(key: "kendoColorPicker"): kendo.ui.ColorPicker;
kendoComboBox(): JQuery;
kendoComboBox(options: kendo.ui.ComboBoxOptions): JQuery;
data(key: "kendoComboBox"): kendo.ui.ComboBox;
kendoContextMenu(): JQuery;
kendoContextMenu(options: kendo.ui.ContextMenuOptions): JQuery;
data(key: "kendoContextMenu"): kendo.ui.ContextMenu;
kendoDatePicker(): JQuery;
kendoDatePicker(options: kendo.ui.DatePickerOptions): JQuery;
data(key: "kendoDatePicker"): kendo.ui.DatePicker;
kendoDateTimePicker(): JQuery;
kendoDateTimePicker(options: kendo.ui.DateTimePickerOptions): JQuery;
data(key: "kendoDateTimePicker"): kendo.ui.DateTimePicker;
kendoDropDownList(): JQuery;
kendoDropDownList(options: kendo.ui.DropDownListOptions): JQuery;
data(key: "kendoDropDownList"): kendo.ui.DropDownList;
kendoEditor(): JQuery;
kendoEditor(options: kendo.ui.EditorOptions): JQuery;
data(key: "kendoEditor"): kendo.ui.Editor;
kendoFlatColorPicker(): JQuery;
kendoFlatColorPicker(options: kendo.ui.FlatColorPickerOptions): JQuery;
data(key: "kendoFlatColorPicker"): kendo.ui.FlatColorPicker;
kendoGantt(): JQuery;
kendoGantt(options: kendo.ui.GanttOptions): JQuery;
data(key: "kendoGantt"): kendo.ui.Gantt;
kendoGrid(): JQuery;
kendoGrid(options: kendo.ui.GridOptions): JQuery;
data(key: "kendoGrid"): kendo.ui.Grid;
kendoListView(): JQuery;
kendoListView(options: kendo.ui.ListViewOptions): JQuery;
data(key: "kendoListView"): kendo.ui.ListView;
kendoMaskedTextBox(): JQuery;
kendoMaskedTextBox(options: kendo.ui.MaskedTextBoxOptions): JQuery;
data(key: "kendoMaskedTextBox"): kendo.ui.MaskedTextBox;
kendoMenu(): JQuery;
kendoMenu(options: kendo.ui.MenuOptions): JQuery;
data(key: "kendoMenu"): kendo.ui.Menu;
kendoMultiSelect(): JQuery;
kendoMultiSelect(options: kendo.ui.MultiSelectOptions): JQuery;
data(key: "kendoMultiSelect"): kendo.ui.MultiSelect;
kendoNotification(): JQuery;
kendoNotification(options: kendo.ui.NotificationOptions): JQuery;
data(key: "kendoNotification"): kendo.ui.Notification;
kendoNumericTextBox(): JQuery;
kendoNumericTextBox(options: kendo.ui.NumericTextBoxOptions): JQuery;
data(key: "kendoNumericTextBox"): kendo.ui.NumericTextBox;
kendoPager(): JQuery;
kendoPager(options: kendo.ui.PagerOptions): JQuery;
data(key: "kendoPager"): kendo.ui.Pager;
kendoPanelBar(): JQuery;
kendoPanelBar(options: kendo.ui.PanelBarOptions): JQuery;
data(key: "kendoPanelBar"): kendo.ui.PanelBar;
kendoPivotConfigurator(): JQuery;
kendoPivotConfigurator(options: kendo.ui.PivotConfiguratorOptions): JQuery;
data(key: "kendoPivotConfigurator"): kendo.ui.PivotConfigurator;
kendoPivotGrid(): JQuery;
kendoPivotGrid(options: kendo.ui.PivotGridOptions): JQuery;
data(key: "kendoPivotGrid"): kendo.ui.PivotGrid;
kendoPopup(): JQuery;
kendoPopup(options: kendo.ui.PopupOptions): JQuery;
data(key: "kendoPopup"): kendo.ui.Popup;
kendoProgressBar(): JQuery;
kendoProgressBar(options: kendo.ui.ProgressBarOptions): JQuery;
data(key: "kendoProgressBar"): kendo.ui.ProgressBar;
kendoRangeSlider(): JQuery;
kendoRangeSlider(options: kendo.ui.RangeSliderOptions): JQuery;
data(key: "kendoRangeSlider"): kendo.ui.RangeSlider;
kendoResponsivePanel(): JQuery;
kendoResponsivePanel(options: kendo.ui.ResponsivePanelOptions): JQuery;
data(key: "kendoResponsivePanel"): kendo.ui.ResponsivePanel;
kendoScheduler(): JQuery;
kendoScheduler(options: kendo.ui.SchedulerOptions): JQuery;
data(key: "kendoScheduler"): kendo.ui.Scheduler;
kendoSlider(): JQuery;
kendoSlider(options: kendo.ui.SliderOptions): JQuery;
data(key: "kendoSlider"): kendo.ui.Slider;
kendoSortable(): JQuery;
kendoSortable(options: kendo.ui.SortableOptions): JQuery;
data(key: "kendoSortable"): kendo.ui.Sortable;
kendoSplitter(): JQuery;
kendoSplitter(options: kendo.ui.SplitterOptions): JQuery;
data(key: "kendoSplitter"): kendo.ui.Splitter;
kendoSpreadsheet(): JQuery;
kendoSpreadsheet(options: kendo.ui.SpreadsheetOptions): JQuery;
data(key: "kendoSpreadsheet"): kendo.ui.Spreadsheet;
kendoTabStrip(): JQuery;
kendoTabStrip(options: kendo.ui.TabStripOptions): JQuery;
data(key: "kendoTabStrip"): kendo.ui.TabStrip;
kendoTimePicker(): JQuery;
kendoTimePicker(options: kendo.ui.TimePickerOptions): JQuery;
data(key: "kendoTimePicker"): kendo.ui.TimePicker;
kendoToolBar(): JQuery;
kendoToolBar(options: kendo.ui.ToolBarOptions): JQuery;
data(key: "kendoToolBar"): kendo.ui.ToolBar;
kendoTooltip(): JQuery;
kendoTooltip(options: kendo.ui.TooltipOptions): JQuery;
data(key: "kendoTooltip"): kendo.ui.Tooltip;
kendoTreeList(): JQuery;
kendoTreeList(options: kendo.ui.TreeListOptions): JQuery;
data(key: "kendoTreeList"): kendo.ui.TreeList;
kendoTreeView(): JQuery;
kendoTreeView(options: kendo.ui.TreeViewOptions): JQuery;
data(key: "kendoTreeView"): kendo.ui.TreeView;
kendoUpload(): JQuery;
kendoUpload(options: kendo.ui.UploadOptions): JQuery;
data(key: "kendoUpload"): kendo.ui.Upload;
kendoValidator(): JQuery;
kendoValidator(options: kendo.ui.ValidatorOptions): JQuery;
data(key: "kendoValidator"): kendo.ui.Validator;
kendoWindow(): JQuery;
kendoWindow(options: kendo.ui.WindowOptions): JQuery;
data(key: "kendoWindow"): kendo.ui.Window;
}
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.core', f);
}(function () {
var __meta__ = {
id: 'core',
name: 'Core',
category: 'framework',
description: 'The core of the Kendo framework.'
};
(function ($, window, undefined) {
var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\{(\d+)(:[^\}]+)?\}/g, boxShadowRegExp = /(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+)?/i, numberRegExp = /^(\+|-?)\d+(\.?)\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;
kendo.version = '2016.2.504'.replace(/^\s+|\s+$/g, '');
function Class() {
}
Class.extend = function (proto) {
var base = function () {
}, member, that = this, subclass = proto && proto.init ? proto.init : function () {
that.apply(this, arguments);
}, fn;
base.prototype = that.prototype;
fn = subclass.fn = subclass.prototype = new base();
for (member in proto) {
if (proto[member] != null && proto[member].constructor === Object) {
fn[member] = extend(true, {}, base.prototype[member], proto[member]);
} else {
fn[member] = proto[member];
}
}
fn.constructor = subclass;
subclass.extend = that.extend;
return subclass;
};
Class.prototype._initOptions = function (options) {
this.options = deepExtend({}, this.options, options);
};
var isFunction = kendo.isFunction = function (fn) {
return typeof fn === 'function';
};
var preventDefault = function () {
this._defaultPrevented = true;
};
var isDefaultPrevented = function () {
return this._defaultPrevented === true;
};
var Observable = Class.extend({
init: function () {
this._events = {};
},
bind: function (eventName, handlers, one) {
var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;
if (handlers === undefined) {
for (idx in eventName) {
that.bind(idx, eventName[idx]);
}
return that;
}
for (idx = 0, length = eventNames.length; idx < length; idx++) {
eventName = eventNames[idx];
handler = handlersIsFunction ? handlers : handlers[eventName];
if (handler) {
if (one) {
original = handler;
handler = function () {
that.unbind(eventName, handler);
original.apply(that, arguments);
};
handler.original = original;
}
events = that._events[eventName] = that._events[eventName] || [];
events.push(handler);
}
}
return that;
},
one: function (eventNames, handlers) {
return this.bind(eventNames, handlers, true);
},
first: function (eventName, handlers) {
var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;
for (idx = 0, length = eventNames.length; idx < length; idx++) {
eventName = eventNames[idx];
handler = handlersIsFunction ? handlers : handlers[eventName];
if (handler) {
events = that._events[eventName] = that._events[eventName] || [];
events.unshift(handler);
}
}
return that;
},
trigger: function (eventName, e) {
var that = this, events = that._events[eventName], idx, length;
if (events) {
e = e || {};
e.sender = that;
e._defaultPrevented = false;
e.preventDefault = preventDefault;
e.isDefaultPrevented = isDefaultPrevented;
events = events.slice();
for (idx = 0, length = events.length; idx < length; idx++) {
events[idx].call(that, e);
}
return e._defaultPrevented === true;
}
return false;
},
unbind: function (eventName, handler) {
var that = this, events = that._events[eventName], idx;
if (eventName === undefined) {
that._events = {};
} else if (events) {
if (handler) {
for (idx = events.length - 1; idx >= 0; idx--) {
if (events[idx] === handler || events[idx].original === handler) {
events.splice(idx, 1);
}
}
} else {
that._events[eventName] = [];
}
}
return that;
}
});
function compilePart(part, stringPart) {
if (stringPart) {
return '\'' + part.split('\'').join('\\\'').split('\\"').join('\\\\\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t') + '\'';
} else {
var first = part.charAt(0), rest = part.substring(1);
if (first === '=') {
return '+(' + rest + ')+';
} else if (first === ':') {
return '+$kendoHtmlEncode(' + rest + ')+';
} else {
return ';' + part + ';$kendoOutput+=';
}
}
}
var argumentNameRegExp = /^\w+/, encodeRegExp = /\$\{([^}]*)\}/g, escapedCurlyRegExp = /\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\#/g, sharpRegExp = /__SHARP__/g, zeros = [
'',
'0',
'00',
'000',
'0000'
];
Template = {
paramName: 'data',
useWithBlock: true,
render: function (template, data) {
var idx, length, html = '';
for (idx = 0, length = data.length; idx < length; idx++) {
html += template(data[idx]);
}
return html;
},
compile: function (template, options) {
var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;
if (isFunction(template)) {
return template;
}
functionBody += useWithBlock ? 'with(' + paramName + '){' : '';
functionBody += '$kendoOutput=';
parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');
for (idx = 0; idx < parts.length; idx++) {
functionBody += compilePart(parts[idx], idx % 2 === 0);
}
functionBody += useWithBlock ? ';}' : ';';
functionBody += 'return $kendoOutput;';
functionBody = functionBody.replace(sharpRegExp, '#');
try {
fn = new Function(argumentName, functionBody);
fn._slotCount = Math.floor(parts.length / 2);
return fn;
} catch (e) {
throw new Error(kendo.format('Invalid template:\'{0}\' Generated code:\'{1}\'', template, functionBody));
}
}
};
function pad(number, digits, end) {
number = number + '';
digits = digits || 2;
end = digits - number.length;
if (end) {
return zeros[digits].substring(0, end) + number;
}
return number;
}
(function () {
var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"': '\\"',
'\\': '\\\\'
}, rep, toString = {}.toString;
if (typeof Date.prototype.toJSON !== FUNCTION) {
Date.prototype.toJSON = function () {
var that = this;
return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;
};
String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {
return this.valueOf();
};
}
function quote(string) {
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === STRING ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
function str(key, holder) {
var i, k, v, length, mind = gap, partial, value = holder[key], type;
if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {
value = value.toJSON(key);
}
if (typeof rep === FUNCTION) {
value = rep.call(holder, key, value);
}
type = typeof value;
if (type === STRING) {
return quote(value);
} else if (type === NUMBER) {
return isFinite(value) ? String(value) : NULL;
} else if (type === BOOLEAN || type === NULL) {
return String(value);
} else if (type === OBJECT) {
if (!value) {
return NULL;
}
gap += indent;
partial = [];
if (toString.apply(value) === '[object Array]') {
length = value.length;
for (i = 0; i < length; i++) {
partial[i] = str(i, value) || NULL;
}
v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']';
gap = mind;
return v;
}
if (rep && typeof rep === OBJECT) {
length = rep.length;
for (i = 0; i < length; i++) {
if (typeof rep[i] === STRING) {
k = rep[i];
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
} else {
for (k in value) {
if (Object.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}';
gap = mind;
return v;
}
}
if (typeof JSON.stringify !== FUNCTION) {
JSON.stringify = function (value, replacer, space) {
var i;
gap = '';
indent = '';
if (typeof space === NUMBER) {
for (i = 0; i < space; i += 1) {
indent += ' ';
}
} else if (typeof space === STRING) {
indent = space;
}
rep = replacer;
if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {
throw new Error('JSON.stringify');
}
return str('', { '': value });
};
}
}());
(function () {
var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|"[^"]*"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\d*)$/i, literalRegExp = /(\\.)|(['][^']*[']?)|(["][^"]*["]?)/g, commaRegExp = /\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;
kendo.cultures['en-US'] = {
name: EN,
numberFormat: {
pattern: ['-n'],
decimals: 2,
',': ',',
'.': '.',
groupSize: [3],
percent: {
pattern: [
'-n %',
'n %'
],
decimals: 2,
',': ',',
'.': '.',
groupSize: [3],
symbol: '%'
},
currency: {
name: 'US Dollar',
abbr: 'USD',
pattern: [
'($n)',
'$n'
],
decimals: 2,
',': ',',
'.': '.',
groupSize: [3],
symbol: '$'
}
},
calendars: {
standard: {
days: {
names: [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
],
namesAbbr: [
'Sun',
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat'
],
namesShort: [
'Su',
'Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa'
]
},
months: {
names: [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
],
namesAbbr: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
]
},
AM: [
'AM',
'am',
'AM'
],
PM: [
'PM',
'pm',
'PM'
],
patterns: {
d: 'M/d/yyyy',
D: 'dddd, MMMM dd, yyyy',
F: 'dddd, MMMM dd, yyyy h:mm:ss tt',
g: 'M/d/yyyy h:mm tt',
G: 'M/d/yyyy h:mm:ss tt',
m: 'MMMM dd',
M: 'MMMM dd',
s: 'yyyy\'-\'MM\'-\'ddTHH\':\'mm\':\'ss',
t: 'h:mm tt',
T: 'h:mm:ss tt',
u: 'yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'',
y: 'MMMM, yyyy',
Y: 'MMMM, yyyy'
},
'/': '/',
':': ':',
firstDay: 0,
twoDigitYearMax: 2029
}
}
};
function findCulture(culture) {
if (culture) {
if (culture.numberFormat) {
return culture;
}
if (typeof culture === STRING) {
var cultures = kendo.cultures;
return cultures[culture] || cultures[culture.split('-')[0]] || null;
}
return null;
}
return null;
}
function getCulture(culture) {
if (culture) {
culture = findCulture(culture);
}
return culture || kendo.cultures.current;
}
kendo.culture = function (cultureName) {
var cultures = kendo.cultures, culture;
if (cultureName !== undefined) {
culture = findCulture(cultureName) || cultures[EN];
culture.calendar = culture.calendars.standard;
cultures.current = culture;
} else {
return cultures.current;
}
};
kendo.findCulture = findCulture;
kendo.getCulture = getCulture;
kendo.culture(EN);
function formatDate(date, format, culture) {
culture = getCulture(culture);
var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;
format = calendar.patterns[format] || format;
return format.replace(dateFormatRegExp, function (match) {
var minutes;
var result;
var sign;
if (match === 'd') {
result = date.getDate();
} else if (match === 'dd') {
result = pad(date.getDate());
} else if (match === 'ddd') {
result = days.namesAbbr[date.getDay()];
} else if (match === 'dddd') {
result = days.names[date.getDay()];
} else if (match === 'M') {
result = date.getMonth() + 1;
} else if (match === 'MM') {
result = pad(date.getMonth() + 1);
} else if (match === 'MMM') {
result = months.namesAbbr[date.getMonth()];
} else if (match === 'MMMM') {
result = months.names[date.getMonth()];
} else if (match === 'yy') {
result = pad(date.getFullYear() % 100);
} else if (match === 'yyyy') {
result = pad(date.getFullYear(), 4);
} else if (match === 'h') {
result = date.getHours() % 12 || 12;
} else if (match === 'hh') {
result = pad(date.getHours() % 12 || 12);
} else if (match === 'H') {
result = date.getHours();
} else if (match === 'HH') {
result = pad(date.getHours());
} else if (match === 'm') {
result = date.getMinutes();
} else if (match === 'mm') {
result = pad(date.getMinutes());
} else if (match === 's') {
result = date.getSeconds();
} else if (match === 'ss') {
result = pad(date.getSeconds());
} else if (match === 'f') {
result = math.floor(date.getMilliseconds() / 100);
} else if (match === 'ff') {
result = date.getMilliseconds();
if (result > 99) {
result = math.floor(result / 10);
}
result = pad(result);
} else if (match === 'fff') {
result = pad(date.getMilliseconds(), 3);
} else if (match === 'tt') {
result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];
} else if (match === 'zzz') {
minutes = date.getTimezoneOffset();
sign = minutes < 0;
result = math.abs(minutes / 60).toString().split('.')[0];
minutes = math.abs(minutes) - result * 60;
result = (sign ? '+' : '-') + pad(result);
result += ':' + pad(minutes);
} else if (match === 'zz' || match === 'z') {
result = date.getTimezoneOffset() / 60;
sign = result < 0;
result = math.abs(result).toString().split('.')[0];
result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);
}
return result !== undefined ? result : match.slice(1, match.length - 1);
});
}
function formatNumber(number, format, culture) {
culture = getCulture(culture);
var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;
if (number === undefined) {
return EMPTY;
}
if (!isFinite(number)) {
return number;
}
if (!format) {
return culture.name.length ? number.toLocaleString() : number.toString();
}
formatAndPrecision = standardFormatRegExp.exec(format);
if (formatAndPrecision) {
format = formatAndPrecision[1].toLowerCase();
isCurrency = format === 'c';
isPercent = format === 'p';
if (isCurrency || isPercent) {
numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;
decimal = numberFormat[POINT];
precision = numberFormat.decimals;
symbol = numberFormat.symbol;
pattern = numberFormat.pattern[negative ? 0 : 1];
}
customPrecision = formatAndPrecision[2];
if (customPrecision) {
precision = +customPrecision;
}
if (format === 'e') {
return customPrecision ? number.toExponential(precision) : number.toExponential();
}
if (isPercent) {
number *= 100;
}
number = round(number, precision);
negative = number < 0;
number = number.split(POINT);
integer = number[0];
fraction = number[1];
if (negative) {
integer = integer.substring(1);
}
value = groupInteger(integer, 0, integer.length, numberFormat);
if (fraction) {
value += decimal + fraction;
}
if (format === 'n' && !negative) {
return value;
}
number = EMPTY;
for (idx = 0, length = pattern.length; idx < length; idx++) {
ch = pattern.charAt(idx);
if (ch === 'n') {
number += value;
} else if (ch === '$' || ch === '%') {
number += symbol;
} else {
number += ch;
}
}
return number;
}
if (negative) {
number = -number;
}
if (format.indexOf('\'') > -1 || format.indexOf('"') > -1 || format.indexOf('\\') > -1) {
format = format.replace(literalRegExp, function (match) {
var quoteChar = match.charAt(0).replace('\\', ''), literal = match.slice(1).replace(quoteChar, '');
literals.push(literal);
return PLACEHOLDER;
});
}
format = format.split(';');
if (negative && format[1]) {
format = format[1];
hasNegativeFormat = true;
} else if (number === 0) {
format = format[2] || format[0];
if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {
return format;
}
} else {
format = format[0];
}
percentIndex = format.indexOf('%');
currencyIndex = format.indexOf('$');
isPercent = percentIndex != -1;
isCurrency = currencyIndex != -1;
if (isPercent) {
number *= 100;
}
if (isCurrency && format[currencyIndex - 1] === '\\') {
format = format.split('\\').join('');
isCurrency = false;
}
if (isCurrency || isPercent) {
numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;
decimal = numberFormat[POINT];
precision = numberFormat.decimals;
symbol = numberFormat.symbol;
}
hasGroup = format.indexOf(COMMA) > -1;
if (hasGroup) {
format = format.replace(commaRegExp, EMPTY);
}
decimalIndex = format.indexOf(POINT);
length = format.length;
if (decimalIndex != -1) {
fraction = number.toString().split('e');
if (fraction[1]) {
fraction = round(number, Math.abs(fraction[1]));
} else {
fraction = fraction[0];
}
fraction = fraction.split(POINT)[1] || EMPTY;
zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;
sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;
hasZero = zeroIndex > -1;
hasSharp = sharpIndex > -1;
idx = fraction.length;
if (!hasZero && !hasSharp) {
format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);
length = format.length;
decimalIndex = -1;
idx = 0;
}
if (hasZero && zeroIndex > sharpIndex) {
idx = zeroIndex;
} else if (sharpIndex > zeroIndex) {
if (hasSharp && idx > sharpIndex) {
idx = sharpIndex;
} else if (hasZero && idx < zeroIndex) {
idx = zeroIndex;
}
}
if (idx > -1) {
number = round(number, idx);
}
} else {
number = round(number);
}
sharpIndex = format.indexOf(SHARP);
startZeroIndex = zeroIndex = format.indexOf(ZERO);
if (sharpIndex == -1 && zeroIndex != -1) {
start = zeroIndex;
} else if (sharpIndex != -1 && zeroIndex == -1) {
start = sharpIndex;
} else {
start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;
}
sharpIndex = format.lastIndexOf(SHARP);
zeroIndex = format.lastIndexOf(ZERO);
if (sharpIndex == -1 && zeroIndex != -1) {
end = zeroIndex;
} else if (sharpIndex != -1 && zeroIndex == -1) {
end = sharpIndex;
} else {
end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;
}
if (start == length) {
end = start;
}
if (start != -1) {
value = number.toString().split(POINT);
integer = value[0];
fraction = value[1] || EMPTY;
integerLength = integer.length;
fractionLength = fraction.length;
if (negative && number * -1 >= 0) {
negative = false;
}
number = format.substring(0, start);
if (negative && !hasNegativeFormat) {
number += '-';
}
for (idx = start; idx < length; idx++) {
ch = format.charAt(idx);
if (decimalIndex == -1) {
if (end - idx < integerLength) {
number += integer;
break;
}
} else {
if (zeroIndex != -1 && zeroIndex < idx) {
replacement = EMPTY;
}
if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {
number += integer;
idx = decimalIndex;
}
if (decimalIndex === idx) {
number += (fraction ? decimal : EMPTY) + fraction;
idx += end - decimalIndex + 1;
continue;
}
}
if (ch === ZERO) {
number += ch;
replacement = ch;
} else if (ch === SHARP) {
number += replacement;
}
}
if (hasGroup) {
number = groupInteger(number, start, Math.max(end, integerLength + start - 1), numberFormat);
}
if (end >= start) {
number += format.substring(end + 1);
}
if (isCurrency || isPercent) {
value = EMPTY;
for (idx = 0, length = number.length; idx < length; idx++) {
ch = number.charAt(idx);
value += ch === '$' || ch === '%' ? symbol : ch;
}
number = value;
}
length = literals.length;
if (length) {
for (idx = 0; idx < length; idx++) {
number = number.replace(PLACEHOLDER, literals[idx]);
}
}
}
return number;
}
var groupInteger = function (number, start, end, numberFormat) {
var decimalIndex = number.indexOf(numberFormat[POINT]);
var groupSizes = numberFormat.groupSize.slice();
var groupSize = groupSizes.shift();
var integer, integerLength;
var idx, parts, value;
var newGroupSize;
end = decimalIndex !== -1 ? decimalIndex : end + 1;
integer = number.substring(start, end);
integerLength = integer.length;
if (integerLength >= groupSize) {
idx = integerLength;
parts = [];
while (idx > -1) {
value = integer.substring(idx - groupSize, idx);
if (value) {
parts.push(value);
}
idx -= groupSize;
newGroupSize = groupSizes.shift();
groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;
if (groupSize === 0) {
parts.push(integer.substring(0, idx));
break;
}
}
integer = parts.reverse().join(numberFormat[COMMA]);
number = number.substring(0, start) + integer + number.substring(end);
}
return number;
};
var round = function (value, precision) {
precision = precision || 0;
value = value.toString().split('e');
value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));
value = value.toString().split('e');
value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));
return value.toFixed(precision);
};
var toString = function (value, fmt, culture) {
if (fmt) {
if (objectToString.call(value) === '[object Date]') {
return formatDate(value, fmt, culture);
} else if (typeof value === NUMBER) {
return formatNumber(value, fmt, culture);
}
}
return value !== undefined ? value : '';
};
kendo.format = function (fmt) {
var values = arguments;
return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {
var value = values[parseInt(index, 10) + 1];
return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');
});
};
kendo._extractFormat = function (format) {
if (format.slice(0, 3) === '{0:') {
format = format.slice(3, format.length - 1);
}
return format;
};
kendo._activeElement = function () {
try {
return document.activeElement;
} catch (e) {
return document.documentElement.activeElement;
}
};
kendo._round = round;
kendo.toString = toString;
}());
(function () {
var nonBreakingSpaceRegExp = /\u00A0/g, exponentRegExp = /[eE][\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\-]\d{1,2}/, longTimeZoneRegExp = /[+|\-]\d{1,2}:?\d{2}/, dateRegExp = /^\/Date\((.*?)\)\/$/, offsetRegExp = /[+-]\d*/, formatsSequence = [
'G',
'g',
'd',
'F',
'D',
'y',
'm',
'T',
't'
], numberRegExp = {
2: /^\d{1,2}/,
3: /^\d{1,3}/,
4: /^\d{4}/
}, objectToString = {}.toString;
function outOfRange(value, start, end) {
return !(value >= start && value <= end);
}
function designatorPredicate(designator) {
return designator.charAt(0);
}
function mapDesignators(designators) {
return $.map(designators, designatorPredicate);
}
function adjustDST(date, hours) {
if (!hours && date.getHours() === 23) {
date.setHours(date.getHours() + 2);
}
}
function lowerArray(data) {
var idx = 0, length = data.length, array = [];
for (; idx < length; idx++) {
array[idx] = (data[idx] + '').toLowerCase();
}
return array;
}
function lowerLocalInfo(localInfo) {
var newLocalInfo = {}, property;
for (property in localInfo) {
newLocalInfo[property] = lowerArray(localInfo[property]);
}
return newLocalInfo;
}
function parseExact(value, format, culture) {
if (!value) {
return null;
}
var lookAhead = function (match) {
var i = 0;
while (format[idx] === match) {
i++;
idx++;
}
if (i > 0) {
idx -= 1;
}
return i;
}, getNumber = function (size) {
var rg = numberRegExp[size] || new RegExp('^\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);
if (match) {
match = match[0];
valueIdx += match.length;
return parseInt(match, 10);
}
return null;
}, getIndexByName = function (names, lower) {
var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;
for (; i < length; i++) {
name = names[i];
nameLength = name.length;
subValue = value.substr(valueIdx, nameLength);
if (lower) {
subValue = subValue.toLowerCase();
}
if (subValue == name && nameLength > matchLength) {
matchLength = nameLength;
matchIdx = i;
}
}
if (matchLength) {
valueIdx += matchLength;
return matchIdx + 1;
}
return null;
}, checkLiteral = function () {
var result = false;
if (value.charAt(valueIdx) === format[idx]) {
valueIdx++;
result = true;
}
return result;
}, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;
if (!format) {
format = 'd';
}
pattern = calendar.patterns[format];
if (pattern) {
format = pattern;
}
format = format.split('');
length = format.length;
for (; idx < length; idx++) {
ch = format[idx];
if (literal) {
if (ch === '\'') {
literal = false;
} else {
checkLiteral();
}
} else {
if (ch === 'd') {
count = lookAhead('d');
if (!calendar._lowerDays) {
calendar._lowerDays = lowerLocalInfo(calendar.days);
}
if (day !== null && count > 2) {
continue;
}
day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);
if (day === null || outOfRange(day, 1, 31)) {
return null;
}
} else if (ch === 'M') {
count = lookAhead('M');
if (!calendar._lowerMonths) {
calendar._lowerMonths = lowerLocalInfo(calendar.months);
}
month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);
if (month === null || outOfRange(month, 1, 12)) {
return null;
}
month -= 1;
} else if (ch === 'y') {
count = lookAhead('y');
year = getNumber(count);
if (year === null) {
return null;
}
if (count == 2) {
if (typeof twoDigitYearMax === 'string') {
twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);
}
year = defaultYear - defaultYear % 100 + year;
if (year > twoDigitYearMax) {
year -= 100;
}
}
} else if (ch === 'h') {
lookAhead('h');
hours = getNumber(2);
if (hours == 12) {
hours = 0;
}
if (hours === null || outOfRange(hours, 0, 11)) {
return null;
}
} else if (ch === 'H') {
lookAhead('H');
hours = getNumber(2);
if (hours === null || outOfRange(hours, 0, 23)) {
return null;
}
} else if (ch === 'm') {
lookAhead('m');
minutes = getNumber(2);
if (minutes === null || outOfRange(minutes, 0, 59)) {
return null;
}
} else if (ch === 's') {
lookAhead('s');
seconds = getNumber(2);
if (seconds === null || outOfRange(seconds, 0, 59)) {
return null;
}
} else if (ch === 'f') {
count = lookAhead('f');
match = value.substr(valueIdx, count).match(numberRegExp[3]);
milliseconds = getNumber(count);
if (milliseconds !== null) {
milliseconds = parseFloat('0.' + match[0], 10);
milliseconds = kendo._round(milliseconds, 3);
milliseconds *= 1000;
}
if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {
return null;
}
} else if (ch === 't') {
count = lookAhead('t');
amDesignators = calendar.AM;
pmDesignators = calendar.PM;
if (count === 1) {
amDesignators = mapDesignators(amDesignators);
pmDesignators = mapDesignators(pmDesignators);
}
pmHour = getIndexByName(pmDesignators);
if (!pmHour && !getIndexByName(amDesignators)) {
return null;
}
} else if (ch === 'z') {
UTC = true;
count = lookAhead('z');
if (value.substr(valueIdx, 1) === 'Z') {
checkLiteral();
continue;
}
matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);
if (!matches) {
return null;
}
matches = matches[0].split(':');
hoursOffset = matches[0];
minutesOffset = matches[1];
if (!minutesOffset && hoursOffset.length > 3) {
valueIdx = hoursOffset.length - 2;
minutesOffset = hoursOffset.substring(valueIdx);
hoursOffset = hoursOffset.substring(0, valueIdx);
}
hoursOffset = parseInt(hoursOffset, 10);
if (outOfRange(hoursOffset, -12, 13)) {
return null;
}
if (count > 2) {
minutesOffset = parseInt(minutesOffset, 10);
if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {
return null;
}
}
} else if (ch === '\'') {
literal = true;
checkLiteral();
} else if (!checkLiteral()) {
return null;
}
}
}
hasTime = hours !== null || minutes !== null || seconds || null;
if (year === null && month === null && day === null && hasTime) {
year = defaultYear;
month = date.getMonth();
day = date.getDate();
} else {
if (year === null) {
year = defaultYear;
}
if (day === null) {
day = 1;
}
}
if (pmHour && hours < 12) {
hours += 12;
}
if (UTC) {
if (hoursOffset) {
hours += -hoursOffset;
}
if (minutesOffset) {
minutes += -minutesOffset;
}
value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));
} else {
value = new Date(year, month, day, hours, minutes, seconds, milliseconds);
adjustDST(value, hours);
}
if (year < 100) {
value.setFullYear(year);
}
if (value.getDate() !== day && UTC === undefined) {
return null;
}
return value;
}
function parseMicrosoftFormatOffset(offset) {
var sign = offset.substr(0, 1) === '-' ? -1 : 1;
offset = offset.substring(1);
offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);
return sign * offset;
}
kendo.parseDate = function (value, formats, culture) {
if (objectToString.call(value) === '[object Date]') {
return value;
}
var idx = 0;
var date = null;
var length, patterns;
var tzoffset;
if (value && value.indexOf('/D') === 0) {
date = dateRegExp.exec(value);
if (date) {
date = date[1];
tzoffset = offsetRegExp.exec(date.substring(1));
date = new Date(parseInt(date, 10));
if (tzoffset) {
tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);
date = kendo.timezone.apply(date, 0);
date = kendo.timezone.convert(date, 0, -1 * tzoffset);
}
return date;
}
}
culture = kendo.getCulture(culture);
if (!formats) {
formats = [];
patterns = culture.calendar.patterns;
length = formatsSequence.length;
for (; idx < length; idx++) {
formats[idx] = patterns[formatsSequence[idx]];
}
idx = 0;
formats = [
'yyyy/MM/dd HH:mm:ss',
'yyyy/MM/dd HH:mm',
'yyyy/MM/dd',
'ddd MMM dd yyyy HH:mm:ss',
'yyyy-MM-ddTHH:mm:ss.fffffffzzz',
'yyyy-MM-ddTHH:mm:ss.fffzzz',
'yyyy-MM-ddTHH:mm:sszzz',
'yyyy-MM-ddTHH:mm:ss.fffffff',
'yyyy-MM-ddTHH:mm:ss.fff',
'yyyy-MM-ddTHH:mmzzz',
'yyyy-MM-ddTHH:mmzz',
'yyyy-MM-ddTHH:mm:ss',
'yyyy-MM-ddTHH:mm',
'yyyy-MM-dd HH:mm:ss',
'yyyy-MM-dd HH:mm',
'yyyy-MM-dd',
'HH:mm:ss',
'HH:mm'
].concat(formats);
}
formats = isArray(formats) ? formats : [formats];
length = formats.length;
for (; idx < length; idx++) {
date = parseExact(value, formats[idx], culture);
if (date) {
return date;
}
}
return date;
};
kendo.parseInt = function (value, culture) {
var result = kendo.parseFloat(value, culture);
if (result) {
result = result | 0;
}
return result;
};
kendo.parseFloat = function (value, culture, format) {
if (!value && value !== 0) {
return null;
}
if (typeof value === NUMBER) {
return value;
}
value = value.toString();
culture = kendo.getCulture(culture);
var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;
if (exponentRegExp.test(value)) {
value = parseFloat(value.replace(number['.'], '.'));
if (isNaN(value)) {
value = null;
}
return value;
}
if (negative > 0) {
return null;
} else {
negative = negative > -1;
}
if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {
number = currency;
parts = number.pattern[0].replace('$', symbol).split('n');
if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {
value = value.replace(parts[0], '').replace(parts[1], '');
negative = true;
}
} else if (value.indexOf(percentSymbol) > -1) {
isPercent = true;
number = percent;
symbol = percentSymbol;
}
value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');
value = parseFloat(value);
if (isNaN(value)) {
value = null;
} else if (negative) {
value *= -1;
}
if (value && isPercent) {
value /= 100;
}
return value;
};
}());
function getShadows(element) {
var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [
0,
0,
0,
0,
0
] : [
0,
0,
0,
0,
0
], blur = math.max(+radius[3], +(radius[4] || 0));
return {
left: -radius[1] + blur,
right: +radius[1] + blur,
bottom: +radius[2] + blur
};
}
function wrap(element, autosize) {
var browser = support.browser, percentage, isRtl = element.css('direction') == 'rtl';
if (!element.parent().hasClass('k-animation-container')) {
var shadows = getShadows(element), width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);
if (browser.opera) {
shadows.left = shadows.right = shadows.bottom = 5;
}
percentage = percentWidth || percentHeight;
if (!percentWidth && (!autosize || autosize && width)) {
width = element.outerWidth();
}
if (!percentHeight && (!autosize || autosize && height)) {
height = element.outerHeight();
}
element.wrap($('<div/>').addClass('k-animation-container').css({
width: width,
height: height,
marginLeft: shadows.left * (isRtl ? 1 : -1),
paddingLeft: shadows.left,
paddingRight: shadows.right,
paddingBottom: shadows.bottom
}));
if (percentage) {
element.css({
width: '100%',
height: '100%',
boxSizing: 'border-box',
mozBoxSizing: 'border-box',
webkitBoxSizing: 'border-box'
});
}
} else {
var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;
if (wrapper.is(':hidden')) {
wrapper.show();
}
percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);
if (!percentage) {
wrapper.css({
width: element.outerWidth(),
height: element.outerHeight(),
boxSizing: 'content-box',
mozBoxSizing: 'content-box',
webkitBoxSizing: 'content-box'
});
}
}
if (browser.msie && math.floor(browser.version) <= 7) {
element.css({ zoom: 1 });
element.children('.k-menu').width(element.width());
}
return element.parent();
}
function deepExtend(destination) {
var i = 1, length = arguments.length;
for (i = 1; i < length; i++) {
deepExtendOne(destination, arguments[i]);
}
return destination;
}
function deepExtendOne(destination, source) {
var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;
for (property in source) {
propValue = source[property];
propType = typeof propValue;
if (propType === OBJECT && propValue !== null) {
propInit = propValue.constructor;
} else {
propInit = null;
}
if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource) {
if (propValue instanceof Date) {
destination[property] = new Date(propValue.getTime());
} else if (isFunction(propValue.clone)) {
destination[property] = propValue.clone();
} else {
destProp = destination[property];
if (typeof destProp === OBJECT) {
destination[property] = destProp || {};
} else {
destination[property] = {};
}
deepExtendOne(destination[property], propValue);
}
} else if (propType !== UNDEFINED) {
destination[property] = propValue;
}
}
return destination;
}
function testRx(agent, rxs, dflt) {
for (var rx in rxs) {
if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {
return rx;
}
}
return dflt !== undefined ? dflt : agent;
}
function toHyphens(str) {
return str.replace(/([a-z][A-Z])/g, function (g) {
return g.charAt(0) + '-' + g.charAt(1).toLowerCase();
});
}
function toCamelCase(str) {
return str.replace(/\-(\w)/g, function (strMatch, g1) {
return g1.toUpperCase();
});
}
function getComputedStyles(element, properties) {
var styles = {}, computedStyle;
if (document.defaultView && document.defaultView.getComputedStyle) {
computedStyle = document.defaultView.getComputedStyle(element, '');
if (properties) {
$.each(properties, function (idx, value) {
styles[value] = computedStyle.getPropertyValue(value);
});
}
} else {
computedStyle = element.currentStyle;
if (properties) {
$.each(properties, function (idx, value) {
styles[value] = computedStyle[toCamelCase(value)];
});
}
}
if (!kendo.size(styles)) {
styles = computedStyle;
}
return styles;
}
function isScrollable(element) {
if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {
return true;
}
var overflow = getComputedStyles(element, ['overflow']).overflow;
return overflow == 'auto' || overflow == 'scroll';
}
function scrollLeft(element, value) {
var webkit = support.browser.webkit;
var mozila = support.browser.mozilla;
var el = element instanceof $ ? element[0] : element;
var isRtl;
if (!element) {
return;
}
isRtl = support.isRtl(element);
if (value !== undefined) {
if (isRtl && webkit) {
el.scrollLeft = el.scrollWidth - el.clientWidth - value;
} else if (isRtl && mozila) {
el.scrollLeft = -value;
} else {
el.scrollLeft = value;
}
} else {
if (isRtl && webkit) {
return el.scrollWidth - el.clientWidth - el.scrollLeft;
} else {
return Math.abs(el.scrollLeft);
}
}
}
(function () {
support._scrollbar = undefined;
support.scrollbar = function (refresh) {
if (!isNaN(support._scrollbar) && !refresh) {
return support._scrollbar;
} else {
var div = document.createElement('div'), result;
div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';
div.innerHTML = '&nbsp;';
document.body.appendChild(div);
support._scrollbar = result = div.offsetWidth - div.scrollWidth;
document.body.removeChild(div);
return result;
}
};
support.isRtl = function (element) {
return $(element).closest('.k-rtl').length > 0;
};
var table = document.createElement('table');
try {
table.innerHTML = '<tr><td></td></tr>';
support.tbodyInnerHtml = true;
} catch (e) {
support.tbodyInnerHtml = false;
}
support.touch = 'ontouchstart' in window;
support.msPointers = window.MSPointerEvent;
support.pointers = window.PointerEvent;
var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];
support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in document.documentElement.style || 'msPerspective' in document.documentElement.style;
each([
'Moz',
'webkit',
'O',
'ms'
], function () {
var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;
if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {
var lowPrefix = prefix.toLowerCase();
transforms = {
css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',
prefix: prefix,
event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''
};
if (hasTransitions) {
transitions = transforms;
transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';
}
return false;
}
});
table = null;
support.transforms = transforms;
support.transitions = transitions;
support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;
try {
support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;
support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;
} catch (e) {
support.screenWidth = window.screen.availWidth;
support.screenHeight = window.screen.availHeight;
}
support.detectOS = function (ua) {
var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {
wp: /(Windows Phone(?: OS)?)\s(\d+)\.(\d+(\.\d+)?)/,
fire: /(Silk)\/(\d+)\.(\d+(\.\d+)?)/,
android: /(Android|Android.*(?:Opera|Firefox).*?\/)\s*(\d+)\.(\d+(\.\d+)?)/,
iphone: /(iPhone|iPod).*OS\s+(\d+)[\._]([\d\._]+)/,
ipad: /(iPad).*OS\s+(\d+)[\._]([\d_]+)/,
meego: /(MeeGo).+NokiaBrowser\/(\d+)\.([\d\._]+)/,
webos: /(webOS)\/(\d+)\.(\d+(\.\d+)?)/,
blackberry: /(BlackBerry|BB10).*?Version\/(\d+)\.(\d+(\.\d+)?)/,
playbook: /(PlayBook).*?Tablet\s*OS\s*(\d+)\.(\d+(\.\d+)?)/,
windows: /(MSIE)\s+(\d+)\.(\d+(\.\d+)?)/,
tizen: /(tizen).*?Version\/(\d+)\.(\d+(\.\d+)?)/i,
sailfish: /(sailfish).*rv:(\d+)\.(\d+(\.\d+)?).*firefox/i,
ffos: /(Mobile).*rv:(\d+)\.(\d+(\.\d+)?).*Firefox/
}, osRxs = {
ios: /^i(phone|pad|pod)$/i,
android: /^android|fire$/i,
blackberry: /^blackberry|playbook/i,
windows: /windows/,
wp: /wp/,
flat: /sailfish|ffos|tizen/i,
meego: /meego/
}, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {
omini: /Opera\sMini/i,
omobile: /Opera\sMobi/i,
firefox: /Firefox|Fennec/i,
mobilesafari: /version\/.*safari/i,
ie: /MSIE|Windows\sPhone/i,
chrome: /chrome|crios/i,
webkit: /webkit/i
};
for (var agent in agentRxs) {
if (agentRxs.hasOwnProperty(agent)) {
match = ua.match(agentRxs[agent]);
if (match) {
if (agent == 'windows' && 'plugins' in navigator) {
return false;
}
os = {};
os.device = agent;
os.tablet = testRx(agent, formFactorRxs, false);
os.browser = testRx(ua, browserRxs, 'default');
os.name = testRx(agent, osRxs);
os[os.name] = true;
os.majorVersion = match[2];
os.minorVersion = match[3].replace('_', '.');
minorVersion = os.minorVersion.replace('.', '').substr(0, 2);
os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');
os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;
os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;
if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {
os.tablet = agent;
}
break;
}
}
}
return os;
};
var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);
support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;
support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);
support.hasNativeScrolling = false;
if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {
support.hasNativeScrolling = mobileOS;
}
support.delayedClick = function () {
if (support.touch) {
if (mobileOS.ios) {
return true;
}
if (mobileOS.android) {
if (!support.browser.chrome) {
return true;
}
if (support.browser.version < 32) {
return false;
}
return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);
}
}
return false;
};
support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);
support.detectBrowser = function (ua) {
var browser = false, match = [], browserRxs = {
edge: /(edge)[ \/]([\w.]+)/i,
webkit: /(chrome)[ \/]([\w.]+)/i,
safari: /(webkit)[ \/]([\w.]+)/i,
opera: /(opera)(?:.*version|)[ \/]([\w.]+)/i,
msie: /(msie\s|trident.*? rv:)([\w.]+)/i,
mozilla: /(mozilla)(?:.*? rv:([\w.]+)|)/i
};
for (var agent in browserRxs) {
if (browserRxs.hasOwnProperty(agent)) {
match = ua.match(browserRxs[agent]);
if (match) {
browser = {};
browser[agent] = true;
browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;
browser.version = parseInt(document.documentMode || match[2], 10);
break;
}
}
}
return browser;
};
support.browser = support.detectBrowser(navigator.userAgent);
support.detectClipboardAccess = function () {
var commands = {
copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,
cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,
paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false
};
if (support.browser.chrome) {
commands.paste = false;
if (support.browser.version >= 43) {
commands.copy = true;
commands.cut = true;
}
}
return commands;
};
support.clipboard = support.detectClipboardAccess();
support.zoomLevel = function () {
try {
var browser = support.browser;
var ie11WidthCorrection = 0;
var docEl = document.documentElement;
if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {
ie11WidthCorrection = support.scrollbar();
}
return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;
} catch (e) {
return 1;
}
};
support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);
(function (browser) {
var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);
if (browser.msie) {
cssClass = 'ie';
} else if (browser.mozilla) {
cssClass = 'ff';
} else if (browser.safari) {
cssClass = 'safari';
} else if (browser.webkit) {
cssClass = 'webkit';
} else if (browser.opera) {
cssClass = 'opera';
} else if (browser.edge) {
cssClass = 'edge';
}
if (cssClass) {
cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;
}
if (support.mobileOS) {
cssClass += ' k-mobile';
}
docElement.addClass(cssClass);
}(support.browser));
support.eventCapture = document.documentElement.addEventListener;
var input = document.createElement('input');
support.placeholder = 'placeholder' in input;
support.propertyChangeEvent = 'onpropertychange' in input;
support.input = function () {
var types = [
'number',
'date',
'time',
'month',
'week',
'datetime',
'datetime-local'
];
var length = types.length;
var value = 'test';
var result = {};
var idx = 0;
var type;
for (; idx < length; idx++) {
type = types[idx];
input.setAttribute('type', type);
input.value = value;
result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;
}
return result;
}();
input.style.cssText = 'float:left;';
support.cssFloat = !!input.style.cssFloat;
input = null;
support.stableSort = function () {
var threshold = 513;
var sorted = [{
index: 0,
field: 'b'
}];
for (var i = 1; i < threshold; i++) {
sorted.push({
index: i,
field: 'a'
});
}
sorted.sort(function (a, b) {
return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;
});
return sorted[0].index === 1;
}();
support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {
var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;
while (i--) {
if (nodeList[i] == this) {
return true;
}
}
return false;
};
support.pushState = window.history && window.history.pushState;
var documentMode = document.documentMode;
support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));
support.customElements = 'registerElement' in window.document;
}());
function size(obj) {
var result = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key) && key != 'toJSON') {
result++;
}
}
return result;
}
function getOffset(element, type, positioned) {
if (!type) {
type = 'offset';
}
var result = element[type]();
if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {
result.top -= window.pageYOffset - document.documentElement.scrollTop;
result.left -= window.pageXOffset - document.documentElement.scrollLeft;
}
return result;
}
var directions = {
left: { reverse: 'right' },
right: { reverse: 'left' },
down: { reverse: 'up' },
up: { reverse: 'down' },
top: { reverse: 'bottom' },
bottom: { reverse: 'top' },
'in': { reverse: 'out' },
out: { reverse: 'in' }
};
function parseEffects(input) {
var effects = {};
each(typeof input === 'string' ? input.split(' ') : input, function (idx) {
effects[idx] = this;
});
return effects;
}
function fx(element) {
return new kendo.effects.Element(element);
}
var effects = {};
$.extend(effects, {
enabled: true,
Element: function (element) {
this.element = $(element);
},
promise: function (element, options) {
if (!element.is(':visible')) {
element.css({ display: element.data('olddisplay') || 'block' }).css('display');
}
if (options.hide) {
element.data('olddisplay', element.css('display')).hide();
}
if (options.init) {
options.init();
}
if (options.completeCallback) {
options.completeCallback(element);
}
element.dequeue();
},
disable: function () {
this.enabled = false;
this.promise = this.promiseShim;
},
enable: function () {
this.enabled = true;
this.promise = this.animatedPromise;
}
});
effects.promiseShim = effects.promise;
function prepareAnimationOptions(options, duration, reverse, complete) {
if (typeof options === STRING) {
if (isFunction(duration)) {
complete = duration;
duration = 400;
reverse = false;
}
if (isFunction(reverse)) {
complete = reverse;
reverse = false;
}
if (typeof duration === BOOLEAN) {
reverse = duration;
duration = 400;
}
options = {
effects: options,
duration: duration,
reverse: reverse,
complete: complete
};
}
return extend({
effects: {},
duration: 400,
reverse: false,
init: noop,
teardown: noop,
hide: false
}, options, {
completeCallback: options.complete,
complete: noop
});
}
function animate(element, options, duration, reverse, complete) {
var idx = 0, length = element.length, instance;
for (; idx < length; idx++) {
instance = $(element[idx]);
instance.queue(function () {
effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));
});
}
return element;
}
function toggleClass(element, classes, options, add) {
if (classes) {
classes = classes.split(' ');
each(classes, function (idx, value) {
element.toggleClass(value, add);
});
}
return element;
}
if (!('kendoAnimate' in $.fn)) {
extend($.fn, {
kendoStop: function (clearQueue, gotoEnd) {
return this.stop(clearQueue, gotoEnd);
},
kendoAnimate: function (options, duration, reverse, complete) {
return animate(this, options, duration, reverse, complete);
},
kendoAddClass: function (classes, options) {
return kendo.toggleClass(this, classes, options, true);
},
kendoRemoveClass: function (classes, options) {
return kendo.toggleClass(this, classes, options, false);
},
kendoToggleClass: function (classes, options, toggle) {
return kendo.toggleClass(this, classes, options, toggle);
}
});
}
var ampRegExp = /&/g, ltRegExp = /</g, quoteRegExp = /"/g, aposRegExp = /'/g, gtRegExp = />/g;
function htmlEncode(value) {
return ('' + value).replace(ampRegExp, '&amp;').replace(ltRegExp, '&lt;').replace(gtRegExp, '&gt;').replace(quoteRegExp, '&quot;').replace(aposRegExp, '&#39;');
}
var eventTarget = function (e) {
return e.target;
};
if (support.touch) {
eventTarget = function (e) {
var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;
return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;
};
each([
'swipe',
'swipeLeft',
'swipeRight',
'swipeUp',
'swipeDown',
'doubleTap',
'tap'
], function (m, value) {
$.fn[value] = function (callback) {
return this.bind(value, callback);
};
});
}
if (support.touch) {
if (!support.mobileOS) {
support.mousedown = 'mousedown touchstart';
support.mouseup = 'mouseup touchend';
support.mousemove = 'mousemove touchmove';
support.mousecancel = 'mouseleave touchcancel';
support.click = 'click';
support.resize = 'resize';
} else {
support.mousedown = 'touchstart';
support.mouseup = 'touchend';
support.mousemove = 'touchmove';
support.mousecancel = 'touchcancel';
support.click = 'touchend';
support.resize = 'orientationchange';
}
} else if (support.pointers) {
support.mousemove = 'pointermove';
support.mousedown = 'pointerdown';
support.mouseup = 'pointerup';
support.mousecancel = 'pointercancel';
support.click = 'pointerup';
support.resize = 'orientationchange resize';
} else if (support.msPointers) {
support.mousemove = 'MSPointerMove';
support.mousedown = 'MSPointerDown';
support.mouseup = 'MSPointerUp';
support.mousecancel = 'MSPointerCancel';
support.click = 'MSPointerUp';
support.resize = 'orientationchange resize';
} else {
support.mousemove = 'mousemove';
support.mousedown = 'mousedown';
support.mouseup = 'mouseup';
support.mousecancel = 'mouseleave';
support.click = 'click';
support.resize = 'resize';
}
var wrapExpression = function (members, paramName) {
var result = paramName || 'd', index, idx, length, member, count = 1;
for (idx = 0, length = members.length; idx < length; idx++) {
member = members[idx];
if (member !== '') {
index = member.indexOf('[');
if (index !== 0) {
if (index == -1) {
member = '.' + member;
} else {
count++;
member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);
}
}
count++;
result += member + (idx < length - 1 ? ' || {})' : ')');
}
}
return new Array(count).join('(') + result;
}, localUrlRe = /^([a-z]+:)?\/\//i;
extend(kendo, {
widgets: [],
_widgetRegisteredCallbacks: [],
ui: kendo.ui || {},
fx: kendo.fx || fx,
effects: kendo.effects || effects,
mobile: kendo.mobile || {},
data: kendo.data || {},
dataviz: kendo.dataviz || {},
drawing: kendo.drawing || {},
spreadsheet: { messages: {} },
keys: {
INSERT: 45,
DELETE: 46,
BACKSPACE: 8,
TAB: 9,
ENTER: 13,
ESC: 27,
LEFT: 37,
UP: 38,
RIGHT: 39,
DOWN: 40,
END: 35,
HOME: 36,
SPACEBAR: 32,
PAGEUP: 33,
PAGEDOWN: 34,
F2: 113,
F10: 121,
F12: 123,
NUMPAD_PLUS: 107,
NUMPAD_MINUS: 109,
NUMPAD_DOT: 110
},
support: kendo.support || support,
animate: kendo.animate || animate,
ns: '',
attr: function (value) {
return 'data-' + kendo.ns + value;
},
getShadows: getShadows,
wrap: wrap,
deepExtend: deepExtend,
getComputedStyles: getComputedStyles,
webComponents: kendo.webComponents || [],
isScrollable: isScrollable,
scrollLeft: scrollLeft,
size: size,
toCamelCase: toCamelCase,
toHyphens: toHyphens,
getOffset: kendo.getOffset || getOffset,
parseEffects: kendo.parseEffects || parseEffects,
toggleClass: kendo.toggleClass || toggleClass,
directions: kendo.directions || directions,
Observable: Observable,
Class: Class,
Template: Template,
template: proxy(Template.compile, Template),
render: proxy(Template.render, Template),
stringify: proxy(JSON.stringify, JSON),
eventTarget: eventTarget,
htmlEncode: htmlEncode,
isLocalUrl: function (url) {
return url && !localUrlRe.test(url);
},
expr: function (expression, safe, paramName) {
expression = expression || '';
if (typeof safe == STRING) {
paramName = safe;
safe = false;
}
paramName = paramName || 'd';
if (expression && expression.charAt(0) !== '[') {
expression = '.' + expression;
}
if (safe) {
expression = expression.replace(/"([^.]*)\.([^"]*)"/g, '"$1_$DOT$_$2"');
expression = expression.replace(/'([^.]*)\.([^']*)'/g, '\'$1_$DOT$_$2\'');
expression = wrapExpression(expression.split('.'), paramName);
expression = expression.replace(/_\$DOT\$_/g, '.');
} else {
expression = paramName + expression;
}
return expression;
},
getter: function (expression, safe) {
var key = expression + safe;
return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));
},
setter: function (expression) {
return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');
},
accessor: function (expression) {
return {
get: kendo.getter(expression),
set: kendo.setter(expression)
};
},
guid: function () {
var id = '', i, random;
for (i = 0; i < 32; i++) {
random = math.random() * 16 | 0;
if (i == 8 || i == 12 || i == 16 || i == 20) {
id += '-';
}
id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);
}
return id;
},
roleSelector: function (role) {
return role.replace(/(\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);
},
directiveSelector: function (directives) {
var selectors = directives.split(' ');
if (selectors) {
for (var i = 0; i < selectors.length; i++) {
if (selectors[i] != 'view') {
selectors[i] = selectors[i].replace(/(\w*)(view|bar|strip|over)$/, '$1-$2');
}
}
}
return selectors.join(' ').replace(/(\S+)/g, 'kendo-mobile-$1,').slice(0, -1);
},
triggeredByInput: function (e) {
return /^(label|input|textarea|select)$/i.test(e.target.tagName);
},
onWidgetRegistered: function (callback) {
for (var i = 0, len = kendo.widgets.length; i < len; i++) {
callback(kendo.widgets[i]);
}
kendo._widgetRegisteredCallbacks.push(callback);
},
logToConsole: function (message, type) {
var console = window.console;
if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {
console[type || 'log'](message);
}
}
});
var Widget = Observable.extend({
init: function (element, options) {
var that = this;
that.element = kendo.jQuery(element).handler(that);
that.angular('init', options);
Observable.fn.init.call(that);
var dataSource = options ? options.dataSource : null;
if (dataSource) {
options = extend({}, options, { dataSource: {} });
}
options = that.options = extend(true, {}, that.options, options);
if (dataSource) {
options.dataSource = dataSource;
}
if (!that.element.attr(kendo.attr('role'))) {
that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());
}
that.element.data('kendo' + options.prefix + options.name, that);
that.bind(that.events, options);
},
events: [],
options: { prefix: '' },
_hasBindingTarget: function () {
return !!this.element[0].kendoBindingTarget;
},
_tabindex: function (target) {
target = target || this.wrapper;
var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);
element.removeAttr(TABINDEX);
target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);
},
setOptions: function (options) {
this._setEvents(options);
$.extend(this.options, options);
},
_setEvents: function (options) {
var that = this, idx = 0, length = that.events.length, e;
for (; idx < length; idx++) {
e = that.events[idx];
if (that.options[e] && options[e]) {
that.unbind(e, that.options[e]);
}
}
that.bind(that.events, options);
},
resize: function (force) {
var size = this.getSize(), currentSize = this._size;
if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {
this._size = size;
this._resize(size, force);
this.trigger('resize', size);
}
},
getSize: function () {
return kendo.dimensions(this.element);
},
size: function (size) {
if (!size) {
return this.getSize();
} else {
this.setSize(size);
}
},
setSize: $.noop,
_resize: $.noop,
destroy: function () {
var that = this;
that.element.removeData('kendo' + that.options.prefix + that.options.name);
that.element.removeData('handler');
that.unbind();
},
_destroy: function () {
this.destroy();
},
angular: function () {
},
_muteAngularRebind: function (callback) {
this._muteRebind = true;
callback.call(this);
this._muteRebind = false;
}
});
var DataBoundWidget = Widget.extend({
dataItems: function () {
return this.dataSource.flatView();
},
_angularItems: function (cmd) {
var that = this;
that.angular(cmd, function () {
return {
elements: that.items(),
data: $.map(that.dataItems(), function (dataItem) {
return { dataItem: dataItem };
})
};
});
}
});
kendo.dimensions = function (element, dimensions) {
var domElement = element[0];
if (dimensions) {
element.css(dimensions);
}
return {
width: domElement.offsetWidth,
height: domElement.offsetHeight
};
};
kendo.notify = noop;
var templateRegExp = /template$/i, jsonRegExp = /^\s*(?:\{(?:.|\r\n|\n)*\}|\[(?:.|\r\n|\n)*\])\s*$/, jsonFormatRegExp = /^\{(\d+)(:[^\}]+)?\}|^\[[A-Za-z_]*\]$/, dashRegExp = /([A-Z])/g;
function parseOption(element, option) {
var value;
if (option.indexOf('data') === 0) {
option = option.substring(4);
option = option.charAt(0).toLowerCase() + option.substring(1);
}
option = option.replace(dashRegExp, '-$1');
value = element.getAttribute('data-' + kendo.ns + option);
if (value === null) {
value = undefined;
} else if (value === 'null') {
value = null;
} else if (value === 'true') {
value = true;
} else if (value === 'false') {
value = false;
} else if (numberRegExp.test(value)) {
value = parseFloat(value);
} else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {
value = new Function('return (' + value + ')')();
}
return value;
}
function parseOptions(element, options) {
var result = {}, option, value;
for (option in options) {
value = parseOption(element, option);
if (value !== undefined) {
if (templateRegExp.test(option)) {
value = kendo.template($('#' + value).html());
}
result[option] = value;
}
}
return result;
}
kendo.initWidget = function (element, options, roles) {
var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;
if (!roles) {
roles = kendo.ui.roles;
} else if (roles.roles) {
roles = roles.roles;
}
element = element.nodeType ? element : element[0];
role = element.getAttribute('data-' + kendo.ns + 'role');
if (!role) {
return;
}
fullPath = role.indexOf('.') === -1;
if (fullPath) {
widget = roles[role];
} else {
widget = kendo.getter(role)(window);
}
var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';
if (fullPath) {
widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');
} else {
widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');
}
for (var key in data) {
if (key.match(widgetKeyRegExp)) {
if (key === widgetKey) {
result = data[key];
} else {
return data[key];
}
}
}
if (!widget) {
return;
}
dataSource = parseOption(element, 'dataSource');
options = $.extend({}, parseOptions(element, widget.fn.options), options);
if (dataSource) {
if (typeof dataSource === STRING) {
options.dataSource = kendo.getter(dataSource)(window);
} else {
options.dataSource = dataSource;
}
}
for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {
option = widget.fn.events[idx];
value = parseOption(element, option);
if (value !== undefined) {
options[option] = kendo.getter(value)(window);
}
}
if (!result) {
result = new widget(element, options);
} else if (!$.isEmptyObject(options)) {
result.setOptions(options);
}
return result;
};
kendo.rolesFromNamespaces = function (namespaces) {
var roles = [], idx, length;
if (!namespaces[0]) {
namespaces = [
kendo.ui,
kendo.dataviz.ui
];
}
for (idx = 0, length = namespaces.length; idx < length; idx++) {
roles[idx] = namespaces[idx].roles;
}
return extend.apply(null, [{}].concat(roles.reverse()));
};
kendo.init = function (element) {
var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));
$(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {
kendo.initWidget(this, {}, roles);
});
};
kendo.destroy = function (element) {
$(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {
var data = $(this).data();
for (var key in data) {
if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {
data[key].destroy();
}
}
});
};
function containmentComparer(a, b) {
return $.contains(a, b) ? -1 : 1;
}
function resizableWidget() {
var widget = $(this);
return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [
'slider',
'rangeslider'
]) > -1 || widget.is(':visible');
}
kendo.resize = function (element, force) {
var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);
if (!widgets.length) {
return;
}
var widgetsArray = $.makeArray(widgets);
widgetsArray.sort(containmentComparer);
$.each(widgetsArray, function () {
var widget = kendo.widgetInstance($(this));
if (widget) {
widget.resize(force);
}
});
};
kendo.parseOptions = parseOptions;
extend(kendo.ui, {
Widget: Widget,
DataBoundWidget: DataBoundWidget,
roles: {},
progress: function (container, toggle) {
var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft;
if (toggle) {
if (!mask.length) {
isRtl = support.isRtl(container);
leftRight = isRtl ? 'right' : 'left';
containerScrollLeft = container.scrollLeft();
webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;
mask = $('<div class=\'k-loading-mask\'><span class=\'k-loading-text\'>Loading...</span><div class=\'k-loading-image\'/><div class=\'k-loading-color\'/></div>').width('100%').height('100%').css('top', container.scrollTop()).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);
}
} else if (mask) {
mask.remove();
}
},
plugin: function (widget, register, prefix) {
var name = widget.fn.options.name, getter;
register = register || kendo.ui;
prefix = prefix || '';
register[name] = widget;
register.roles[name.toLowerCase()] = widget;
getter = 'getKendo' + prefix + name;
name = 'kendo' + prefix + name;
var widgetEntry = {
name: name,
widget: widget,
prefix: prefix || ''
};
kendo.widgets.push(widgetEntry);
for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {
kendo._widgetRegisteredCallbacks[i](widgetEntry);
}
$.fn[name] = function (options) {
var value = this, args;
if (typeof options === STRING) {
args = slice.call(arguments, 1);
this.each(function () {
var widget = $.data(this, name), method, result;
if (!widget) {
throw new Error(kendo.format('Cannot call method \'{0}\' of {1} before it is initialized', options, name));
}
method = widget[options];
if (typeof method !== FUNCTION) {
throw new Error(kendo.format('Cannot find method \'{0}\' of {1}', options, name));
}
result = method.apply(widget, args);
if (result !== undefined) {
value = result;
return false;
}
});
} else {
this.each(function () {
return new widget(this, options);
});
}
return value;
};
$.fn[name].widget = widget;
$.fn[getter] = function () {
return this.data(name);
};
}
});
var ContainerNullObject = {
bind: function () {
return this;
},
nullObject: true,
options: {}
};
var MobileWidget = Widget.extend({
init: function (element, options) {
Widget.fn.init.call(this, element, options);
this.element.autoApplyNS();
this.wrapper = this.element;
this.element.addClass('km-widget');
},
destroy: function () {
Widget.fn.destroy.call(this);
this.element.kendoDestroy();
},
options: { prefix: 'Mobile' },
events: [],
view: function () {
var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));
return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;
},
viewHasNativeScrolling: function () {
var view = this.view();
return view && view.options.useNativeScrolling;
},
container: function () {
var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));
return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;
}
});
extend(kendo.mobile, {
init: function (element) {
kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);
},
appLevelNativeScrolling: function () {
return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;
},
roles: {},
ui: {
Widget: MobileWidget,
DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),
roles: {},
plugin: function (widget) {
kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');
}
}
});
deepExtend(kendo.dataviz, {
init: function (element) {
kendo.init(element, kendo.dataviz.ui);
},
ui: {
roles: {},
themes: {},
views: [],
plugin: function (widget) {
kendo.ui.plugin(widget, kendo.dataviz.ui);
}
},
roles: {}
});
kendo.touchScroller = function (elements, options) {
if (!options) {
options = {};
}
options.useNative = true;
return $(elements).map(function (idx, element) {
element = $(element);
if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {
element.kendoMobileScroller(options);
return element.data('kendoMobileScroller');
} else {
return false;
}
})[0];
};
kendo.preventDefault = function (e) {
e.preventDefault();
};
kendo.widgetInstance = function (element, suites) {
var role = element.data(kendo.ns + 'role'), widgets = [], i, length;
if (role) {
if (role === 'content') {
role = 'scroller';
}
if (suites) {
if (suites[0]) {
for (i = 0, length = suites.length; i < length; i++) {
widgets.push(suites[i].roles[role]);
}
} else {
widgets.push(suites.roles[role]);
}
} else {
widgets = [
kendo.ui.roles[role],
kendo.dataviz.ui.roles[role],
kendo.mobile.ui.roles[role]
];
}
if (role.indexOf('.') >= 0) {
widgets = [kendo.getter(role)(window)];
}
for (i = 0, length = widgets.length; i < length; i++) {
var widget = widgets[i];
if (widget) {
var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);
if (instance) {
return instance;
}
}
}
}
};
kendo.onResize = function (callback) {
var handler = callback;
if (support.mobileOS.android) {
handler = function () {
setTimeout(callback, 600);
};
}
$(window).on(support.resize, handler);
return handler;
};
kendo.unbindResize = function (callback) {
$(window).off(support.resize, callback);
};
kendo.attrValue = function (element, key) {
return element.data(kendo.ns + key);
};
kendo.days = {
Sunday: 0,
Monday: 1,
Tuesday: 2,
Wednesday: 3,
Thursday: 4,
Friday: 5,
Saturday: 6
};
function focusable(element, isTabIndexNotNaN) {
var nodeName = element.nodeName.toLowerCase();
return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);
}
function visible(element) {
return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {
return $.css(this, 'visibility') === 'hidden';
}).length;
}
$.extend($.expr[':'], {
kendoFocusable: function (element) {
var idx = $.attr(element, 'tabindex');
return focusable(element, !isNaN(idx) && idx > -1);
}
});
var MOUSE_EVENTS = [
'mousedown',
'mousemove',
'mouseenter',
'mouseleave',
'mouseover',
'mouseout',
'mouseup',
'click'
];
var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';
var MouseEventNormalizer = {
setupMouseMute: function () {
var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;
if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {
return;
}
MouseEventNormalizer.mouseTrap = true;
MouseEventNormalizer.bustClick = false;
MouseEventNormalizer.captureMouse = false;
var handler = function (e) {
if (MouseEventNormalizer.captureMouse) {
if (e.type === 'click') {
if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {
e.preventDefault();
e.stopPropagation();
}
} else {
e.stopPropagation();
}
}
};
for (; idx < length; idx++) {
element.addEventListener(MOUSE_EVENTS[idx], handler, true);
}
},
muteMouse: function (e) {
MouseEventNormalizer.captureMouse = true;
if (e.data.bustClick) {
MouseEventNormalizer.bustClick = true;
}
clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);
},
unMuteMouse: function () {
clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);
MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {
MouseEventNormalizer.captureMouse = false;
MouseEventNormalizer.bustClick = false;
}, 400);
}
};
var eventMap = {
down: 'touchstart mousedown',
move: 'mousemove touchmove',
up: 'mouseup touchend touchcancel',
cancel: 'mouseleave touchcancel'
};
if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {
eventMap = {
down: 'touchstart',
move: 'touchmove',
up: 'touchend touchcancel',
cancel: 'touchcancel'
};
} else if (support.pointers) {
eventMap = {
down: 'pointerdown',
move: 'pointermove',
up: 'pointerup',
cancel: 'pointercancel pointerleave'
};
} else if (support.msPointers) {
eventMap = {
down: 'MSPointerDown',
move: 'MSPointerMove',
up: 'MSPointerUp',
cancel: 'MSPointerCancel MSPointerLeave'
};
}
if (support.msPointers && !('onmspointerenter' in window)) {
$.each({
MSPointerEnter: 'MSPointerOver',
MSPointerLeave: 'MSPointerOut'
}, function (orig, fix) {
$.event.special[orig] = {
delegateType: fix,
bindType: fix,
handle: function (event) {
var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;
if (!related || related !== target && !$.contains(target, related)) {
event.type = handleObj.origType;
ret = handleObj.handler.apply(this, arguments);
event.type = fix;
}
return ret;
}
};
});
}
var getEventMap = function (e) {
return eventMap[e] || e;
}, eventRegEx = /([^ ]+)/g;
kendo.applyEventMap = function (events, ns) {
events = events.replace(eventRegEx, getEventMap);
if (ns) {
events = events.replace(eventRegEx, '$1.' + ns);
}
return events;
};
var on = $.fn.on;
function kendoJQuery(selector, context) {
return new kendoJQuery.fn.init(selector, context);
}
extend(true, kendoJQuery, $);
kendoJQuery.fn = kendoJQuery.prototype = new $();
kendoJQuery.fn.constructor = kendoJQuery;
kendoJQuery.fn.init = function (selector, context) {
if (context && context instanceof $ && !(context instanceof kendoJQuery)) {
context = kendoJQuery(context);
}
return $.fn.init.call(this, selector, context, rootjQuery);
};
kendoJQuery.fn.init.prototype = kendoJQuery.fn;
var rootjQuery = kendoJQuery(document);
extend(kendoJQuery.fn, {
handler: function (handler) {
this.data('handler', handler);
return this;
},
autoApplyNS: function (ns) {
this.data('kendoNS', ns || kendo.guid());
return this;
},
on: function () {
var that = this, ns = that.data('kendoNS');
if (arguments.length === 1) {
return on.call(that, arguments[0]);
}
var context = that, args = slice.call(arguments);
if (typeof args[args.length - 1] === UNDEFINED) {
args.pop();
}
var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);
if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {
MouseEventNormalizer.setupMouseMute();
var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;
on.call(this, {
touchstart: MouseEventNormalizer.muteMouse,
touchend: MouseEventNormalizer.unMuteMouse
}, selector, { bustClick: bustClick });
}
if (typeof callback === STRING) {
context = that.data('handler');
callback = context[callback];
args[args.length - 1] = function (e) {
callback.call(context, e);
};
}
args[0] = events;
on.apply(that, args);
return that;
},
kendoDestroy: function (ns) {
ns = ns || this.data('kendoNS');
if (ns) {
this.off('.' + ns);
}
return this;
}
});
kendo.jQuery = kendoJQuery;
kendo.eventMap = eventMap;
kendo.timezone = function () {
var months = {
Jan: 0,
Feb: 1,
Mar: 2,
Apr: 3,
May: 4,
Jun: 5,
Jul: 6,
Aug: 7,
Sep: 8,
Oct: 9,
Nov: 10,
Dec: 11
};
var days = {
Sun: 0,
Mon: 1,
Tue: 2,
Wed: 3,
Thu: 4,
Fri: 5,
Sat: 6
};
function ruleToDate(year, rule) {
var date;
var targetDay;
var ourDay;
var month = rule[3];
var on = rule[4];
var time = rule[5];
var cache = rule[8];
if (!cache) {
rule[8] = cache = {};
}
if (cache[year]) {
return cache[year];
}
if (!isNaN(on)) {
date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));
} else if (on.indexOf('last') === 0) {
date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));
targetDay = days[on.substr(4, 3)];
ourDay = date.getUTCDay();
date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));
} else if (on.indexOf('>=') >= 0) {
date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));
targetDay = days[on.substr(0, 3)];
ourDay = date.getUTCDay();
date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));
}
return cache[year] = date;
}
function findRule(utcTime, rules, zone) {
rules = rules[zone];
if (!rules) {
var time = zone.split(':');
var offset = 0;
if (time.length > 1) {
offset = time[0] * 60 + Number(time[1]);
}
return [
-1000000,
'max',
'-',
'Jan',
1,
[
0,
0,
0
],
offset,
'-'
];
}
var year = new Date(utcTime).getUTCFullYear();
rules = jQuery.grep(rules, function (rule) {
var from = rule[0];
var to = rule[1];
return from <= year && (to >= year || from == year && to == 'only' || to == 'max');
});
rules.push(utcTime);
rules.sort(function (a, b) {
if (typeof a != 'number') {
a = Number(ruleToDate(year, a));
}
if (typeof b != 'number') {
b = Number(ruleToDate(year, b));
}
return a - b;
});
var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];
return isNaN(rule) ? rule : null;
}
function findZone(utcTime, zones, timezone) {
var zoneRules = zones[timezone];
if (typeof zoneRules === 'string') {
zoneRules = zones[zoneRules];
}
if (!zoneRules) {
throw new Error('Timezone "' + timezone + '" is either incorrect, or kendo.timezones.min.js is not included.');
}
for (var idx = zoneRules.length - 1; idx >= 0; idx--) {
var until = zoneRules[idx][3];
if (until && utcTime > until) {
break;
}
}
var zone = zoneRules[idx + 1];
if (!zone) {
throw new Error('Timezone "' + timezone + '" not found on ' + utcTime + '.');
}
return zone;
}
function zoneAndRule(utcTime, zones, rules, timezone) {
if (typeof utcTime != NUMBER) {
utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());
}
var zone = findZone(utcTime, zones, timezone);
return {
zone: zone,
rule: findRule(utcTime, rules, zone[1])
};
}
function offset(utcTime, timezone) {
if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {
return 0;
}
var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);
var zone = info.zone;
var rule = info.rule;
return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);
}
function abbr(utcTime, timezone) {
var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);
var zone = info.zone;
var rule = info.rule;
var base = zone[2];
if (base.indexOf('/') >= 0) {
return base.split('/')[rule && +rule[6] ? 1 : 0];
} else if (base.indexOf('%s') >= 0) {
return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);
}
return base;
}
function convert(date, fromOffset, toOffset) {
if (typeof fromOffset == STRING) {
fromOffset = this.offset(date, fromOffset);
}
if (typeof toOffset == STRING) {
toOffset = this.offset(date, toOffset);
}
var fromLocalOffset = date.getTimezoneOffset();
date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);
var toLocalOffset = date.getTimezoneOffset();
return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);
}
function apply(date, timezone) {
return this.convert(date, date.getTimezoneOffset(), timezone);
}
function remove(date, timezone) {
return this.convert(date, timezone, date.getTimezoneOffset());
}
function toLocalDate(time) {
return this.apply(new Date(time), 'Etc/UTC');
}
return {
zones: {},
rules: {},
offset: offset,
convert: convert,
apply: apply,
remove: remove,
abbr: abbr,
toLocalDate: toLocalDate
};
}();
kendo.date = function () {
var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;
function adjustDST(date, hours) {
if (hours === 0 && date.getHours() === 23) {
date.setHours(date.getHours() + 2);
return true;
}
return false;
}
function setDayOfWeek(date, day, dir) {
var hours = date.getHours();
dir = dir || 1;
day = (day - date.getDay() + 7 * dir) % 7;
date.setDate(date.getDate() + day);
adjustDST(date, hours);
}
function dayOfWeek(date, day, dir) {
date = new Date(date);
setDayOfWeek(date, day, dir);
return date;
}
function firstDayOfMonth(date) {
return new Date(date.getFullYear(), date.getMonth(), 1);
}
function lastDayOfMonth(date) {
var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());
if (timeOffset) {
last.setHours(first.getHours() + timeOffset / 60);
}
return last;
}
function getDate(date) {
date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
adjustDST(date, 0);
return date;
}
function toUtcTime(date) {
return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
}
function getMilliseconds(date) {
return date.getTime() - getDate(date);
}
function isInTimeRange(value, min, max) {
var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;
if (!value || msMin == msMax) {
return true;
}
if (min >= max) {
max += MS_PER_DAY;
}
msValue = getMilliseconds(value);
if (msMin > msValue) {
msValue += MS_PER_DAY;
}
if (msMax < msMin) {
msMax += MS_PER_DAY;
}
return msValue >= msMin && msValue <= msMax;
}
function isInDateRange(value, min, max) {
var msMin = min.getTime(), msMax = max.getTime(), msValue;
if (msMin >= msMax) {
msMax += MS_PER_DAY;
}
msValue = value.getTime();
return msValue >= msMin && msValue <= msMax;
}
function addDays(date, offset) {
var hours = date.getHours();
date = new Date(date);
setTime(date, offset * MS_PER_DAY);
adjustDST(date, hours);
return date;
}
function setTime(date, milliseconds, ignoreDST) {
var offset = date.getTimezoneOffset();
var difference;
date.setTime(date.getTime() + milliseconds);
if (!ignoreDST) {
difference = date.getTimezoneOffset() - offset;
date.setTime(date.getTime() + difference * MS_PER_MINUTE);
}
}
function setHours(date, time) {
date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));
adjustDST(date, time.getHours());
return date;
}
function today() {
return getDate(new Date());
}
function isToday(date) {
return getDate(date).getTime() == today().getTime();
}
function toInvariantTime(date) {
var staticDate = new Date(1980, 1, 1, 0, 0, 0);
if (date) {
staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
}
return staticDate;
}
return {
adjustDST: adjustDST,
dayOfWeek: dayOfWeek,
setDayOfWeek: setDayOfWeek,
getDate: getDate,
isInDateRange: isInDateRange,
isInTimeRange: isInTimeRange,
isToday: isToday,
nextDay: function (date) {
return addDays(date, 1);
},
previousDay: function (date) {
return addDays(date, -1);
},
toUtcTime: toUtcTime,
MS_PER_DAY: MS_PER_DAY,
MS_PER_HOUR: 60 * MS_PER_MINUTE,
MS_PER_MINUTE: MS_PER_MINUTE,
setTime: setTime,
setHours: setHours,
addDays: addDays,
today: today,
toInvariantTime: toInvariantTime,
firstDayOfMonth: firstDayOfMonth,
lastDayOfMonth: lastDayOfMonth,
getMilliseconds: getMilliseconds
};
}();
kendo.stripWhitespace = function (element) {
if (document.createNodeIterator) {
var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {
return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
}, false);
while (iterator.nextNode()) {
if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {
iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);
}
}
} else {
for (var i = 0; i < element.childNodes.length; i++) {
var child = element.childNodes[i];
if (child.nodeType == 3 && !/\S/.test(child.nodeValue)) {
element.removeChild(child);
i--;
}
if (child.nodeType == 1) {
kendo.stripWhitespace(child);
}
}
}
};
var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {
setTimeout(callback, 1000 / 60);
};
kendo.animationFrame = function (callback) {
animationFrame.call(window, callback);
};
var animationQueue = [];
kendo.queueAnimation = function (callback) {
animationQueue[animationQueue.length] = callback;
if (animationQueue.length === 1) {
kendo.runNextAnimation();
}
};
kendo.runNextAnimation = function () {
kendo.animationFrame(function () {
if (animationQueue[0]) {
animationQueue.shift()();
if (animationQueue[0]) {
kendo.runNextAnimation();
}
}
});
};
kendo.parseQueryStringParams = function (url) {
var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;
for (; idx < length; idx += 2) {
if (paramParts[idx] !== '') {
params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);
}
}
return params;
};
kendo.elementUnderCursor = function (e) {
if (typeof e.x.client != 'undefined') {
return document.elementFromPoint(e.x.client, e.y.client);
}
};
kendo.wheelDeltaY = function (jQueryEvent) {
var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;
if (e.wheelDelta) {
if (deltaY === undefined || deltaY) {
delta = e.wheelDelta;
}
} else if (e.detail && e.axis === e.VERTICAL_AXIS) {
delta = -e.detail * 10;
}
return delta;
};
kendo.throttle = function (fn, delay) {
var timeout;
var lastExecTime = 0;
if (!delay || delay <= 0) {
return fn;
}
var throttled = function () {
var that = this;
var elapsed = +new Date() - lastExecTime;
var args = arguments;
function exec() {
fn.apply(that, args);
lastExecTime = +new Date();
}
if (!lastExecTime) {
return exec();
}
if (timeout) {
clearTimeout(timeout);
}
if (elapsed > delay) {
exec();
} else {
timeout = setTimeout(exec, delay - elapsed);
}
};
throttled.cancel = function () {
clearTimeout(timeout);
};
return throttled;
};
kendo.caret = function (element, start, end) {
var rangeElement;
var isPosition = start !== undefined;
if (end === undefined) {
end = start;
}
if (element[0]) {
element = element[0];
}
if (isPosition && element.disabled) {
return;
}
try {
if (element.selectionStart !== undefined) {
if (isPosition) {
element.focus();
element.setSelectionRange(start, end);
} else {
start = [
element.selectionStart,
element.selectionEnd
];
}
} else if (document.selection) {
if ($(element).is(':visible')) {
element.focus();
}
rangeElement = element.createTextRange();
if (isPosition) {
rangeElement.collapse(true);
rangeElement.moveStart('character', start);
rangeElement.moveEnd('character', end - start);
rangeElement.select();
} else {
var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;
rangeElement.moveToBookmark(document.selection.createRange().getBookmark());
rangeDuplicated.setEndPoint('EndToStart', rangeElement);
selectionStart = rangeDuplicated.text.length;
selectionEnd = selectionStart + rangeElement.text.length;
start = [
selectionStart,
selectionEnd
];
}
}
} catch (e) {
start = [];
}
return start;
};
kendo.compileMobileDirective = function (element, scope) {
var angular = window.angular;
element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));
angular.element(element).injector().invoke([
'$compile',
function ($compile) {
$compile(element)(scope);
if (!/^\$(digest|apply)$/.test(scope.$$phase)) {
scope.$digest();
}
}
]);
return kendo.widgetInstance(element, kendo.mobile.ui);
};
kendo.antiForgeryTokens = function () {
var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');
$('input[name^=\'__RequestVerificationToken\']').each(function () {
tokens[this.name] = this.value;
});
if (csrf_param !== undefined && csrf_token !== undefined) {
tokens[csrf_param] = csrf_token;
}
return tokens;
};
kendo.cycleForm = function (form) {
var firstElement = form.find('input, .k-widget').first();
var lastElement = form.find('button, .k-button').last();
function focus(el) {
var widget = kendo.widgetInstance(el);
if (widget && widget.focus) {
widget.focus();
} else {
el.focus();
}
}
lastElement.on('keydown', function (e) {
if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {
e.preventDefault();
focus(firstElement);
}
});
firstElement.on('keydown', function (e) {
if (e.keyCode == kendo.keys.TAB && e.shiftKey) {
e.preventDefault();
focus(lastElement);
}
});
};
(function () {
function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {
var form = $('<form>').attr({
action: proxyURL,
method: 'POST',
target: proxyTarget
});
var data = kendo.antiForgeryTokens();
data.fileName = fileName;
var parts = dataURI.split(';base64,');
data.contentType = parts[0].replace('data:', '');
data.base64 = parts[1];
for (var name in data) {
if (data.hasOwnProperty(name)) {
$('<input>').attr({
value: data[name],
name: name,
type: 'hidden'
}).appendTo(form);
}
}
form.appendTo('body').submit().remove();
}
var fileSaver = document.createElement('a');
var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;
function saveAsBlob(dataURI, fileName) {
var blob = dataURI;
if (typeof dataURI == 'string') {
var parts = dataURI.split(';base64,');
var contentType = parts[0];
var base64 = atob(parts[1]);
var array = new Uint8Array(base64.length);
for (var idx = 0; idx < base64.length; idx++) {
array[idx] = base64.charCodeAt(idx);
}
blob = new Blob([array.buffer], { type: contentType });
}
navigator.msSaveBlob(blob, fileName);
}
function saveAsDataURI(dataURI, fileName) {
if (window.Blob && dataURI instanceof Blob) {
dataURI = URL.createObjectURL(dataURI);
}
fileSaver.download = fileName;
fileSaver.href = dataURI;
var e = document.createEvent('MouseEvents');
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
fileSaver.dispatchEvent(e);
URL.revokeObjectURL(dataURI);
}
kendo.saveAs = function (options) {
var save = postToProxy;
if (!options.forceProxy) {
if (downloadAttribute) {
save = saveAsDataURI;
} else if (navigator.msSaveBlob) {
save = saveAsBlob;
}
}
save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);
};
}());
kendo.proxyModelSetters = function proxyModelSetters(data) {
var observable = {};
Object.keys(data || {}).forEach(function (property) {
Object.defineProperty(observable, property, {
get: function () {
return data[property];
},
set: function (value) {
data[property] = value;
data.dirty = true;
}
});
});
return observable;
};
}(jQuery, window));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.fx', ['kendo.core'], f);
}(function () {
var __meta__ = {
id: 'fx',
name: 'Effects',
category: 'framework',
description: 'Required for animation effects in all Kendo UI widgets.',
depends: ['core']
};
(function ($, undefined) {
var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {
scale: 0,
scalex: 0,
scaley: 0,
scale3d: 0
}, translateProperties = {
translate: 0,
translatex: 0,
translatey: 0,
translate3d: 0
}, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\s*\(.*,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?/i, cssParamsRegExp = /^(-?[\d\.\-]+)?[\w\s]*,?\s*(-?[\d\.\-]+)?[\w\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [
'perspective',
'rotate',
'rotatex',
'rotatey',
'rotatez',
'rotate3d',
'scale',
'scalex',
'scaley',
'scalez',
'scale3d',
'skew',
'skewx',
'skewy',
'translate',
'translatex',
'translatey',
'translatez',
'translate3d',
'matrix',
'matrix3d'
], transform2d = [
'rotate',
'scale',
'scalex',
'scaley',
'skew',
'skewx',
'skewy',
'translate',
'translatex',
'translatey',
'matrix'
], transform2units = {
'rotate': 'deg',
scale: '',
skew: 'px',
translate: 'px'
}, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {
left: {
reverse: 'right',
property: 'left',
transition: 'translatex',
vertical: false,
modifier: -1
},
right: {
reverse: 'left',
property: 'left',
transition: 'translatex',
vertical: false,
modifier: 1
},
down: {
reverse: 'up',
property: 'top',
transition: 'translatey',
vertical: true,
modifier: 1
},
up: {
reverse: 'down',
property: 'top',
transition: 'translatey',
vertical: true,
modifier: -1
},
top: { reverse: 'bottom' },
bottom: { reverse: 'top' },
'in': {
reverse: 'out',
modifier: -1
},
out: {
reverse: 'in',
modifier: 1
},
vertical: { reverse: 'vertical' },
horizontal: { reverse: 'horizontal' }
};
kendo.directions = directions;
extend($.fn, {
kendoStop: function (clearQueue, gotoEnd) {
if (transitions) {
return fx.stopQueue(this, clearQueue || false, gotoEnd || false);
} else {
return this.stop(clearQueue, gotoEnd);
}
}
});
if (transforms && !transitions) {
each(transform2d, function (idx, value) {
$.fn[value] = function (val) {
if (typeof val == 'undefined') {
return animationProperty(this, value);
} else {
var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';
if (that.style.cssText.indexOf(TRANSFORM) == -1) {
$(this).css(TRANSFORM, transformValue);
} else {
that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\(.*?\\)', 'i'), transformValue);
}
}
return this;
};
$.fx.step[value] = function (fx) {
$(fx.elem)[value](fx.now);
};
});
var curProxy = $.fx.prototype.cur;
$.fx.prototype.cur = function () {
if (transform2d.indexOf(this.prop) != -1) {
return parseFloat($(this.elem)[this.prop]());
}
return curProxy.apply(this, arguments);
};
}
kendo.toggleClass = function (element, classes, options, add) {
if (classes) {
classes = classes.split(' ');
if (transitions) {
options = extend({
exclusive: 'all',
duration: 400,
ease: 'ease-out'
}, options);
element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);
setTimeout(function () {
element.css(TRANSITION, '').css(HEIGHT);
}, options.duration);
}
each(classes, function (idx, value) {
element.toggleClass(value, add);
});
}
return element;
};
kendo.parseEffects = function (input, mirror) {
var effects = {};
if (typeof input === 'string') {
each(input.split(' '), function (idx, value) {
var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {
return $1 + ':' + $2.toLowerCase();
}), effect = resolved.split(':'), direction = effect[1], effectBody = {};
if (effect.length > 1) {
effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;
}
effects[effect[0]] = effectBody;
});
} else {
each(input, function (idx) {
var direction = this.direction;
if (direction && mirror && !singleEffectRegExp.test(idx)) {
this.direction = directions[direction].reverse;
}
effects[idx] = this;
});
}
return effects;
};
function parseInteger(value) {
return parseInt(value, 10);
}
function parseCSS(element, property) {
return parseInteger(element.css(property));
}
function keys(obj) {
var acc = [];
for (var propertyName in obj) {
acc.push(propertyName);
}
return acc;
}
function strip3DTransforms(properties) {
for (var key in properties) {
if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {
delete properties[key];
}
}
return properties;
}
function normalizeCSS(element, properties) {
var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;
for (key in properties) {
lowerKey = key.toLowerCase();
isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;
if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {
delete properties[key];
} else {
value = properties[key];
if (isTransformed) {
transformation.push(key + '(' + value + ')');
} else {
cssValues[key] = value;
}
}
}
if (transformation.length) {
cssValues[TRANSFORM] = transformation.join(' ');
}
return cssValues;
}
if (transitions) {
extend(fx, {
transition: function (element, properties, options) {
var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;
options = extend({
duration: 200,
ease: 'ease-out',
complete: null,
exclusive: 'all'
}, options);
var stopTransitionCalled = false;
var stopTransition = function () {
if (!stopTransitionCalled) {
stopTransitionCalled = true;
if (timeoutID) {
clearTimeout(timeoutID);
timeoutID = null;
}
element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);
options.complete.call(element);
}
};
options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;
css = normalizeCSS(element, properties);
$.merge(oldKeys, keys(css));
element.data('keys', $.unique(oldKeys)).height();
element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);
element.css(css).css(TRANSFORM);
if (transitions.event) {
element.one(transitions.event, stopTransition);
if (options.duration !== 0) {
delay = 500;
}
}
timeoutID = setTimeout(stopTransition, options.duration + delay);
element.data(ABORT_ID, timeoutID);
element.data(COMPLETE_CALLBACK, stopTransition);
},
stopQueue: function (element, clearQueue, gotoEnd) {
var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);
if (retainPosition) {
cssValues = kendo.getComputedStyles(element[0], taskKeys);
}
if (completeCallback) {
completeCallback();
}
if (retainPosition) {
element.css(cssValues);
}
return element.removeData('keys').stop(clearQueue);
}
});
}
function animationProperty(element, property) {
if (transforms) {
var transform = element.css(TRANSFORM);
if (transform == NONE) {
return property == 'scale' ? 1 : 0;
}
var match = transform.match(new RegExp(property + '\\s*\\(([\\d\\w\\.]+)')), computed = 0;
if (match) {
computed = parseInteger(match[1]);
} else {
match = transform.match(matrix3dRegExp) || [
0,
0,
0,
0,
0
];
property = property.toLowerCase();
if (translateXRegExp.test(property)) {
computed = parseFloat(match[3] / match[2]);
} else if (property == 'translatey') {
computed = parseFloat(match[4] / match[2]);
} else if (property == 'scale') {
computed = parseFloat(match[2]);
} else if (property == 'rotate') {
computed = parseFloat(Math.atan2(match[2], match[1]));
}
}
return computed;
} else {
return parseFloat(element.css(property));
}
}
var EffectSet = kendo.Class.extend({
init: function (element, options) {
var that = this;
that.element = element;
that.effects = [];
that.options = options;
that.restore = [];
},
run: function (effects) {
var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;
that.effects = effects;
deferred.then($.proxy(that, 'complete'));
element.data('animating', true);
for (idx = 0; idx < length; idx++) {
effect = effects[idx];
effect.setReverse(options.reverse);
effect.setOptions(options);
that.addRestoreProperties(effect.restore);
effect.prepare(start, end);
children = effect.children();
for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {
children[jdx].duration(options.duration).run();
}
}
for (var effectName in options.effects) {
extend(end, options.effects[effectName].properties);
}
if (!element.is(':visible')) {
extend(start, { display: element.data('olddisplay') || 'block' });
}
if (transforms && !options.reset) {
target = element.data('targetTransform');
if (target) {
start = extend(target, start);
}
}
start = normalizeCSS(element, start);
if (transforms && !transitions) {
start = strip3DTransforms(start);
}
element.css(start).css(TRANSFORM);
for (idx = 0; idx < length; idx++) {
effects[idx].setup();
}
if (options.init) {
options.init();
}
element.data('targetTransform', end);
fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));
return deferred.promise();
},
stop: function () {
$(this.element).kendoStop(true, true);
},
addRestoreProperties: function (restore) {
var element = this.element, value, i = 0, length = restore.length;
for (; i < length; i++) {
value = restore[i];
this.restore.push(value);
if (!element.data(value)) {
element.data(value, element.css(value));
}
}
},
restoreCallback: function () {
var element = this.element;
for (var i = 0, length = this.restore.length; i < length; i++) {
var value = this.restore[i];
element.css(value, element.data(value));
}
},
complete: function () {
var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;
element.removeData('animating').dequeue();
if (options.hide) {
element.data('olddisplay', element.css('display')).hide();
}
this.restoreCallback();
if (hasZoom && !transforms) {
setTimeout($.proxy(this, 'restoreCallback'), 0);
}
for (; idx < length; idx++) {
effects[idx].teardown();
}
if (options.completeCallback) {
options.completeCallback(element);
}
}
});
fx.promise = function (element, options) {
var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;
options.effects = parsedEffects;
for (var effectName in parsedEffects) {
effectClass = fx[capitalize(effectName)];
if (effectClass) {
effect = new effectClass(element, parsedEffects[effectName].direction);
effects.push(effect);
}
}
if (effects[0]) {
effectSet.run(effects);
} else {
if (!element.is(':visible')) {
element.css({ display: element.data('olddisplay') || 'block' }).css('display');
}
if (options.init) {
options.init();
}
element.dequeue();
effectSet.complete();
}
};
extend(fx, {
animate: function (elements, properties, options) {
var useTransition = options.transition !== false;
delete options.transition;
if (transitions && 'transition' in fx && useTransition) {
fx.transition(elements, properties, options);
} else {
if (transforms) {
elements.animate(strip3DTransforms(properties), {
queue: false,
show: false,
hide: false,
duration: options.duration,
complete: options.complete
});
} else {
elements.each(function () {
var element = $(this), multiple = {};
each(transformProps, function (idx, value) {
var params, currentValue = properties ? properties[value] + ' ' : null;
if (currentValue) {
var single = properties;
if (value in scaleProperties && properties[value] !== undefined) {
params = currentValue.match(cssParamsRegExp);
if (transforms) {
extend(single, { scale: +params[0] });
}
} else {
if (value in translateProperties && properties[value] !== undefined) {
var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';
if (!element.data(TRANSLATE)) {
if (isFixed) {
element.data(TRANSLATE, {
top: parseCSS(element, 'top') || 0,
left: parseCSS(element, 'left') || 0,
bottom: parseCSS(element, 'bottom'),
right: parseCSS(element, 'right')
});
} else {
element.data(TRANSLATE, {
top: parseCSS(element, 'marginTop') || 0,
left: parseCSS(element, 'marginLeft') || 0
});
}
}
var originalPosition = element.data(TRANSLATE);
params = currentValue.match(cssParamsRegExp);
if (params) {
var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];
if (isFixed) {
if (!isNaN(originalPosition.right)) {
if (!isNaN(dX)) {
extend(single, { right: originalPosition.right - dX });
}
} else {
if (!isNaN(dX)) {
extend(single, { left: originalPosition.left + dX });
}
}
if (!isNaN(originalPosition.bottom)) {
if (!isNaN(dY)) {
extend(single, { bottom: originalPosition.bottom - dY });
}
} else {
if (!isNaN(dY)) {
extend(single, { top: originalPosition.top + dY });
}
}
} else {
if (!isNaN(dX)) {
extend(single, { marginLeft: originalPosition.left + dX });
}
if (!isNaN(dY)) {
extend(single, { marginTop: originalPosition.top + dY });
}
}
}
}
}
if (!transforms && value != 'scale' && value in single) {
delete single[value];
}
if (single) {
extend(multiple, single);
}
}
});
if (browser.msie) {
delete multiple.scale;
}
element.animate(multiple, {
queue: false,
show: false,
hide: false,
duration: options.duration,
complete: options.complete
});
});
}
}
}
});
fx.animatedPromise = fx.promise;
var Effect = kendo.Class.extend({
init: function (element, direction) {
var that = this;
that.element = element;
that._direction = direction;
that.options = {};
that._additionalEffects = [];
if (!that.restore) {
that.restore = [];
}
},
reverse: function () {
this._reverse = true;
return this.run();
},
play: function () {
this._reverse = false;
return this.run();
},
add: function (additional) {
this._additionalEffects.push(additional);
return this;
},
direction: function (value) {
this._direction = value;
return this;
},
duration: function (duration) {
this._duration = duration;
return this;
},
compositeRun: function () {
var that = this, effectSet = new EffectSet(that.element, {
reverse: that._reverse,
duration: that._duration
}), effects = that._additionalEffects.concat([that]);
return effectSet.run(effects);
},
run: function () {
if (this._additionalEffects && this._additionalEffects[0]) {
return this.compositeRun();
}
var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;
deferred.then($.proxy(that, '_complete'));
element.data('animating', true);
for (idx = 0; idx < length; idx++) {
value = restore[idx];
if (!element.data(value)) {
element.data(value, element.css(value));
}
}
for (idx = 0; idx < childrenLength; idx++) {
children[idx].duration(that._duration).run();
}
that.prepare(start, end);
if (!element.is(':visible')) {
extend(start, { display: element.data('olddisplay') || 'block' });
}
if (transforms) {
target = element.data('targetTransform');
if (target) {
start = extend(target, start);
}
}
start = normalizeCSS(element, start);
if (transforms && !transitions) {
start = strip3DTransforms(start);
}
element.css(start).css(TRANSFORM);
that.setup();
element.data('targetTransform', end);
fx.animate(element, end, {
duration: that._duration,
complete: deferred.resolve
});
return deferred.promise();
},
stop: function () {
var idx = 0, children = this.children(), childrenLength = children.length;
for (idx = 0; idx < childrenLength; idx++) {
children[idx].stop();
}
$(this.element).kendoStop(true, true);
return this;
},
restoreCallback: function () {
var element = this.element;
for (var i = 0, length = this.restore.length; i < length; i++) {
var value = this.restore[i];
element.css(value, element.data(value));
}
},
_complete: function () {
var that = this, element = that.element;
element.removeData('animating').dequeue();
that.restoreCallback();
if (that.shouldHide()) {
element.data('olddisplay', element.css('display')).hide();
}
if (hasZoom && !transforms) {
setTimeout($.proxy(that, 'restoreCallback'), 0);
}
that.teardown();
},
setOptions: function (options) {
extend(true, this.options, options);
},
children: function () {
return [];
},
shouldHide: $.noop,
setup: $.noop,
prepare: $.noop,
teardown: $.noop,
directions: [],
setReverse: function (reverse) {
this._reverse = reverse;
return this;
}
});
function capitalize(word) {
return word.charAt(0).toUpperCase() + word.substring(1);
}
function createEffect(name, definition) {
var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;
fx[capitalize(name)] = effectClass;
fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {
return new effectClass(this.element, direction, opt1, opt2, opt3);
};
each(directions, function (idx, theDirection) {
fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {
return new effectClass(this.element, theDirection, opt1, opt2, opt3);
};
});
}
var FOUR_DIRECTIONS = [
'left',
'right',
'up',
'down'
], IN_OUT = [
'in',
'out'
];
createEffect('slideIn', {
directions: FOUR_DIRECTIONS,
divisor: function (value) {
this.options.divisor = value;
return this;
},
prepare: function (start, end) {
var that = this, tmp, element = that.element, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? element.outerHeight() : element.outerWidth()), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';
if (that._reverse) {
tmp = start;
start = end;
end = tmp;
}
if (transforms) {
start[direction.transition] = startValue;
end[direction.transition] = endValue;
} else {
start[direction.property] = startValue;
end[direction.property] = endValue;
}
}
});
createEffect('tile', {
directions: FOUR_DIRECTIONS,
init: function (element, direction, previous) {
Effect.prototype.init.call(this, element, direction);
this.options = { previous: previous };
},
previousDivisor: function (value) {
this.options.previousDivisor = value;
return this;
},
children: function () {
var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;
var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];
if (previous) {
children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));
}
return children;
}
});
function createToggleEffect(name, property, defaultStart, defaultEnd) {
createEffect(name, {
directions: IN_OUT,
startValue: function (value) {
this._startValue = value;
return this;
},
endValue: function (value) {
this._endValue = value;
return this;
},
shouldHide: function () {
return this._shouldHide;
},
prepare: function (start, end) {
var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);
if (startDataValueIsSet) {
startValue = startDataValue;
} else if (typeof this._startValue !== 'undefined') {
startValue = this._startValue;
} else {
startValue = out ? defaultStart : defaultEnd;
}
if (typeof this._endValue !== 'undefined') {
endValue = this._endValue;
} else {
endValue = out ? defaultEnd : defaultStart;
}
if (this._reverse) {
start[property] = endValue;
end[property] = startValue;
} else {
start[property] = startValue;
end[property] = endValue;
}
that._shouldHide = end[property] === defaultEnd;
}
});
}
createToggleEffect('fade', 'opacity', 1, 0);
createToggleEffect('zoom', 'scale', 1, 0.01);
createEffect('slideMargin', {
prepare: function (start, end) {
var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;
if (!reverse && origin === null) {
element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));
}
margin = element.data(ORIGIN) || 0;
end['margin-' + options.axis] = !reverse ? margin + offset : margin;
}
});
createEffect('slideTo', {
prepare: function (start, end) {
var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;
if (transforms) {
end.translatex = !reverse ? offset[0] : 0;
end.translatey = !reverse ? offset[1] : 0;
} else {
end.left = !reverse ? offset[0] : 0;
end.top = !reverse ? offset[1] : 0;
}
element.css('left');
}
});
createEffect('expand', {
directions: [
'horizontal',
'vertical'
],
restore: [OVERFLOW],
prepare: function (start, end) {
var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());
start.overflow = HIDDEN;
length = options && options.reset ? realLength || length : length || realLength;
end[property] = (reverse ? 0 : length) + PX;
start[property] = (reverse ? length : 0) + PX;
if (oldLength === undefined) {
element.data(property, setLength);
}
},
shouldHide: function () {
return this._reverse;
},
teardown: function () {
var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);
if (length == AUTO || length === BLANK) {
setTimeout(function () {
element.css(property, AUTO).css(property);
}, 0);
}
}
});
var TRANSFER_START_STATE = {
position: 'absolute',
marginLeft: 0,
marginTop: 0,
scale: 1
};
createEffect('transfer', {
init: function (element, target) {
this.element = element;
this.options = { target: target };
this.restore = [];
},
setup: function () {
this.element.appendTo(document.body);
},
prepare: function (start, end) {
var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);
extend(start, TRANSFER_START_STATE);
end.scale = 1;
element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);
element.css(TRANSFORM, 'scale(' + currentScale + ')');
start.top = outerBox.top;
start.left = outerBox.left;
start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;
if (that._reverse) {
start.scale = scale;
} else {
end.scale = scale;
}
}
});
var CLIPS = {
top: 'rect(auto auto $size auto)',
bottom: 'rect($size auto auto auto)',
left: 'rect(auto $size auto auto)',
right: 'rect(auto auto auto $size)'
};
var ROTATIONS = {
top: {
start: 'rotatex(0deg)',
end: 'rotatex(180deg)'
},
bottom: {
start: 'rotatex(-180deg)',
end: 'rotatex(0deg)'
},
left: {
start: 'rotatey(0deg)',
end: 'rotatey(-180deg)'
},
right: {
start: 'rotatey(180deg)',
end: 'rotatey(0deg)'
}
};
function clipInHalf(container, direction) {
var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';
return CLIPS[direction].replace('$size', size);
}
createEffect('turningPage', {
directions: FOUR_DIRECTIONS,
init: function (element, direction, container) {
Effect.prototype.init.call(this, element, direction);
this._container = container;
},
prepare: function (start, end) {
var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];
start.zIndex = 1;
if (that._clipInHalf) {
start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);
}
start[BACKFACE] = HIDDEN;
end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);
start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);
},
setup: function () {
this._container.append(this.element);
},
face: function (value) {
this._face = value;
return this;
},
shouldHide: function () {
var that = this, reverse = that._reverse, face = that._face;
return reverse && !face || !reverse && face;
},
clipInHalf: function (value) {
this._clipInHalf = value;
return this;
},
temporary: function () {
this.element.addClass('temp-page');
return this;
}
});
createEffect('staticPage', {
directions: FOUR_DIRECTIONS,
init: function (element, direction, container) {
Effect.prototype.init.call(this, element, direction);
this._container = container;
},
restore: ['clip'],
prepare: function (start, end) {
var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;
start.clip = clipInHalf(that._container, direction);
start.opacity = 0.999;
end.opacity = 1;
},
shouldHide: function () {
var that = this, reverse = that._reverse, face = that._face;
return reverse && !face || !reverse && face;
},
face: function (value) {
this._face = value;
return this;
}
});
createEffect('pageturn', {
directions: [
'horizontal',
'vertical'
],
init: function (element, direction, face, back) {
Effect.prototype.init.call(this, element, direction);
this.options = {};
this.options.face = face;
this.options.back = back;
},
children: function () {
var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;
if (reverse) {
temp = direction;
direction = reverseDirection;
reverseDirection = temp;
}
return [
kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),
kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),
kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),
kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)
];
},
prepare: function (start, end) {
start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;
start.transformStyle = 'preserve-3d';
start.opacity = 0.999;
end.opacity = 1;
},
teardown: function () {
this.element.find('.temp-page').remove();
}
});
createEffect('flip', {
directions: [
'horizontal',
'vertical'
],
init: function (element, direction, face, back) {
Effect.prototype.init.call(this, element, direction);
this.options = {};
this.options.face = face;
this.options.back = back;
},
children: function () {
var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;
if (reverse) {
temp = direction;
direction = reverseDirection;
reverseDirection = temp;
}
return [
kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),
kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)
];
},
prepare: function (start) {
start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;
start.transformStyle = 'preserve-3d';
}
});
var RESTORE_OVERFLOW = !support.mobileOS.android;
var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';
createEffect('replace', {
_before: $.noop,
_after: $.noop,
init: function (element, previous, transitionClass) {
Effect.prototype.init.call(this, element);
this._previous = $(previous);
this._transitionClass = transitionClass;
},
duration: function () {
throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');
},
beforeTransition: function (callback) {
this._before = callback;
return this;
},
afterTransition: function (callback) {
this._after = callback;
return this;
},
_both: function () {
return $().add(this._element).add(this._previous);
},
_containerClass: function () {
var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;
if (direction) {
containerClass += ' k-fx-' + direction;
}
if (this._reverse) {
containerClass += ' k-fx-reverse';
}
return containerClass;
},
complete: function (e) {
if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {
return;
}
var container = this.container;
container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);
this._previous.hide().removeClass('k-fx-current');
this.element.removeClass('k-fx-next');
if (RESTORE_OVERFLOW) {
container.css(OVERFLOW, '');
}
if (!this.isAbsolute) {
this._both().css(POSITION, '');
}
this.deferred.resolve();
delete this.deferred;
},
run: function () {
if (this._additionalEffects && this._additionalEffects[0]) {
return this.compositeRun();
}
var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;
if (!container.length) {
container = element.parent();
}
this.container = container;
this.deferred = deferred;
this.isAbsolute = originalPosition == 'absolute';
if (!this.isAbsolute) {
both.css(POSITION, 'absolute');
}
if (RESTORE_OVERFLOW) {
originalOverflow = container.css(OVERFLOW);
container.css(OVERFLOW, 'hidden');
}
if (!transitions) {
this.complete();
} else {
element.addClass('k-fx-hidden');
container.addClass(this._containerClass());
this.completeProxy = $.proxy(this, 'complete');
container.on(transitions.event, this.completeProxy);
kendo.animationFrame(function () {
element.removeClass('k-fx-hidden').addClass('k-fx-next');
previous.css('display', '').addClass('k-fx-current');
that._before(previous, element);
kendo.animationFrame(function () {
container.removeClass('k-fx-start').addClass('k-fx-end');
that._after(previous, element);
});
});
}
return deferred.promise();
},
stop: function () {
this.complete();
}
});
var Animation = kendo.Class.extend({
init: function () {
var that = this;
that._tickProxy = proxy(that._tick, that);
that._started = false;
},
tick: $.noop,
done: $.noop,
onEnd: $.noop,
onCancel: $.noop,
start: function () {
if (!this.enabled()) {
return;
}
if (!this.done()) {
this._started = true;
kendo.animationFrame(this._tickProxy);
} else {
this.onEnd();
}
},
enabled: function () {
return true;
},
cancel: function () {
this._started = false;
this.onCancel();
},
_tick: function () {
var that = this;
if (!that._started) {
return;
}
that.tick();
if (!that.done()) {
kendo.animationFrame(that._tickProxy);
} else {
that._started = false;
that.onEnd();
}
}
});
var Transition = Animation.extend({
init: function (options) {
var that = this;
extend(that, options);
Animation.fn.init.call(that);
},
done: function () {
return this.timePassed() >= this.duration;
},
timePassed: function () {
return Math.min(this.duration, new Date() - this.startDate);
},
moveTo: function (options) {
var that = this, movable = that.movable;
that.initial = movable[that.axis];
that.delta = options.location - that.initial;
that.duration = typeof options.duration == 'number' ? options.duration : 300;
that.tick = that._easeProxy(options.ease);
that.startDate = new Date();
that.start();
},
_easeProxy: function (ease) {
var that = this;
return function () {
that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));
};
}
});
extend(Transition, {
easeOutExpo: function (t, b, c, d) {
return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
},
easeOutBack: function (t, b, c, d, s) {
s = 1.70158;
return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
}
});
fx.Animation = Animation;
fx.Transition = Transition;
fx.createEffect = createEffect;
fx.box = function (element) {
element = $(element);
var result = element.offset();
result.width = element.outerWidth();
result.height = element.outerHeight();
return result;
};
fx.transformOrigin = function (inner, outer) {
var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);
return {
x: isNaN(x) ? 0 : x,
y: isNaN(y) ? 0 : y
};
};
fx.fillScale = function (inner, outer) {
return Math.min(inner.width / outer.width, inner.height / outer.height);
};
fx.fitScale = function (inner, outer) {
return Math.max(inner.width / outer.width, inner.height / outer.height);
};
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.userevents', ['kendo.core'], f);
}(function () {
var __meta__ = {
id: 'userevents',
name: 'User Events',
category: 'framework',
depends: ['core'],
hidden: true
};
(function ($, undefined) {
var kendo = window.kendo, support = kendo.support, document = window.document, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';
var THRESHOLD = {
'api': 0,
'touch': 0,
'mouse': 9,
'pointer': 9
};
var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;
function touchDelta(touch1, touch2) {
var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;
return {
center: {
x: (x1 + x2) / 2,
y: (y1 + y2) / 2
},
distance: Math.sqrt(dx * dx + dy * dy)
};
}
function getTouches(e) {
var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;
if (e.api) {
touches.push({
id: 2,
event: e,
target: e.target,
currentTarget: e.target,
location: e,
type: 'api'
});
} else if (e.type.match(/touch/)) {
changedTouches = originalEvent ? originalEvent.changedTouches : [];
for (length = changedTouches.length; idx < length; idx++) {
touch = changedTouches[idx];
touches.push({
location: touch,
event: e,
target: touch.target,
currentTarget: currentTarget,
id: touch.identifier,
type: 'touch'
});
}
} else if (support.pointers || support.msPointers) {
touches.push({
location: originalEvent,
event: e,
target: e.target,
currentTarget: currentTarget,
id: originalEvent.pointerId,
type: 'pointer'
});
} else {
touches.push({
id: 1,
event: e,
target: e.target,
currentTarget: currentTarget,
location: e,
type: 'mouse'
});
}
return touches;
}
var TouchAxis = Class.extend({
init: function (axis, location) {
var that = this;
that.axis = axis;
that._updateLocationData(location);
that.startLocation = that.location;
that.velocity = that.delta = 0;
that.timeStamp = now();
},
move: function (location) {
var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;
if (!offset && invalidZeroEvents) {
return;
}
that.delta = offset - that.location;
that._updateLocationData(location);
that.initialDelta = offset - that.startLocation;
that.velocity = that.delta / timeDelta;
that.timeStamp = timeStamp;
},
_updateLocationData: function (location) {
var that = this, axis = that.axis;
that.location = location['page' + axis];
that.client = location['client' + axis];
that.screen = location['screen' + axis];
}
});
var Touch = Class.extend({
init: function (userEvents, target, touchInfo) {
extend(this, {
x: new TouchAxis('X', touchInfo.location),
y: new TouchAxis('Y', touchInfo.location),
type: touchInfo.type,
useClickAsTap: userEvents.useClickAsTap,
threshold: userEvents.threshold || THRESHOLD[touchInfo.type],
userEvents: userEvents,
target: target,
currentTarget: touchInfo.currentTarget,
initialTouch: touchInfo.target,
id: touchInfo.id,
pressEvent: touchInfo,
_moved: false,
_finished: false
});
},
press: function () {
this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);
this._trigger(PRESS, this.pressEvent);
},
_hold: function () {
this._trigger(HOLD, this.pressEvent);
},
move: function (touchInfo) {
var that = this;
if (that._finished) {
return;
}
that.x.move(touchInfo.location);
that.y.move(touchInfo.location);
if (!that._moved) {
if (that._withinIgnoreThreshold()) {
return;
}
if (!UserEvents.current || UserEvents.current === that.userEvents) {
that._start(touchInfo);
} else {
return that.dispose();
}
}
if (!that._finished) {
that._trigger(MOVE, touchInfo);
}
},
end: function (touchInfo) {
this.endTime = now();
if (this._finished) {
return;
}
this._finished = true;
this._trigger(RELEASE, touchInfo);
if (this._moved) {
this._trigger(END, touchInfo);
} else {
if (!this.useClickAsTap) {
this._trigger(TAP, touchInfo);
}
}
clearTimeout(this._holdTimeout);
this.dispose();
},
dispose: function () {
var userEvents = this.userEvents, activeTouches = userEvents.touches;
this._finished = true;
this.pressEvent = null;
clearTimeout(this._holdTimeout);
activeTouches.splice($.inArray(this, activeTouches), 1);
},
skip: function () {
this.dispose();
},
cancel: function () {
this.dispose();
},
isMoved: function () {
return this._moved;
},
_start: function (touchInfo) {
clearTimeout(this._holdTimeout);
this.startTime = now();
this._moved = true;
this._trigger(START, touchInfo);
},
_trigger: function (name, touchInfo) {
var that = this, jQueryEvent = touchInfo.event, data = {
touch: that,
x: that.x,
y: that.y,
target: that.target,
event: jQueryEvent
};
if (that.userEvents.notify(name, data)) {
jQueryEvent.preventDefault();
}
},
_withinIgnoreThreshold: function () {
var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;
return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;
}
});
function withEachUpEvent(callback) {
var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;
for (; idx < length; idx++) {
callback(downEvents[idx]);
}
}
var UserEvents = Observable.extend({
init: function (element, options) {
var that = this, filter, ns = kendo.guid();
options = options || {};
filter = that.filter = options.filter;
that.threshold = options.threshold || DEFAULT_THRESHOLD;
that.minHold = options.minHold || DEFAULT_MIN_HOLD;
that.touches = [];
that._maxTouches = options.multiTouch ? 2 : 1;
that.allowSelection = options.allowSelection;
that.captureUpIfMoved = options.captureUpIfMoved;
that.useClickAsTap = !options.fastTap && !support.delayedClick();
that.eventNS = ns;
element = $(element).handler(that);
Observable.fn.init.call(that);
extend(that, {
element: element,
surface: options.global && ENABLE_GLOBAL_SURFACE ? $(document.documentElement) : $(options.surface || element),
stopPropagation: options.stopPropagation,
pressed: false
});
that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');
element.on(kendo.applyEventMap('down', ns), filter, '_start');
if (that.useClickAsTap) {
element.on(kendo.applyEventMap('click', ns), filter, '_click');
}
if (support.pointers || support.msPointers) {
if (support.browser.version < 11) {
element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');
} else {
element.css('touch-action', 'pan-y');
}
}
if (options.preventDragEvent) {
element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);
}
element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');
if (that.captureUpIfMoved && support.eventCapture) {
var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);
withEachUpEvent(function (eventName) {
surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);
});
}
that.bind([
PRESS,
HOLD,
TAP,
START,
MOVE,
END,
RELEASE,
CANCEL,
GESTURESTART,
GESTURECHANGE,
GESTUREEND,
GESTURETAP,
SELECT
], options);
},
preventIfMoving: function (e) {
if (this._isMoved()) {
e.preventDefault();
}
},
destroy: function () {
var that = this;
if (that._destroyed) {
return;
}
that._destroyed = true;
if (that.captureUpIfMoved && support.eventCapture) {
var surfaceElement = that.surface[0];
withEachUpEvent(function (eventName) {
surfaceElement.removeEventListener(eventName, that.preventIfMoving);
});
}
that.element.kendoDestroy(that.eventNS);
that.surface.kendoDestroy(that.eventNS);
that.element.removeData('handler');
that.surface.removeData('handler');
that._disposeAll();
that.unbind();
delete that.surface;
delete that.element;
delete that.currentTarget;
},
capture: function () {
UserEvents.current = this;
},
cancel: function () {
this._disposeAll();
this.trigger(CANCEL);
},
notify: function (eventName, data) {
var that = this, touches = that.touches;
if (this._isMultiTouch()) {
switch (eventName) {
case MOVE:
eventName = GESTURECHANGE;
break;
case END:
eventName = GESTUREEND;
break;
case TAP:
eventName = GESTURETAP;
break;
}
extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));
}
return this.trigger(eventName, extend(data, { type: eventName }));
},
press: function (x, y, target) {
this._apiCall('_start', x, y, target);
},
move: function (x, y) {
this._apiCall('_move', x, y);
},
end: function (x, y) {
this._apiCall('_end', x, y);
},
_isMultiTouch: function () {
return this.touches.length > 1;
},
_maxTouchesReached: function () {
return this.touches.length >= this._maxTouches;
},
_disposeAll: function () {
var touches = this.touches;
while (touches.length > 0) {
touches.pop().dispose();
}
},
_isMoved: function () {
return $.grep(this.touches, function (touch) {
return touch.isMoved();
}).length;
},
_select: function (e) {
if (!this.allowSelection || this.trigger(SELECT, { event: e })) {
e.preventDefault();
}
},
_start: function (e) {
var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;
if (which && which > 1 || that._maxTouchesReached()) {
return;
}
UserEvents.current = null;
that.currentTarget = e.currentTarget;
if (that.stopPropagation) {
e.stopPropagation();
}
for (; idx < length; idx++) {
if (that._maxTouchesReached()) {
break;
}
touch = touches[idx];
if (filter) {
target = $(touch.currentTarget);
} else {
target = that.element;
}
if (!target.length) {
continue;
}
touch = new Touch(that, target, touch);
that.touches.push(touch);
touch.press();
if (that._isMultiTouch()) {
that.notify('gesturestart', {});
}
}
},
_move: function (e) {
this._eachTouch('move', e);
},
_end: function (e) {
this._eachTouch('end', e);
},
_click: function (e) {
var data = {
touch: {
initialTouch: e.target,
target: $(e.currentTarget),
endTime: now(),
x: {
location: e.pageX,
client: e.clientX
},
y: {
location: e.pageY,
client: e.clientY
}
},
x: e.pageX,
y: e.pageY,
target: $(e.currentTarget),
event: e,
type: 'tap'
};
if (this.trigger('tap', data)) {
e.preventDefault();
}
},
_eachTouch: function (methodName, e) {
var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;
for (idx = 0; idx < activeTouches.length; idx++) {
touch = activeTouches[idx];
dict[touch.id] = touch;
}
for (idx = 0; idx < touches.length; idx++) {
touchInfo = touches[idx];
matchingTouch = dict[touchInfo.id];
if (matchingTouch) {
matchingTouch[methodName](touchInfo);
}
}
},
_apiCall: function (type, x, y, target) {
this[type]({
api: true,
pageX: x,
pageY: y,
clientX: x,
clientY: y,
target: $(target || this.element)[0],
stopPropagation: $.noop,
preventDefault: $.noop
});
}
});
UserEvents.defaultThreshold = function (value) {
DEFAULT_THRESHOLD = value;
};
UserEvents.minHold = function (value) {
DEFAULT_MIN_HOLD = value;
};
kendo.getTouches = getTouches;
kendo.touchDelta = touchDelta;
kendo.UserEvents = UserEvents;
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.draganddrop', [
'kendo.core',
'kendo.userevents'
], f);
}(function () {
var __meta__ = {
id: 'draganddrop',
name: 'Drag & drop',
category: 'framework',
description: 'Drag & drop functionality for any DOM element.',
depends: [
'core',
'userevents'
]
};
(function ($, undefined) {
var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';
function contains(parent, child) {
try {
return $.contains(parent, child) || parent == child;
} catch (e) {
return false;
}
}
function numericCssPropery(element, property) {
return parseInt(element.css(property), 10) || 0;
}
function within(value, range) {
return Math.min(Math.max(value, range.min), range.max);
}
function containerBoundaries(container, element) {
var offset = getOffset(container), minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - element.outerWidth(true), maxY = minY + container.height() - element.outerHeight(true);
return {
x: {
min: minX,
max: maxX
},
y: {
min: minY,
max: maxY
}
};
}
function checkTarget(target, targets, areas) {
var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;
while (target && target.parentNode) {
for (i = 0; i < targetLen; i++) {
theTarget = targets[i];
if (theTarget.element[0] === target) {
return {
target: theTarget,
targetElement: target
};
}
}
for (i = 0; i < areaLen; i++) {
theFilter = areas[i];
if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {
return {
target: theFilter,
targetElement: target
};
}
}
target = target.parentNode;
}
return undefined;
}
var TapCapture = Observable.extend({
init: function (element, options) {
var that = this, domElement = element[0];
that.capture = false;
if (domElement.addEventListener) {
$.each(kendo.eventMap.down.split(' '), function () {
domElement.addEventListener(this, proxy(that._press, that), true);
});
$.each(kendo.eventMap.up.split(' '), function () {
domElement.addEventListener(this, proxy(that._release, that), true);
});
} else {
$.each(kendo.eventMap.down.split(' '), function () {
domElement.attachEvent(this, proxy(that._press, that));
});
$.each(kendo.eventMap.up.split(' '), function () {
domElement.attachEvent(this, proxy(that._release, that));
});
}
Observable.fn.init.call(that);
that.bind([
'press',
'release'
], options || {});
},
captureNext: function () {
this.capture = true;
},
cancelCapture: function () {
this.capture = false;
},
_press: function (e) {
var that = this;
that.trigger('press');
if (that.capture) {
e.preventDefault();
}
},
_release: function (e) {
var that = this;
that.trigger('release');
if (that.capture) {
e.preventDefault();
that.cancelCapture();
}
}
});
var PaneDimension = Observable.extend({
init: function (options) {
var that = this;
Observable.fn.init.call(that);
that.forcedEnabled = false;
$.extend(that, options);
that.scale = 1;
if (that.horizontal) {
that.measure = 'offsetWidth';
that.scrollSize = 'scrollWidth';
that.axis = 'x';
} else {
that.measure = 'offsetHeight';
that.scrollSize = 'scrollHeight';
that.axis = 'y';
}
},
makeVirtual: function () {
$.extend(this, {
virtual: true,
forcedEnabled: true,
_virtualMin: 0,
_virtualMax: 0
});
},
virtualSize: function (min, max) {
if (this._virtualMin !== min || this._virtualMax !== max) {
this._virtualMin = min;
this._virtualMax = max;
this.update();
}
},
outOfBounds: function (offset) {
return offset > this.max || offset < this.min;
},
forceEnabled: function () {
this.forcedEnabled = true;
},
getSize: function () {
return this.container[0][this.measure];
},
getTotal: function () {
return this.element[0][this.scrollSize];
},
rescale: function (scale) {
this.scale = scale;
},
update: function (silent) {
var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();
if (total === 0 && !that.forcedEnabled) {
return;
}
that.max = that.virtual ? -that._virtualMin : 0;
that.size = size;
that.total = scaledTotal;
that.min = Math.min(that.max, size - scaledTotal);
that.minScale = size / total;
that.centerOffset = (scaledTotal - size) / 2;
that.enabled = that.forcedEnabled || scaledTotal > size;
if (!silent) {
that.trigger(CHANGE, that);
}
}
});
var PaneDimensions = Observable.extend({
init: function (options) {
var that = this;
Observable.fn.init.call(that);
that.x = new PaneDimension(extend({ horizontal: true }, options));
that.y = new PaneDimension(extend({ horizontal: false }, options));
that.container = options.container;
that.forcedMinScale = options.minScale;
that.maxScale = options.maxScale || 100;
that.bind(CHANGE, options);
},
rescale: function (newScale) {
this.x.rescale(newScale);
this.y.rescale(newScale);
this.refresh();
},
centerCoordinates: function () {
return {
x: Math.min(0, -this.x.centerOffset),
y: Math.min(0, -this.y.centerOffset)
};
},
refresh: function () {
var that = this;
that.x.update();
that.y.update();
that.enabled = that.x.enabled || that.y.enabled;
that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);
that.fitScale = Math.max(that.x.minScale, that.y.minScale);
that.trigger(CHANGE);
}
});
var PaneAxis = Observable.extend({
init: function (options) {
var that = this;
extend(that, options);
Observable.fn.init.call(that);
},
outOfBounds: function () {
return this.dimension.outOfBounds(this.movable[this.axis]);
},
dragMove: function (delta) {
var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;
if (!dimension.enabled) {
return;
}
if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {
delta *= that.resistance;
}
movable.translateAxis(axis, delta);
that.trigger(CHANGE, that);
}
});
var Pane = Class.extend({
init: function (options) {
var that = this, x, y, resistance, movable;
extend(that, { elastic: true }, options);
resistance = that.elastic ? 0.5 : 0;
movable = that.movable;
that.x = x = new PaneAxis({
axis: 'x',
dimension: that.dimensions.x,
resistance: resistance,
movable: movable
});
that.y = y = new PaneAxis({
axis: 'y',
dimension: that.dimensions.y,
resistance: resistance,
movable: movable
});
that.userEvents.bind([
'press',
'move',
'end',
'gesturestart',
'gesturechange'
], {
gesturestart: function (e) {
that.gesture = e;
that.offset = that.dimensions.container.offset();
},
press: function (e) {
if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {
e.sender.cancel();
}
},
gesturechange: function (e) {
var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;
if (movable.scale <= minScale && scaleDelta < 1) {
scaleDelta += (1 - scaleDelta) * 0.8;
}
if (movable.scale * scaleDelta >= maxScale) {
scaleDelta = maxScale / movable.scale;
}
var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;
coordinates = {
x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,
y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY
};
movable.scaleWith(scaleDelta);
x.dragMove(coordinates.x);
y.dragMove(coordinates.y);
that.dimensions.rescale(movable.scale);
that.gesture = e;
e.preventDefault();
},
move: function (e) {
if (e.event.target.tagName.match(/textarea|input/i)) {
return;
}
if (x.dimension.enabled || y.dimension.enabled) {
x.dragMove(e.x.delta);
y.dragMove(e.y.delta);
e.preventDefault();
} else {
e.touch.skip();
}
},
end: function (e) {
e.preventDefault();
}
});
}
});
var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;
if (support.hasHW3D) {
translate = function (x, y, scale) {
return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';
};
} else {
translate = function (x, y, scale) {
return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';
};
}
var Movable = Observable.extend({
init: function (element) {
var that = this;
Observable.fn.init.call(that);
that.element = $(element);
that.element[0].style.webkitTransformOrigin = 'left top';
that.x = 0;
that.y = 0;
that.scale = 1;
that._saveCoordinates(translate(that.x, that.y, that.scale));
},
translateAxis: function (axis, by) {
this[axis] += by;
this.refresh();
},
scaleTo: function (scale) {
this.scale = scale;
this.refresh();
},
scaleWith: function (scaleDelta) {
this.scale *= scaleDelta;
this.refresh();
},
translate: function (coordinates) {
this.x += coordinates.x;
this.y += coordinates.y;
this.refresh();
},
moveAxis: function (axis, value) {
this[axis] = value;
this.refresh();
},
moveTo: function (coordinates) {
extend(this, coordinates);
this.refresh();
},
refresh: function () {
var that = this, x = that.x, y = that.y, newCoordinates;
if (that.round) {
x = Math.round(x);
y = Math.round(y);
}
newCoordinates = translate(x, y, that.scale);
if (newCoordinates != that.coordinates) {
if (kendo.support.browser.msie && kendo.support.browser.version < 10) {
that.element[0].style.position = 'absolute';
that.element[0].style.left = that.x + 'px';
that.element[0].style.top = that.y + 'px';
} else {
that.element[0].style[TRANSFORM_STYLE] = newCoordinates;
}
that._saveCoordinates(newCoordinates);
that.trigger(CHANGE);
}
},
_saveCoordinates: function (coordinates) {
this.coordinates = coordinates;
}
});
function destroyDroppable(collection, widget) {
var groupName = widget.options.group, droppables = collection[groupName], i;
Widget.fn.destroy.call(widget);
if (droppables.length > 1) {
for (i = 0; i < droppables.length; i++) {
if (droppables[i] == widget) {
droppables.splice(i, 1);
break;
}
}
} else {
droppables.length = 0;
delete collection[groupName];
}
}
var DropTarget = Widget.extend({
init: function (element, options) {
var that = this;
Widget.fn.init.call(that, element, options);
var group = that.options.group;
if (!(group in dropTargets)) {
dropTargets[group] = [that];
} else {
dropTargets[group].push(that);
}
},
events: [
DRAGENTER,
DRAGLEAVE,
DROP
],
options: {
name: 'DropTarget',
group: 'default'
},
destroy: function () {
destroyDroppable(dropTargets, this);
},
_trigger: function (eventName, e) {
var that = this, draggable = draggables[that.options.group];
if (draggable) {
return that.trigger(eventName, extend({}, e.event, {
draggable: draggable,
dropTarget: e.dropTarget
}));
}
},
_over: function (e) {
this._trigger(DRAGENTER, e);
},
_out: function (e) {
this._trigger(DRAGLEAVE, e);
},
_drop: function (e) {
var that = this, draggable = draggables[that.options.group];
if (draggable) {
draggable.dropped = !that._trigger(DROP, e);
}
}
});
DropTarget.destroyGroup = function (groupName) {
var group = dropTargets[groupName] || dropAreas[groupName], i;
if (group) {
for (i = 0; i < group.length; i++) {
Widget.fn.destroy.call(group[i]);
}
group.length = 0;
delete dropTargets[groupName];
delete dropAreas[groupName];
}
};
DropTarget._cache = dropTargets;
var DropTargetArea = DropTarget.extend({
init: function (element, options) {
var that = this;
Widget.fn.init.call(that, element, options);
var group = that.options.group;
if (!(group in dropAreas)) {
dropAreas[group] = [that];
} else {
dropAreas[group].push(that);
}
},
destroy: function () {
destroyDroppable(dropAreas, this);
},
options: {
name: 'DropTargetArea',
group: 'default',
filter: null
}
});
var Draggable = Widget.extend({
init: function (element, options) {
var that = this;
Widget.fn.init.call(that, element, options);
that._activated = false;
that.userEvents = new UserEvents(that.element, {
global: true,
allowSelection: true,
filter: that.options.filter,
threshold: that.options.distance,
start: proxy(that._start, that),
hold: proxy(that._hold, that),
move: proxy(that._drag, that),
end: proxy(that._end, that),
cancel: proxy(that._cancel, that),
select: proxy(that._select, that)
});
that._afterEndHandler = proxy(that._afterEnd, that);
that._captureEscape = proxy(that._captureEscape, that);
},
events: [
HOLD,
DRAGSTART,
DRAG,
DRAGEND,
DRAGCANCEL,
HINTDESTROYED
],
options: {
name: 'Draggable',
distance: kendo.support.touch ? 0 : 5,
group: 'default',
cursorOffset: null,
axis: null,
container: null,
filter: null,
ignore: null,
holdToDrag: false,
autoScroll: false,
dropped: false
},
cancelHold: function () {
this._activated = false;
},
_captureEscape: function (e) {
var that = this;
if (e.keyCode === kendo.keys.ESC) {
that._trigger(DRAGCANCEL, { event: e });
that.userEvents.cancel();
}
},
_updateHint: function (e) {
var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;
if (cursorOffset) {
coordinates = {
left: e.x.location + cursorOffset.left,
top: e.y.location + cursorOffset.top
};
} else {
that.hintOffset.left += e.x.delta;
that.hintOffset.top += e.y.delta;
coordinates = $.extend({}, that.hintOffset);
}
if (boundaries) {
coordinates.top = within(coordinates.top, boundaries.y);
coordinates.left = within(coordinates.left, boundaries.x);
}
if (axis === 'x') {
delete coordinates.top;
} else if (axis === 'y') {
delete coordinates.left;
}
that.hint.css(coordinates);
},
_shouldIgnoreTarget: function (target) {
var ignoreSelector = this.options.ignore;
return ignoreSelector && $(target).is(ignoreSelector);
},
_select: function (e) {
if (!this._shouldIgnoreTarget(e.event.target)) {
e.preventDefault();
}
},
_start: function (e) {
var that = this, options = that.options, container = options.container, hint = options.hint;
if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {
that.userEvents.cancel();
return;
}
that.currentTarget = e.target;
that.currentTargetOffset = getOffset(that.currentTarget);
if (hint) {
if (that.hint) {
that.hint.stop(true, true).remove();
}
that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;
var offset = getOffset(that.currentTarget);
that.hintOffset = offset;
that.hint.css({
position: 'absolute',
zIndex: 20000,
left: offset.left,
top: offset.top
}).appendTo(document.body);
that.angular('compile', function () {
that.hint.removeAttr('ng-repeat');
var scopeTarget = $(e.target);
while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {
scopeTarget = scopeTarget.parent();
}
return {
elements: that.hint.get(),
scopeFrom: scopeTarget.data('$$kendoScope')
};
});
}
draggables[options.group] = that;
that.dropped = false;
if (container) {
that.boundaries = containerBoundaries(container, that.hint);
}
$(document).on(KEYUP, that._captureEscape);
if (that._trigger(DRAGSTART, e)) {
that.userEvents.cancel();
that._afterEnd();
}
that.userEvents.capture();
},
_hold: function (e) {
this.currentTarget = e.target;
if (this._trigger(HOLD, e)) {
this.userEvents.cancel();
} else {
this._activated = true;
}
},
_drag: function (e) {
e.preventDefault();
var cursorElement = this._elementUnderCursor(e);
this._lastEvent = e;
this._processMovement(e, cursorElement);
if (this.options.autoScroll) {
if (this._cursorElement !== cursorElement) {
this._scrollableParent = findScrollableParent(cursorElement);
this._cursorElement = cursorElement;
}
if (this._scrollableParent[0]) {
var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));
this._scrollCompenstation = $.extend({}, this.hintOffset);
this._scrollVelocity = velocity;
if (velocity.y === 0 && velocity.x === 0) {
clearInterval(this._scrollInterval);
this._scrollInterval = null;
} else if (!this._scrollInterval) {
this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);
}
}
}
if (this.hint) {
this._updateHint(e);
}
},
_processMovement: function (e, cursorElement) {
this._withDropTarget(cursorElement, function (target, targetElement) {
if (!target) {
if (lastDropTarget) {
lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));
lastDropTarget = null;
}
return;
}
if (lastDropTarget) {
if (targetElement === lastDropTarget.targetElement) {
return;
}
lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));
}
target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));
lastDropTarget = extend(target, { targetElement: targetElement });
});
this._trigger(DRAG, extend(e, {
dropTarget: lastDropTarget,
elementUnderCursor: cursorElement
}));
},
_autoScroll: function () {
var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;
if (!parent) {
return;
}
var cursorElement = this._elementUnderCursor(this._lastEvent);
this._processMovement(this._lastEvent, cursorElement);
var yIsScrollable, xIsScrollable;
var isRootNode = parent === scrollableRoot()[0];
if (isRootNode) {
yIsScrollable = document.body.scrollHeight > $window.height();
xIsScrollable = document.body.scrollWidth > $window.width();
} else {
yIsScrollable = parent.offsetHeight <= parent.scrollHeight;
xIsScrollable = parent.offsetWidth <= parent.scrollWidth;
}
var yDelta = parent.scrollTop + velocity.y;
var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;
var xDelta = parent.scrollLeft + velocity.x;
var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;
if (yInBounds) {
parent.scrollTop += velocity.y;
}
if (xInBounds) {
parent.scrollLeft += velocity.x;
}
if (isRootNode && (xInBounds || yInBounds)) {
if (yInBounds) {
compensation.top += velocity.y;
}
if (xInBounds) {
compensation.left += velocity.x;
}
this.hint.css(compensation);
}
},
_end: function (e) {
this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {
if (target) {
target._drop(extend({}, e, { dropTarget: $(targetElement) }));
lastDropTarget = null;
}
});
this._cancel(this._trigger(DRAGEND, e));
},
_cancel: function (isDefaultPrevented) {
var that = this;
that._scrollableParent = null;
this._cursorElement = null;
clearInterval(this._scrollInterval);
that._activated = false;
if (that.hint && !that.dropped) {
setTimeout(function () {
that.hint.stop(true, true);
if (isDefaultPrevented) {
that._afterEndHandler();
} else {
that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);
}
}, 0);
} else {
that._afterEnd();
}
},
_trigger: function (eventName, e) {
var that = this;
return that.trigger(eventName, extend({}, e.event, {
x: e.x,
y: e.y,
currentTarget: that.currentTarget,
initialTarget: e.touch ? e.touch.initialTouch : null,
dropTarget: e.dropTarget,
elementUnderCursor: e.elementUnderCursor
}));
},
_elementUnderCursor: function (e) {
var target = elementUnderCursor(e), hint = this.hint;
if (hint && contains(hint[0], target)) {
hint.hide();
target = elementUnderCursor(e);
if (!target) {
target = elementUnderCursor(e);
}
hint.show();
}
return target;
},
_withDropTarget: function (element, callback) {
var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];
if (targets && targets.length || areas && areas.length) {
result = checkTarget(element, targets, areas);
if (result) {
callback(result.target, result.targetElement);
} else {
callback();
}
}
},
destroy: function () {
var that = this;
Widget.fn.destroy.call(that);
that._afterEnd();
that.userEvents.destroy();
this._scrollableParent = null;
this._cursorElement = null;
clearInterval(this._scrollInterval);
that.currentTarget = null;
},
_afterEnd: function () {
var that = this;
if (that.hint) {
that.hint.remove();
}
delete draggables[that.options.group];
that.trigger('destroy');
that.trigger(HINTDESTROYED);
$(document).off(KEYUP, that._captureEscape);
}
});
kendo.ui.plugin(DropTarget);
kendo.ui.plugin(DropTargetArea);
kendo.ui.plugin(Draggable);
kendo.TapCapture = TapCapture;
kendo.containerBoundaries = containerBoundaries;
extend(kendo.ui, {
Pane: Pane,
PaneDimensions: PaneDimensions,
Movable: Movable
});
function scrollableViewPort(element) {
var root = scrollableRoot()[0], offset, top, left;
if (element[0] === root) {
top = root.scrollTop;
left = root.scrollLeft;
return {
top: top,
left: left,
bottom: top + $window.height(),
right: left + $window.width()
};
} else {
offset = element.offset();
offset.bottom = offset.top + element.height();
offset.right = offset.left + element.width();
return offset;
}
}
function scrollableRoot() {
return $(kendo.support.browser.chrome ? document.body : document.documentElement);
}
function findScrollableParent(element) {
var root = scrollableRoot();
if (!element || element === document.body || element === document.documentElement) {
return root;
}
var parent = $(element)[0];
while (parent && !kendo.isScrollable(parent) && parent !== document.body) {
parent = parent.parentNode;
}
if (parent === document.body) {
return root;
}
return $(parent);
}
function autoScrollVelocity(mouseX, mouseY, rect) {
var velocity = {
x: 0,
y: 0
};
var AUTO_SCROLL_AREA = 50;
if (mouseX - rect.left < AUTO_SCROLL_AREA) {
velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));
} else if (rect.right - mouseX < AUTO_SCROLL_AREA) {
velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);
}
if (mouseY - rect.top < AUTO_SCROLL_AREA) {
velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));
} else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {
velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);
}
return velocity;
}
kendo.ui.Draggable.utils = {
autoScrollVelocity: autoScrollVelocity,
scrollableViewPort: scrollableViewPort,
findScrollableParent: findScrollableParent
};
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.mobile.scroller', [
'kendo.fx',
'kendo.draganddrop'
], f);
}(function () {
var __meta__ = {
id: 'mobile.scroller',
name: 'Scroller',
category: 'mobile',
description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',
depends: [
'fx',
'draganddrop'
]
};
(function ($, undefined) {
var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;
var ZoomSnapBack = Animation.extend({
init: function (options) {
var that = this;
Animation.fn.init.call(that);
extend(that, options);
that.userEvents.bind('gestureend', proxy(that.start, that));
that.tapCapture.bind('press', proxy(that.cancel, that));
},
enabled: function () {
return this.movable.scale < this.dimensions.minScale;
},
done: function () {
return this.dimensions.minScale - this.movable.scale < 0.01;
},
tick: function () {
var movable = this.movable;
movable.scaleWith(1.1);
this.dimensions.rescale(movable.scale);
},
onEnd: function () {
var movable = this.movable;
movable.scaleTo(this.dimensions.minScale);
this.dimensions.rescale(movable.scale);
}
});
var DragInertia = Animation.extend({
init: function (options) {
var that = this;
Animation.fn.init.call(that);
extend(that, options, {
transition: new Transition({
axis: options.axis,
movable: options.movable,
onEnd: function () {
that._end();
}
})
});
that.tapCapture.bind('press', function () {
that.cancel();
});
that.userEvents.bind('end', proxy(that.start, that));
that.userEvents.bind('gestureend', proxy(that.start, that));
that.userEvents.bind('tap', proxy(that.onEnd, that));
},
onCancel: function () {
this.transition.cancel();
},
freeze: function (location) {
var that = this;
that.cancel();
that._moveTo(location);
},
onEnd: function () {
var that = this;
if (that.paneAxis.outOfBounds()) {
that._snapBack();
} else {
that._end();
}
},
done: function () {
return abs(this.velocity) < 1;
},
start: function (e) {
var that = this, velocity;
if (!that.dimension.enabled) {
return;
}
if (that.paneAxis.outOfBounds()) {
that._snapBack();
} else {
velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;
that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);
that.tapCapture.captureNext();
Animation.fn.start.call(that);
}
},
tick: function () {
var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;
if (!that.elastic && dimension.outOfBounds(location)) {
location = Math.max(Math.min(location, dimension.max), dimension.min);
that.velocity = 0;
}
that.movable.moveAxis(that.axis, location);
},
_end: function () {
this.tapCapture.cancelCapture();
this.end();
},
_snapBack: function () {
var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;
that._moveTo(snapBack);
},
_moveTo: function (location) {
this.transition.moveTo({
location: location,
duration: SNAPBACK_DURATION,
ease: Transition.easeOutExpo
});
}
});
var AnimatedScroller = Animation.extend({
init: function (options) {
var that = this;
kendo.effects.Animation.fn.init.call(this);
extend(that, options, {
origin: {},
destination: {},
offset: {}
});
},
tick: function () {
this._updateCoordinates();
this.moveTo(this.origin);
},
done: function () {
return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;
},
onEnd: function () {
this.moveTo(this.destination);
if (this.callback) {
this.callback.call();
}
},
setCoordinates: function (from, to) {
this.offset = {};
this.origin = from;
this.destination = to;
},
setCallback: function (callback) {
if (callback && kendo.isFunction(callback)) {
this.callback = callback;
} else {
callback = undefined;
}
},
_updateCoordinates: function () {
this.offset = {
x: (this.destination.x - this.origin.x) / 4,
y: (this.destination.y - this.origin.y) / 4
};
this.origin = {
y: this.origin.y + this.offset.y,
x: this.origin.x + this.offset.x
};
}
});
var ScrollBar = Class.extend({
init: function (options) {
var that = this, horizontal = options.axis === 'x', element = $('<div class="km-touch-scrollbar km-' + (horizontal ? 'horizontal' : 'vertical') + '-scrollbar" />');
extend(that, options, {
element: element,
elementSize: 0,
movable: new Movable(element),
scrollMovable: options.movable,
alwaysVisible: options.alwaysVisible,
size: horizontal ? 'width' : 'height'
});
that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));
that.container.append(element);
if (options.alwaysVisible) {
that.show();
}
},
refresh: function () {
var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);
if (sizeRatio >= 1) {
this.element.css('display', 'none');
} else {
this.element.css('display', '');
}
if (position + size > paneSize) {
size = paneSize - position;
} else if (position < 0) {
size += position;
position = 0;
}
if (that.elementSize != size) {
that.element.css(that.size, size + 'px');
that.elementSize = size;
}
that.movable.moveAxis(axis, position);
},
show: function () {
this.element.css({
opacity: SCROLLBAR_OPACITY,
visibility: 'visible'
});
},
hide: function () {
if (!this.alwaysVisible) {
this.element.css({ opacity: 0 });
}
}
});
var Scroller = Widget.extend({
init: function (element, options) {
var that = this;
Widget.fn.init.call(that, element, options);
element = that.element;
that._native = that.options.useNative && kendo.support.hasNativeScrolling;
if (that._native) {
element.addClass('km-native-scroller').prepend('<div class="km-scroll-header"/>');
extend(that, {
scrollElement: element,
fixedContainer: element.children().first()
});
return;
}
element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('<div class="km-scroll-container"/>').prepend('<div class="km-scroll-header"/>');
var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({
element: inner,
container: element,
forcedEnabled: that.options.zoom
}), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {
fastTap: true,
allowSelection: true,
preventDragEvent: true,
captureUpIfMoved: true,
multiTouch: that.options.zoom,
start: function (e) {
dimensions.refresh();
var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;
if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {
userEvents.capture();
} else {
userEvents.cancel();
}
}
}), pane = new Pane({
movable: movable,
dimensions: dimensions,
userEvents: userEvents,
elastic: that.options.elastic
}), zoomSnapBack = new ZoomSnapBack({
movable: movable,
dimensions: dimensions,
userEvents: userEvents,
tapCapture: tapCapture
}), animatedScroller = new AnimatedScroller({
moveTo: function (coordinates) {
that.scrollTo(coordinates.x, coordinates.y);
}
});
movable.bind(CHANGE, function () {
that.scrollTop = -movable.y;
that.scrollLeft = -movable.x;
that.trigger(SCROLL, {
scrollTop: that.scrollTop,
scrollLeft: that.scrollLeft
});
});
if (that.options.mousewheelScrolling) {
element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));
}
extend(that, {
movable: movable,
dimensions: dimensions,
zoomSnapBack: zoomSnapBack,
animatedScroller: animatedScroller,
userEvents: userEvents,
pane: pane,
tapCapture: tapCapture,
pulled: false,
enabled: true,
scrollElement: inner,
scrollTop: 0,
scrollLeft: 0,
fixedContainer: element.children().first()
});
that._initAxis('x');
that._initAxis('y');
that._wheelEnd = function () {
that._wheel = false;
that.userEvents.end(0, that._wheelY);
};
dimensions.refresh();
if (that.options.pullToRefresh) {
that._initPullToRefresh();
}
},
_wheelScroll: function (e) {
if (!this._wheel) {
this._wheel = true;
this._wheelY = 0;
this.userEvents.press(0, this._wheelY);
}
clearTimeout(this._wheelTimeout);
this._wheelTimeout = setTimeout(this._wheelEnd, 50);
var delta = kendo.wheelDeltaY(e);
if (delta) {
this._wheelY += delta;
this.userEvents.move(0, this._wheelY);
}
e.preventDefault();
},
makeVirtual: function () {
this.dimensions.y.makeVirtual();
},
virtualSize: function (min, max) {
this.dimensions.y.virtualSize(min, max);
},
height: function () {
return this.dimensions.y.size;
},
scrollHeight: function () {
return this.scrollElement[0].scrollHeight;
},
scrollWidth: function () {
return this.scrollElement[0].scrollWidth;
},
options: {
name: 'Scroller',
zoom: false,
pullOffset: 140,
visibleScrollHints: false,
elastic: true,
useNative: false,
mousewheelScrolling: true,
avoidScrolling: function () {
return false;
},
pullToRefresh: false,
messages: {
pullTemplate: 'Pull to refresh',
releaseTemplate: 'Release to refresh',
refreshTemplate: 'Refreshing'
}
},
events: [
PULL,
SCROLL,
RESIZE
],
_resize: function () {
if (!this._native) {
this.contentResized();
}
},
setOptions: function (options) {
var that = this;
Widget.fn.setOptions.call(that, options);
if (options.pullToRefresh) {
that._initPullToRefresh();
}
},
reset: function () {
if (this._native) {
this.scrollElement.scrollTop(0);
} else {
this.movable.moveTo({
x: 0,
y: 0
});
this._scale(1);
}
},
contentResized: function () {
this.dimensions.refresh();
if (this.pane.x.outOfBounds()) {
this.movable.moveAxis('x', this.dimensions.x.min);
}
if (this.pane.y.outOfBounds()) {
this.movable.moveAxis('y', this.dimensions.y.min);
}
},
zoomOut: function () {
var dimensions = this.dimensions;
dimensions.refresh();
this._scale(dimensions.fitScale);
this.movable.moveTo(dimensions.centerCoordinates());
},
enable: function () {
this.enabled = true;
},
disable: function () {
this.enabled = false;
},
scrollTo: function (x, y) {
if (this._native) {
this.scrollElement.scrollLeft(abs(x));
this.scrollElement.scrollTop(abs(y));
} else {
this.dimensions.refresh();
this.movable.moveTo({
x: x,
y: y
});
}
},
animatedScrollTo: function (x, y, callback) {
var from, to;
if (this._native) {
this.scrollTo(x, y);
} else {
from = {
x: this.movable.x,
y: this.movable.y
};
to = {
x: x,
y: y
};
this.animatedScroller.setCoordinates(from, to);
this.animatedScroller.setCallback(callback);
this.animatedScroller.start();
}
},
pullHandled: function () {
var that = this;
that.refreshHint.removeClass(REFRESHCLASS);
that.hintContainer.html(that.pullTemplate({}));
that.yinertia.onEnd();
that.xinertia.onEnd();
that.userEvents.cancel();
},
destroy: function () {
Widget.fn.destroy.call(this);
if (this.userEvents) {
this.userEvents.destroy();
}
},
_scale: function (scale) {
this.dimensions.rescale(scale);
this.movable.scaleTo(scale);
},
_initPullToRefresh: function () {
var that = this;
that.dimensions.y.forceEnabled();
that.pullTemplate = kendo.template(that.options.messages.pullTemplate);
that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);
that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);
that.scrollElement.prepend('<span class="km-scroller-pull"><span class="km-icon"></span><span class="km-loading-left"></span><span class="km-loading-right"></span><span class="km-template">' + that.pullTemplate({}) + '</span></span>');
that.refreshHint = that.scrollElement.children().first();
that.hintContainer = that.refreshHint.children('.km-template');
that.pane.y.bind('change', proxy(that._paneChange, that));
that.userEvents.bind('end', proxy(that._dragEnd, that));
},
_dragEnd: function () {
var that = this;
if (!that.pulled) {
return;
}
that.pulled = false;
that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);
that.hintContainer.html(that.refreshTemplate({}));
that.yinertia.freeze(that.options.pullOffset / 2);
that.trigger('pull');
},
_paneChange: function () {
var that = this;
if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {
if (!that.pulled) {
that.pulled = true;
that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);
that.hintContainer.html(that.releaseTemplate({}));
}
} else if (that.pulled) {
that.pulled = false;
that.refreshHint.removeClass(RELEASECLASS);
that.hintContainer.html(that.pullTemplate({}));
}
},
_initAxis: function (axis) {
var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({
axis: axis,
movable: movable,
dimension: dimension,
container: that.element,
alwaysVisible: that.options.visibleScrollHints
});
dimension.bind(CHANGE, function () {
scrollBar.refresh();
});
paneAxis.bind(CHANGE, function () {
scrollBar.show();
});
that[axis + 'inertia'] = new DragInertia({
axis: axis,
paneAxis: paneAxis,
movable: movable,
tapCapture: tapCapture,
userEvents: that.userEvents,
dimension: dimension,
elastic: that.options.elastic,
friction: that.options.friction || FRICTION,
velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,
end: function () {
scrollBar.hide();
that.trigger('scrollEnd', {
axis: axis,
scrollTop: that.scrollTop,
scrollLeft: that.scrollLeft
});
}
});
}
});
ui.plugin(Scroller);
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.popup', ['kendo.core'], f);
}(function () {
var __meta__ = {
id: 'popup',
name: 'Pop-up',
category: 'framework',
depends: ['core'],
advanced: true
};
(function ($, undefined) {
var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, support = kendo.support, getOffset = kendo.getOffset, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [
'font-size',
'font-family',
'font-stretch',
'font-style',
'font-weight',
'line-height'
];
function contains(container, target) {
return container === target || $.contains(container, target);
}
var Popup = Widget.extend({
init: function (element, options) {
var that = this, parentPopup;
options = options || {};
if (options.isRtl) {
options.origin = options.origin || BOTTOM + ' ' + RIGHT;
options.position = options.position || TOP + ' ' + RIGHT;
}
Widget.fn.init.call(that, element, options);
element = that.element;
options = that.options;
that.collisions = options.collision ? options.collision.split(' ') : [];
that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());
if (that.collisions.length === 1) {
that.collisions.push(that.collisions[0]);
}
parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');
options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || BODY);
that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).on('mouseenter' + NS, function () {
that._hovered = true;
}).on('mouseleave' + NS, function () {
that._hovered = false;
});
that.wrapper = $();
if (options.animation === false) {
options.animation = {
open: { effects: {} },
close: {
hide: true,
effects: {}
}
};
}
extend(options.animation.open, {
complete: function () {
that.wrapper.css({ overflow: VISIBLE });
that._activated = true;
that._trigger(ACTIVATE);
}
});
extend(options.animation.close, {
complete: function () {
that._animationClose();
}
});
that._mousedownProxy = function (e) {
that._mousedown(e);
};
if (support.mobileOS.android) {
that._resizeProxy = function (e) {
setTimeout(function () {
that._resize(e);
}, 600);
};
} else {
that._resizeProxy = function (e) {
that._resize(e);
};
}
if (options.toggleTarget) {
$(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));
}
},
events: [
OPEN,
ACTIVATE,
CLOSE,
DEACTIVATE
],
options: {
name: 'Popup',
toggleEvent: 'click',
origin: BOTTOM + ' ' + LEFT,
position: TOP + ' ' + LEFT,
anchor: BODY,
appendTo: null,
collision: 'flip fit',
viewport: window,
copyAnchorStyles: true,
autosize: false,
modal: false,
adjustSize: {
width: 0,
height: 0
},
animation: {
open: {
effects: 'slideIn:down',
transition: true,
duration: 200
},
close: {
duration: 100,
hide: true
}
}
},
_animationClose: function () {
var that = this;
var location = that.wrapper.data(LOCATION);
that.wrapper.hide();
if (location) {
that.wrapper.css(location);
}
if (that.options.anchor != BODY) {
that._hideDirClass();
}
that._closing = false;
that._trigger(DEACTIVATE);
},
destroy: function () {
var that = this, options = that.options, element = that.element.off(NS), parent;
Widget.fn.destroy.call(that);
if (options.toggleTarget) {
$(options.toggleTarget).off(NS);
}
if (!options.modal) {
DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);
that._toggleResize(false);
}
kendo.destroy(that.element.children());
element.removeData();
if (options.appendTo[0] === document.body) {
parent = element.parent('.k-animation-container');
if (parent[0]) {
parent.remove();
} else {
element.remove();
}
}
},
open: function (x, y) {
var that = this, fixed = {
isFixed: !isNaN(parseInt(y, 10)),
x: x,
y: y
}, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');
if (!that.visible()) {
if (options.copyAnchorStyles) {
if (mobile && styles[0] == 'font-size') {
styles.shift();
}
element.css(kendo.getComputedStyles(anchor[0], styles));
}
if (element.data('animating') || that._trigger(OPEN)) {
return;
}
that._activated = false;
if (!options.modal) {
DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy).bind(that.downEvent, that._mousedownProxy);
that._toggleResize(false);
that._toggleResize(true);
}
that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({
overflow: HIDDEN,
display: 'block',
position: ABSOLUTE
});
if (support.mobileOS.android) {
wrapper.css(TRANSFORM, 'translatez(0)');
}
wrapper.css(POSITION);
if ($(options.appendTo)[0] == document.body) {
wrapper.css(TOP, '-10000px');
}
that.flipped = that._position(fixed);
animation = that._openAnimation();
if (options.anchor != BODY) {
that._showDirClass(animation);
}
element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation);
}
},
_openAnimation: function () {
var animation = extend(true, {}, this.options.animation.open);
animation.effects = kendo.parseEffects(animation.effects, this.flipped);
return animation;
},
_hideDirClass: function () {
var anchor = $(this.options.anchor);
var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [
'',
'down'
])[1];
var dirClass = ACTIVEBORDER + '-' + direction;
anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);
this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);
},
_showDirClass: function (animation) {
var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';
var dirClass = ACTIVEBORDER + '-' + direction;
$(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);
this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);
},
position: function () {
if (this.visible()) {
this.flipped = this._position();
}
},
toggle: function () {
var that = this;
that[that.visible() ? CLOSE : OPEN]();
},
visible: function () {
return this.element.is(':' + VISIBLE);
},
close: function (skipEffects) {
var that = this, options = that.options, wrap, animation, openEffects, closeEffects;
if (that.visible()) {
wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();
that._toggleResize(false);
if (that._closing || that._trigger(CLOSE)) {
that._toggleResize(true);
return;
}
that.element.find('.k-popup').each(function () {
var that = $(this), popup = that.data('kendoPopup');
if (popup) {
popup.close(skipEffects);
}
});
DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);
if (skipEffects) {
animation = {
hide: true,
effects: {}
};
} else {
animation = extend(true, {}, options.animation.close);
openEffects = that.element.data(EFFECTS);
closeEffects = animation.effects;
if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {
animation.effects = openEffects;
animation.reverse = true;
}
that._closing = true;
}
that.element.kendoStop(true);
wrap.css({ overflow: HIDDEN });
that.element.kendoAnimate(animation);
}
},
_trigger: function (ev) {
return this.trigger(ev, { type: ev });
},
_resize: function (e) {
var that = this;
if (support.resize.indexOf(e.type) !== -1) {
clearTimeout(that._resizeTimeout);
that._resizeTimeout = setTimeout(function () {
that._position();
that._resizeTimeout = null;
}, 50);
} else {
if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {
that.close();
}
}
},
_toggleResize: function (toggle) {
var method = toggle ? 'on' : 'off';
var eventNames = support.resize;
if (!(support.mobileOS.ios || support.mobileOS.android)) {
eventNames += ' ' + SCROLL;
}
this._scrollableParents()[method](SCROLL, this._resizeProxy);
WINDOW[method](eventNames, this._resizeProxy);
},
_mousedown: function (e) {
var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;
popup = popup[0];
if (!mobile && popup && popup !== that.element[0]) {
return;
}
if ($(e.target).closest('a').data('rel') === 'popover') {
return;
}
if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {
that.close();
}
},
_fit: function (position, size, viewPortSize) {
var output = 0;
if (position + size > viewPortSize) {
output = viewPortSize - (position + size);
}
if (position < 0) {
output = -position;
}
return output;
},
_flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {
var output = 0;
boxSize = boxSize || size;
if (position !== origin && position !== CENTER && origin !== CENTER) {
if (offset + boxSize > viewPortSize) {
output += -(anchorSize + size);
}
if (offset + output < 0) {
output += anchorSize + size;
}
}
return output;
},
_scrollableParents: function () {
return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {
return kendo.isScrollable(element);
});
},
_position: function (fixed) {
var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), viewportOffset = viewport.offset(), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, zoomLevel = support.zoomLevel(), siblingContainer, parents, parentZIndex, zIndex = 10002, isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), idx = 0, docEl = document.documentElement, length, viewportWidth, viewportHeight;
viewportWidth = isWindow ? window.innerWidth : viewport.width();
viewportHeight = isWindow ? window.innerHeight : viewport.height();
if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {
viewportWidth -= kendo.support.scrollbar();
}
siblingContainer = anchor.parents().filter(wrapper.siblings());
if (siblingContainer[0]) {
parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);
if (parentZIndex) {
zIndex = parentZIndex + 10;
} else {
parents = anchor.parentsUntil(siblingContainer);
for (length = parents.length; idx < length; idx++) {
parentZIndex = Number($(parents[idx]).css('zIndex'));
if (parentZIndex && zIndex < parentZIndex) {
zIndex = parentZIndex + 10;
}
}
}
}
wrapper.css('zIndex', zIndex);
if (fixed && fixed.isFixed) {
wrapper.css({
left: fixed.x,
top: fixed.y
});
} else {
wrapper.css(that._align(origins, positions));
}
var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');
if (anchorParent.length) {
pos = getOffset(wrapper, POSITION, true);
offset = getOffset(wrapper);
}
if (viewport[0] === window) {
offset.top -= window.pageYOffset || document.documentElement.scrollTop || 0;
offset.left -= window.pageXOffset || document.documentElement.scrollLeft || 0;
} else {
offset.top -= viewportOffset.top;
offset.left -= viewportOffset.left;
}
if (!that.wrapper.data(LOCATION)) {
wrapper.data(LOCATION, extend({}, pos));
}
var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;
if (collisions[0] === 'fit') {
location.top += that._fit(offsets.top, wrapper.outerHeight() + adjustSize.height, viewportHeight / zoomLevel);
}
if (collisions[1] === 'fit') {
location.left += that._fit(offsets.left, wrapper.outerWidth() + adjustSize.width, viewportWidth / zoomLevel);
}
var flipPos = extend({}, location);
var elementHeight = element.outerHeight();
var wrapperHeight = wrapper.outerHeight();
if (!wrapper.height() && elementHeight) {
wrapperHeight = wrapperHeight + elementHeight;
}
if (collisions[0] === 'flip') {
location.top += that._flip(offsets.top, elementHeight, anchor.outerHeight(), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);
}
if (collisions[1] === 'flip') {
location.left += that._flip(offsets.left, element.outerWidth(), anchor.outerWidth(), viewportWidth / zoomLevel, origins[1], positions[1], wrapper.outerWidth());
}
element.css(POSITION, ABSOLUTE);
wrapper.css(location);
return location.left != flipPos.left || location.top != flipPos.top;
},
_align: function (origin, position) {
var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = element.outerWidth(), height = element.outerHeight(), anchorWidth = anchor.outerWidth(), anchorHeight = anchor.outerHeight(), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;
if (appendTo[0] != document.body) {
appendToOffset = getOffset(appendTo);
top -= appendToOffset.top;
left -= appendToOffset.left;
}
if (verticalOrigin === BOTTOM) {
top += anchorHeight;
}
if (verticalOrigin === CENTER) {
top += round(anchorHeight / 2);
}
if (verticalPosition === BOTTOM) {
top -= height;
}
if (verticalPosition === CENTER) {
top -= round(height / 2);
}
if (horizontalOrigin === RIGHT) {
left += anchorWidth;
}
if (horizontalOrigin === CENTER) {
left += round(anchorWidth / 2);
}
if (horizontalPosition === RIGHT) {
left -= width;
}
if (horizontalPosition === CENTER) {
left -= round(width / 2);
}
return {
top: top,
left: left
};
}
});
ui.plugin(Popup);
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.data.odata', ['kendo.core'], f);
}(function () {
var __meta__ = {
id: 'data.odata',
name: 'OData',
category: 'framework',
depends: ['core'],
hidden: true
};
(function ($, undefined) {
var kendo = window.kendo, extend = $.extend, odataFilters = {
eq: 'eq',
neq: 'ne',
gt: 'gt',
gte: 'ge',
lt: 'lt',
lte: 'le',
contains: 'substringof',
doesnotcontain: 'substringof',
endswith: 'endswith',
startswith: 'startswith',
isnull: 'eq',
isnotnull: 'ne',
isempty: 'eq',
isnotempty: 'ne'
}, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {
pageSize: $.noop,
page: $.noop,
filter: function (params, filter, useVersionFour) {
if (filter) {
filter = toOdataFilter(filter, useVersionFour);
if (filter) {
params.$filter = filter;
}
}
},
sort: function (params, orderby) {
var expr = $.map(orderby, function (value) {
var order = value.field.replace(/\./g, '/');
if (value.dir === 'desc') {
order += ' desc';
}
return order;
}).join(',');
if (expr) {
params.$orderby = expr;
}
},
skip: function (params, skip) {
if (skip) {
params.$skip = skip;
}
},
take: function (params, take) {
if (take) {
params.$top = take;
}
}
}, defaultDataType = { read: { dataType: 'jsonp' } };
function toOdataFilter(filter, useOdataFour) {
var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;
for (idx = 0, length = filters.length; idx < length; idx++) {
filter = filters[idx];
field = filter.field;
value = filter.value;
operator = filter.operator;
if (filter.filters) {
filter = toOdataFilter(filter, useOdataFour);
} else {
ignoreCase = filter.ignoreCase;
field = field.replace(/\./g, '/');
filter = odataFilters[operator];
if (useOdataFour) {
filter = odataFiltersVersionFour[operator];
}
if (operator === 'isnull' || operator === 'isnotnull') {
filter = kendo.format('{0} {1} null', field, filter);
} else if (operator === 'isempty' || operator === 'isnotempty') {
filter = kendo.format('{0} {1} \'\'', field, filter);
} else if (filter && value !== undefined) {
type = $.type(value);
if (type === 'string') {
format = '\'{1}\'';
value = value.replace(/'/g, '\'\'');
if (ignoreCase === true) {
field = 'tolower(' + field + ')';
}
} else if (type === 'date') {
if (useOdataFour) {
format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';
} else {
format = 'datetime\'{1:yyyy-MM-ddTHH:mm:ss}\'';
}
} else {
format = '{1}';
}
if (filter.length > 3) {
if (filter !== 'substringof') {
format = '{0}({2},' + format + ')';
} else {
format = '{0}(' + format + ',{2})';
if (operator === 'doesnotcontain') {
if (useOdataFour) {
format = '{0}({2},\'{1}\') eq -1';
filter = 'indexof';
} else {
format += ' eq false';
}
}
}
} else {
format = '{2} {0} ' + format;
}
filter = kendo.format(format, filter, value, field);
}
}
result.push(filter);
}
filter = result.join(' ' + logic + ' ');
if (result.length > 1) {
filter = '(' + filter + ')';
}
return filter;
}
function stripMetadata(obj) {
for (var name in obj) {
if (name.indexOf('@odata') === 0) {
delete obj[name];
}
}
}
extend(true, kendo.data, {
schemas: {
odata: {
type: 'json',
data: function (data) {
return data.d.results || [data.d];
},
total: 'd.__count'
}
},
transports: {
odata: {
read: {
cache: true,
dataType: 'jsonp',
jsonp: '$callback'
},
update: {
cache: true,
dataType: 'json',
contentType: 'application/json',
type: 'PUT'
},
create: {
cache: true,
dataType: 'json',
contentType: 'application/json',
type: 'POST'
},
destroy: {
cache: true,
dataType: 'json',
type: 'DELETE'
},
parameterMap: function (options, type, useVersionFour) {
var params, value, option, dataType;
options = options || {};
type = type || 'read';
dataType = (this.options || defaultDataType)[type];
dataType = dataType ? dataType.dataType : 'json';
if (type === 'read') {
params = { $inlinecount: 'allpages' };
if (dataType != 'json') {
params.$format = 'json';
}
for (option in options) {
if (mappers[option]) {
mappers[option](params, options[option], useVersionFour);
} else {
params[option] = options[option];
}
}
} else {
if (dataType !== 'json') {
throw new Error('Only json dataType can be used for ' + type + ' operation.');
}
if (type !== 'destroy') {
for (option in options) {
value = options[option];
if (typeof value === 'number') {
options[option] = value + '';
}
}
params = kendo.stringify(options);
}
}
return params;
}
}
}
});
extend(true, kendo.data, {
schemas: {
'odata-v4': {
type: 'json',
data: function (data) {
data = $.extend({}, data);
stripMetadata(data);
if (data.value) {
return data.value;
}
return [data];
},
total: function (data) {
return data['@odata.count'];
}
}
},
transports: {
'odata-v4': {
read: {
cache: true,
dataType: 'json'
},
update: {
cache: true,
dataType: 'json',
contentType: 'application/json;IEEE754Compatible=true',
type: 'PUT'
},
create: {
cache: true,
dataType: 'json',
contentType: 'application/json;IEEE754Compatible=true',
type: 'POST'
},
destroy: {
cache: true,
dataType: 'json',
type: 'DELETE'
},
parameterMap: function (options, type) {
var result = kendo.data.transports.odata.parameterMap(options, type, true);
if (type == 'read') {
result.$count = true;
delete result.$inlinecount;
}
return result;
}
}
}
});
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.data.xml', ['kendo.core'], f);
}(function () {
var __meta__ = {
id: 'data.xml',
name: 'XML',
category: 'framework',
depends: ['core'],
hidden: true
};
(function ($, undefined) {
var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;
var XmlDataReader = Class.extend({
init: function (options) {
var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;
if (model) {
if (isPlainObject(model)) {
var base = options.modelBase || kendo.data.Model;
if (model.fields) {
each(model.fields, function (field, value) {
if (isPlainObject(value) && value.field) {
if (!$.isFunction(value.field)) {
value = extend(value, { field: that.getter(value.field) });
}
} else {
value = { field: that.getter(value) };
}
model.fields[field] = value;
});
}
var id = model.id;
if (id) {
var idField = {};
idField[that.xpathToMember(id, true)] = { field: that.getter(id) };
model.fields = extend(idField, model.fields);
model.id = that.xpathToMember(id);
}
model = base.define(model);
}
that.model = model;
}
if (total) {
if (typeof total == 'string') {
total = that.getter(total);
that.total = function (data) {
return parseInt(total(data), 10);
};
} else if (typeof total == 'function') {
that.total = total;
}
}
if (errors) {
if (typeof errors == 'string') {
errors = that.getter(errors);
that.errors = function (data) {
return errors(data) || null;
};
} else if (typeof errors == 'function') {
that.errors = errors;
}
}
if (data) {
if (typeof data == 'string') {
data = that.xpathToMember(data);
that.data = function (value) {
var result = that.evaluate(value, data), modelInstance;
result = isArray(result) ? result : [result];
if (that.model && model.fields) {
modelInstance = new that.model();
return map(result, function (value) {
if (value) {
var record = {}, field;
for (field in model.fields) {
record[field] = modelInstance._parse(field, model.fields[field].field(value));
}
return record;
}
});
}
return result;
};
} else if (typeof data == 'function') {
that.data = data;
}
}
if (typeof parse == 'function') {
var xmlParse = that.parse;
that.parse = function (data) {
var xml = parse.call(that, data);
return xmlParse.call(that, xml);
};
}
if (typeof serialize == 'function') {
that.serialize = serialize;
}
},
total: function (result) {
return this.data(result).length;
},
errors: function (data) {
return data ? data.errors : null;
},
serialize: function (data) {
return data;
},
parseDOM: function (element) {
var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;
for (idx = 0; idx < attributeCount; idx++) {
attribute = attributes[idx];
result['@' + attribute.nodeName] = attribute.nodeValue;
}
for (node = element.firstChild; node; node = node.nextSibling) {
nodeType = node.nodeType;
if (nodeType === 3 || nodeType === 4) {
result['#text'] = node.nodeValue;
} else if (nodeType === 1) {
parsedNode = this.parseDOM(node);
nodeName = node.nodeName;
member = result[nodeName];
if (isArray(member)) {
member.push(parsedNode);
} else if (member !== undefined) {
member = [
member,
parsedNode
];
} else {
member = parsedNode;
}
result[nodeName] = member;
}
}
return result;
},
evaluate: function (value, expression) {
var members = expression.split('.'), member, result, length, intermediateResult, idx;
while (member = members.shift()) {
value = value[member];
if (isArray(value)) {
result = [];
expression = members.join('.');
for (idx = 0, length = value.length; idx < length; idx++) {
intermediateResult = this.evaluate(value[idx], expression);
intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];
result.push.apply(result, intermediateResult);
}
return result;
}
}
return value;
},
parse: function (xml) {
var documentElement, tree, result = {};
documentElement = xml.documentElement || $.parseXML(xml).documentElement;
tree = this.parseDOM(documentElement);
result[documentElement.nodeName] = tree;
return result;
},
xpathToMember: function (member, raw) {
if (!member) {
return '';
}
member = member.replace(/^\//, '').replace(/\//g, '.');
if (member.indexOf('@') >= 0) {
return member.replace(/\.?(@.*)/, raw ? '$1' : '["$1"]');
}
if (member.indexOf('text()') >= 0) {
return member.replace(/(\.?text\(\))/, raw ? '#text' : '["#text"]');
}
return member;
},
getter: function (member) {
return getter(this.xpathToMember(member), true);
}
});
$.extend(true, kendo.data, {
XmlDataReader: XmlDataReader,
readers: { xml: XmlDataReader }
});
}(window.kendo.jQuery));
return window.kendo;
}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {
(a3 || a2)();
}));
/**
* Copyright 2016 Telerik AD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (f, define) {
define('kendo.data', [
'kendo.core',
'kendo.data.odata',
'kendo.data.xml'
], f);
}(function () {
var __meta__ = {
id: 'data',
name: 'Data source',
category: 'framework',
description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',
depends: ['core'],
features: [
{
id: 'data-odata',
name: 'OData',
description: 'Support for accessing Open Data Protocol (OData) services.',
depends: ['data.odata']
},
{
id: 'data-signalr',
name: 'SignalR',
description: 'Support for binding to SignalR hubs.',
depends: ['data.signalr']
},
{
id: 'data-XML',
name: 'XML',
description: 'Support for binding to XML.',
depends: ['data.xml']
}
]
};
(function ($, undefined) {
var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [
CREATE,
READ,
UPDATE,
DESTROY
], identity = function (o) {
return o;
}, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\/Date\((.*?)\)\/$/, newLineRegExp = /(\r+|\n+)/g, quoteRegExp = /(?=['\\])/g;
var ObservableArray = Observable.extend({
init: function (array, type) {
var that = this;
that.type = type || ObservableObject;
Observable.fn.init.call(that);
that.length = array.length;
that.wrapAll(array, that);
},
at: function (index) {
return this[index];
},
toJSON: function () {
var idx, length = this.length, value, json = new Array(length);
for (idx = 0; idx < length; idx++) {
value = this[idx];
if (value instanceof ObservableObject) {
value = value.toJSON();
}
json[idx] = value;
}
return json;
},
parent: noop,
wrapAll: function (source, target) {
var that = this, idx, length, parent = function () {
return that;
};
target = target || [];
for (idx = 0, length = source.length; idx < length; idx++) {
target[idx] = that.wrap(source[idx], parent);
}
return target;
},
wrap: function (object, parent) {
var that = this, observable;
if (object !== null && toString.call(object) === '[object Object]') {
observable = object instanceof that.type || object instanceof Model;
if (!observable) {
object = object instanceof ObservableObject ? object.toJSON() : object;
object = new that.type(object);
}
object.parent = parent;
object.bind(CHANGE, function (e) {
that.trigger(CHANGE, {
field: e.field,
node: e.node,
index: e.index,
items: e.items || [this],
action: e.node ? e.action || 'itemloaded' : 'itemchange'
});
});
}
return object;
},
push: function () {
var index = this.length, items = this.wrapAll(arguments), result;
result = push.apply(this, items);
this.trigger(CHANGE, {
action: 'add',
index: index,
items: items
});
return result;
},
slice: slice,
sort: [].sort,
join: join,
pop: function () {
var length = this.length, result = pop.apply(this);
if (length) {
this.trigger(CHANGE, {
action: 'remove',
index: length - 1,
items: [result]
});
}
return result;
},
splice: function (index, howMany, item) {
var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;
result = splice.apply(this, [
index,
howMany
].concat(items));
if (result.length) {
this.trigger(CHANGE, {
action: 'remove',
index: index,
items: result
});
for (i = 0, len = result.length; i < len; i++) {
if (result[i] && result[i].children) {
result[i].unbind(CHANGE);
}
}
}
if (item) {
this.trigger(CHANGE, {
action: 'add',
index: index,
items: items
});
}
return result;
},
shift: function () {
var length = this.length, result = shift.apply(this);
if (length) {
this.trigger(CHANGE, {
action: 'remove',
index: 0,
items: [result]
});
}
return result;
},
unshift: function () {
var items = this.wrapAll(arguments), result;
result = unshift.apply(this, items);
this.trigger(CHANGE, {
action: 'add',
index: 0,
items: items
});
return result;
},
indexOf: function (item) {
var that = this, idx, length;
for (idx = 0, length = that.length; idx < length; idx++) {
if (that[idx] === item) {
return idx;
}
}
return -1;
},
forEach: function (callback) {
var idx = 0, length = this.length;
for (; idx < length; idx++) {
callback(this[idx], idx, this);
}
},
map: function (callback) {
var idx = 0, result = [], length = this.length;
for (; idx < length; idx++) {
result[idx] = callback(this[idx], idx, this);
}
return result;
},
reduce: function (callback) {
var idx = 0, result, length = this.length;
if (arguments.length == 2) {
result = arguments[1];
} else if (idx < length) {
result = this[idx++];
}
for (; idx < length; idx++) {
result = callback(result, this[idx], idx, this);
}
return result;
},
reduceRight: function (callback) {
var idx = this.length - 1, result;
if (arguments.length == 2) {
result = arguments[1];
} else if (idx > 0) {
result = this[idx--];
}
for (; idx >= 0; idx--) {
result = callback(result, this[idx], idx, this);
}
return result;
},
filter: function (callback) {
var idx = 0, result = [], item, length = this.length;
for (; idx < length; idx++) {
item = this[idx];
if (callback(item, idx, this)) {
result[result.length] = item;
}
}
return result;
},
find: function (callback) {
var idx = 0, item, length = this.length;
for (; idx < length; idx++) {
item = this[idx];
if (callback(item, idx, this)) {
return item;
}
}
},
every: function (callback) {
var idx = 0, item, length = this.length;
for (; idx < length; idx++) {
item = this[idx];
if (!callback(item, idx, this)) {
return false;
}
}
return true;
},
some: function (callback) {
var idx = 0, item, length = this.length;
for (; idx < length; idx++) {
item = this[idx];
if (callback(item, idx, this)) {
return true;
}
}
return false;
},
remove: function (item) {
var idx = this.indexOf(item);
if (idx !== -1) {
this.splice(idx, 1);
}
},
empty: function () {
this.splice(0, this.length);
}
});
var LazyObservableArray = ObservableArray.extend({
init: function (data, type) {
Observable.fn.init.call(this);
this.type = type || ObservableObject;
for (var idx = 0; idx < data.length; idx++) {
this[idx] = data[idx];
}
this.length = idx;
this._parent = proxy(function () {
return this;
}, this);
},
at: function (index) {
var item = this[index];
if (!(item instanceof this.type)) {
item = this[index] = this.wrap(item, this._parent);
} else {
item.parent = this._parent;
}
return item;
}
});
function eventHandler(context, type, field, prefix) {
return function (e) {
var event = {}, key;
for (key in e) {
event[key] = e[key];
}
if (prefix) {
event.field = field + '.' + e.field;
} else {
event.field = field;
}
if (type == CHANGE && context._notifyChange) {
context._notifyChange(event);
}
context.trigger(type, event);
};
}
var ObservableObject = Observable.extend({
init: function (value) {
var that = this, member, field, parent = function () {
return that;
};
Observable.fn.init.call(this);
this._handlers = {};
for (field in value) {
member = value[field];
if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {
member = that.wrap(member, field, parent);
}
that[field] = member;
}
that.uid = kendo.guid();
},
shouldSerialize: function (field) {
return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';
},
forEach: function (f) {
for (var i in this) {
if (this.shouldSerialize(i)) {
f(this[i], i);
}
}
},
toJSON: function () {
var result = {}, value, field;
for (field in this) {
if (this.shouldSerialize(field)) {
value = this[field];
if (value instanceof ObservableObject || value instanceof ObservableArray) {
value = value.toJSON();
}
result[field] = value;
}
}
return result;
},
get: function (field) {
var that = this, result;
that.trigger(GET, { field: field });
if (field === 'this') {
result = that;
} else {
result = kendo.getter(field, true)(that);
}
return result;
},
_set: function (field, value) {
var that = this;
var composite = field.indexOf('.') >= 0;
if (composite) {
var paths = field.split('.'), path = '';
while (paths.length > 1) {
path += paths.shift();
var obj = kendo.getter(path, true)(that);
if (obj instanceof ObservableObject) {
obj.set(paths.join('.'), value);
return composite;
}
path += '.';
}
}
kendo.setter(field)(that, value);
return composite;
},
set: function (field, value) {
var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);
if (current !== value) {
if (current instanceof Observable && this._handlers[field]) {
if (this._handlers[field].get) {
current.unbind(GET, this._handlers[field].get);
}
current.unbind(CHANGE, this._handlers[field].change);
}
isSetPrevented = that.trigger('set', {
field: field,
value: value
});
if (!isSetPrevented) {
if (!composite) {
value = that.wrap(value, field, function () {
return that;
});
}
if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {
that.trigger(CHANGE, { field: field });
}
}
}
return isSetPrevented;
},
parent: noop,
wrap: function (object, field, parent) {
var that = this;
var get;
var change;
var type = toString.call(object);
if (object != null && (type === '[object Object]' || type === '[object Array]')) {
var isObservableArray = object instanceof ObservableArray;
var isDataSource = object instanceof DataSource;
if (type === '[object Object]' && !isDataSource && !isObservableArray) {
if (!(object instanceof ObservableObject)) {
object = new ObservableObject(object);
}
get = eventHandler(that, GET, field, true);
object.bind(GET, get);
change = eventHandler(that, CHANGE, field, true);
object.bind(CHANGE, change);
that._handlers[field] = {
get: get,
change: change
};
} else if (type === '[object Array]' || isObservableArray || isDataSource) {
if (!isObservableArray && !isDataSource) {
object = new ObservableArray(object);
}
change = eventHandler(that, CHANGE, field, false);
object.bind(CHANGE, change);
that._handlers[field] = { change: change };
}
object.parent = parent;
}
return object;
}
});
function equal(x, y) {
if (x === y) {
return true;
}
var xtype = $.type(x), ytype = $.type(y), field;
if (xtype !== ytype) {
return false;
}
if (xtype === 'date') {
return x.getTime() === y.getTime();
}
if (xtype !== 'object' && xtype !== 'array') {
return false;
}
for (field in x) {
if (!equal(x[field], y[field])) {
return false;
}
}
return true;
}
var parsers = {
'number': function (value) {
return kendo.parseFloat(value);
},
'date': function (value) {
return kendo.parseDate(value);
},
'boolean': function (value) {
if (typeof value === STRING) {
return value.toLowerCase() === 'true';
}
return value != null ? !!value : value;
},
'string': function (value) {
return value != null ? value + '' : value;
},
'default': function (value) {
return value;
}
};
var defaultValues = {
'string': '',
'number': 0,
'date': new Date(),
'boolean': false,
'default': ''
};
function getFieldByName(obj, name) {
var field, fieldName;
for (fieldName in obj) {
field = obj[fieldName];
if (isPlainObject(field) && field.field && field.field === name) {
return field;
} else if (field === name) {
return field;
}
}
return null;
}
var Model = ObservableObject.extend({
init: function (data) {
var that = this;
if (!data || $.isEmptyObject(data)) {
data = $.extend({}, that.defaults, data);
if (that._initializers) {
for (var idx = 0; idx < that._initializers.length; idx++) {
var name = that._initializers[idx];
data[name] = that.defaults[name]();
}
}
}
ObservableObject.fn.init.call(that, data);
that.dirty = false;
if (that.idField) {
that.id = that.get(that.idField);
if (that.id === undefined) {
that.id = that._defaultId;
}
}
},
shouldSerialize: function (field) {
return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== '_accessors';
},
_parse: function (field, value) {
var that = this, fieldName = field, fields = that.fields || {}, parse;
field = fields[field];
if (!field) {
field = getFieldByName(fields, fieldName);
}
if (field) {
parse = field.parse;
if (!parse && field.type) {
parse = parsers[field.type.toLowerCase()];
}
}
return parse ? parse(value) : value;
},
_notifyChange: function (e) {
var action = e.action;
if (action == 'add' || action == 'remove') {
this.dirty = true;
}
},
editable: function (field) {
field = (this.fields || {})[field];
return field ? field.editable !== false : true;
},
set: function (field, value, initiator) {
var that = this;
var dirty = that.dirty;
if (that.editable(field)) {
value = that._parse(field, value);
if (!equal(value, that.get(field))) {
that.dirty = true;
if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {
that.dirty = dirty;
}
}
}
},
accept: function (data) {
var that = this, parent = function () {
return that;
}, field;
for (field in data) {
var value = data[field];
if (field.charAt(0) != '_') {
value = that.wrap(data[field], field, parent);
}
that._set(field, value);
}
if (that.idField) {
that.id = that.get(that.idField);
}
that.dirty = false;
},
isNew: function () {
return this.id === this._defaultId;
}
});
Model.define = function (base, options) {
if (options === undefined) {
options = base;
base = Model;
}
var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];
if (id) {
proto.idField = id;
}
if (proto.id) {
delete proto.id;
}
if (id) {
proto.defaults[id] = proto._defaultId = '';
}
if (toString.call(proto.fields) === '[object Array]') {
for (idx = 0, length = proto.fields.length; idx < length; idx++) {
field = proto.fields[idx];
if (typeof field === STRING) {
fields[field] = {};
} else if (field.field) {
fields[field.field] = field;
}
}
proto.fields = fields;
}
for (name in proto.fields) {
field = proto.fields[name];
type = field.type || 'default';
value = null;
originalName = name;
name = typeof field.field === STRING ? field.field : name;
if (!field.nullable) {
value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];
if (typeof value === 'function') {
functionFields.push(name);
}
}
if (options.id === name) {
proto._defaultId = value;
}
proto.defaults[originalName !== name ? originalName : name] = value;
field.parse = field.parse || parsers[type];
}
if (functionFields.length > 0) {
proto._initializers = functionFields;
}
model = base.extend(proto);
model.define = function (options) {
return Model.define(model, options);
};
if (proto.fields) {
model.fields = proto.fields;
model.idField = proto.idField;
}
return model;
};
var Comparer = {
selector: function (field) {
return isFunction(field) ? field : getter(field);
},
compare: function (field) {
var selector = this.selector(field);
return function (a, b) {
a = selector(a);
b = selector(b);
if (a == null && b == null) {
return 0;
}
if (a == null) {
return -1;
}
if (b == null) {
return 1;
}
if (a.localeCompare) {
return a.localeCompare(b);
}
return a > b ? 1 : a < b ? -1 : 0;
};
},
create: function (sort) {
var compare = sort.compare || this.compare(sort.field);
if (sort.dir == 'desc') {
return function (a, b) {
return compare(b, a, true);
};
}
return compare;
},
combine: function (comparers) {
return function (a, b) {
var result = comparers[0](a, b), idx, length;
for (idx = 1, length = comparers.length; idx < length; idx++) {
result = result || comparers[idx](a, b);
}
return result;
};
}
};
var StableComparer = extend({}, Comparer, {
asc: function (field) {
var selector = this.selector(field);
return function (a, b) {
var valueA = selector(a);
var valueB = selector(b);
if (valueA && valueA.getTime && valueB && valueB.getTime) {
valueA = valueA.getTime();
valueB = valueB.getTime();
}
if (valueA === valueB) {
return a.__position - b.__position;
}
if (valueA == null) {
return -1;
}
if (valueB == null) {
return 1;
}
if (valueA.localeCompare) {
return valueA.localeCompare(valueB);
}
return valueA > valueB ? 1 : -1;
};
},
desc: function (field) {
var selector = this.selector(field);
return function (a, b) {
var valueA = selector(a);
var valueB = selector(b);
if (valueA && valueA.getTime && valueB && valueB.getTime) {
valueA = valueA.getTime();
valueB = valueB.getTime();
}
if (valueA === valueB) {
return a.__position - b.__position;
}
if (valueA == null) {
return 1;
}
if (valueB == null) {
return -1;
}
if (valueB.localeCompare) {
return valueB.localeCompare(valueA);
}
return valueA < valueB ? 1 : -1;
};
},
create: function (sort) {
return this[sort.dir](sort.field);
}
});
map = function (array, callback) {
var idx, length = array.length, result = new Array(length);
for (idx = 0; idx < length; idx++) {
result[idx] = callback(array[idx], idx, array);
}
return result;
};
var operators = function () {
function quote(value) {
return value.replace(quoteRegExp, '\\').replace(newLineRegExp, '');
}
function operator(op, a, b, ignore) {
var date;
if (b != null) {
if (typeof b === STRING) {
b = quote(b);
date = dateRegExp.exec(b);
if (date) {
b = new Date(+date[1]);
} else if (ignore) {
b = '\'' + b.toLowerCase() + '\'';
a = '((' + a + ' || \'\')+\'\').toLowerCase()';
} else {
b = '\'' + b + '\'';
}
}
if (b.getTime) {
a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';
b = b.getTime();
}
}
return a + ' ' + op + ' ' + b;
}
return {
quote: function (value) {
if (value && value.getTime) {
return 'new Date(' + value.getTime() + ')';
}
if (typeof value == 'string') {
return '\'' + quote(value) + '\'';
}
return '' + value;
},
eq: function (a, b, ignore) {
return operator('==', a, b, ignore);
},
neq: function (a, b, ignore) {
return operator('!=', a, b, ignore);
},
gt: function (a, b, ignore) {
return operator('>', a, b, ignore);
},
gte: function (a, b, ignore) {
return operator('>=', a, b, ignore);
},
lt: function (a, b, ignore) {
return operator('<', a, b, ignore);
},
lte: function (a, b, ignore) {
return operator('<=', a, b, ignore);
},
startswith: function (a, b, ignore) {
if (ignore) {
a = '(' + a + ' || \'\').toLowerCase()';
if (b) {
b = b.toLowerCase();
}
}
if (b) {
b = quote(b);
}
return a + '.lastIndexOf(\'' + b + '\', 0) == 0';
},
doesnotstartwith: function (a, b, ignore) {
if (ignore) {
a = '(' + a + ' || \'\').toLowerCase()';
if (b) {
b = b.toLowerCase();
}
}
if (b) {
b = quote(b);
}
return a + '.lastIndexOf(\'' + b + '\', 0) == -1';
},
endswith: function (a, b, ignore) {
if (ignore) {
a = '(' + a + ' || \'\').toLowerCase()';
if (b) {
b = b.toLowerCase();
}
}
if (b) {
b = quote(b);
}
return a + '.indexOf(\'' + b + '\', ' + a + '.length - ' + (b || '').length + ') >= 0';
},
doesnotendwith: function (a, b, ignore) {
if (ignore) {
a = '(' + a + ' || \'\').toLowerCase()';
if (b) {
b = b.toLowerCase();
}
}
if (b) {
b = quote(b);
}
return a + '.indexOf(\'' + b + '\', ' + a + '.length - ' + (b || '').length + ') < 0';
},
contains: function (a, b, ignore) {
if (ignore) {
a = '(' + a + ' || \'\').toLowerCase()';
if (b) {
b = b.toLowerCase();
}
}
if (b) {
b = quote(b);
}
return a + '.indexOf(\'' + b + '\') >= 0';
},
doesnotcontain: function (a, b, ignore) {
if (ignore) {
a = '(' + a + ' || \'\').toLowerCase()';
if (b) {
b = b.toLowerCase();
}
}
if (b) {
b = quote(b);
}
return a + '.indexOf(\'' + b + '\') == -1';
},
isempty: function (a) {
return a + ' === \'\'';
},
isnotempty: function (a) {
return a + ' !== \'\'';
},
isnull: function (a) {
return '(' + a + ' === null || ' + a + ' === undefined)';
},
isnotnull: function (a) {
return '(' + a + ' !== null && ' + a + ' !== undefined)';
}
};
}();
function Query(data) {
this.data = data || [];
}
Query.filterExpr = function (expression) {
var expressions = [], logic = {
and: ' && ',
or: ' || '
}, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;
for (idx = 0, length = filters.length; idx < length; idx++) {
filter = filters[idx];
field = filter.field;
operator = filter.operator;
if (filter.filters) {
expr = Query.filterExpr(filter);
filter = expr.expression.replace(/__o\[(\d+)\]/g, function (match, index) {
index = +index;
return '__o[' + (operatorFunctions.length + index) + ']';
}).replace(/__f\[(\d+)\]/g, function (match, index) {
index = +index;
return '__f[' + (fieldFunctions.length + index) + ']';
});
operatorFunctions.push.apply(operatorFunctions, expr.operators);
fieldFunctions.push.apply(fieldFunctions, expr.fields);
} else {
if (typeof field === FUNCTION) {
expr = '__f[' + fieldFunctions.length + '](d)';
fieldFunctions.push(field);
} else {
expr = kendo.expr(field);
}
if (typeof operator === FUNCTION) {
filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';
operatorFunctions.push(operator);
} else {
filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true);
}
}
expressions.push(filter);
}
return {
expression: '(' + expressions.join(logic[expression.logic]) + ')',
fields: fieldFunctions,
operators: operatorFunctions
};
};
function normalizeSort(field, dir) {
if (field) {
var descriptor = typeof field === STRING ? {
field: field,
dir: dir
} : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];
return grep(descriptors, function (d) {
return !!d.dir;
});
}
}
var operatorMap = {
'==': 'eq',
equals: 'eq',
isequalto: 'eq',
equalto: 'eq',
equal: 'eq',
'!=': 'neq',
ne: 'neq',
notequals: 'neq',
isnotequalto: 'neq',
notequalto: 'neq',
notequal: 'neq',
'<': 'lt',
islessthan: 'lt',
lessthan: 'lt',
less: 'lt',
'<=': 'lte',
le: 'lte',
islessthanorequalto: 'lte',
lessthanequal: 'lte',
'>': 'gt',
isgreaterthan: 'gt',
greaterthan: 'gt',
greater: 'gt',
'>=': 'gte',
isgreaterthanorequalto: 'gte',
greaterthanequal: 'gte',
ge: 'gte',
notsubstringof: 'doesnotcontain',
isnull: 'isnull',
isempty: 'isempty',
isnotempty: 'isnotempty'
};
function normalizeOperator(expression) {
var idx, length, filter, operator, filters = expression.filters;
if (filters) {
for (idx = 0, length = filters.length; idx < length; idx++) {
filter = filters[idx];
operator = filter.operator;
if (operator && typeof operator === STRING) {
filter.operator = operatorMap[operator.toLowerCase()] || operator;
}
normalizeOperator(filter);
}
}
}
function normalizeFilter(expression) {
if (expression && !isEmptyObject(expression)) {
if (isArray(expression) || !expression.filters) {
expression = {
logic: 'and',
filters: isArray(expression) ? expression : [expression]
};
}
normalizeOperator(expression);
return expression;
}
}
Query.normalizeFilter = normalizeFilter;
function compareDescriptor(f1, f2) {
if (f1.logic || f2.logic) {
return false;
}
return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;
}
function normalizeDescriptor(filter) {
filter = filter || {};
if (isEmptyObject(filter)) {
return {
logic: 'and',
filters: []
};
}
return normalizeFilter(filter);
}
function fieldComparer(a, b) {
if (b.logic || a.field > b.field) {
return 1;
} else if (a.field < b.field) {
return -1;
} else {
return 0;
}
}
function compareFilters(expr1, expr2) {
expr1 = normalizeDescriptor(expr1);
expr2 = normalizeDescriptor(expr2);
if (expr1.logic !== expr2.logic) {
return false;
}
var f1, f2;
var filters1 = (expr1.filters || []).slice();
var filters2 = (expr2.filters || []).slice();
if (filters1.length !== filters2.length) {
return false;
}
filters1 = filters1.sort(fieldComparer);
filters2 = filters2.sort(fieldComparer);
for (var idx = 0; idx < filters1.length; idx++) {
f1 = filters1[idx];
f2 = filters2[idx];
if (f1.logic && f2.logic) {
if (!compareFilters(f1, f2)) {
return false;
}
} else if (!compareDescriptor(f1, f2)) {
return false;
}
}
return true;
}
Query.compareFilters = compareFilters;
function normalizeAggregate(expressions) {
return isArray(expressions) ? expressions : [expressions];
}
function normalizeGroup(field, dir) {
var descriptor = typeof field === STRING ? {
field: field,
dir: dir
} : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];
return map(descriptors, function (d) {
return {
field: d.field,
dir: d.dir || 'asc',
aggregates: d.aggregates
};
});
}
Query.prototype = {
toArray: function () {
return this.data;
},
range: function (index, count) {
return new Query(this.data.slice(index, index + count));
},
skip: function (count) {
return new Query(this.data.slice(count));
},
take: function (count) {
return new Query(this.data.slice(0, count));
},
select: function (selector) {
return new Query(map(this.data, selector));
},
order: function (selector, dir) {
var sort = { dir: dir };
if (selector) {
if (selector.compare) {
sort.compare = selector.compare;
} else {
sort.field = selector;
}
}
return new Query(this.data.slice(0).sort(Comparer.create(sort)));
},
orderBy: function (selector) {
return this.order(selector, 'asc');
},
orderByDescending: function (selector) {
return this.order(selector, 'desc');
},
sort: function (field, dir, comparer) {
var idx, length, descriptors = normalizeSort(field, dir), comparers = [];
comparer = comparer || Comparer;
if (descriptors.length) {
for (idx = 0, length = descriptors.length; idx < length; idx++) {
comparers.push(comparer.create(descriptors[idx]));
}
return this.orderBy({ compare: comparer.combine(comparers) });
}
return this;
},
filter: function (expressions) {
var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;
expressions = normalizeFilter(expressions);
if (!expressions || expressions.filters.length === 0) {
return this;
}
compiled = Query.filterExpr(expressions);
fields = compiled.fields;
operators = compiled.operators;
predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);
if (fields.length || operators.length) {
filter = function (d) {
return predicate(d, fields, operators);
};
}
for (idx = 0, length = data.length; idx < length; idx++) {
current = data[idx];
if (filter(current)) {
result.push(current);
}
}
return new Query(result);
},
group: function (descriptors, allData) {
descriptors = normalizeGroup(descriptors || []);
allData = allData || this.data;
var that = this, result = new Query(that.data), descriptor;
if (descriptors.length > 0) {
descriptor = descriptors[0];
result = result.groupBy(descriptor).select(function (group) {
var data = new Query(allData).filter([{
field: group.field,
operator: 'eq',
value: group.value,
ignoreCase: false
}]);
return {
field: group.field,
value: group.value,
items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,
hasSubgroups: descriptors.length > 1,
aggregates: data.aggregate(descriptor.aggregates)
};
});
}
return result;
},
groupBy: function (descriptor) {
if (isEmptyObject(descriptor) || !this.data.length) {
return new Query([]);
}
var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {
field: field,
value: groupValue,
items: []
}, currentValue, idx, len, result = [group];
for (idx = 0, len = sorted.length; idx < len; idx++) {
item = sorted[idx];
currentValue = accessor.get(item, field);
if (!groupValueComparer(groupValue, currentValue)) {
groupValue = currentValue;
group = {
field: field,
value: groupValue,
items: []
};
result.push(group);
}
group.items.push(item);
}
return new Query(result);
},
_sortForGrouping: function (field, dir) {
var idx, length, data = this.data;
if (!stableSort) {
for (idx = 0, length = data.length; idx < length; idx++) {
data[idx].__position = idx;
}
data = new Query(data).sort(field, dir, StableComparer).toArray();
for (idx = 0, length = data.length; idx < length; idx++) {
delete data[idx].__position;
}
return data;
}
return this.sort(field, dir).toArray();
},
aggregate: function (aggregates) {
var idx, len, result = {}, state = {};
if (aggregates && aggregates.length) {
for (idx = 0, len = this.data.length; idx < len; idx++) {
calculateAggregate(result, aggregates, this.data[idx], idx, len, state);
}
}
return result;
}
};
function groupValueComparer(a, b) {
if (a && a.getTime && b && b.getTime) {
return a.getTime() === b.getTime();
}
return a === b;
}
function calculateAggregate(accumulator, aggregates, item, index, length, state) {
aggregates = aggregates || [];
var idx, aggr, functionName, len = aggregates.length;
for (idx = 0; idx < len; idx++) {
aggr = aggregates[idx];
functionName = aggr.aggregate;
var field = aggr.field;
accumulator[field] = accumulator[field] || {};
state[field] = state[field] || {};
state[field][functionName] = state[field][functionName] || {};
accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);
}
}
var functions = {
sum: function (accumulator, item, accessor) {
var value = accessor.get(item);
if (!isNumber(accumulator)) {
accumulator = value;
} else if (isNumber(value)) {
accumulator += value;
}
return accumulator;
},
count: function (accumulator) {
return (accumulator || 0) + 1;
},
average: function (accumulator, item, accessor, index, length, state) {
var value = accessor.get(item);
if (state.count === undefined) {
state.count = 0;
}
if (!isNumber(accumulator)) {
accumulator = value;
} else if (isNumber(value)) {
accumulator += value;
}
if (isNumber(value)) {
state.count++;
}
if (index == length - 1 && isNumber(accumulator)) {
accumulator = accumulator / state.count;
}
return accumulator;
},
max: function (accumulator, item, accessor) {
var value = accessor.get(item);
if (!isNumber(accumulator) && !isDate(accumulator)) {
accumulator = value;
}
if (accumulator < value && (isNumber(value) || isDate(value))) {
accumulator = value;
}
return accumulator;
},
min: function (accumulator, item, accessor) {
var value = accessor.get(item);
if (!isNumber(accumulator) && !isDate(accumulator)) {
accumulator = value;
}
if (accumulator > value && (isNumber(value) || isDate(value))) {
accumulator = value;
}
return accumulator;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment