Commit 882d30d938cd10ea96a8b03dcfcb3303832708d0

Authored by Zambom
1 parent 2afd96e0

Fixing date bug [Issue: #215]

Showing 81 changed files with 3669 additions and 340 deletions   Show diff stats
amadeus/settings.py
... ... @@ -139,7 +139,7 @@ TIME_ZONE = 'America/Recife'
139 139  
140 140 USE_I18N = True
141 141  
142   -USE_L10N = False
  142 +USE_L10N = True
143 143  
144 144 USE_TZ = True
145 145  
... ...
core/static/css/vendor/bootstrap-datepicker.standalone.css 0 → 100644
... ... @@ -0,0 +1,510 @@
  1 +/*!
  2 + * Datepicker for Bootstrap v1.7.0-dev (https://github.com/uxsolutions/bootstrap-datepicker)
  3 + *
  4 + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
  5 + */
  6 +
  7 +.datepicker {
  8 + padding: 4px;
  9 + -webkit-border-radius: 4px;
  10 + -moz-border-radius: 4px;
  11 + border-radius: 4px;
  12 + direction: ltr;
  13 +}
  14 +.datepicker-inline {
  15 + width: 220px;
  16 +}
  17 +.datepicker.datepicker-rtl {
  18 + direction: rtl;
  19 +}
  20 +.datepicker.datepicker-rtl.dropdown-menu {
  21 + left: auto;
  22 +}
  23 +.datepicker.datepicker-rtl table tr td span {
  24 + float: right;
  25 +}
  26 +.datepicker-dropdown {
  27 + top: 0;
  28 + left: 0;
  29 +}
  30 +.datepicker-dropdown:before {
  31 + content: '';
  32 + display: inline-block;
  33 + border-left: 7px solid transparent;
  34 + border-right: 7px solid transparent;
  35 + border-bottom: 7px solid #999999;
  36 + border-top: 0;
  37 + border-bottom-color: rgba(0, 0, 0, 0.2);
  38 + position: absolute;
  39 +}
  40 +.datepicker-dropdown:after {
  41 + content: '';
  42 + display: inline-block;
  43 + border-left: 6px solid transparent;
  44 + border-right: 6px solid transparent;
  45 + border-bottom: 6px solid #ffffff;
  46 + border-top: 0;
  47 + position: absolute;
  48 +}
  49 +.datepicker-dropdown.datepicker-orient-left:before {
  50 + left: 6px;
  51 +}
  52 +.datepicker-dropdown.datepicker-orient-left:after {
  53 + left: 7px;
  54 +}
  55 +.datepicker-dropdown.datepicker-orient-right:before {
  56 + right: 6px;
  57 +}
  58 +.datepicker-dropdown.datepicker-orient-right:after {
  59 + right: 7px;
  60 +}
  61 +.datepicker-dropdown.datepicker-orient-bottom:before {
  62 + top: -7px;
  63 +}
  64 +.datepicker-dropdown.datepicker-orient-bottom:after {
  65 + top: -6px;
  66 +}
  67 +.datepicker-dropdown.datepicker-orient-top:before {
  68 + bottom: -7px;
  69 + border-bottom: 0;
  70 + border-top: 7px solid #999999;
  71 +}
  72 +.datepicker-dropdown.datepicker-orient-top:after {
  73 + bottom: -6px;
  74 + border-bottom: 0;
  75 + border-top: 6px solid #ffffff;
  76 +}
  77 +.datepicker table {
  78 + margin: 0;
  79 + -webkit-touch-callout: none;
  80 + -webkit-user-select: none;
  81 + -khtml-user-select: none;
  82 + -moz-user-select: none;
  83 + -ms-user-select: none;
  84 + user-select: none;
  85 +}
  86 +.datepicker td,
  87 +.datepicker th {
  88 + text-align: center;
  89 + width: 20px;
  90 + height: 20px;
  91 + -webkit-border-radius: 4px;
  92 + -moz-border-radius: 4px;
  93 + border-radius: 4px;
  94 + border: none;
  95 +}
  96 +.table-striped .datepicker table tr td,
  97 +.table-striped .datepicker table tr th {
  98 + background-color: transparent;
  99 +}
  100 +.datepicker table tr td.day:hover,
  101 +.datepicker table tr td.day.focused {
  102 + background: #eeeeee;
  103 + cursor: pointer;
  104 +}
  105 +.datepicker table tr td.old,
  106 +.datepicker table tr td.new {
  107 + color: #999999;
  108 +}
  109 +.datepicker table tr td.disabled,
  110 +.datepicker table tr td.disabled:hover {
  111 + background: none;
  112 + color: #999999;
  113 + cursor: default;
  114 +}
  115 +.datepicker table tr td.highlighted {
  116 + background: #d9edf7;
  117 + border-radius: 0;
  118 +}
  119 +.datepicker table tr td.today,
  120 +.datepicker table tr td.today:hover,
  121 +.datepicker table tr td.today.disabled,
  122 +.datepicker table tr td.today.disabled:hover {
  123 + background-color: #fde19a;
  124 + background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a);
  125 + background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a);
  126 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
  127 + background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a);
  128 + background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a);
  129 + background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
  130 + background-repeat: repeat-x;
  131 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
  132 + border-color: #fdf59a #fdf59a #fbed50;
  133 + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  134 + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  135 + color: #000;
  136 +}
  137 +.datepicker table tr td.today:hover,
  138 +.datepicker table tr td.today:hover:hover,
  139 +.datepicker table tr td.today.disabled:hover,
  140 +.datepicker table tr td.today.disabled:hover:hover,
  141 +.datepicker table tr td.today:active,
  142 +.datepicker table tr td.today:hover:active,
  143 +.datepicker table tr td.today.disabled:active,
  144 +.datepicker table tr td.today.disabled:hover:active,
  145 +.datepicker table tr td.today.active,
  146 +.datepicker table tr td.today:hover.active,
  147 +.datepicker table tr td.today.disabled.active,
  148 +.datepicker table tr td.today.disabled:hover.active,
  149 +.datepicker table tr td.today.disabled,
  150 +.datepicker table tr td.today:hover.disabled,
  151 +.datepicker table tr td.today.disabled.disabled,
  152 +.datepicker table tr td.today.disabled:hover.disabled,
  153 +.datepicker table tr td.today[disabled],
  154 +.datepicker table tr td.today:hover[disabled],
  155 +.datepicker table tr td.today.disabled[disabled],
  156 +.datepicker table tr td.today.disabled:hover[disabled] {
  157 + background-color: #fdf59a;
  158 +}
  159 +.datepicker table tr td.today:active,
  160 +.datepicker table tr td.today:hover:active,
  161 +.datepicker table tr td.today.disabled:active,
  162 +.datepicker table tr td.today.disabled:hover:active,
  163 +.datepicker table tr td.today.active,
  164 +.datepicker table tr td.today:hover.active,
  165 +.datepicker table tr td.today.disabled.active,
  166 +.datepicker table tr td.today.disabled:hover.active {
  167 + background-color: #fbf069 \9;
  168 +}
  169 +.datepicker table tr td.today:hover:hover {
  170 + color: #000;
  171 +}
  172 +.datepicker table tr td.today.active:hover {
  173 + color: #fff;
  174 +}
  175 +.datepicker table tr td.range,
  176 +.datepicker table tr td.range:hover,
  177 +.datepicker table tr td.range.disabled,
  178 +.datepicker table tr td.range.disabled:hover {
  179 + background: #eeeeee;
  180 + -webkit-border-radius: 0;
  181 + -moz-border-radius: 0;
  182 + border-radius: 0;
  183 +}
  184 +.datepicker table tr td.range.today,
  185 +.datepicker table tr td.range.today:hover,
  186 +.datepicker table tr td.range.today.disabled,
  187 +.datepicker table tr td.range.today.disabled:hover {
  188 + background-color: #f3d17a;
  189 + background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a);
  190 + background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a);
  191 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
  192 + background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a);
  193 + background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a);
  194 + background-image: linear-gradient(to bottom, #f3c17a, #f3e97a);
  195 + background-repeat: repeat-x;
  196 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
  197 + border-color: #f3e97a #f3e97a #edde34;
  198 + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  199 + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  200 + -webkit-border-radius: 0;
  201 + -moz-border-radius: 0;
  202 + border-radius: 0;
  203 +}
  204 +.datepicker table tr td.range.today:hover,
  205 +.datepicker table tr td.range.today:hover:hover,
  206 +.datepicker table tr td.range.today.disabled:hover,
  207 +.datepicker table tr td.range.today.disabled:hover:hover,
  208 +.datepicker table tr td.range.today:active,
  209 +.datepicker table tr td.range.today:hover:active,
  210 +.datepicker table tr td.range.today.disabled:active,
  211 +.datepicker table tr td.range.today.disabled:hover:active,
  212 +.datepicker table tr td.range.today.active,
  213 +.datepicker table tr td.range.today:hover.active,
  214 +.datepicker table tr td.range.today.disabled.active,
  215 +.datepicker table tr td.range.today.disabled:hover.active,
  216 +.datepicker table tr td.range.today.disabled,
  217 +.datepicker table tr td.range.today:hover.disabled,
  218 +.datepicker table tr td.range.today.disabled.disabled,
  219 +.datepicker table tr td.range.today.disabled:hover.disabled,
  220 +.datepicker table tr td.range.today[disabled],
  221 +.datepicker table tr td.range.today:hover[disabled],
  222 +.datepicker table tr td.range.today.disabled[disabled],
  223 +.datepicker table tr td.range.today.disabled:hover[disabled] {
  224 + background-color: #f3e97a;
  225 +}
  226 +.datepicker table tr td.range.today:active,
  227 +.datepicker table tr td.range.today:hover:active,
  228 +.datepicker table tr td.range.today.disabled:active,
  229 +.datepicker table tr td.range.today.disabled:hover:active,
  230 +.datepicker table tr td.range.today.active,
  231 +.datepicker table tr td.range.today:hover.active,
  232 +.datepicker table tr td.range.today.disabled.active,
  233 +.datepicker table tr td.range.today.disabled:hover.active {
  234 + background-color: #efe24b \9;
  235 +}
  236 +.datepicker table tr td.selected,
  237 +.datepicker table tr td.selected:hover,
  238 +.datepicker table tr td.selected.disabled,
  239 +.datepicker table tr td.selected.disabled:hover {
  240 + background-color: #9e9e9e;
  241 + background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080);
  242 + background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080);
  243 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
  244 + background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080);
  245 + background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080);
  246 + background-image: linear-gradient(to bottom, #b3b3b3, #808080);
  247 + background-repeat: repeat-x;
  248 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
  249 + border-color: #808080 #808080 #595959;
  250 + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  251 + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  252 + color: #fff;
  253 + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  254 +}
  255 +.datepicker table tr td.selected:hover,
  256 +.datepicker table tr td.selected:hover:hover,
  257 +.datepicker table tr td.selected.disabled:hover,
  258 +.datepicker table tr td.selected.disabled:hover:hover,
  259 +.datepicker table tr td.selected:active,
  260 +.datepicker table tr td.selected:hover:active,
  261 +.datepicker table tr td.selected.disabled:active,
  262 +.datepicker table tr td.selected.disabled:hover:active,
  263 +.datepicker table tr td.selected.active,
  264 +.datepicker table tr td.selected:hover.active,
  265 +.datepicker table tr td.selected.disabled.active,
  266 +.datepicker table tr td.selected.disabled:hover.active,
  267 +.datepicker table tr td.selected.disabled,
  268 +.datepicker table tr td.selected:hover.disabled,
  269 +.datepicker table tr td.selected.disabled.disabled,
  270 +.datepicker table tr td.selected.disabled:hover.disabled,
  271 +.datepicker table tr td.selected[disabled],
  272 +.datepicker table tr td.selected:hover[disabled],
  273 +.datepicker table tr td.selected.disabled[disabled],
  274 +.datepicker table tr td.selected.disabled:hover[disabled] {
  275 + background-color: #808080;
  276 +}
  277 +.datepicker table tr td.selected:active,
  278 +.datepicker table tr td.selected:hover:active,
  279 +.datepicker table tr td.selected.disabled:active,
  280 +.datepicker table tr td.selected.disabled:hover:active,
  281 +.datepicker table tr td.selected.active,
  282 +.datepicker table tr td.selected:hover.active,
  283 +.datepicker table tr td.selected.disabled.active,
  284 +.datepicker table tr td.selected.disabled:hover.active {
  285 + background-color: #666666 \9;
  286 +}
  287 +.datepicker table tr td.active,
  288 +.datepicker table tr td.active:hover,
  289 +.datepicker table tr td.active.disabled,
  290 +.datepicker table tr td.active.disabled:hover {
  291 + background-color: #006dcc;
  292 + background-image: -moz-linear-gradient(to bottom, #0088cc, #0044cc);
  293 + background-image: -ms-linear-gradient(to bottom, #0088cc, #0044cc);
  294 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
  295 + background-image: -webkit-linear-gradient(to bottom, #0088cc, #0044cc);
  296 + background-image: -o-linear-gradient(to bottom, #0088cc, #0044cc);
  297 + background-image: linear-gradient(to bottom, #0088cc, #0044cc);
  298 + background-repeat: repeat-x;
  299 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
  300 + border-color: #0044cc #0044cc #002a80;
  301 + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  302 + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  303 + color: #fff;
  304 + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  305 +}
  306 +.datepicker table tr td.active:hover,
  307 +.datepicker table tr td.active:hover:hover,
  308 +.datepicker table tr td.active.disabled:hover,
  309 +.datepicker table tr td.active.disabled:hover:hover,
  310 +.datepicker table tr td.active:active,
  311 +.datepicker table tr td.active:hover:active,
  312 +.datepicker table tr td.active.disabled:active,
  313 +.datepicker table tr td.active.disabled:hover:active,
  314 +.datepicker table tr td.active.active,
  315 +.datepicker table tr td.active:hover.active,
  316 +.datepicker table tr td.active.disabled.active,
  317 +.datepicker table tr td.active.disabled:hover.active,
  318 +.datepicker table tr td.active.disabled,
  319 +.datepicker table tr td.active:hover.disabled,
  320 +.datepicker table tr td.active.disabled.disabled,
  321 +.datepicker table tr td.active.disabled:hover.disabled,
  322 +.datepicker table tr td.active[disabled],
  323 +.datepicker table tr td.active:hover[disabled],
  324 +.datepicker table tr td.active.disabled[disabled],
  325 +.datepicker table tr td.active.disabled:hover[disabled] {
  326 + background-color: #0044cc;
  327 +}
  328 +.datepicker table tr td.active:active,
  329 +.datepicker table tr td.active:hover:active,
  330 +.datepicker table tr td.active.disabled:active,
  331 +.datepicker table tr td.active.disabled:hover:active,
  332 +.datepicker table tr td.active.active,
  333 +.datepicker table tr td.active:hover.active,
  334 +.datepicker table tr td.active.disabled.active,
  335 +.datepicker table tr td.active.disabled:hover.active {
  336 + background-color: #003399 \9;
  337 +}
  338 +.datepicker table tr td span {
  339 + display: block;
  340 + width: 23%;
  341 + height: 54px;
  342 + line-height: 54px;
  343 + float: left;
  344 + margin: 1%;
  345 + cursor: pointer;
  346 + -webkit-border-radius: 4px;
  347 + -moz-border-radius: 4px;
  348 + border-radius: 4px;
  349 +}
  350 +.datepicker table tr td span:hover,
  351 +.datepicker table tr td span.focused {
  352 + background: #eeeeee;
  353 +}
  354 +.datepicker table tr td span.disabled,
  355 +.datepicker table tr td span.disabled:hover {
  356 + background: none;
  357 + color: #999999;
  358 + cursor: default;
  359 +}
  360 +.datepicker table tr td span.active,
  361 +.datepicker table tr td span.active:hover,
  362 +.datepicker table tr td span.active.disabled,
  363 +.datepicker table tr td span.active.disabled:hover {
  364 + background-color: #006dcc;
  365 + background-image: -moz-linear-gradient(to bottom, #0088cc, #0044cc);
  366 + background-image: -ms-linear-gradient(to bottom, #0088cc, #0044cc);
  367 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
  368 + background-image: -webkit-linear-gradient(to bottom, #0088cc, #0044cc);
  369 + background-image: -o-linear-gradient(to bottom, #0088cc, #0044cc);
  370 + background-image: linear-gradient(to bottom, #0088cc, #0044cc);
  371 + background-repeat: repeat-x;
  372 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
  373 + border-color: #0044cc #0044cc #002a80;
  374 + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  375 + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  376 + color: #fff;
  377 + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  378 +}
  379 +.datepicker table tr td span.active:hover,
  380 +.datepicker table tr td span.active:hover:hover,
  381 +.datepicker table tr td span.active.disabled:hover,
  382 +.datepicker table tr td span.active.disabled:hover:hover,
  383 +.datepicker table tr td span.active:active,
  384 +.datepicker table tr td span.active:hover:active,
  385 +.datepicker table tr td span.active.disabled:active,
  386 +.datepicker table tr td span.active.disabled:hover:active,
  387 +.datepicker table tr td span.active.active,
  388 +.datepicker table tr td span.active:hover.active,
  389 +.datepicker table tr td span.active.disabled.active,
  390 +.datepicker table tr td span.active.disabled:hover.active,
  391 +.datepicker table tr td span.active.disabled,
  392 +.datepicker table tr td span.active:hover.disabled,
  393 +.datepicker table tr td span.active.disabled.disabled,
  394 +.datepicker table tr td span.active.disabled:hover.disabled,
  395 +.datepicker table tr td span.active[disabled],
  396 +.datepicker table tr td span.active:hover[disabled],
  397 +.datepicker table tr td span.active.disabled[disabled],
  398 +.datepicker table tr td span.active.disabled:hover[disabled] {
  399 + background-color: #0044cc;
  400 +}
  401 +.datepicker table tr td span.active:active,
  402 +.datepicker table tr td span.active:hover:active,
  403 +.datepicker table tr td span.active.disabled:active,
  404 +.datepicker table tr td span.active.disabled:hover:active,
  405 +.datepicker table tr td span.active.active,
  406 +.datepicker table tr td span.active:hover.active,
  407 +.datepicker table tr td span.active.disabled.active,
  408 +.datepicker table tr td span.active.disabled:hover.active {
  409 + background-color: #003399 \9;
  410 +}
  411 +.datepicker table tr td span.old,
  412 +.datepicker table tr td span.new {
  413 + color: #999999;
  414 +}
  415 +.datepicker .datepicker-switch {
  416 + width: 145px;
  417 +}
  418 +.datepicker .datepicker-switch,
  419 +.datepicker .prev,
  420 +.datepicker .next,
  421 +.datepicker tfoot tr th {
  422 + cursor: pointer;
  423 +}
  424 +.datepicker .datepicker-switch:hover,
  425 +.datepicker .prev:hover,
  426 +.datepicker .next:hover,
  427 +.datepicker tfoot tr th:hover {
  428 + background: #eeeeee;
  429 +}
  430 +.datepicker .prev.disabled,
  431 +.datepicker .next.disabled {
  432 + visibility: hidden;
  433 +}
  434 +.datepicker .cw {
  435 + font-size: 10px;
  436 + width: 12px;
  437 + padding: 0 2px 0 5px;
  438 + vertical-align: middle;
  439 +}
  440 +.input-append.date .add-on,
  441 +.input-prepend.date .add-on {
  442 + cursor: pointer;
  443 +}
  444 +.input-append.date .add-on i,
  445 +.input-prepend.date .add-on i {
  446 + margin-top: 3px;
  447 +}
  448 +.input-daterange input {
  449 + text-align: center;
  450 +}
  451 +.input-daterange input:first-child {
  452 + -webkit-border-radius: 3px 0 0 3px;
  453 + -moz-border-radius: 3px 0 0 3px;
  454 + border-radius: 3px 0 0 3px;
  455 +}
  456 +.input-daterange input:last-child {
  457 + -webkit-border-radius: 0 3px 3px 0;
  458 + -moz-border-radius: 0 3px 3px 0;
  459 + border-radius: 0 3px 3px 0;
  460 +}
  461 +.input-daterange .add-on {
  462 + display: inline-block;
  463 + width: auto;
  464 + min-width: 16px;
  465 + height: 20px;
  466 + padding: 4px 5px;
  467 + font-weight: normal;
  468 + line-height: 20px;
  469 + text-align: center;
  470 + text-shadow: 0 1px 0 #ffffff;
  471 + vertical-align: middle;
  472 + background-color: #eeeeee;
  473 + border: 1px solid #ccc;
  474 + margin-left: -5px;
  475 + margin-right: -5px;
  476 +}
  477 +.datepicker.dropdown-menu {
  478 + position: absolute;
  479 + top: 100%;
  480 + left: 0;
  481 + z-index: 1000;
  482 + float: left;
  483 + display: none;
  484 + min-width: 160px;
  485 + list-style: none;
  486 + background-color: #ffffff;
  487 + border: 1px solid #ccc;
  488 + border: 1px solid rgba(0, 0, 0, 0.2);
  489 + -webkit-border-radius: 5px;
  490 + -moz-border-radius: 5px;
  491 + border-radius: 5px;
  492 + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  493 + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  494 + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  495 + -webkit-background-clip: padding-box;
  496 + -moz-background-clip: padding;
  497 + background-clip: padding-box;
  498 + *border-right-width: 2px;
  499 + *border-bottom-width: 2px;
  500 + color: #333333;
  501 + font-size: 13px;
  502 + line-height: 20px;
  503 +}
  504 +.datepicker.dropdown-menu th,
  505 +.datepicker.datepicker-inline th,
  506 +.datepicker.dropdown-menu td,
  507 +.datepicker.datepicker-inline td {
  508 + padding: 4px 5px;
  509 +}
  510 +/*# sourceMappingURL=bootstrap-datepicker.standalone.css.map */
0 511 \ No newline at end of file
... ...
core/static/js/main.js
  1 +var locale = navigator.language || navigator.userLanguage;
  2 +
1 3 $('.date-picker').datepicker({
2   - format: 'mm/dd/yyyy',
  4 + language: locale,
3 5 });
4 6 \ No newline at end of file
... ...
core/static/js/vendor/bootstrap-datepicker.js
1 1 /* =========================================================
2   - * bootstrap-datepicker.js
3   - * http://www.eyecon.ro/bootstrap-datepicker
  2 + * bootstrap-datepicker.js
  3 + * Repo: https://github.com/uxsolutions/bootstrap-datepicker/
  4 + * Demo: https://eternicode.github.io/bootstrap-datepicker/
  5 + * Docs: https://bootstrap-datepicker.readthedocs.org/
4 6 * =========================================================
5   - * Copyright 2012 Stefan Petre
6   - *
7 7 * Licensed under the Apache License, Version 2.0 (the "License");
8 8 * you may not use this file except in compliance with the License.
9 9 * You may obtain a copy of the License at
... ... @@ -16,459 +16,2021 @@
16 16 * See the License for the specific language governing permissions and
17 17 * limitations under the License.
18 18 * ========================================================= */
19   -
20   -!function( $ ) {
21   -
  19 +
  20 +(function(factory){
  21 + if (typeof define === "function" && define.amd) {
  22 + define(["jquery"], factory);
  23 + } else if (typeof exports === 'object') {
  24 + factory(require('jquery'));
  25 + } else {
  26 + factory(jQuery);
  27 + }
  28 +}(function($, undefined){
  29 +
  30 + function UTCDate(){
  31 + return new Date(Date.UTC.apply(Date, arguments));
  32 + }
  33 + function UTCToday(){
  34 + var today = new Date();
  35 + return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
  36 + }
  37 + function isUTCEquals(date1, date2) {
  38 + return (
  39 + date1.getUTCFullYear() === date2.getUTCFullYear() &&
  40 + date1.getUTCMonth() === date2.getUTCMonth() &&
  41 + date1.getUTCDate() === date2.getUTCDate()
  42 + );
  43 + }
  44 + function alias(method){
  45 + return function(){
  46 + return this[method].apply(this, arguments);
  47 + };
  48 + }
  49 + function isValidDate(d) {
  50 + return d && !isNaN(d.getTime());
  51 + }
  52 +
  53 + var DateArray = (function(){
  54 + var extras = {
  55 + get: function(i){
  56 + return this.slice(i)[0];
  57 + },
  58 + contains: function(d){
  59 + // Array.indexOf is not cross-browser;
  60 + // $.inArray doesn't work with Dates
  61 + var val = d && d.valueOf();
  62 + for (var i=0, l=this.length; i < l; i++)
  63 + // Use date arithmetic to allow dates with different times to match
  64 + if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)
  65 + return i;
  66 + return -1;
  67 + },
  68 + remove: function(i){
  69 + this.splice(i,1);
  70 + },
  71 + replace: function(new_array){
  72 + if (!new_array)
  73 + return;
  74 + if (!$.isArray(new_array))
  75 + new_array = [new_array];
  76 + this.clear();
  77 + this.push.apply(this, new_array);
  78 + },
  79 + clear: function(){
  80 + this.length = 0;
  81 + },
  82 + copy: function(){
  83 + var a = new DateArray();
  84 + a.replace(this);
  85 + return a;
  86 + }
  87 + };
  88 +
  89 + return function(){
  90 + var a = [];
  91 + a.push.apply(a, arguments);
  92 + $.extend(a, extras);
  93 + return a;
  94 + };
  95 + })();
  96 +
  97 +
22 98 // Picker object
23   -
  99 +
24 100 var Datepicker = function(element, options){
  101 + $.data(element, 'datepicker', this);
  102 + this._process_options(options);
  103 +
  104 + this.dates = new DateArray();
  105 + this.viewDate = this.o.defaultViewDate;
  106 + this.focusDate = null;
  107 +
25 108 this.element = $(element);
26   - this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy');
27   - this.picker = $(DPGlobal.template)
28   - .appendTo('body')
29   - .on({
30   - click: $.proxy(this.click, this)//,
31   - //mousedown: $.proxy(this.mousedown, this)
32   - });
33 109 this.isInput = this.element.is('input');
34   - this.component = this.element.is('.date') ? this.element.find('.add-on') : false;
35   -
36   - if (this.isInput) {
37   - this.element.on({
38   - focus: $.proxy(this.show, this),
39   - //blur: $.proxy(this.hide, this),
40   - keyup: $.proxy(this.update, this)
41   - });
42   - } else {
43   - if (this.component){
44   - this.component.on('click', $.proxy(this.show, this));
45   - } else {
46   - this.element.on('click', $.proxy(this.show, this));
47   - }
  110 + this.inputField = this.isInput ? this.element : this.element.find('input');
  111 + this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
  112 + if (this.component && this.component.length === 0)
  113 + this.component = false;
  114 + this.isInline = !this.component && this.element.is('div');
  115 +
  116 + this.picker = $(DPGlobal.template);
  117 +
  118 + // Checking templates and inserting
  119 + if (this._check_template(this.o.templates.leftArrow)) {
  120 + this.picker.find('.prev').html(this.o.templates.leftArrow);
48 121 }
49   -
50   - this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0;
51   - if (typeof this.minViewMode === 'string') {
52   - switch (this.minViewMode) {
53   - case 'months':
54   - this.minViewMode = 1;
55   - break;
56   - case 'years':
57   - this.minViewMode = 2;
58   - break;
59   - default:
60   - this.minViewMode = 0;
61   - break;
62   - }
  122 +
  123 + if (this._check_template(this.o.templates.rightArrow)) {
  124 + this.picker.find('.next').html(this.o.templates.rightArrow);
63 125 }
64   - this.viewMode = options.viewMode||this.element.data('date-viewmode')||0;
65   - if (typeof this.viewMode === 'string') {
66   - switch (this.viewMode) {
67   - case 'months':
68   - this.viewMode = 1;
69   - break;
70   - case 'years':
71   - this.viewMode = 2;
72   - break;
73   - default:
74   - this.viewMode = 0;
75   - break;
76   - }
  126 +
  127 + this._buildEvents();
  128 + this._attachEvents();
  129 +
  130 + if (this.isInline){
  131 + this.picker.addClass('datepicker-inline').appendTo(this.element);
  132 + }
  133 + else {
  134 + this.picker.addClass('datepicker-dropdown dropdown-menu');
  135 + }
  136 +
  137 + if (this.o.rtl){
  138 + this.picker.addClass('datepicker-rtl');
  139 + }
  140 +
  141 + if (this.o.calendarWeeks) {
  142 + this.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')
  143 + .attr('colspan', function(i, val){
  144 + return Number(val) + 1;
  145 + });
77 146 }
78   - this.startViewMode = this.viewMode;
79   - this.weekStart = options.weekStart||this.element.data('date-weekstart')||0;
80   - this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1;
81   - this.onRender = options.onRender;
  147 +
  148 + this._allow_update = false;
  149 +
  150 + this.setStartDate(this._o.startDate);
  151 + this.setEndDate(this._o.endDate);
  152 + this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);
  153 + this.setDaysOfWeekHighlighted(this.o.daysOfWeekHighlighted);
  154 + this.setDatesDisabled(this.o.datesDisabled);
  155 +
  156 + this.setViewMode(this.o.startView);
82 157 this.fillDow();
83 158 this.fillMonths();
  159 +
  160 + this._allow_update = true;
  161 +
84 162 this.update();
85   - this.showMode();
  163 +
  164 + if (this.isInline){
  165 + this.show();
  166 + }
86 167 };
87   -
  168 +
88 169 Datepicker.prototype = {
89 170 constructor: Datepicker,
90   -
91   - show: function(e) {
92   - this.picker.show();
93   - this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
94   - this.place();
95   - $(window).on('resize', $.proxy(this.place, this));
96   - if (e ) {
97   - e.stopPropagation();
98   - e.preventDefault();
  171 +
  172 + _resolveViewName: function(view){
  173 + $.each(DPGlobal.viewModes, function(i, viewMode){
  174 + if (view === i || $.inArray(view, viewMode.names) !== -1){
  175 + view = i;
  176 + return false;
  177 + }
  178 + });
  179 +
  180 + return view;
  181 + },
  182 +
  183 + _resolveDaysOfWeek: function(daysOfWeek){
  184 + if (!$.isArray(daysOfWeek))
  185 + daysOfWeek = daysOfWeek.split(/[,\s]*/);
  186 + return $.map(daysOfWeek, Number);
  187 + },
  188 +
  189 + _check_template: function(tmp){
  190 + try {
  191 + // If empty
  192 + if (tmp === undefined || tmp === "") {
  193 + return false;
  194 + }
  195 + // If no html, everything ok
  196 + if ((tmp.match(/[<>]/g) || []).length <= 0) {
  197 + return true;
  198 + }
  199 + // Checking if html is fine
  200 + var jDom = $(tmp);
  201 + return jDom.length > 0;
99 202 }
100   - if (!this.isInput) {
  203 + catch (ex) {
  204 + return false;
101 205 }
102   - var that = this;
103   - $(document).on('mousedown', function(ev){
104   - if ($(ev.target).closest('.datepicker').length == 0) {
105   - that.hide();
  206 + },
  207 +
  208 + _process_options: function(opts){
  209 + // Store raw options for reference
  210 + this._o = $.extend({}, this._o, opts);
  211 + // Processed options
  212 + var o = this.o = $.extend({}, this._o);
  213 +
  214 + // Check if "de-DE" style date is available, if not language should
  215 + // fallback to 2 letter code eg "de"
  216 + var lang = o.language;
  217 + if (!dates[lang]){
  218 + lang = lang.split('-')[0];
  219 + if (!dates[lang])
  220 + lang = defaults.language;
  221 + }
  222 + o.language = lang;
  223 +
  224 + // Retrieve view index from any aliases
  225 + o.startView = this._resolveViewName(o.startView);
  226 + o.minViewMode = this._resolveViewName(o.minViewMode);
  227 + o.maxViewMode = this._resolveViewName(o.maxViewMode);
  228 +
  229 + // Check view is between min and max
  230 + o.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));
  231 +
  232 + // true, false, or Number > 0
  233 + if (o.multidate !== true){
  234 + o.multidate = Number(o.multidate) || false;
  235 + if (o.multidate !== false)
  236 + o.multidate = Math.max(0, o.multidate);
  237 + }
  238 + o.multidateSeparator = String(o.multidateSeparator);
  239 +
  240 + o.weekStart %= 7;
  241 + o.weekEnd = (o.weekStart + 6) % 7;
  242 +
  243 + var format = DPGlobal.parseFormat(o.format);
  244 + if (o.startDate !== -Infinity){
  245 + if (!!o.startDate){
  246 + if (o.startDate instanceof Date)
  247 + o.startDate = this._local_to_utc(this._zero_time(o.startDate));
  248 + else
  249 + o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);
  250 + }
  251 + else {
  252 + o.startDate = -Infinity;
  253 + }
  254 + }
  255 + if (o.endDate !== Infinity){
  256 + if (!!o.endDate){
  257 + if (o.endDate instanceof Date)
  258 + o.endDate = this._local_to_utc(this._zero_time(o.endDate));
  259 + else
  260 + o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);
106 261 }
  262 + else {
  263 + o.endDate = Infinity;
  264 + }
  265 + }
  266 +
  267 + o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);
  268 + o.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);
  269 +
  270 + o.datesDisabled = o.datesDisabled||[];
  271 + if (!$.isArray(o.datesDisabled)) {
  272 + o.datesDisabled = o.datesDisabled.split(',');
  273 + }
  274 + o.datesDisabled = $.map(o.datesDisabled, function(d){
  275 + return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);
107 276 });
108   - this.element.trigger({
109   - type: 'show',
110   - date: this.date
  277 +
  278 + var plc = String(o.orientation).toLowerCase().split(/\s+/g),
  279 + _plc = o.orientation.toLowerCase();
  280 + plc = $.grep(plc, function(word){
  281 + return /^auto|left|right|top|bottom$/.test(word);
111 282 });
  283 + o.orientation = {x: 'auto', y: 'auto'};
  284 + if (!_plc || _plc === 'auto')
  285 + ; // no action
  286 + else if (plc.length === 1){
  287 + switch (plc[0]){
  288 + case 'top':
  289 + case 'bottom':
  290 + o.orientation.y = plc[0];
  291 + break;
  292 + case 'left':
  293 + case 'right':
  294 + o.orientation.x = plc[0];
  295 + break;
  296 + }
  297 + }
  298 + else {
  299 + _plc = $.grep(plc, function(word){
  300 + return /^left|right$/.test(word);
  301 + });
  302 + o.orientation.x = _plc[0] || 'auto';
  303 +
  304 + _plc = $.grep(plc, function(word){
  305 + return /^top|bottom$/.test(word);
  306 + });
  307 + o.orientation.y = _plc[0] || 'auto';
  308 + }
  309 + if (o.defaultViewDate) {
  310 + var year = o.defaultViewDate.year || new Date().getFullYear();
  311 + var month = o.defaultViewDate.month || 0;
  312 + var day = o.defaultViewDate.day || 1;
  313 + o.defaultViewDate = UTCDate(year, month, day);
  314 + } else {
  315 + o.defaultViewDate = UTCToday();
  316 + }
112 317 },
113   -
114   - hide: function(){
115   - this.picker.hide();
116   - $(window).off('resize', this.place);
117   - this.viewMode = this.startViewMode;
118   - this.showMode();
119   - if (!this.isInput) {
120   - $(document).off('mousedown', this.hide);
121   - }
122   - //this.set();
  318 + _events: [],
  319 + _secondaryEvents: [],
  320 + _applyEvents: function(evs){
  321 + for (var i=0, el, ch, ev; i < evs.length; i++){
  322 + el = evs[i][0];
  323 + if (evs[i].length === 2){
  324 + ch = undefined;
  325 + ev = evs[i][1];
  326 + } else if (evs[i].length === 3){
  327 + ch = evs[i][1];
  328 + ev = evs[i][2];
  329 + }
  330 + el.on(ev, ch);
  331 + }
  332 + },
  333 + _unapplyEvents: function(evs){
  334 + for (var i=0, el, ev, ch; i < evs.length; i++){
  335 + el = evs[i][0];
  336 + if (evs[i].length === 2){
  337 + ch = undefined;
  338 + ev = evs[i][1];
  339 + } else if (evs[i].length === 3){
  340 + ch = evs[i][1];
  341 + ev = evs[i][2];
  342 + }
  343 + el.off(ev, ch);
  344 + }
  345 + },
  346 + _buildEvents: function(){
  347 + var events = {
  348 + keyup: $.proxy(function(e){
  349 + if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)
  350 + this.update();
  351 + }, this),
  352 + keydown: $.proxy(this.keydown, this),
  353 + paste: $.proxy(this.paste, this)
  354 + };
  355 +
  356 + if (this.o.showOnFocus === true) {
  357 + events.focus = $.proxy(this.show, this);
  358 + }
  359 +
  360 + if (this.isInput) { // single input
  361 + this._events = [
  362 + [this.element, events]
  363 + ];
  364 + }
  365 + // component: input + button
  366 + else if (this.component && this.inputField.length) {
  367 + this._events = [
  368 + // For components that are not readonly, allow keyboard nav
  369 + [this.inputField, events],
  370 + [this.component, {
  371 + click: $.proxy(this.show, this)
  372 + }]
  373 + ];
  374 + }
  375 + else {
  376 + this._events = [
  377 + [this.element, {
  378 + click: $.proxy(this.show, this),
  379 + keydown: $.proxy(this.keydown, this)
  380 + }]
  381 + ];
  382 + }
  383 + this._events.push(
  384 + // Component: listen for blur on element descendants
  385 + [this.element, '*', {
  386 + blur: $.proxy(function(e){
  387 + this._focused_from = e.target;
  388 + }, this)
  389 + }],
  390 + // Input: listen for blur on element
  391 + [this.element, {
  392 + blur: $.proxy(function(e){
  393 + this._focused_from = e.target;
  394 + }, this)
  395 + }]
  396 + );
  397 +
  398 + if (this.o.immediateUpdates) {
  399 + // Trigger input updates immediately on changed year/month
  400 + this._events.push([this.element, {
  401 + 'changeYear changeMonth': $.proxy(function(e){
  402 + this.update(e.date);
  403 + }, this)
  404 + }]);
  405 + }
  406 +
  407 + this._secondaryEvents = [
  408 + [this.picker, {
  409 + click: $.proxy(this.click, this)
  410 + }],
  411 + [this.picker, '.prev, .next', {
  412 + click: $.proxy(this.navArrowsClick, this)
  413 + }],
  414 + [$(window), {
  415 + resize: $.proxy(this.place, this)
  416 + }],
  417 + [$(document), {
  418 + 'mousedown touchstart': $.proxy(function(e){
  419 + // Clicked outside the datepicker, hide it
  420 + if (!(
  421 + this.element.is(e.target) ||
  422 + this.element.find(e.target).length ||
  423 + this.picker.is(e.target) ||
  424 + this.picker.find(e.target).length ||
  425 + this.isInline
  426 + )){
  427 + this.hide();
  428 + }
  429 + }, this)
  430 + }]
  431 + ];
  432 + },
  433 + _attachEvents: function(){
  434 + this._detachEvents();
  435 + this._applyEvents(this._events);
  436 + },
  437 + _detachEvents: function(){
  438 + this._unapplyEvents(this._events);
  439 + },
  440 + _attachSecondaryEvents: function(){
  441 + this._detachSecondaryEvents();
  442 + this._applyEvents(this._secondaryEvents);
  443 + },
  444 + _detachSecondaryEvents: function(){
  445 + this._unapplyEvents(this._secondaryEvents);
  446 + },
  447 + _trigger: function(event, altdate){
  448 + var date = altdate || this.dates.get(-1),
  449 + local_date = this._utc_to_local(date);
  450 +
123 451 this.element.trigger({
124   - type: 'hide',
125   - date: this.date
  452 + type: event,
  453 + date: local_date,
  454 + viewMode: this.viewMode,
  455 + dates: $.map(this.dates, this._utc_to_local),
  456 + format: $.proxy(function(ix, format){
  457 + if (arguments.length === 0){
  458 + ix = this.dates.length - 1;
  459 + format = this.o.format;
  460 + } else if (typeof ix === 'string'){
  461 + format = ix;
  462 + ix = this.dates.length - 1;
  463 + }
  464 + format = format || this.o.format;
  465 + var date = this.dates.get(ix);
  466 + return DPGlobal.formatDate(date, format, this.o.language);
  467 + }, this)
126 468 });
127 469 },
128   -
129   - set: function() {
130   - var formated = DPGlobal.formatDate(this.date, this.format);
131   - if (!this.isInput) {
132   - if (this.component){
133   - this.element.find('input').prop('value', formated);
134   - }
135   - this.element.data('date', formated);
  470 +
  471 + show: function(){
  472 + if (this.inputField.prop('disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))
  473 + return;
  474 + if (!this.isInline)
  475 + this.picker.appendTo(this.o.container);
  476 + this.place();
  477 + this.picker.show();
  478 + this._attachSecondaryEvents();
  479 + this._trigger('show');
  480 + if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {
  481 + $(this.element).blur();
  482 + }
  483 + return this;
  484 + },
  485 +
  486 + hide: function(){
  487 + if (this.isInline || !this.picker.is(':visible'))
  488 + return this;
  489 + this.focusDate = null;
  490 + this.picker.hide().detach();
  491 + this._detachSecondaryEvents();
  492 + this.setViewMode(this.o.startView);
  493 +
  494 + if (this.o.forceParse && this.inputField.val())
  495 + this.setValue();
  496 + this._trigger('hide');
  497 + return this;
  498 + },
  499 +
  500 + destroy: function(){
  501 + this.hide();
  502 + this._detachEvents();
  503 + this._detachSecondaryEvents();
  504 + this.picker.remove();
  505 + delete this.element.data().datepicker;
  506 + if (!this.isInput){
  507 + delete this.element.data().date;
  508 + }
  509 + return this;
  510 + },
  511 +
  512 + paste: function(e){
  513 + var dateString;
  514 + if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types
  515 + && $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {
  516 + dateString = e.originalEvent.clipboardData.getData('text/plain');
  517 + } else if (window.clipboardData) {
  518 + dateString = window.clipboardData.getData('Text');
136 519 } else {
137   - this.element.prop('value', formated);
  520 + return;
138 521 }
  522 + this.setDate(dateString);
  523 + this.update();
  524 + e.preventDefault();
  525 + },
  526 +
  527 + _utc_to_local: function(utc){
  528 + if (!utc) {
  529 + return utc;
  530 + }
  531 +
  532 + var local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));
  533 +
  534 + if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {
  535 + local = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));
  536 + }
  537 +
  538 + return local;
  539 + },
  540 + _local_to_utc: function(local){
  541 + return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));
139 542 },
140   -
141   - setValue: function(newDate) {
142   - if (typeof newDate === 'string') {
143   - this.date = DPGlobal.parseDate(newDate, this.format);
  543 + _zero_time: function(local){
  544 + return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
  545 + },
  546 + _zero_utc_time: function(utc){
  547 + return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());
  548 + },
  549 +
  550 + getDates: function(){
  551 + return $.map(this.dates, this._utc_to_local);
  552 + },
  553 +
  554 + getUTCDates: function(){
  555 + return $.map(this.dates, function(d){
  556 + return new Date(d);
  557 + });
  558 + },
  559 +
  560 + getDate: function(){
  561 + return this._utc_to_local(this.getUTCDate());
  562 + },
  563 +
  564 + getUTCDate: function(){
  565 + var selected_date = this.dates.get(-1);
  566 + if (selected_date !== undefined) {
  567 + return new Date(selected_date);
144 568 } else {
145   - this.date = new Date(newDate);
  569 + return null;
146 570 }
147   - this.set();
148   - this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
149   - this.fill();
150 571 },
151   -
  572 +
  573 + clearDates: function(){
  574 + this.inputField.val('');
  575 + this.update();
  576 + this._trigger('changeDate');
  577 +
  578 + if (this.o.autoclose) {
  579 + this.hide();
  580 + }
  581 + },
  582 +
  583 + setDates: function(){
  584 + var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
  585 + this.update.apply(this, args);
  586 + this._trigger('changeDate');
  587 + this.setValue();
  588 + return this;
  589 + },
  590 +
  591 + setUTCDates: function(){
  592 + var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
  593 + this.setDates.apply(this, $.map(args, this._utc_to_local));
  594 + return this;
  595 + },
  596 +
  597 + setDate: alias('setDates'),
  598 + setUTCDate: alias('setUTCDates'),
  599 + remove: alias('destroy'),
  600 +
  601 + setValue: function(){
  602 + var formatted = this.getFormattedDate();
  603 + this.inputField.val(formatted);
  604 + return this;
  605 + },
  606 +
  607 + getFormattedDate: function(format){
  608 + if (format === undefined)
  609 + format = this.o.format;
  610 +
  611 + var lang = this.o.language;
  612 + return $.map(this.dates, function(d){
  613 + return DPGlobal.formatDate(d, format, lang);
  614 + }).join(this.o.multidateSeparator);
  615 + },
  616 +
  617 + getStartDate: function(){
  618 + return this.o.startDate;
  619 + },
  620 +
  621 + setStartDate: function(startDate){
  622 + this._process_options({startDate: startDate});
  623 + this.update();
  624 + this.updateNavArrows();
  625 + return this;
  626 + },
  627 +
  628 + getEndDate: function(){
  629 + return this.o.endDate;
  630 + },
  631 +
  632 + setEndDate: function(endDate){
  633 + this._process_options({endDate: endDate});
  634 + this.update();
  635 + this.updateNavArrows();
  636 + return this;
  637 + },
  638 +
  639 + setDaysOfWeekDisabled: function(daysOfWeekDisabled){
  640 + this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});
  641 + this.update();
  642 + return this;
  643 + },
  644 +
  645 + setDaysOfWeekHighlighted: function(daysOfWeekHighlighted){
  646 + this._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});
  647 + this.update();
  648 + return this;
  649 + },
  650 +
  651 + setDatesDisabled: function(datesDisabled){
  652 + this._process_options({datesDisabled: datesDisabled});
  653 + this.update();
  654 + return this;
  655 + },
  656 +
152 657 place: function(){
153   - var offset = this.component ? this.component.offset() : this.element.offset();
154   - this.picker.css({
155   - top: offset.top + this.height,
156   - left: offset.left
  658 + if (this.isInline)
  659 + return this;
  660 + var calendarWidth = this.picker.outerWidth(),
  661 + calendarHeight = this.picker.outerHeight(),
  662 + visualPadding = 10,
  663 + container = $(this.o.container),
  664 + windowWidth = container.width(),
  665 + scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),
  666 + appendOffset = container.offset();
  667 +
  668 + var parentsZindex = [];
  669 + this.element.parents().each(function(){
  670 + var itemZIndex = $(this).css('z-index');
  671 + if (itemZIndex !== 'auto' && itemZIndex !== 0) parentsZindex.push(parseInt(itemZIndex));
157 672 });
158   - },
159   -
160   - update: function(newDate){
161   - this.date = DPGlobal.parseDate(
162   - typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')),
163   - this.format
  673 + var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;
  674 + var offset = this.component ? this.component.parent().offset() : this.element.offset();
  675 + var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
  676 + var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
  677 + var left = offset.left - appendOffset.left,
  678 + top = offset.top - appendOffset.top;
  679 +
  680 + if (this.o.container !== 'body') {
  681 + top += scrollTop;
  682 + }
  683 +
  684 + this.picker.removeClass(
  685 + 'datepicker-orient-top datepicker-orient-bottom '+
  686 + 'datepicker-orient-right datepicker-orient-left'
164 687 );
165   - this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
  688 +
  689 + if (this.o.orientation.x !== 'auto'){
  690 + this.picker.addClass('datepicker-orient-' + this.o.orientation.x);
  691 + if (this.o.orientation.x === 'right')
  692 + left -= calendarWidth - width;
  693 + }
  694 + // auto x orientation is best-placement: if it crosses a window
  695 + // edge, fudge it sideways
  696 + else {
  697 + if (offset.left < 0) {
  698 + // component is outside the window on the left side. Move it into visible range
  699 + this.picker.addClass('datepicker-orient-left');
  700 + left -= offset.left - visualPadding;
  701 + } else if (left + calendarWidth > windowWidth) {
  702 + // the calendar passes the widow right edge. Align it to component right side
  703 + this.picker.addClass('datepicker-orient-right');
  704 + left += width - calendarWidth;
  705 + } else {
  706 + if (this.o.rtl) {
  707 + // Default to right
  708 + this.picker.addClass('datepicker-orient-right');
  709 + } else {
  710 + // Default to left
  711 + this.picker.addClass('datepicker-orient-left');
  712 + }
  713 + }
  714 + }
  715 +
  716 + // auto y orientation is best-situation: top or bottom, no fudging,
  717 + // decision based on which shows more of the calendar
  718 + var yorient = this.o.orientation.y,
  719 + top_overflow;
  720 + if (yorient === 'auto'){
  721 + top_overflow = -scrollTop + top - calendarHeight;
  722 + yorient = top_overflow < 0 ? 'bottom' : 'top';
  723 + }
  724 +
  725 + this.picker.addClass('datepicker-orient-' + yorient);
  726 + if (yorient === 'top')
  727 + top -= calendarHeight + parseInt(this.picker.css('padding-top'));
  728 + else
  729 + top += height;
  730 +
  731 + if (this.o.rtl) {
  732 + var right = windowWidth - (left + width);
  733 + this.picker.css({
  734 + top: top,
  735 + right: right,
  736 + zIndex: zIndex
  737 + });
  738 + } else {
  739 + this.picker.css({
  740 + top: top,
  741 + left: left,
  742 + zIndex: zIndex
  743 + });
  744 + }
  745 + return this;
  746 + },
  747 +
  748 + _allow_update: true,
  749 + update: function(){
  750 + if (!this._allow_update)
  751 + return this;
  752 +
  753 + var oldDates = this.dates.copy(),
  754 + dates = [],
  755 + fromArgs = false;
  756 + if (arguments.length){
  757 + $.each(arguments, $.proxy(function(i, date){
  758 + if (date instanceof Date)
  759 + date = this._local_to_utc(date);
  760 + dates.push(date);
  761 + }, this));
  762 + fromArgs = true;
  763 + } else {
  764 + dates = this.isInput
  765 + ? this.element.val()
  766 + : this.element.data('date') || this.inputField.val();
  767 + if (dates && this.o.multidate)
  768 + dates = dates.split(this.o.multidateSeparator);
  769 + else
  770 + dates = [dates];
  771 + delete this.element.data().date;
  772 + }
  773 +
  774 + dates = $.map(dates, $.proxy(function(date){
  775 + return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);
  776 + }, this));
  777 + dates = $.grep(dates, $.proxy(function(date){
  778 + return (
  779 + !this.dateWithinRange(date) ||
  780 + !date
  781 + );
  782 + }, this), true);
  783 + this.dates.replace(dates);
  784 +
  785 + if (this.o.updateViewDate) {
  786 + if (this.dates.length)
  787 + this.viewDate = new Date(this.dates.get(-1));
  788 + else if (this.viewDate < this.o.startDate)
  789 + this.viewDate = new Date(this.o.startDate);
  790 + else if (this.viewDate > this.o.endDate)
  791 + this.viewDate = new Date(this.o.endDate);
  792 + else
  793 + this.viewDate = this.o.defaultViewDate;
  794 + }
  795 +
  796 + if (fromArgs){
  797 + // setting date by clicking
  798 + this.setValue();
  799 + this.element.change();
  800 + }
  801 + else if (this.dates.length){
  802 + // setting date by typing
  803 + if (String(oldDates) !== String(this.dates) && fromArgs) {
  804 + this._trigger('changeDate');
  805 + this.element.change();
  806 + }
  807 + }
  808 + if (!this.dates.length && oldDates.length) {
  809 + this._trigger('clearDate');
  810 + this.element.change();
  811 + }
  812 +
166 813 this.fill();
  814 + return this;
167 815 },
168   -
  816 +
169 817 fillDow: function(){
170   - var dowCnt = this.weekStart;
171   - var html = '<tr>';
172   - while (dowCnt < this.weekStart + 7) {
173   - html += '<th class="dow">'+DPGlobal.dates.daysMin[(dowCnt++)%7]+'</th>';
  818 + var dowCnt = this.o.weekStart,
  819 + html = '<tr>';
  820 + if (this.o.calendarWeeks){
  821 + html += '<th class="cw">&#160;</th>';
  822 + }
  823 + while (dowCnt < this.o.weekStart + 7){
  824 + html += '<th class="dow';
  825 + if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)
  826 + html += ' disabled';
  827 + html += '">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';
174 828 }
175 829 html += '</tr>';
176 830 this.picker.find('.datepicker-days thead').append(html);
177 831 },
178   -
  832 +
179 833 fillMonths: function(){
180   - var html = '';
181   - var i = 0
182   - while (i < 12) {
183   - html += '<span class="month">'+DPGlobal.dates.monthsShort[i++]+'</span>';
  834 + var localDate = this._utc_to_local(this.viewDate);
  835 + var html = '',
  836 + i = 0;
  837 + while (i < 12){
  838 + var focused = localDate && localDate.getMonth() === i ? ' focused' : '';
  839 + html += '<span class="month' + focused + '">' + dates[this.o.language].monthsShort[i++]+'</span>';
  840 + }
  841 + this.picker.find('.datepicker-months td').html(html);
  842 + },
  843 +
  844 + setRange: function(range){
  845 + if (!range || !range.length)
  846 + delete this.range;
  847 + else
  848 + this.range = $.map(range, function(d){
  849 + return d.valueOf();
  850 + });
  851 + this.fill();
  852 + },
  853 +
  854 + getClassNames: function(date){
  855 + var cls = [],
  856 + year = this.viewDate.getUTCFullYear(),
  857 + month = this.viewDate.getUTCMonth(),
  858 + today = UTCToday();
  859 + if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){
  860 + cls.push('old');
  861 + } else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){
  862 + cls.push('new');
  863 + }
  864 + if (this.focusDate && date.valueOf() === this.focusDate.valueOf())
  865 + cls.push('focused');
  866 + // Compare internal UTC date with UTC today, not local today
  867 + if (this.o.todayHighlight && isUTCEquals(date, today)) {
  868 + cls.push('today');
  869 + }
  870 + if (this.dates.contains(date) !== -1)
  871 + cls.push('active');
  872 + if (!this.dateWithinRange(date)){
  873 + cls.push('disabled');
  874 + }
  875 + if (this.dateIsDisabled(date)){
  876 + cls.push('disabled', 'disabled-date');
  877 + }
  878 + if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){
  879 + cls.push('highlighted');
  880 + }
  881 +
  882 + if (this.range){
  883 + if (date > this.range[0] && date < this.range[this.range.length-1]){
  884 + cls.push('range');
  885 + }
  886 + if ($.inArray(date.valueOf(), this.range) !== -1){
  887 + cls.push('selected');
  888 + }
  889 + if (date.valueOf() === this.range[0]){
  890 + cls.push('range-start');
  891 + }
  892 + if (date.valueOf() === this.range[this.range.length-1]){
  893 + cls.push('range-end');
  894 + }
  895 + }
  896 + return cls;
  897 + },
  898 +
  899 + _fill_yearsView: function(selector, cssClass, factor, step, currentYear, startYear, endYear, callback){
  900 + var html, view, year, steps, startStep, endStep, thisYear, i, classes, tooltip, before;
  901 +
  902 + html = '';
  903 + view = this.picker.find(selector);
  904 + year = parseInt(currentYear / factor, 10) * factor;
  905 + startStep = parseInt(startYear / step, 10) * step;
  906 + endStep = parseInt(endYear / step, 10) * step;
  907 + steps = $.map(this.dates, function(d){
  908 + return parseInt(d.getUTCFullYear() / step, 10) * step;
  909 + });
  910 +
  911 + view.find('.datepicker-switch').text(year + '-' + (year + step * 9));
  912 +
  913 + thisYear = year - step;
  914 + for (i = -1; i < 11; i += 1) {
  915 + classes = [cssClass];
  916 + tooltip = null;
  917 +
  918 + if (i === -1) {
  919 + classes.push('old');
  920 + } else if (i === 10) {
  921 + classes.push('new');
  922 + }
  923 + if ($.inArray(thisYear, steps) !== -1) {
  924 + classes.push('active');
  925 + }
  926 + if (thisYear < startStep || thisYear > endStep) {
  927 + classes.push('disabled');
  928 + }
  929 + if (thisYear === this.viewDate.getFullYear()) {
  930 + classes.push('focused');
  931 + }
  932 +
  933 + if (callback !== $.noop) {
  934 + before = callback(new Date(thisYear, 0, 1));
  935 + if (before === undefined) {
  936 + before = {};
  937 + } else if (typeof before === 'boolean') {
  938 + before = {enabled: before};
  939 + } else if (typeof before === 'string') {
  940 + before = {classes: before};
  941 + }
  942 + if (before.enabled === false) {
  943 + classes.push('disabled');
  944 + }
  945 + if (before.classes) {
  946 + classes = classes.concat(before.classes.split(/\s+/));
  947 + }
  948 + if (before.tooltip) {
  949 + tooltip = before.tooltip;
  950 + }
  951 + }
  952 +
  953 + html += '<span class="' + classes.join(' ') + '"' + (tooltip ? ' title="' + tooltip + '"' : '') + '>' + thisYear + '</span>';
  954 + thisYear += step;
184 955 }
185   - this.picker.find('.datepicker-months td').append(html);
  956 + view.find('td').html(html);
186 957 },
187   -
188   - fill: function() {
  958 +
  959 + fill: function(){
189 960 var d = new Date(this.viewDate),
190   - year = d.getFullYear(),
191   - month = d.getMonth(),
192   - currentDate = this.date.valueOf();
193   - this.picker.find('.datepicker-days th:eq(1)')
194   - .text(DPGlobal.dates.months[month]+' '+year);
195   - var prevMonth = new Date(year, month-1, 28,0,0,0,0),
196   - day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());
197   - prevMonth.setDate(day);
198   - prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7);
  961 + year = d.getUTCFullYear(),
  962 + month = d.getUTCMonth(),
  963 + startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
  964 + startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
  965 + endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
  966 + endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
  967 + todaytxt = dates[this.o.language].today || dates['en'].today || '',
  968 + cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
  969 + titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
  970 + tooltip,
  971 + before;
  972 + if (isNaN(year) || isNaN(month))
  973 + return;
  974 + this.picker.find('.datepicker-days .datepicker-switch')
  975 + .text(DPGlobal.formatDate(d, titleFormat, this.o.language));
  976 + this.picker.find('tfoot .today')
  977 + .text(todaytxt)
  978 + .toggle(this.o.todayBtn !== false);
  979 + this.picker.find('tfoot .clear')
  980 + .text(cleartxt)
  981 + .toggle(this.o.clearBtn !== false);
  982 + this.picker.find('thead .datepicker-title')
  983 + .text(this.o.title)
  984 + .toggle(this.o.title !== '');
  985 + this.updateNavArrows();
  986 + this.fillMonths();
  987 + var prevMonth = UTCDate(year, month, 0),
  988 + day = prevMonth.getUTCDate();
  989 + prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);
199 990 var nextMonth = new Date(prevMonth);
200   - nextMonth.setDate(nextMonth.getDate() + 42);
  991 + if (prevMonth.getUTCFullYear() < 100){
  992 + nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());
  993 + }
  994 + nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
201 995 nextMonth = nextMonth.valueOf();
202 996 var html = [];
203   - var clsName,
204   - prevY,
205   - prevM;
206   - while(prevMonth.valueOf() < nextMonth) {
207   - if (prevMonth.getDay() === this.weekStart) {
  997 + var weekDay, clsName;
  998 + while (prevMonth.valueOf() < nextMonth){
  999 + weekDay = prevMonth.getUTCDay();
  1000 + if (weekDay === this.o.weekStart){
208 1001 html.push('<tr>');
  1002 + if (this.o.calendarWeeks){
  1003 + // ISO 8601: First week contains first thursday.
  1004 + // ISO also states week starts on Monday, but we can be more abstract here.
  1005 + var
  1006 + // Start of current week: based on weekstart/current date
  1007 + ws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),
  1008 + // Thursday of this week
  1009 + th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
  1010 + // First Thursday of year, year from thursday
  1011 + yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),
  1012 + // Calendar week: ms between thursdays, div ms per day, div 7 days
  1013 + calWeek = (th - yth) / 864e5 / 7 + 1;
  1014 + html.push('<td class="cw">'+ calWeek +'</td>');
  1015 + }
209 1016 }
210   - clsName = this.onRender(prevMonth);
211   - prevY = prevMonth.getFullYear();
212   - prevM = prevMonth.getMonth();
213   - if ((prevM < month && prevY === year) || prevY < year) {
214   - clsName += ' old';
215   - } else if ((prevM > month && prevY === year) || prevY > year) {
216   - clsName += ' new';
  1017 + clsName = this.getClassNames(prevMonth);
  1018 + clsName.push('day');
  1019 +
  1020 + if (this.o.beforeShowDay !== $.noop){
  1021 + before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
  1022 + if (before === undefined)
  1023 + before = {};
  1024 + else if (typeof before === 'boolean')
  1025 + before = {enabled: before};
  1026 + else if (typeof before === 'string')
  1027 + before = {classes: before};
  1028 + if (before.enabled === false)
  1029 + clsName.push('disabled');
  1030 + if (before.classes)
  1031 + clsName = clsName.concat(before.classes.split(/\s+/));
  1032 + if (before.tooltip)
  1033 + tooltip = before.tooltip;
217 1034 }
218   - if (prevMonth.valueOf() === currentDate) {
219   - clsName += ' active';
  1035 +
  1036 + //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)
  1037 + //Fallback to unique function for older jquery versions
  1038 + if ($.isFunction($.uniqueSort)) {
  1039 + clsName = $.uniqueSort(clsName);
  1040 + } else {
  1041 + clsName = $.unique(clsName);
220 1042 }
221   - html.push('<td class="day '+clsName+'">'+prevMonth.getDate() + '</td>');
222   - if (prevMonth.getDay() === this.weekEnd) {
  1043 +
  1044 + html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + (this.o.dateCells ? ' data-date="'+(prevMonth.getTime().toString())+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>');
  1045 + tooltip = null;
  1046 + if (weekDay === this.o.weekEnd){
223 1047 html.push('</tr>');
224 1048 }
225   - prevMonth.setDate(prevMonth.getDate()+1);
  1049 + prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);
226 1050 }
227   - this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
228   - var currentYear = this.date.getFullYear();
229   -
  1051 + this.picker.find('.datepicker-days tbody').html(html.join(''));
  1052 +
  1053 + var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';
230 1054 var months = this.picker.find('.datepicker-months')
231   - .find('th:eq(1)')
232   - .text(year)
  1055 + .find('.datepicker-switch')
  1056 + .text(this.o.maxViewMode < 2 ? monthsTitle : year)
233 1057 .end()
234   - .find('span').removeClass('active');
235   - if (currentYear === year) {
236   - months.eq(this.date.getMonth()).addClass('active');
237   - }
238   -
239   - html = '';
240   - year = parseInt(year/10, 10) * 10;
241   - var yearCont = this.picker.find('.datepicker-years')
242   - .find('th:eq(1)')
243   - .text(year + '-' + (year + 9))
244   - .end()
245   - .find('td');
246   - year -= 1;
247   - for (var i = -1; i < 11; i++) {
248   - html += '<span class="year'+(i === -1 || i === 10 ? ' old' : '')+(currentYear === year ? ' active' : '')+'">'+year+'</span>';
249   - year += 1;
250   - }
251   - yearCont.html(html);
252   - },
253   -
254   - click: function(e) {
255   - e.stopPropagation();
  1058 + .find('tbody span').removeClass('active');
  1059 +
  1060 + $.each(this.dates, function(i, d){
  1061 + if (d.getUTCFullYear() === year)
  1062 + months.eq(d.getUTCMonth()).addClass('active');
  1063 + });
  1064 +
  1065 + if (year < startYear || year > endYear){
  1066 + months.addClass('disabled');
  1067 + }
  1068 + if (year === startYear){
  1069 + months.slice(0, startMonth).addClass('disabled');
  1070 + }
  1071 + if (year === endYear){
  1072 + months.slice(endMonth+1).addClass('disabled');
  1073 + }
  1074 +
  1075 + if (this.o.beforeShowMonth !== $.noop){
  1076 + var that = this;
  1077 + $.each(months, function(i, month){
  1078 + var moDate = new Date(year, i, 1);
  1079 + var before = that.o.beforeShowMonth(moDate);
  1080 + if (before === undefined)
  1081 + before = {};
  1082 + else if (typeof before === 'boolean')
  1083 + before = {enabled: before};
  1084 + else if (typeof before === 'string')
  1085 + before = {classes: before};
  1086 + if (before.enabled === false && !$(month).hasClass('disabled'))
  1087 + $(month).addClass('disabled');
  1088 + if (before.classes)
  1089 + $(month).addClass(before.classes);
  1090 + if (before.tooltip)
  1091 + $(month).prop('title', before.tooltip);
  1092 + });
  1093 + }
  1094 +
  1095 + // Generating decade/years picker
  1096 + this._fill_yearsView(
  1097 + '.datepicker-years',
  1098 + 'year',
  1099 + 10,
  1100 + 1,
  1101 + year,
  1102 + startYear,
  1103 + endYear,
  1104 + this.o.beforeShowYear
  1105 + );
  1106 +
  1107 + // Generating century/decades picker
  1108 + this._fill_yearsView(
  1109 + '.datepicker-decades',
  1110 + 'decade',
  1111 + 100,
  1112 + 10,
  1113 + year,
  1114 + startYear,
  1115 + endYear,
  1116 + this.o.beforeShowDecade
  1117 + );
  1118 +
  1119 + // Generating millennium/centuries picker
  1120 + this._fill_yearsView(
  1121 + '.datepicker-centuries',
  1122 + 'century',
  1123 + 1000,
  1124 + 100,
  1125 + year,
  1126 + startYear,
  1127 + endYear,
  1128 + this.o.beforeShowCentury
  1129 + );
  1130 + },
  1131 +
  1132 + updateNavArrows: function(){
  1133 + if (!this._allow_update)
  1134 + return;
  1135 +
  1136 + var d = new Date(this.viewDate),
  1137 + year = d.getUTCFullYear(),
  1138 + month = d.getUTCMonth(),
  1139 + prevState,
  1140 + nextState;
  1141 + switch (this.viewMode){
  1142 + case 0:
  1143 + prevState = (
  1144 + this.o.startDate !== -Infinity &&
  1145 + year <= this.o.startDate.getUTCFullYear() &&
  1146 + month <= this.o.startDate.getUTCMonth()
  1147 + );
  1148 +
  1149 + nextState = (
  1150 + this.o.endDate !== Infinity &&
  1151 + year >= this.o.endDate.getUTCFullYear() &&
  1152 + month >= this.o.endDate.getUTCMonth()
  1153 + );
  1154 + break;
  1155 + case 1:
  1156 + case 2:
  1157 + case 3:
  1158 + case 4:
  1159 + prevState = (
  1160 + this.o.startDate !== -Infinity &&
  1161 + year <= this.o.startDate.getUTCFullYear()
  1162 + );
  1163 +
  1164 + nextState = (
  1165 + this.o.endDate !== Infinity &&
  1166 + year >= this.o.endDate.getUTCFullYear()
  1167 + );
  1168 + break;
  1169 + }
  1170 +
  1171 + this.picker.find('.prev').toggleClass('disabled', prevState);
  1172 + this.picker.find('.next').toggleClass('disabled', nextState);
  1173 + },
  1174 +
  1175 + click: function(e){
256 1176 e.preventDefault();
257   - var target = $(e.target).closest('span, td, th');
258   - if (target.length === 1) {
259   - switch(target[0].nodeName.toLowerCase()) {
260   - case 'th':
261   - switch(target[0].className) {
262   - case 'switch':
263   - this.showMode(1);
264   - break;
265   - case 'prev':
266   - case 'next':
267   - this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call(
268   - this.viewDate,
269   - this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) +
270   - DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1)
271   - );
272   - this.fill();
273   - this.set();
274   - break;
275   - }
276   - break;
277   - case 'span':
278   - if (target.is('.month')) {
279   - var month = target.parent().find('span').index(target);
280   - this.viewDate.setMonth(month);
281   - } else {
282   - var year = parseInt(target.text(), 10)||0;
283   - this.viewDate.setFullYear(year);
  1177 + e.stopPropagation();
  1178 +
  1179 + var target, dir, day, year, month;
  1180 + target = $(e.target);
  1181 +
  1182 + // Clicked on the switch
  1183 + if (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){
  1184 + this.setViewMode(this.viewMode + 1);
  1185 + }
  1186 +
  1187 + // Clicked on today button
  1188 + if (target.hasClass('today') && !target.hasClass('day')){
  1189 + this.setViewMode(0);
  1190 + this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');
  1191 + }
  1192 +
  1193 + // Clicked on clear button
  1194 + if (target.hasClass('clear')){
  1195 + this.clearDates();
  1196 + }
  1197 +
  1198 + if (!target.hasClass('disabled')){
  1199 + // Clicked on a day
  1200 + if (target.hasClass('day')){
  1201 + day = Number(target.text());
  1202 + year = this.viewDate.getUTCFullYear();
  1203 + month = this.viewDate.getUTCMonth();
  1204 +
  1205 + if (target.hasClass('old') || target.hasClass('new')){
  1206 + dir = target.hasClass('old') ? -1 : 1;
  1207 + month = (month + dir + 12) % 12;
  1208 + if ((dir === -1 && month === 11) || (dir === 1 && month === 0)) {
  1209 + year += dir;
  1210 + if (this.o.updateViewDate) {
  1211 + this._trigger('changeYear', this.viewDate);
  1212 + }
284 1213 }
285   - if (this.viewMode !== 0) {
286   - this.date = new Date(this.viewDate);
287   - this.element.trigger({
288   - type: 'changeDate',
289   - date: this.date,
290   - viewMode: DPGlobal.modes[this.viewMode].clsName
291   - });
  1214 + if (this.o.updateViewDate) {
  1215 + this._trigger('changeMonth', this.viewDate);
292 1216 }
293   - this.showMode(-1);
  1217 + }
  1218 + this._setDate(UTCDate(year, month, day));
  1219 + }
  1220 +
  1221 + // Clicked on a month, year, decade, century
  1222 + if (target.hasClass('month')
  1223 + || target.hasClass('year')
  1224 + || target.hasClass('decade')
  1225 + || target.hasClass('century')) {
  1226 + this.viewDate.setUTCDate(1);
  1227 +
  1228 + day = 1;
  1229 + if (this.viewMode === 1){
  1230 + month = target.parent().find('span').index(target);
  1231 + year = this.viewDate.getUTCFullYear();
  1232 + this.viewDate.setUTCMonth(month);
  1233 + } else {
  1234 + month = 0;
  1235 + year = Number(target.text());
  1236 + this.viewDate.setUTCFullYear(year);
  1237 + }
  1238 +
  1239 + this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);
  1240 +
  1241 + if (this.viewMode === this.o.minViewMode){
  1242 + this._setDate(UTCDate(year, month, day));
  1243 + } else {
  1244 + this.setViewMode(this.viewMode - 1);
  1245 + this.fill();
  1246 + }
  1247 + }
  1248 + }
  1249 +
  1250 + if (this.picker.is(':visible') && this._focused_from){
  1251 + this._focused_from.focus();
  1252 + }
  1253 + delete this._focused_from;
  1254 + },
  1255 +
  1256 + // Clicked on prev or next
  1257 + navArrowsClick: function(e){
  1258 + var target = $(e.target);
  1259 + var dir = target.hasClass('prev') ? -1 : 1;
  1260 + if (this.viewMode !== 0){
  1261 + dir *= DPGlobal.viewModes[this.viewMode].navStep * 12;
  1262 + }
  1263 + this.viewDate = this.moveMonth(this.viewDate, dir);
  1264 + this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);
  1265 + this.fill();
  1266 + },
  1267 +
  1268 + _toggle_multidate: function(date){
  1269 + var ix = this.dates.contains(date);
  1270 + if (!date){
  1271 + this.dates.clear();
  1272 + }
  1273 +
  1274 + if (ix !== -1){
  1275 + if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){
  1276 + this.dates.remove(ix);
  1277 + }
  1278 + } else if (this.o.multidate === false) {
  1279 + this.dates.clear();
  1280 + this.dates.push(date);
  1281 + }
  1282 + else {
  1283 + this.dates.push(date);
  1284 + }
  1285 +
  1286 + if (typeof this.o.multidate === 'number')
  1287 + while (this.dates.length > this.o.multidate)
  1288 + this.dates.remove(0);
  1289 + },
  1290 +
  1291 + _setDate: function(date, which){
  1292 + if (!which || which === 'date')
  1293 + this._toggle_multidate(date && new Date(date));
  1294 + if ((!which && this.o.updateViewDate) || which === 'view')
  1295 + this.viewDate = date && new Date(date);
  1296 +
  1297 + this.fill();
  1298 + this.setValue();
  1299 + if (!which || which !== 'view') {
  1300 + this._trigger('changeDate');
  1301 + }
  1302 + this.inputField.trigger('change');
  1303 + if (this.o.autoclose && (!which || which === 'date')){
  1304 + this.hide();
  1305 + }
  1306 + },
  1307 +
  1308 + moveDay: function(date, dir){
  1309 + var newDate = new Date(date);
  1310 + newDate.setUTCDate(date.getUTCDate() + dir);
  1311 +
  1312 + return newDate;
  1313 + },
  1314 +
  1315 + moveWeek: function(date, dir){
  1316 + return this.moveDay(date, dir * 7);
  1317 + },
  1318 +
  1319 + moveMonth: function(date, dir){
  1320 + if (!isValidDate(date))
  1321 + return this.o.defaultViewDate;
  1322 + if (!dir)
  1323 + return date;
  1324 + var new_date = new Date(date.valueOf()),
  1325 + day = new_date.getUTCDate(),
  1326 + month = new_date.getUTCMonth(),
  1327 + mag = Math.abs(dir),
  1328 + new_month, test;
  1329 + dir = dir > 0 ? 1 : -1;
  1330 + if (mag === 1){
  1331 + test = dir === -1
  1332 + // If going back one month, make sure month is not current month
  1333 + // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
  1334 + ? function(){
  1335 + return new_date.getUTCMonth() === month;
  1336 + }
  1337 + // If going forward one month, make sure month is as expected
  1338 + // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
  1339 + : function(){
  1340 + return new_date.getUTCMonth() !== new_month;
  1341 + };
  1342 + new_month = month + dir;
  1343 + new_date.setUTCMonth(new_month);
  1344 + // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
  1345 + new_month = (new_month + 12) % 12;
  1346 + }
  1347 + else {
  1348 + // For magnitudes >1, move one month at a time...
  1349 + for (var i=0; i < mag; i++)
  1350 + // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
  1351 + new_date = this.moveMonth(new_date, dir);
  1352 + // ...then reset the day, keeping it in the new month
  1353 + new_month = new_date.getUTCMonth();
  1354 + new_date.setUTCDate(day);
  1355 + test = function(){
  1356 + return new_month !== new_date.getUTCMonth();
  1357 + };
  1358 + }
  1359 + // Common date-resetting loop -- if date is beyond end of month, make it
  1360 + // end of month
  1361 + while (test()){
  1362 + new_date.setUTCDate(--day);
  1363 + new_date.setUTCMonth(new_month);
  1364 + }
  1365 + return new_date;
  1366 + },
  1367 +
  1368 + moveYear: function(date, dir){
  1369 + return this.moveMonth(date, dir*12);
  1370 + },
  1371 +
  1372 + moveAvailableDate: function(date, dir, fn){
  1373 + do {
  1374 + date = this[fn](date, dir);
  1375 +
  1376 + if (!this.dateWithinRange(date))
  1377 + return false;
  1378 +
  1379 + fn = 'moveDay';
  1380 + }
  1381 + while (this.dateIsDisabled(date));
  1382 +
  1383 + return date;
  1384 + },
  1385 +
  1386 + weekOfDateIsDisabled: function(date){
  1387 + return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;
  1388 + },
  1389 +
  1390 + dateIsDisabled: function(date){
  1391 + return (
  1392 + this.weekOfDateIsDisabled(date) ||
  1393 + $.grep(this.o.datesDisabled, function(d){
  1394 + return isUTCEquals(date, d);
  1395 + }).length > 0
  1396 + );
  1397 + },
  1398 +
  1399 + dateWithinRange: function(date){
  1400 + return date >= this.o.startDate && date <= this.o.endDate;
  1401 + },
  1402 +
  1403 + keydown: function(e){
  1404 + if (!this.picker.is(':visible')){
  1405 + if (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker
  1406 + this.show();
  1407 + e.stopPropagation();
  1408 + }
  1409 + return;
  1410 + }
  1411 + var dateChanged = false,
  1412 + dir, newViewDate,
  1413 + focusDate = this.focusDate || this.viewDate;
  1414 + switch (e.keyCode){
  1415 + case 27: // escape
  1416 + if (this.focusDate){
  1417 + this.focusDate = null;
  1418 + this.viewDate = this.dates.get(-1) || this.viewDate;
294 1419 this.fill();
295   - this.set();
  1420 + }
  1421 + else
  1422 + this.hide();
  1423 + e.preventDefault();
  1424 + e.stopPropagation();
  1425 + break;
  1426 + case 37: // left
  1427 + case 38: // up
  1428 + case 39: // right
  1429 + case 40: // down
  1430 + if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)
296 1431 break;
297   - case 'td':
298   - if (target.is('.day') && !target.is('.disabled')){
299   - var day = parseInt(target.text(), 10)||1;
300   - var month = this.viewDate.getMonth();
301   - if (target.is('.old')) {
302   - month -= 1;
303   - } else if (target.is('.new')) {
304   - month += 1;
305   - }
306   - var year = this.viewDate.getFullYear();
307   - this.date = new Date(year, month, day,0,0,0,0);
308   - this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0);
309   - this.fill();
310   - this.set();
311   - this.element.trigger({
312   - type: 'changeDate',
313   - date: this.date,
314   - viewMode: DPGlobal.modes[this.viewMode].clsName
315   - });
316   - }
  1432 + dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;
  1433 + if (this.viewMode === 0) {
  1434 + if (e.ctrlKey){
  1435 + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');
  1436 +
  1437 + if (newViewDate)
  1438 + this._trigger('changeYear', this.viewDate);
  1439 + } else if (e.shiftKey){
  1440 + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');
  1441 +
  1442 + if (newViewDate)
  1443 + this._trigger('changeMonth', this.viewDate);
  1444 + } else if (e.keyCode === 37 || e.keyCode === 39){
  1445 + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');
  1446 + } else if (!this.weekOfDateIsDisabled(focusDate)){
  1447 + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');
  1448 + }
  1449 + } else if (this.viewMode === 1) {
  1450 + if (e.keyCode === 38 || e.keyCode === 40) {
  1451 + dir = dir * 4;
  1452 + }
  1453 + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');
  1454 + } else if (this.viewMode === 2) {
  1455 + if (e.keyCode === 38 || e.keyCode === 40) {
  1456 + dir = dir * 4;
  1457 + }
  1458 + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');
  1459 + }
  1460 + if (newViewDate){
  1461 + this.focusDate = this.viewDate = newViewDate;
  1462 + this.setValue();
  1463 + this.fill();
  1464 + e.preventDefault();
  1465 + }
  1466 + break;
  1467 + case 13: // enter
  1468 + if (!this.o.forceParse)
317 1469 break;
  1470 + focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
  1471 + if (this.o.keyboardNavigation) {
  1472 + this._toggle_multidate(focusDate);
  1473 + dateChanged = true;
  1474 + }
  1475 + this.focusDate = null;
  1476 + this.viewDate = this.dates.get(-1) || this.viewDate;
  1477 + this.setValue();
  1478 + this.fill();
  1479 + if (this.picker.is(':visible')){
  1480 + e.preventDefault();
  1481 + e.stopPropagation();
  1482 + if (this.o.autoclose)
  1483 + this.hide();
  1484 + }
  1485 + break;
  1486 + case 9: // tab
  1487 + this.focusDate = null;
  1488 + this.viewDate = this.dates.get(-1) || this.viewDate;
  1489 + this.fill();
  1490 + this.hide();
  1491 + break;
  1492 + }
  1493 + if (dateChanged){
  1494 + if (this.dates.length)
  1495 + this._trigger('changeDate');
  1496 + else
  1497 + this._trigger('clearDate');
  1498 + this.inputField.trigger('change');
  1499 + }
  1500 + },
  1501 +
  1502 + setViewMode: function(viewMode){
  1503 + this.viewMode = viewMode;
  1504 + this.picker
  1505 + .children('div')
  1506 + .hide()
  1507 + .filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)
  1508 + .show();
  1509 + this.updateNavArrows();
  1510 + this._trigger('changeViewMode', new Date(this.viewDate));
  1511 + }
  1512 + };
  1513 +
  1514 + var DateRangePicker = function(element, options){
  1515 + $.data(element, 'datepicker', this);
  1516 + this.element = $(element);
  1517 + this.inputs = $.map(options.inputs, function(i){
  1518 + return i.jquery ? i[0] : i;
  1519 + });
  1520 + delete options.inputs;
  1521 +
  1522 + this.keepEmptyValues = options.keepEmptyValues;
  1523 + delete options.keepEmptyValues;
  1524 +
  1525 + datepickerPlugin.call($(this.inputs), options)
  1526 + .on('changeDate', $.proxy(this.dateUpdated, this));
  1527 +
  1528 + this.pickers = $.map(this.inputs, function(i){
  1529 + return $.data(i, 'datepicker');
  1530 + });
  1531 + this.updateDates();
  1532 + };
  1533 + DateRangePicker.prototype = {
  1534 + updateDates: function(){
  1535 + this.dates = $.map(this.pickers, function(i){
  1536 + return i.getUTCDate();
  1537 + });
  1538 + this.updateRanges();
  1539 + },
  1540 + updateRanges: function(){
  1541 + var range = $.map(this.dates, function(d){
  1542 + return d.valueOf();
  1543 + });
  1544 + $.each(this.pickers, function(i, p){
  1545 + p.setRange(range);
  1546 + });
  1547 + },
  1548 + dateUpdated: function(e){
  1549 + // `this.updating` is a workaround for preventing infinite recursion
  1550 + // between `changeDate` triggering and `setUTCDate` calling. Until
  1551 + // there is a better mechanism.
  1552 + if (this.updating)
  1553 + return;
  1554 + this.updating = true;
  1555 +
  1556 + var dp = $.data(e.target, 'datepicker');
  1557 +
  1558 + if (dp === undefined) {
  1559 + return;
  1560 + }
  1561 +
  1562 + var new_date = dp.getUTCDate(),
  1563 + keep_empty_values = this.keepEmptyValues,
  1564 + i = $.inArray(e.target, this.inputs),
  1565 + j = i - 1,
  1566 + k = i + 1,
  1567 + l = this.inputs.length;
  1568 + if (i === -1)
  1569 + return;
  1570 +
  1571 + $.each(this.pickers, function(i, p){
  1572 + if (!p.getUTCDate() && (p === dp || !keep_empty_values))
  1573 + p.setUTCDate(new_date);
  1574 + });
  1575 +
  1576 + if (new_date < this.dates[j]){
  1577 + // Date being moved earlier/left
  1578 + while (j >= 0 && new_date < this.dates[j]){
  1579 + this.pickers[j--].setUTCDate(new_date);
  1580 + }
  1581 + } else if (new_date > this.dates[k]){
  1582 + // Date being moved later/right
  1583 + while (k < l && new_date > this.dates[k]){
  1584 + this.pickers[k++].setUTCDate(new_date);
318 1585 }
319 1586 }
  1587 + this.updateDates();
  1588 +
  1589 + delete this.updating;
320 1590 },
321   -
322   - mousedown: function(e){
323   - e.stopPropagation();
324   - e.preventDefault();
  1591 + destroy: function(){
  1592 + $.map(this.pickers, function(p){ p.destroy(); });
  1593 + $(this.inputs).off('changeDate', this.dateUpdated);
  1594 + delete this.element.data().datepicker;
325 1595 },
326   -
327   - showMode: function(dir) {
328   - if (dir) {
329   - this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir));
  1596 + remove: alias('destroy')
  1597 + };
  1598 +
  1599 + function opts_from_el(el, prefix){
  1600 + // Derive options from element data-attrs
  1601 + var data = $(el).data(),
  1602 + out = {}, inkey,
  1603 + replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');
  1604 + prefix = new RegExp('^' + prefix.toLowerCase());
  1605 + function re_lower(_,a){
  1606 + return a.toLowerCase();
  1607 + }
  1608 + for (var key in data)
  1609 + if (prefix.test(key)){
  1610 + inkey = key.replace(replace, re_lower);
  1611 + out[inkey] = data[key];
330 1612 }
331   - this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
  1613 + return out;
  1614 + }
  1615 +
  1616 + function opts_from_locale(lang){
  1617 + // Derive options from locale plugins
  1618 + var out = {};
  1619 + // Check if "de-DE" style date is available, if not language should
  1620 + // fallback to 2 letter code eg "de"
  1621 + if (!dates[lang]){
  1622 + lang = lang.split('-')[0];
  1623 + if (!dates[lang])
  1624 + return;
332 1625 }
333   - };
334   -
335   - $.fn.datepicker = function ( option, val ) {
336   - return this.each(function () {
  1626 + var d = dates[lang];
  1627 + $.each(locale_opts, function(i,k){
  1628 + if (k in d)
  1629 + out[k] = d[k];
  1630 + });
  1631 + return out;
  1632 + }
  1633 +
  1634 + var old = $.fn.datepicker;
  1635 + var datepickerPlugin = function(option){
  1636 + var args = Array.apply(null, arguments);
  1637 + args.shift();
  1638 + var internal_return;
  1639 + this.each(function(){
337 1640 var $this = $(this),
338 1641 data = $this.data('datepicker'),
339 1642 options = typeof option === 'object' && option;
340   - if (!data) {
341   - $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options))));
  1643 + if (!data){
  1644 + var elopts = opts_from_el(this, 'date'),
  1645 + // Preliminary otions
  1646 + xopts = $.extend({}, defaults, elopts, options),
  1647 + locopts = opts_from_locale(xopts.language),
  1648 + // Options priority: js args, data-attrs, locales, defaults
  1649 + opts = $.extend({}, defaults, locopts, elopts, options);
  1650 + if ($this.hasClass('input-daterange') || opts.inputs){
  1651 + $.extend(opts, {
  1652 + inputs: opts.inputs || $this.find('input').toArray()
  1653 + });
  1654 + data = new DateRangePicker(this, opts);
  1655 + }
  1656 + else {
  1657 + data = new Datepicker(this, opts);
  1658 + }
  1659 + $this.data('datepicker', data);
  1660 + }
  1661 + if (typeof option === 'string' && typeof data[option] === 'function'){
  1662 + internal_return = data[option].apply(data, args);
342 1663 }
343   - if (typeof option === 'string') data[option](val);
344 1664 });
  1665 +
  1666 + if (
  1667 + internal_return === undefined ||
  1668 + internal_return instanceof Datepicker ||
  1669 + internal_return instanceof DateRangePicker
  1670 + )
  1671 + return this;
  1672 +
  1673 + if (this.length > 1)
  1674 + throw new Error('Using only allowed for the collection of a single element (' + option + ' function)');
  1675 + else
  1676 + return internal_return;
345 1677 };
  1678 + $.fn.datepicker = datepickerPlugin;
346 1679  
347   - $.fn.datepicker.defaults = {
348   - onRender: function(date) {
349   - return '';
  1680 + var defaults = $.fn.datepicker.defaults = {
  1681 + assumeNearbyYear: false,
  1682 + autoclose: false,
  1683 + beforeShowDay: $.noop,
  1684 + beforeShowMonth: $.noop,
  1685 + beforeShowYear: $.noop,
  1686 + beforeShowDecade: $.noop,
  1687 + beforeShowCentury: $.noop,
  1688 + calendarWeeks: false,
  1689 + clearBtn: false,
  1690 + toggleActive: false,
  1691 + daysOfWeekDisabled: [],
  1692 + daysOfWeekHighlighted: [],
  1693 + datesDisabled: [],
  1694 + endDate: Infinity,
  1695 + forceParse: true,
  1696 + format: 'mm/dd/yyyy',
  1697 + keepEmptyValues: false,
  1698 + keyboardNavigation: true,
  1699 + language: 'en',
  1700 + minViewMode: 0,
  1701 + maxViewMode: 4,
  1702 + multidate: false,
  1703 + multidateSeparator: ',',
  1704 + orientation: "auto",
  1705 + rtl: false,
  1706 + startDate: -Infinity,
  1707 + startView: 0,
  1708 + todayBtn: false,
  1709 + todayHighlight: false,
  1710 + updateViewDate: true,
  1711 + weekStart: 0,
  1712 + disableTouchKeyboard: false,
  1713 + enableOnReadonly: true,
  1714 + showOnFocus: true,
  1715 + zIndexOffset: 10,
  1716 + container: 'body',
  1717 + immediateUpdates: false,
  1718 + dateCells:false,
  1719 + title: '',
  1720 + templates: {
  1721 + leftArrow: '&#x00AB;',
  1722 + rightArrow: '&#x00BB;'
350 1723 }
351 1724 };
  1725 + var locale_opts = $.fn.datepicker.locale_opts = [
  1726 + 'format',
  1727 + 'rtl',
  1728 + 'weekStart'
  1729 + ];
352 1730 $.fn.datepicker.Constructor = Datepicker;
353   -
  1731 + var dates = $.fn.datepicker.dates = {
  1732 + en: {
  1733 + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  1734 + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  1735 + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  1736 + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  1737 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  1738 + today: "Today",
  1739 + clear: "Clear",
  1740 + titleFormat: "MM yyyy"
  1741 + }
  1742 + };
  1743 +
354 1744 var DPGlobal = {
355   - modes: [
  1745 + viewModes: [
356 1746 {
  1747 + names: ['days', 'month'],
357 1748 clsName: 'days',
358   - navFnc: 'Month',
359   - navStep: 1
  1749 + e: 'changeMonth'
360 1750 },
361 1751 {
  1752 + names: ['months', 'year'],
362 1753 clsName: 'months',
363   - navFnc: 'FullYear',
  1754 + e: 'changeYear',
364 1755 navStep: 1
365 1756 },
366 1757 {
  1758 + names: ['years', 'decade'],
367 1759 clsName: 'years',
368   - navFnc: 'FullYear',
  1760 + e: 'changeDecade',
369 1761 navStep: 10
370   - }],
371   - dates:{
372   - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
373   - daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
374   - daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
375   - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
376   - monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
377   - },
378   - isLeapYear: function (year) {
379   - return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
380   - },
381   - getDaysInMonth: function (year, month) {
382   - return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
383   - },
  1762 + },
  1763 + {
  1764 + names: ['decades', 'century'],
  1765 + clsName: 'decades',
  1766 + e: 'changeCentury',
  1767 + navStep: 100
  1768 + },
  1769 + {
  1770 + names: ['centuries', 'millennium'],
  1771 + clsName: 'centuries',
  1772 + e: 'changeMillennium',
  1773 + navStep: 1000
  1774 + }
  1775 + ],
  1776 + validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
  1777 + nonpunctuation: /[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,
384 1778 parseFormat: function(format){
385   - var separator = format.match(/[.\/\-\s].*?/),
386   - parts = format.split(/\W+/);
387   - if (!separator || !parts || parts.length === 0){
  1779 + if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')
  1780 + return format;
  1781 + // IE treats \0 as a string end in inputs (truncating the value),
  1782 + // so it's a bad format delimiter, anyway
  1783 + var separators = format.replace(this.validParts, '\0').split('\0'),
  1784 + parts = format.match(this.validParts);
  1785 + if (!separators || !separators.length || !parts || parts.length === 0){
388 1786 throw new Error("Invalid date format.");
389 1787 }
390   - return {separator: separator, parts: parts};
391   - },
392   - parseDate: function(date, format) {
393   - var parts = date.split(format.separator),
394   - date = new Date(),
395   - val;
396   - date.setHours(0);
397   - date.setMinutes(0);
398   - date.setSeconds(0);
399   - date.setMilliseconds(0);
400   - if (parts.length === format.parts.length) {
401   - var year = date.getFullYear(), day = date.getDate(), month = date.getMonth();
402   - for (var i=0, cnt = format.parts.length; i < cnt; i++) {
403   - val = parseInt(parts[i], 10)||1;
404   - switch(format.parts[i]) {
405   - case 'dd':
406   - case 'd':
407   - day = val;
408   - date.setDate(val);
409   - break;
410   - case 'mm':
411   - case 'm':
412   - month = val - 1;
413   - date.setMonth(val - 1);
414   - break;
415   - case 'yy':
416   - year = 2000 + val;
417   - date.setFullYear(2000 + val);
418   - break;
419   - case 'yyyy':
420   - year = val;
421   - date.setFullYear(val);
422   - break;
  1788 + return {separators: separators, parts: parts};
  1789 + },
  1790 + parseDate: function(date, format, language, assumeNearby){
  1791 + if (!date)
  1792 + return undefined;
  1793 + if (date instanceof Date)
  1794 + return date;
  1795 + if (typeof format === 'string')
  1796 + format = DPGlobal.parseFormat(format);
  1797 + if (format.toValue)
  1798 + return format.toValue(date, format, language);
  1799 + var fn_map = {
  1800 + d: 'moveDay',
  1801 + m: 'moveMonth',
  1802 + w: 'moveWeek',
  1803 + y: 'moveYear'
  1804 + },
  1805 + dateAliases = {
  1806 + yesterday: '-1d',
  1807 + today: '+0d',
  1808 + tomorrow: '+1d'
  1809 + },
  1810 + parts, part, dir, i, fn;
  1811 + if (date in dateAliases){
  1812 + date = dateAliases[date];
  1813 + }
  1814 + if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/i.test(date)){
  1815 + parts = date.match(/([\-+]\d+)([dmwy])/gi);
  1816 + date = new Date();
  1817 + for (i=0; i < parts.length; i++){
  1818 + part = parts[i].match(/([\-+]\d+)([dmwy])/i);
  1819 + dir = Number(part[1]);
  1820 + fn = fn_map[part[2].toLowerCase()];
  1821 + date = Datepicker.prototype[fn](date, dir);
  1822 + }
  1823 + return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
  1824 + }
  1825 +
  1826 + parts = date && date.match(this.nonpunctuation) || [];
  1827 + date = new Date();
  1828 +
  1829 + function applyNearbyYear(year, threshold){
  1830 + if (threshold === true)
  1831 + threshold = 10;
  1832 +
  1833 + // if year is 2 digits or less, than the user most likely is trying to get a recent century
  1834 + if (year < 100){
  1835 + year += 2000;
  1836 + // if the new year is more than threshold years in advance, use last century
  1837 + if (year > ((new Date()).getFullYear()+threshold)){
  1838 + year -= 100;
  1839 + }
  1840 + }
  1841 +
  1842 + return year;
  1843 + }
  1844 +
  1845 + var parsed = {},
  1846 + setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
  1847 + setters_map = {
  1848 + yyyy: function(d,v){
  1849 + return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);
  1850 + },
  1851 + m: function(d,v){
  1852 + if (isNaN(d))
  1853 + return d;
  1854 + v -= 1;
  1855 + while (v < 0) v += 12;
  1856 + v %= 12;
  1857 + d.setUTCMonth(v);
  1858 + while (d.getUTCMonth() !== v)
  1859 + d.setUTCDate(d.getUTCDate()-1);
  1860 + return d;
  1861 + },
  1862 + d: function(d,v){
  1863 + return d.setUTCDate(v);
  1864 + }
  1865 + },
  1866 + val, filtered;
  1867 + setters_map['yy'] = setters_map['yyyy'];
  1868 + setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
  1869 + setters_map['dd'] = setters_map['d'];
  1870 + date = UTCToday();
  1871 + var fparts = format.parts.slice();
  1872 + // Remove noop parts
  1873 + if (parts.length !== fparts.length){
  1874 + fparts = $(fparts).filter(function(i,p){
  1875 + return $.inArray(p, setters_order) !== -1;
  1876 + }).toArray();
  1877 + }
  1878 + // Process remainder
  1879 + function match_part(){
  1880 + var m = this.slice(0, parts[i].length),
  1881 + p = parts[i].slice(0, m.length);
  1882 + return m.toLowerCase() === p.toLowerCase();
  1883 + }
  1884 + if (parts.length === fparts.length){
  1885 + var cnt;
  1886 + for (i=0, cnt = fparts.length; i < cnt; i++){
  1887 + val = parseInt(parts[i], 10);
  1888 + part = fparts[i];
  1889 + if (isNaN(val)){
  1890 + switch (part){
  1891 + case 'MM':
  1892 + filtered = $(dates[language].months).filter(match_part);
  1893 + val = $.inArray(filtered[0], dates[language].months) + 1;
  1894 + break;
  1895 + case 'M':
  1896 + filtered = $(dates[language].monthsShort).filter(match_part);
  1897 + val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
  1898 + break;
  1899 + }
  1900 + }
  1901 + parsed[part] = val;
  1902 + }
  1903 + var _date, s;
  1904 + for (i=0; i < setters_order.length; i++){
  1905 + s = setters_order[i];
  1906 + if (s in parsed && !isNaN(parsed[s])){
  1907 + _date = new Date(date);
  1908 + setters_map[s](_date, parsed[s]);
  1909 + if (!isNaN(_date))
  1910 + date = _date;
423 1911 }
424 1912 }
425   - date = new Date(year, month, day, 0 ,0 ,0);
426 1913 }
427 1914 return date;
428 1915 },
429   - formatDate: function(date, format){
430   - var val = {
431   - d: date.getDate(),
432   - m: date.getMonth() + 1,
433   - yy: date.getFullYear().toString().substring(2),
434   - yyyy: date.getFullYear()
  1916 + formatDate: function(date, format, language){
  1917 + if (!date)
  1918 + return '';
  1919 + if (typeof format === 'string')
  1920 + format = DPGlobal.parseFormat(format);
  1921 + if (format.toDisplay)
  1922 + return format.toDisplay(date, format, language);
  1923 + var val = {
  1924 + d: date.getUTCDate(),
  1925 + D: dates[language].daysShort[date.getUTCDay()],
  1926 + DD: dates[language].days[date.getUTCDay()],
  1927 + m: date.getUTCMonth() + 1,
  1928 + M: dates[language].monthsShort[date.getUTCMonth()],
  1929 + MM: dates[language].months[date.getUTCMonth()],
  1930 + yy: date.getUTCFullYear().toString().substring(2),
  1931 + yyyy: date.getUTCFullYear()
435 1932 };
436 1933 val.dd = (val.d < 10 ? '0' : '') + val.d;
437 1934 val.mm = (val.m < 10 ? '0' : '') + val.m;
438   - var date = [];
439   - for (var i=0, cnt = format.parts.length; i < cnt; i++) {
  1935 + date = [];
  1936 + var seps = $.extend([], format.separators);
  1937 + for (var i=0, cnt = format.parts.length; i <= cnt; i++){
  1938 + if (seps.length)
  1939 + date.push(seps.shift());
440 1940 date.push(val[format.parts[i]]);
441 1941 }
442   - return date.join(format.separator);
  1942 + return date.join('');
443 1943 },
444 1944 headTemplate: '<thead>'+
  1945 + '<tr>'+
  1946 + '<th colspan="7" class="datepicker-title"></th>'+
  1947 + '</tr>'+
445 1948 '<tr>'+
446   - '<th class="prev">&lsaquo;</th>'+
447   - '<th colspan="5" class="switch"></th>'+
448   - '<th class="next">&rsaquo;</th>'+
  1949 + '<th class="prev">&laquo;</th>'+
  1950 + '<th colspan="5" class="datepicker-switch"></th>'+
  1951 + '<th class="next">&raquo;</th>'+
449 1952 '</tr>'+
450 1953 '</thead>',
451   - contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>'
  1954 + contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
  1955 + footTemplate: '<tfoot>'+
  1956 + '<tr>'+
  1957 + '<th colspan="7" class="today"></th>'+
  1958 + '</tr>'+
  1959 + '<tr>'+
  1960 + '<th colspan="7" class="clear"></th>'+
  1961 + '</tr>'+
  1962 + '</tfoot>'
452 1963 };
453   - DPGlobal.template = '<div class="datepicker dropdown-menu">'+
  1964 + DPGlobal.template = '<div class="datepicker">'+
454 1965 '<div class="datepicker-days">'+
455   - '<table class=" table-condensed">'+
  1966 + '<table class="table-condensed">'+
456 1967 DPGlobal.headTemplate+
457 1968 '<tbody></tbody>'+
  1969 + DPGlobal.footTemplate+
458 1970 '</table>'+
459 1971 '</div>'+
460 1972 '<div class="datepicker-months">'+
461 1973 '<table class="table-condensed">'+
462 1974 DPGlobal.headTemplate+
463 1975 DPGlobal.contTemplate+
  1976 + DPGlobal.footTemplate+
464 1977 '</table>'+
465 1978 '</div>'+
466 1979 '<div class="datepicker-years">'+
467 1980 '<table class="table-condensed">'+
468 1981 DPGlobal.headTemplate+
469 1982 DPGlobal.contTemplate+
  1983 + DPGlobal.footTemplate+
  1984 + '</table>'+
  1985 + '</div>'+
  1986 + '<div class="datepicker-decades">'+
  1987 + '<table class="table-condensed">'+
  1988 + DPGlobal.headTemplate+
  1989 + DPGlobal.contTemplate+
  1990 + DPGlobal.footTemplate+
  1991 + '</table>'+
  1992 + '</div>'+
  1993 + '<div class="datepicker-centuries">'+
  1994 + '<table class="table-condensed">'+
  1995 + DPGlobal.headTemplate+
  1996 + DPGlobal.contTemplate+
  1997 + DPGlobal.footTemplate+
470 1998 '</table>'+
471 1999 '</div>'+
472 2000 '</div>';
473 2001  
474   -}( window.jQuery );
475 2002 \ No newline at end of file
  2003 + $.fn.datepicker.DPGlobal = DPGlobal;
  2004 +
  2005 +
  2006 + /* DATEPICKER NO CONFLICT
  2007 + * =================== */
  2008 +
  2009 + $.fn.datepicker.noConflict = function(){
  2010 + $.fn.datepicker = old;
  2011 + return this;
  2012 + };
  2013 +
  2014 + /* DATEPICKER VERSION
  2015 + * =================== */
  2016 + $.fn.datepicker.version = '1.7.0-dev';
  2017 +
  2018 + /* DATEPICKER DATA-API
  2019 + * ================== */
  2020 +
  2021 + $(document).on(
  2022 + 'focus.datepicker.data-api click.datepicker.data-api',
  2023 + '[data-provide="datepicker"]',
  2024 + function(e){
  2025 + var $this = $(this);
  2026 + if ($this.data('datepicker'))
  2027 + return;
  2028 + e.preventDefault();
  2029 + // component click requires us to explicitly show it
  2030 + datepickerPlugin.call($this, 'show');
  2031 + }
  2032 + );
  2033 + $(function(){
  2034 + datepickerPlugin.call($('[data-provide="datepicker-inline"]'));
  2035 + });
  2036 +
  2037 +}));
... ...
core/static/js/vendor/locales/bootstrap-datepicker-en-ca.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Canadian English translation for bootstrap-datepicker
  3 + * Mike Nacey <mnacey@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['en-CA'] = {
  7 + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  8 + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  9 + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  10 + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  12 + today: "Today",
  13 + monthsTitle: "Months",
  14 + clear: "Clear",
  15 + weekStart: 0,
  16 + format: "yyyy-mm-dd"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ar-tn.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Arabic-Tunisia translation for bootstrap-datepicker
  3 + * Souhaieb Besbes <besbes.souhaieb@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ar-tn'] = {
  7 + days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"],
  8 + daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"],
  9 + daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"],
  10 + months: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],
  11 + monthsShort: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],
  12 + today: "هذا اليوم",
  13 + rtl: true
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ar.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Arabic translation for bootstrap-datepicker
  3 + * Mohammed Alshehri <alshehri866@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ar'] = {
  7 + days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"],
  8 + daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"],
  9 + daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"],
  10 + months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
  11 + monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
  12 + today: "هذا اليوم",
  13 + rtl: true
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.az.js 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +// Azerbaijani
  2 +;(function($){
  3 + $.fn.datepicker.dates['az'] = {
  4 + days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"],
  5 + daysShort: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."],
  6 + daysMin: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."],
  7 + months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"],
  8 + monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"],
  9 + today: "Bu gün",
  10 + weekStart: 1
  11 + };
  12 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.bg.js 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +/**
  2 + * Bulgarian translation for bootstrap-datepicker
  3 + * Apostol Apostolov <apostol.s.apostolov@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['bg'] = {
  7 + days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"],
  8 + daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб"],
  9 + daysMin: ["Н", "П", "В", "С", "Ч", "П", "С"],
  10 + months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
  11 + monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"],
  12 + today: "днес"
  13 + };
  14 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.br.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Breton translation for bootstrap-datepicker
  3 + * Gwenn Meynier <tornoz@laposte.net>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['br'] = {
  7 + days: ["Sul", "Lun", "Meurzh", "Merc'her", "Yaou", "Gwener", "Sadorn"],
  8 + daysShort: ["Sul", "Lun", "Meu.", "Mer.", "Yao.", "Gwe.", "Sad."],
  9 + daysMin: ["Su", "L", "Meu", "Mer", "Y", "G", "Sa"],
  10 + months: ["Genver", "C'hwevrer", "Meurzh", "Ebrel", "Mae", "Mezheven", "Gouere", "Eost", "Gwengolo", "Here", "Du", "Kerzu"],
  11 + monthsShort: ["Genv.", "C'hw.", "Meur.", "Ebre.", "Mae", "Mezh.", "Goue.", "Eost", "Gwen.", "Here", "Du", "Kerz."],
  12 + today: "Hiziv",
  13 + monthsTitle: "Miz",
  14 + clear: "Dilemel",
  15 + weekStart: 1,
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.bs.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Bosnian translation for bootstrap-datepicker
  3 + */
  4 +;(function($){
  5 + $.fn.datepicker.dates['bs'] = {
  6 + days: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"],
  7 + daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
  8 + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"],
  9 + months: ["Januar", "Februar", "Mart", "April", "Maj", "Juni", "Juli", "August", "Septembar", "Oktobar", "Novembar", "Decembar"],
  10 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
  11 + today: "Danas",
  12 + weekStart: 1,
  13 + format: "dd.mm.yyyy"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ca.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Catalan translation for bootstrap-datepicker
  3 + * J. Garcia <jogaco.en@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ca'] = {
  7 + days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"],
  8 + daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis"],
  9 + daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds"],
  10 + months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"],
  11 + monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"],
  12 + today: "Avui",
  13 + monthsTitle: "Mesos",
  14 + clear: "Esborrar",
  15 + weekStart: 1,
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.cs.js 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +/**
  2 + * Czech translation for bootstrap-datepicker
  3 + * Matěj Koubík <matej@koubik.name>
  4 + * Fixes by Michal Remiš <michal.remis@gmail.com>
  5 + */
  6 +;(function($){
  7 + $.fn.datepicker.dates['cs'] = {
  8 + days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"],
  9 + daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob"],
  10 + daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
  11 + months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
  12 + monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"],
  13 + today: "Dnes",
  14 + clear: "Vymazat",
  15 + monthsTitle: "Měsíc",
  16 + weekStart: 1,
  17 + format: "dd.m.yyyy"
  18 + };
  19 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.cy.js 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +/**
  2 + * Welsh translation for bootstrap-datepicker
  3 + * S. Morris <s.morris@bangor.ac.uk>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['cy'] = {
  7 + days: ["Sul", "Llun", "Mawrth", "Mercher", "Iau", "Gwener", "Sadwrn"],
  8 + daysShort: ["Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad"],
  9 + daysMin: ["Su", "Ll", "Ma", "Me", "Ia", "Gwe", "Sa"],
  10 + months: ["Ionawr", "Chewfror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorfennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"],
  11 + monthsShort: ["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws", "Med", "Hyd", "Tach", "Rha"],
  12 + today: "Heddiw"
  13 + };
  14 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.da.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Danish translation for bootstrap-datepicker
  3 + * Christian Pedersen <http://github.com/chripede>
  4 + * Ivan Mylyanyk <https://github.com/imylyanyk>
  5 + */
  6 +;(function($){
  7 + $.fn.datepicker.dates['da'] = {
  8 + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
  9 + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
  10 + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
  11 + months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"],
  12 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
  13 + today: "I Dag",
  14 + weekStart: 1,
  15 + clear: "Nulstil",
  16 + format: "dd-mm-yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.de.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * German translation for bootstrap-datepicker
  3 + * Sam Zurcher <sam@orelias.ch>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['de'] = {
  7 + days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
  8 + daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"],
  9 + daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
  10 + months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
  11 + monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
  12 + today: "Heute",
  13 + monthsTitle: "Monate",
  14 + clear: "Löschen",
  15 + weekStart: 1,
  16 + format: "dd.mm.yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.el.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +/**
  2 + * Greek translation for bootstrap-datepicker
  3 + */
  4 +;(function($){
  5 + $.fn.datepicker.dates['el'] = {
  6 + days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"],
  7 + daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"],
  8 + daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα"],
  9 + months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
  10 + monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"],
  11 + today: "Σήμερα",
  12 + clear: "Καθαρισμός",
  13 + weekStart: 1,
  14 + format: "d/m/yyyy"
  15 + };
  16 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.en-au.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Australian English translation for bootstrap-datepicker
  3 + * Steve Chapman <steven.p.chapman@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['en-AU'] = {
  7 + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  8 + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  9 + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  10 + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  12 + today: "Today",
  13 + monthsTitle: "Months",
  14 + clear: "Clear",
  15 + weekStart: 1,
  16 + format: "d/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.en-gb.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * British English translation for bootstrap-datepicker
  3 + * Xavier Dutreilh <xavier@dutreilh.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['en-GB'] = {
  7 + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  8 + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  9 + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  10 + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  12 + today: "Today",
  13 + monthsTitle: "Months",
  14 + clear: "Clear",
  15 + weekStart: 1,
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.en-ie.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Irish English translation for bootstrap-datepicker
  3 + */
  4 +;(function($){
  5 + $.fn.datepicker.dates['en-IE'] = {
  6 + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  7 + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  8 + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  9 + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  10 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  11 + today: "Today",
  12 + monthsTitle: "Months",
  13 + clear: "Clear",
  14 + weekStart: 1,
  15 + format: "dd/mm/yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.en-nz.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * New Zealand English translation for bootstrap-datepicker
  3 + */
  4 +;(function($){
  5 + $.fn.datepicker.dates['en-NZ'] = {
  6 + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  7 + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  8 + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  9 + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  10 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  11 + today: "Today",
  12 + monthsTitle: "Months",
  13 + clear: "Clear",
  14 + weekStart: 1,
  15 + format: "d/mm/yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.en-za.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * South African English translation for bootstrap-datepicker
  3 + */
  4 +;(function($){
  5 + $.fn.datepicker.dates['en-ZA'] = {
  6 + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  7 + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  8 + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  9 + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  10 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  11 + today: "Today",
  12 + monthsTitle: "Months",
  13 + clear: "Clear",
  14 + weekStart: 1,
  15 + format: "yyyy/mm/d"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.eo.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Esperanto translation for bootstrap-datepicker
  3 + * Emmanuel Debanne <https://github.com/debanne>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['eo'] = {
  7 + days: ["dimanĉo", "lundo", "mardo", "merkredo", "ĵaŭdo", "vendredo", "sabato"],
  8 + daysShort: ["dim.", "lun.", "mar.", "mer.", "ĵaŭ.", "ven.", "sam."],
  9 + daysMin: ["d", "l", "ma", "me", "ĵ", "v", "s"],
  10 + months: ["januaro", "februaro", "marto", "aprilo", "majo", "junio", "julio", "aŭgusto", "septembro", "oktobro", "novembro", "decembro"],
  11 + monthsShort: ["jan.", "feb.", "mar.", "apr.", "majo", "jun.", "jul.", "aŭg.", "sep.", "okt.", "nov.", "dec."],
  12 + today: "Hodiaŭ",
  13 + clear: "Nuligi",
  14 + weekStart: 1,
  15 + format: "yyyy-mm-dd"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.es.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Spanish translation for bootstrap-datepicker
  3 + * Bruno Bonamin <bruno.bonamin@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['es'] = {
  7 + days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
  8 + daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
  9 + daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"],
  10 + months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
  11 + monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
  12 + today: "Hoy",
  13 + monthsTitle: "Meses",
  14 + clear: "Borrar",
  15 + weekStart: 1,
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.et.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Estonian translation for bootstrap-datepicker
  3 + * Ando Roots <https://github.com/anroots>
  4 + * Fixes by Illimar Tambek <<https://github.com/ragulka>
  5 + */
  6 +;(function($){
  7 + $.fn.datepicker.dates['et'] = {
  8 + days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"],
  9 + daysShort: ["Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup"],
  10 + daysMin: ["P", "E", "T", "K", "N", "R", "L"],
  11 + months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"],
  12 + monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"],
  13 + today: "Täna",
  14 + clear: "Tühjenda",
  15 + weekStart: 1,
  16 + format: "dd.mm.yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.eu.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Basque translation for bootstrap-datepicker
  3 + * Arkaitz Etxeberria <kondi80@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['eu'] = {
  7 + days: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata'],
  8 + daysShort: ['Ig', 'Al', 'Ar', 'Az', 'Og', 'Ol', 'Lr'],
  9 + daysMin: ['Ig', 'Al', 'Ar', 'Az', 'Og', 'Ol', 'Lr'],
  10 + months: ['Urtarrila', 'Otsaila', 'Martxoa', 'Apirila', 'Maiatza', 'Ekaina', 'Uztaila', 'Abuztua', 'Iraila', 'Urria', 'Azaroa', 'Abendua'],
  11 + monthsShort: ['Urt', 'Ots', 'Mar', 'Api', 'Mai', 'Eka', 'Uzt', 'Abu', 'Ira', 'Urr', 'Aza', 'Abe'],
  12 + today: "Gaur"
  13 + };
  14 +}(jQuery));
  15 +
... ...
core/static/js/vendor/locales/bootstrap-datepicker.fa.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Persian translation for bootstrap-datepicker
  3 + * Mostafa Rokooie <mostafa.rokooie@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['fa'] = {
  7 + days: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"],
  8 + daysShort: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک"],
  9 + daysMin: ["ی", "د", "س", "چ", "پ", "ج", "ش", "ی"],
  10 + months: ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"],
  11 + monthsShort: ["ژان", "فور", "مار", "آور", "مه", "ژون", "ژوی", "اوت", "سپت", "اکت", "نوا", "دسا"],
  12 + today: "امروز",
  13 + clear: "پاک کن",
  14 + weekStart: 1,
  15 + format: "yyyy/mm/dd"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.fi.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Finnish translation for bootstrap-datepicker
  3 + * Jaakko Salonen <https://github.com/jsalonen>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['fi'] = {
  7 + days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"],
  8 + daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau"],
  9 + daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la"],
  10 + months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
  11 + monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"],
  12 + today: "tänään",
  13 + clear: "Tyhjennä",
  14 + weekStart: 1,
  15 + format: "d.m.yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.fo.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Faroese translation for bootstrap-datepicker
  3 + * Theodor Johannesen <http://github.com/theodorjohannesen>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['fo'] = {
  7 + days: ["Sunnudagur", "Mánadagur", "Týsdagur", "Mikudagur", "Hósdagur", "Fríggjadagur", "Leygardagur"],
  8 + daysShort: ["Sun", "Mán", "Týs", "Mik", "Hós", "Frí", "Ley"],
  9 + daysMin: ["Su", "Má", "Tý", "Mi", "Hó", "Fr", "Le"],
  10 + months: ["Januar", "Februar", "Marts", "Apríl", "Mei", "Juni", "Juli", "August", "Septembur", "Oktobur", "Novembur", "Desembur"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
  12 + today: "Í Dag",
  13 + clear: "Reinsa"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.fr-ch.js 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +/**
  2 + * French (Switzerland) translation for bootstrap-datepicker
  3 + * Christoph Jossi <c.jossi@ascami.ch>
  4 + * Based on
  5 + * French translation for bootstrap-datepicker
  6 + * Nico Mollet <nico.mollet@gmail.com>
  7 + */
  8 +;(function($){
  9 + $.fn.datepicker.dates['fr'] = {
  10 + days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
  11 + daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"],
  12 + daysMin: ["D", "L", "Ma", "Me", "J", "V", "S"],
  13 + months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
  14 + monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"],
  15 + today: "Aujourd'hui",
  16 + monthsTitle: "Mois",
  17 + clear: "Effacer",
  18 + weekStart: 1,
  19 + format: "dd.mm.yyyy"
  20 + };
  21 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.fr.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * French translation for bootstrap-datepicker
  3 + * Nico Mollet <nico.mollet@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['fr'] = {
  7 + days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
  8 + daysShort: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
  9 + daysMin: ["d", "l", "ma", "me", "j", "v", "s"],
  10 + months: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
  11 + monthsShort: ["janv.", "févr.", "mars", "avril", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."],
  12 + today: "Aujourd'hui",
  13 + monthsTitle: "Mois",
  14 + clear: "Effacer",
  15 + weekStart: 1,
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.gl.js 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +;(function($){
  2 + $.fn.datepicker.dates['gl'] = {
  3 + days: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"],
  4 + daysShort: ["Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb"],
  5 + daysMin: ["Do", "Lu", "Ma", "Me", "Xo", "Ve", "Sa"],
  6 + months: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"],
  7 + monthsShort: ["Xan", "Feb", "Mar", "Abr", "Mai", "Xun", "Xul", "Ago", "Sep", "Out", "Nov", "Dec"],
  8 + today: "Hoxe",
  9 + clear: "Limpar",
  10 + weekStart: 1,
  11 + format: "dd/mm/yyyy"
  12 + };
  13 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.he.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Hebrew translation for bootstrap-datepicker
  3 + * Sagie Maoz <sagie@maoz.info>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['he'] = {
  7 + days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"],
  8 + daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
  9 + daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
  10 + months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
  11 + monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"],
  12 + today: "היום",
  13 + rtl: true
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.hr.js 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +/**
  2 + * Croatian localisation
  3 + */
  4 +;(function($){
  5 + $.fn.datepicker.dates['hr'] = {
  6 + days: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"],
  7 + daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
  8 + daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"],
  9 + months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
  10 + monthsShort: ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"],
  11 + today: "Danas"
  12 + };
  13 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.hu.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Hungarian translation for bootstrap-datepicker
  3 + * Sotus László <lacisan@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['hu'] = {
  7 + days: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"],
  8 + daysShort: ["vas", "hét", "ked", "sze", "csü", "pén", "szo"],
  9 + daysMin: ["V", "H", "K", "Sze", "Cs", "P", "Szo"],
  10 + months: ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"],
  11 + monthsShort: ["jan", "feb", "már", "ápr", "máj", "jún", "júl", "aug", "sze", "okt", "nov", "dec"],
  12 + today: "ma",
  13 + weekStart: 1,
  14 + clear: "töröl",
  15 + titleFormat: "yyyy. MM",
  16 + format: "yyyy.mm.dd"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.hy.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Armenian translation for bootstrap-datepicker
  3 + * Hayk Chamyan <hamshen@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['hy'] = {
  7 + days: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"],
  8 + daysShort: ["Կրկ", "Երկ", "Երք", "Չրք", "Հնգ", "Ուր", "Շբթ"],
  9 + daysMin: ["Կրկ", "Երկ", "Երք", "Չրք", "Հնգ", "Ուր", "Շբթ"],
  10 + months: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"],
  11 + monthsShort: ["Հուն", "Փետ", "Մար", "Ապր", "Մայ", "Հնս", "Հլս", "Օգս", "Սեպ", "Հոկ", "Նմբ", "Դեկ"],
  12 + today: "Այսօր",
  13 + clear: "Ջնջել",
  14 + format: "dd.mm.yyyy",
  15 + weekStart: 1
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.id.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Bahasa translation for bootstrap-datepicker
  3 + * Azwar Akbar <azwar.akbar@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['id'] = {
  7 + days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
  8 + daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
  9 + daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa"],
  10 + months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"],
  12 + today: "Hari Ini",
  13 + clear: "Kosongkan"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.is.js 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +/**
  2 + * Icelandic translation for bootstrap-datepicker
  3 + * Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['is'] = {
  7 + days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"],
  8 + daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau"],
  9 + daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La"],
  10 + months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"],
  12 + today: "Í Dag"
  13 + };
  14 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.it-ch.js 0 → 100644
... ... @@ -0,0 +1,20 @@
  1 +/**
  2 + * Italian (Switzerland) translation for bootstrap-datepicker
  3 + * Christoph Jossi <c.jossi@ascami.ch>
  4 + * Based on
  5 + * Italian translation for bootstrap-datepicker
  6 + * Enrico Rubboli <rubboli@gmail.com>
  7 + */
  8 +;(function($){
  9 + $.fn.datepicker.dates['it'] = {
  10 + days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
  11 + daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
  12 + daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"],
  13 + months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
  14 + monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
  15 + today: "Oggi",
  16 + clear: "Cancella",
  17 + weekStart: 1,
  18 + format: "dd.mm.yyyy"
  19 + };
  20 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.it.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Italian translation for bootstrap-datepicker
  3 + * Enrico Rubboli <rubboli@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['it'] = {
  7 + days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
  8 + daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
  9 + daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"],
  10 + months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
  11 + monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
  12 + today: "Oggi",
  13 + monthsTitle: "Mesi",
  14 + clear: "Cancella",
  15 + weekStart: 1,
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ja.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Japanese translation for bootstrap-datepicker
  3 + * Norio Suzuki <https://github.com/suzuki/>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ja'] = {
  7 + days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"],
  8 + daysShort: ["日", "月", "火", "水", "木", "金", "土"],
  9 + daysMin: ["日", "月", "火", "水", "木", "金", "土"],
  10 + months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
  11 + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
  12 + today: "今日",
  13 + format: "yyyy/mm/dd",
  14 + titleFormat: "yyyy年mm月",
  15 + clear: "クリア"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ka.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Georgian translation for bootstrap-datepicker
  3 + * Levan Melikishvili <levani0101@yahoo.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ka'] = {
  7 + days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"],
  8 + daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ"],
  9 + daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა"],
  10 + months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"],
  11 + monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"],
  12 + today: "დღეს",
  13 + clear: "გასუფთავება",
  14 + weekStart: 1,
  15 + format: "dd.mm.yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.kh.js 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +/**
  2 + * Cambodia (Khmer) translation for bootstrap-datepicker
  3 + * Lytay TOUCH <lytaytouch@gmail.com>
  4 + *
  5 + * DEPRECATED: This language code 'kh' is deprecated and will be removed in 2.0.
  6 + * Khmer support is now in a 'km' translation file to follow the ISO language
  7 + * code - http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
  8 + */
  9 +;(function($){
  10 + $.fn.datepicker.dates['kh'] = {
  11 + days: ["អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍"],
  12 + daysShort: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"],
  13 + daysMin: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"],
  14 + months: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"],
  15 + monthsShort: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"],
  16 + today: "ថ្ងៃនេះ",
  17 + clear: "សំអាត"
  18 + };
  19 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.kk.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Kazakh translation for bootstrap-datepicker
  3 + * Yerzhan Tolekov <era.tolekov@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['kk'] = {
  7 + days: ["Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі"],
  8 + daysShort: ["Жек", "Дүй", "Сей", "Сәр", "Бей", "Жұм", "Сен"],
  9 + daysMin: ["Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн"],
  10 + months: ["Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым", "Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан"],
  11 + monthsShort: ["Қаң", "Ақп", "Нау", "Сәу", "Мам", "Мау", "Шіл", "Там", "Қыр", "Қаз", "Қар", "Жел"],
  12 + today: "Бүгін",
  13 + weekStart: 1
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.km.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Khmer translation for bootstrap-datepicker
  3 + * This is the Updated Version of: https://github.com/uxsolutions/bootstrap-datepicker/blob/71308d42cce9524284c50c6fac50422d1790ac0f/js/locales/bootstrap-datepicker.kh.js
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['km'] = {
  7 + days: ["អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍"],
  8 + daysShort: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"],
  9 + daysMin: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"],
  10 + months: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"],
  11 + monthsShort: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"],
  12 + today: "ថ្ងៃនេះ",
  13 + clear: "សំអាត"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ko.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Korean translation for bootstrap-datepicker
  3 + * This is a port from https://github.com/moment/moment/blob/develop/src/locale/ko.js
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ko'] = {
  7 + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
  8 + daysShort: ["일", "월", "화", "수", "목", "금", "토"],
  9 + daysMin: ["일", "월", "화", "수", "목", "금", "토"],
  10 + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
  11 + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
  12 + today: "오늘",
  13 + clear: "삭제",
  14 + format: "yyyy-mm-dd",
  15 + titleFormat: "yyyy년mm월",
  16 + weekStart: 0
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.kr.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Korean translation for bootstrap-datepicker
  3 + * Gu Youn <http://github.com/guyoun>
  4 + *
  5 + * DEPRECATED: This language code 'kr' is deprecated and will be removed in 2.0.
  6 + * Korean support is now in a 'ko' translation file to follow the ISO language
  7 + * code - http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
  8 + */
  9 +;(function($){
  10 + $.fn.datepicker.dates['kr'] = {
  11 + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
  12 + daysShort: ["일", "월", "화", "수", "목", "금", "토"],
  13 + daysMin: ["일", "월", "화", "수", "목", "금", "토"],
  14 + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
  15 + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.lt.js 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +/**
  2 + * Lithuanian translation for bootstrap-datepicker
  3 + * Šarūnas Gliebus <ssharunas@yahoo.co.uk>
  4 + */
  5 +
  6 +;(function($){
  7 + $.fn.datepicker.dates['lt'] = {
  8 + days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"],
  9 + daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š"],
  10 + daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št"],
  11 + months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
  12 + monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"],
  13 + today: "Šiandien",
  14 + monthsTitle:"Mėnesiai",
  15 + clear:"Išvalyti",
  16 + weekStart: 1,
  17 + format:"yyyy-mm-dd"
  18 + };
  19 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.lv.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +/**
  2 + * Latvian translation for bootstrap-datepicker
  3 + * Artis Avotins <artis@apit.lv>
  4 + */
  5 +
  6 +;(function($){
  7 + $.fn.datepicker.dates['lv'] = {
  8 + days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"],
  9 + daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S"],
  10 + daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se"],
  11 + months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
  12 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec"],
  13 + today: "Šodien",
  14 + weekStart: 1
  15 + };
  16 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.me.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Montenegrin translation for bootstrap-datepicker
  3 + * Miodrag Nikač <miodrag@restartit.me>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['me'] = {
  7 + days: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"],
  8 + daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
  9 + daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"],
  10 + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
  12 + today: "Danas",
  13 + weekStart: 1,
  14 + clear: "Izbriši",
  15 + format: "dd.mm.yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.mk.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Macedonian translation for bootstrap-datepicker
  3 + * Marko Aleksic <psybaron@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['mk'] = {
  7 + days: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"],
  8 + daysShort: ["Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб"],
  9 + daysMin: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са"],
  10 + months: ["Јануари", "Февруари", "Март", "Април", "Мај", "Јуни", "Јули", "Август", "Септември", "Октомври", "Ноември", "Декември"],
  11 + monthsShort: ["Јан", "Фев", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Ное", "Дек"],
  12 + today: "Денес",
  13 + format: "dd.mm.yyyy"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.mn.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Mongolian translation for bootstrap-datepicker
  3 + * Andrey Torsunov <andrey.torsunov@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['mn'] = {
  7 + days: ["Ням", "Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба"],
  8 + daysShort: ["Ням", "Дав", "Мяг", "Лха", "Пүр", "Баа", "Бям"],
  9 + daysMin: ["Ня", "Да", "Мя", "Лх", "Пү", "Ба", "Бя"],
  10 + months: ["Хулгана", "Үхэр", "Бар", "Туулай", "Луу", "Могой", "Морь", "Хонь", "Бич", "Тахиа", "Нохой", "Гахай"],
  11 + monthsShort: ["Хул", "Үхэ", "Бар", "Туу", "Луу", "Мог", "Мор", "Хон", "Бич", "Тах", "Нох", "Гах"],
  12 + today: "Өнөөдөр",
  13 + clear: "Тодорхой",
  14 + format: "yyyy.mm.dd",
  15 + weekStart: 1
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ms.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Malay translation for bootstrap-datepicker
  3 + * Ateman Faiz <noorulfaiz@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ms'] = {
  7 + days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"],
  8 + daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"],
  9 + daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa"],
  10 + months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"],
  12 + today: "Hari Ini",
  13 + clear: "Bersihkan"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.nb.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Norwegian (bokmål) translation for bootstrap-datepicker
  3 + * Fredrik Sundmyhr <http://github.com/fsundmyhr>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['nb'] = {
  7 + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
  8 + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
  9 + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
  10 + months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
  12 + today: "I Dag",
  13 + format: "dd.mm.yyyy"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.nl-be.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Belgium-Dutch translation for bootstrap-datepicker
  3 + * Julien Poulin <poulin_julien@hotmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['nl-BE'] = {
  7 + days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
  8 + daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"],
  9 + daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"],
  10 + months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
  11 + monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"],
  12 + today: "Vandaag",
  13 + monthsTitle: "Maanden",
  14 + clear: "Leegmaken",
  15 + weekStart: 1,
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.nl.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Dutch translation for bootstrap-datepicker
  3 + * Reinier Goltstein <mrgoltstein@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['nl'] = {
  7 + days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
  8 + daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"],
  9 + daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"],
  10 + months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
  11 + monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"],
  12 + today: "Vandaag",
  13 + monthsTitle: "Maanden",
  14 + clear: "Wissen",
  15 + weekStart: 1,
  16 + format: "dd-mm-yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.no.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +/**
  2 + * Norwegian translation for bootstrap-datepicker
  3 + **/
  4 +;(function($){
  5 + $.fn.datepicker.dates['no'] = {
  6 + days: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],
  7 + daysShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],
  8 + daysMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'],
  9 + months: ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'],
  10 + monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
  11 + today: 'I dag',
  12 + clear: 'Nullstill',
  13 + weekStart: 1,
  14 + format: 'dd.mm.yyyy'
  15 + };
  16 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.oc.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Occitan translation for bootstrap-datepicker
  3 + */
  4 +;(function($){
  5 + $.fn.datepicker.dates['oc'] = {
  6 + days: ["Dimenge", "Diluns", "Dimars", "Dimècres", "Dijòus", "Divendres", "Dissabte"],
  7 + daysShort: ["Dim", "Dil", "Dmr", "Dmc", "Dij", "Div", "Dis"],
  8 + daysMin: ["dg", "dl", "dr", "dc", "dj", "dv", "ds"],
  9 + months: ["Genièr", "Febrièr", "Març", "Abrial", "Mai", "Junh", "Julhet", "Agost", "Setembre", "Octobre", "Novembre", "Decembre"],
  10 + monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Dec"],
  11 + today: "Uèi",
  12 + monthsTitle: "Meses",
  13 + clear: "Escafar",
  14 + weekStart: 1,
  15 + format: "dd/mm/yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.pl.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Polish translation for bootstrap-datepicker
  3 + * Robert <rtpm@gazeta.pl>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['pl'] = {
  7 + days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
  8 + daysShort: ["Niedz.", "Pon.", "Wt.", "Śr.", "Czw.", "Piąt.", "Sob."],
  9 + daysMin: ["Ndz.", "Pn.", "Wt.", "Śr.", "Czw.", "Pt.", "Sob."],
  10 + months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
  11 + monthsShort: ["Sty.", "Lut.", "Mar.", "Kwi.", "Maj", "Cze.", "Lip.", "Sie.", "Wrz.", "Paź.", "Lis.", "Gru."],
  12 + today: "Dzisiaj",
  13 + weekStart: 1,
  14 + clear: "Wyczyść",
  15 + format: "dd.mm.yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.pt-br.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Brazilian translation for bootstrap-datepicker
  3 + * Cauan Cabral <cauan@radig.com.br>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['pt-BR'] = {
  7 + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
  8 + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
  9 + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"],
  10 + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
  11 + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
  12 + today: "Hoje",
  13 + monthsTitle: "Meses",
  14 + clear: "Limpar",
  15 + format: "dd/mm/yyyy"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.pt.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Portuguese translation for bootstrap-datepicker
  3 + * Original code: Cauan Cabral <cauan@radig.com.br>
  4 + * Tiago Melo <tiago.blackcode@gmail.com>
  5 + */
  6 +;(function($){
  7 + $.fn.datepicker.dates['pt'] = {
  8 + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
  9 + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
  10 + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"],
  11 + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
  12 + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
  13 + today: "Hoje",
  14 + monthsTitle: "Meses",
  15 + clear: "Limpar",
  16 + format: "dd/mm/yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ro.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +/**
  2 + * Romanian translation for bootstrap-datepicker
  3 + * Cristian Vasile <cristi.mie@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ro'] = {
  7 + days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"],
  8 + daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm"],
  9 + daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"],
  10 + months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"],
  11 + monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  12 + today: "Astăzi",
  13 + clear: "Șterge",
  14 + weekStart: 1
  15 + };
  16 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.rs-latin.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Serbian latin translation for bootstrap-datepicker
  3 + * Bojan Milosavlević <milboj@gmail.com>
  4 + *
  5 + * * DEPRECATED: This language code 'rs' is deprecated (invalid serbian language code) and will be removed in 2.0. Use the 'sr' language code as an replacement
  6 + */
  7 +;(function($){
  8 + $.fn.datepicker.dates['rs-latin'] = {
  9 + days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"],
  10 + daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
  11 + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"],
  12 + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
  13 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
  14 + today: "Danas",
  15 + weekStart: 1,
  16 + format: "dd.mm.yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.rs.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Serbian cyrillic translation for bootstrap-datepicker
  3 + * Bojan Milosavlević <milboj@gmail.com>
  4 + *
  5 + * DEPRECATED: This language code 'rs' is deprecated (invalid serbian language code) and will be removed in 2.0. Use the 'sr' language code as an replacement
  6 + */
  7 +;(function($){
  8 + $.fn.datepicker.dates['rs'] = {
  9 + days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"],
  10 + daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб"],
  11 + daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су"],
  12 + months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
  13 + monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
  14 + today: "Данас",
  15 + weekStart: 1,
  16 + format: "dd.mm.yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.ru.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Russian translation for bootstrap-datepicker
  3 + * Victor Taranenko <darwin@snowdale.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['ru'] = {
  7 + days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
  8 + daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"],
  9 + daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
  10 + months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
  11 + monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
  12 + today: "Сегодня",
  13 + clear: "Очистить",
  14 + format: "dd.mm.yyyy",
  15 + weekStart: 1
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.si.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Sinhala translation for bootstrap-datepicker
  3 + * Chanaka Fernando <chanaka.fernando@hotmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['si'] = {
  7 + days: ["ඉරිදා", "සඳුදා", "අඟහරුවාදා", "බදාදා", "බ්‍රහස්පතින්දා", "සිකුරාදා", "සෙනසුරාදා"],
  8 + daysShort: ["ඉරි", "සඳු", "අඟ", "බදා", "බ්‍රහ", "සිකු", "සෙන"],
  9 + daysMin: ["ඉ", "ස", "අ", "බ", "බ්‍ර", "සි", "සෙ"],
  10 + months: ["ජනවාරි", "පෙබරවාරි", "මාර්තු", "අප්‍රේල්", "මැයි", "ජුනි", "ජූලි", "අගෝස්තු", "සැප්තැම්බර්", "ඔක්තෝබර්", "නොවැම්බර්", "දෙසැම්බර්"],
  11 + monthsShort: ["ජන", "පෙබ", "මාර්", "අප්‍රේ", "මැයි", "ජුනි", "ජූලි", "අගෝ", "සැප්", "ඔක්", "නොවැ", "දෙසැ"],
  12 + today: "අද",
  13 + monthsTitle: "මාස",
  14 + clear: "මකන්න",
  15 + weekStart: 0,
  16 + format: "yyyy-mm-dd"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.sk.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Slovak translation for bootstrap-datepicker
  3 + * Marek Lichtner <marek@licht.sk>
  4 + * Fixes by Michal Remiš <michal.remis@gmail.com>
  5 + */
  6 +;(function($){
  7 + $.fn.datepicker.dates["sk"] = {
  8 + days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"],
  9 + daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob"],
  10 + daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So"],
  11 + months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
  12 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
  13 + today: "Dnes",
  14 + clear: "Vymazať",
  15 + weekStart: 1,
  16 + format: "d.m.yyyy"
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.sl.js 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +/**
  2 + * Slovene translation for bootstrap-datepicker
  3 + * Gregor Rudolf <gregor.rudolf@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['sl'] = {
  7 + days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"],
  8 + daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"],
  9 + daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So"],
  10 + months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
  12 + today: "Danes"
  13 + };
  14 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.sq.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Albanian translation for bootstrap-datepicker
  3 + * Tomor Pupovci <http://www.github.com/ttomor>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['sq'] = {
  7 + days: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"],
  8 + daysShort: ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"],
  9 + daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht"],
  10 + months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"],
  11 + monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"],
  12 + today: "Sot"
  13 + };
  14 +}(jQuery));
  15 +
... ...
core/static/js/vendor/locales/bootstrap-datepicker.sr-latin.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +/**
  2 + * Serbian latin translation for bootstrap-datepicker
  3 + * Bojan Milosavlević <milboj@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['sr-latin'] = {
  7 + days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"],
  8 + daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
  9 + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"],
  10 + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
  12 + today: "Danas",
  13 + weekStart: 1,
  14 + format: "dd.mm.yyyy"
  15 + };
  16 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.sr.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +/**
  2 + * Serbian cyrillic translation for bootstrap-datepicker
  3 + * Bojan Milosavlević <milboj@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['sr'] = {
  7 + days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"],
  8 + daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб"],
  9 + daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су"],
  10 + months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
  11 + monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
  12 + today: "Данас",
  13 + weekStart: 1,
  14 + format: "dd.mm.yyyy"
  15 + };
  16 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.sv.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Swedish translation for bootstrap-datepicker
  3 + * Patrik Ragnarsson <patrik@starkast.net>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['sv'] = {
  7 + days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"],
  8 + daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
  9 + daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö"],
  10 + months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
  11 + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
  12 + today: "Idag",
  13 + format: "yyyy-mm-dd",
  14 + weekStart: 1,
  15 + clear: "Rensa"
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.sw.js 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +/**
  2 + * Swahili translation for bootstrap-datepicker
  3 + * Edwin Mugendi <https://github.com/edwinmugendi>
  4 + * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku
  5 + */
  6 +;(function($){
  7 + $.fn.datepicker.dates['sw'] = {
  8 + days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi"],
  9 + daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1"],
  10 + daysMin: ["2", "3", "4", "5", "A", "I", "1"],
  11 + months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"],
  12 + monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"],
  13 + today: "Leo"
  14 + };
  15 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.th.js 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +/**
  2 + * Thai translation for bootstrap-datepicker
  3 + * Suchau Jiraprapot <seroz24@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['th'] = {
  7 + days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"],
  8 + daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
  9 + daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
  10 + months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"],
  11 + monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
  12 + today: "วันนี้"
  13 + };
  14 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.tr.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Turkish translation for bootstrap-datepicker
  3 + * Serkan Algur <kaisercrazy_2@hotmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['tr'] = {
  7 + days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"],
  8 + daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts"],
  9 + daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct"],
  10 + months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
  11 + monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
  12 + today: "Bugün",
  13 + clear: "Temizle",
  14 + weekStart: 1,
  15 + format: "dd.mm.yyyy"
  16 + };
  17 +}(jQuery));
  18 +
... ...
core/static/js/vendor/locales/bootstrap-datepicker.uk.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +/**
  2 + * Ukrainian translation for bootstrap-datepicker
  3 + * Igor Polynets
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['uk'] = {
  7 + days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"],
  8 + daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"],
  9 + daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
  10 + months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
  11 + monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"],
  12 + today: "Сьогодні",
  13 + clear: "Очистити",
  14 + format: "dd.mm.yyyy",
  15 + weekStart: 1
  16 + };
  17 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.vi.js 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +/**
  2 + * Vietnamese translation for bootstrap-datepicker
  3 + * An Vo <https://github.com/anvoz/>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['vi'] = {
  7 + days: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"],
  8 + daysShort: ["CN", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7"],
  9 + daysMin: ["CN", "T2", "T3", "T4", "T5", "T6", "T7"],
  10 + months: ["Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"],
  11 + monthsShort: ["Th1", "Th2", "Th3", "Th4", "Th5", "Th6", "Th7", "Th8", "Th9", "Th10", "Th11", "Th12"],
  12 + today: "Hôm nay",
  13 + clear: "Xóa",
  14 + format: "dd/mm/yyyy"
  15 + };
  16 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.zh-cn.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Simplified Chinese translation for bootstrap-datepicker
  3 + * Yuan Cheung <advanimal@gmail.com>
  4 + */
  5 +;(function($){
  6 + $.fn.datepicker.dates['zh-CN'] = {
  7 + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
  8 + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
  9 + daysMin: ["日", "一", "二", "三", "四", "五", "六"],
  10 + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
  11 + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
  12 + today: "今日",
  13 + clear: "清除",
  14 + format: "yyyy年mm月dd日",
  15 + titleFormat: "yyyy年mm月",
  16 + weekStart: 1
  17 + };
  18 +}(jQuery));
... ...
core/static/js/vendor/locales/bootstrap-datepicker.zh-tw.js 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +/**
  2 + * Traditional Chinese translation for bootstrap-datepicker
  3 + * Rung-Sheng Jang <daniel@i-trend.co.cc>
  4 + * FrankWu <frankwu100@gmail.com> Fix more appropriate use of Traditional Chinese habit
  5 + */
  6 +;(function($){
  7 + $.fn.datepicker.dates['zh-TW'] = {
  8 + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
  9 + daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
  10 + daysMin: ["日", "一", "二", "三", "四", "五", "六"],
  11 + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
  12 + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
  13 + today: "今天",
  14 + format: "yyyy年mm月dd日",
  15 + weekStart: 1,
  16 + clear: "清除"
  17 + };
  18 +}(jQuery));
... ...
core/templates/base.html
1 1 <!DOCTYPE html>
2 2  
3 3 {% load static i18n %}
  4 +{% get_current_language as LANGUAGE_CODE %}
4 5  
5 6 <html>
6 7 <head>
... ... @@ -20,7 +21,7 @@
20 21 <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}">
21 22 <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/material.min.css' %}">
22 23 <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/ripples.min.css' %}">
23   - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/datepicker.css' %}">
  24 + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/bootstrap-datepicker.standalone.css' %}">
24 25 <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/alertify.min.css' %}">
25 26 <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}">
26 27 <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script>
... ... @@ -28,6 +29,11 @@
28 29 <script type="text/javascript" src="{% static 'js/vendor/material.min.js' %}"></script>
29 30 <script type="text/javascript" src="{% static 'js/vendor/ripples.min.js' %}"></script>
30 31 <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script>
  32 +
  33 + {% with "js/vendor/locales/bootstrap-datepicker."|add:LANGUAGE_CODE|add:".js" as locale_datepicker %}
  34 + <script type="text/javascript" src="{% static locale_datepicker %}"></script>
  35 + {% endwith %}
  36 +
31 37 <script type="text/javascript" src="{% static 'js/vendor/alertify.min.js' %}"></script>
32 38 <script type="text/javascript" src="{% static 'js/vendor/jscookie.js' %}"></script>
33 39  
... ...
forum/static/js/forum.js
1 1 var new_posts = []; //Store the new posts ids
2 2 var new_answers = {};
  3 +var locale = navigator.language || navigator.userLanguage;
3 4 /*
4 5 *
5 6 * Defining action of the form to make a post in forum
... ... @@ -60,7 +61,7 @@ function createForum(url, topic) {
60 61 */
61 62 function setForumCreateFormSubmit() {
62 63 $('.date-picker').datepicker({
63   - format: 'dd/mm/yyyy',
  64 + language: locale,
64 65 });
65 66  
66 67 var frm = $('#forum_create');
... ... @@ -111,7 +112,7 @@ function editForum(url, forum, success_message) {
111 112 */
112 113 function setForumUpdateFormSubmit(success_message) {
113 114 $('.date-picker').datepicker({
114   - format: 'dd/mm/yyyy',
  115 + language: locale,
115 116 });
116 117  
117 118 var frm = $('#forum_create');
... ...