Web view still in progress

This commit is contained in:
Claude Brisson
2023-11-05 13:51:01 +01:00
parent 5fdf3e8944
commit 5f068476dc
111 changed files with 8905 additions and 215 deletions

View File

@@ -1,17 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<html lang="${request.lang}">
<head>
<meta charset="UTF-8">
<title>Pairgoth</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Pairgoth Go Paring Engine">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="stylesheet" href="/lib/fork-awesome-1.2.0/fork-awesome.min.css">
<link rel="stylesheet" href="/css/main.css">
<script type="text/javascript" src="/js/domhelper.js"></script>
<script type="text/javascript">
// #[[
let initFunctions = [];
function onLoad(fct) {
if (typeof(fct) == "function") initFunctions.push(fct);
}
document.addEventListener('DOMContentLoaded', () => {
initFunctions.forEach(fct => {
fct();
});
});
// ]]#
</script>
</head>
<body class="vert flex">
#foreach($attr in $application.getAttributeNames())$attr #end
#* Debugging code to list all web context properties
<blockquote>
#foreach($attr in $application.getAttributeNames())
<div>$attr = $application.getAttribute($attr)</div>
#end
</blockquote>
*#
<div id="header" class="horz flex">
<div id="logo">
<img src="/img/logov2.svg"/>
@@ -38,13 +54,22 @@
<div id="version">pairgoth v0.1</div>
<div id="contact"><a href="mailto:pairgoth@jeudego.org">contact</a></div>
</div>
<div id="feedback">
<div id="success" class="hidden"></div>
<div id="error" class="hidden"></div>
</div>
<div id="backdrop">
<div id="dimmer"></div>
<script type="text/javascript" src="/js/store2-2.14.2.min.js"></script>
<script type="text/javascript" src="/js/tablesort-5.4.0.min.js"></script>
<script type="text/javascript" src="/js/formproxy.js"></script>
<script type="text/javascript" src="/lib/store2-2.14.2.min.js"></script>
<script type="text/javascript" src="/lib/tablesort-5.4.0.min.js"></script>
<script type="text/javascript" src="/lib/imaskjs-7.1.3/imask.min.js"></script>
<script type="text/javascript" src="/js/api.js"></script>
<script type="text/javascript" src="/js/main.js"></script>
<script type="text/javascript" src="/js/domhelper.js"></script>
<link rel="stylesheet" href="/lib/fork-awesome-1.2.0/fork-awesome.min.css"/>
<link rel="stylesheet" href="/css/main.css"/>
<script type="text/javascript">
const lang = '${request.lang}';
// #[[
onLoad(() => {
$('#lang').on('click', e => {
@@ -61,6 +86,18 @@
}
});
});
// syntaxic sugar for IMask
NodeList.prototype.imask = function(options) {
this.forEach(function (elem, i) {
elem.imask(options);
});
return this;
}
HTMLInputElement.prototype.imask = function(options) {
IMask(this, options);
}
// ]]#
</script>
</body>

View File

@@ -0,0 +1 @@
level = info

View File

@@ -19,6 +19,7 @@
<toolbox scope="request">
<tool key="api" class="org.jeudego.pairgoth.view.ApiTool"/>
<tool key="countries" class="org.jeudego.pairgoth.view.CountriesTool"/>
</toolbox>
</tools>

View File

@@ -59,6 +59,12 @@
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet>
<servlet-name>api</servlet-name>
<servlet-class>org.jeudego.pairgoth.web.ApiServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<!-- servlet mappings -->
<servlet-mapping>
@@ -69,10 +75,26 @@
<servlet-name>sse</servlet-name>
<url-pattern>/events/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>api</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<!-- context params -->
<context-param>
<param-name>webapp-slf4j-logger.format</param-name>
<param-value>%logger [%level] [%ip] %message @%file:%line:%column</param-value>
</context-param>
<context-param>
<param-name>org.apache.velocity.tools.loadDefaults</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.velocity.tools.cleanConfiguration</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.velocity.tools.userCanOverwriteTools</param-name>
<param-value>false</param-value>
</context-param>
</web-app>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@@ -1,15 +1,16 @@
<div class="section">
<button id="new" class="ui blue icon floating button">
<a href="tour" class="ui blue icon floating button">
<i class="fa fa-plus-square-o"></i>
New tournament
</button>
</a>
</div>
#foreach($tour in $api.get('tour').entrySet())
<div class="section">
<button data-tour-id="$tour.key" class="ui open basic secondary white icon floating button">
$tour
<a href="tour?tour_id=${tour.key}" class="ui open basic secondary white icon floating button">
<i class="fa fa-folder-open-o"></i>
Open $tour.value
</button>
Open
</a>
</div>
#end
@@ -53,15 +54,16 @@
</button>
</div></div>
<script type="text/javascript">
const lang = '${request.lang}';
// #[[
onLoad(() => {
$('#new').on('click', e => {
$('#new-tournament').modal(true);
});
/*
new DateRangePicker($('#date-range')[0], {
language: lang
});
*/
$('#new-tournament .tab.segment:first-child').addClass('active');
});
// ]]#

View File

@@ -23,6 +23,30 @@ let headers = function() {
return ret;
};
function clearFeedback() {
$('#error')[0].innerText = '';
$('#error, #success').addClass('hidden');
}
function success() {
$('#error')[0].innerText = '';
$('#error').addClass('hidden');
}
function error(response) {
const contentType = response.headers.get("content-type");
let promise =
(contentType && contentType.indexOf("application/json") !== -1)
? response.json().then(json => json.error || "unknown error")
: Promise.resolve(response.statusText);
promise.then(message => {
message = message.replaceAll(/([a-z])([A-Z])/g,"$1 $2").toLowerCase()
console.error(message);
$('#error')[0].innerText = message;
$('#error').removeClass('hidden');
});
}
let api = {
get: (path) => fetch(base + path, {
credentials: "same-origin",
@@ -49,22 +73,61 @@ let api = {
/* then, some helpers */
getJson: (path) => api.get(path)
.then(resp => {
if (resp.ok) return resp.json();
else throw resp.statusText;
}),
getJson: (path) => {
clearFeedback();
return api.get(path)
.then(resp => {
if (resp.ok) {
return resp.json();
}
else throw resp;
})
.catch(err => {
error(err);
return 'error'
});
},
postJson: (path, body) => api.post(path, body)
.then(resp => {
if (resp.ok) return resp.json();
else throw resp.statusText;
}),
postJson: (path, body) => {
clearFeedback();
spinner(true);
return api.post(path, body)
.then(resp => {
if (resp.ok) {
success();
return resp.json();
}
else {
throw resp;
}
})
.catch(err => {
error(err);
return 'error';
})
.finally(() => {
spinner(false);
});
},
putJson: (path, body) => api.put(path, body)
.then(resp => {
if (resp.ok) return resp.json();
else throw resp.statusText;
})
putJson: (path, body) => {
clearFeedback();
spinner(true);
return api.put(path, body)
.then(resp => {
if (resp.ok) {
success();
return resp.json();
}
else throw resp;
})
.catch(err => {
error(err);
return 'error';
})
.finally(() => {
spinner(false);
});
}
};

View File

@@ -78,27 +78,27 @@ Element.prototype.data = function (key) {
NodeList.prototype.data = function(key) {
this.item(0).data(key);
}
NodeList.prototype.show = function(key) {
this.item(0).show(key);
NodeList.prototype.show = function() {
this.item(0).show();
return this;
}
Element.prototype.show = function (key) {
Element.prototype.show = function() {
this.style.display = 'block';
}
NodeList.prototype.hide = function(key) {
this.item(0).hide(key);
NodeList.prototype.hide = function() {
this.item(0).hide();
return this;
}
Element.prototype.hide = function (key) {
Element.prototype.hide = function() {
this.style.display = 'none';
}
let initFunctions = [];
function onLoad(fct) {
if (typeof(fct) == "function") initFunctions.push(fct);
NodeList.prototype.text = function(txt) {
this.item(0).text(txt);
}
Element.prototype.text = function(txt) {
if (typeof(txt) === 'undefined') {
return this.textContent;
} else {
this.textContent = txt;
}
}
document.on("DOMContentLoaded", () => {
initFunctions.forEach(fct => {
fct();
});
});

View File

@@ -1,163 +0,0 @@
// hack to replace .34 into 0.34 (CB TODO - upstream patch to inputmask)
const fixNumber = (value) => isNaN(value) || !`${value}`.startsWith('.') ? value : `0.${value}`;
class FormProxy {
constructor(formSelector, config) {
this.formSelector = formSelector;
this.config = config;
this.config.properties = () => Object.keys(this.config).filter(k => typeof(this.config[k]) !== 'function');
this.promises = [];
this.dirty = false;
this.config.import = function(obj) {
for (let key in obj) {
if (key in this.config) {
this.proxy[key] = obj[key];
} else {
console.warn(`ignoring property ${key}`)
}
}
this.config.dirty(false);
}.bind(this);
this.config.export = function() {
let ret = {}
this.config.properties().forEach(prop => {
ret[prop] = this.proxy[prop];
});
return ret;
}.bind(this);
this.config.dirty = function(value) {
if (typeof(value) === 'undefined') return thisProxy.dirty;
else thisProxy.dirty = Boolean(value);
}.bind(this);
this.config.valid = function() {
return $(`${thisProxy.formSelector} [required]:invalid`).length === 0
}.bind(this);
this.config.reset = function() {
this.initialize();
}.bind(this);
// CB TODO - needs a function to wait for promises coming from dependencies
this.setState('loading');
$(() => this.configure.bind(this)());
let thisProxy = this;
return this.proxy = new Proxy(config, {
get(target, prop) {
if (typeof(target[prop]) === 'function') {
return target[prop];
}
else {
let elem = config[prop];
if (typeof(elem) === 'undefined') throw `invalid property: ${prop}`
return elem.getter();
}
},
set(target, prop, value) {
let def = config[prop];
if (typeof(def) === 'undefined') throw `invalid property: ${prop}`
let depends = [].concat(def.depends ? def.depends : []);
let proms = depends.flatMap(field => config[field].promise).filter(prom => prom);
let operation = () => {
def.setter(value);
if (typeof(def.change) === 'function') {
let rst = def.change(value, def.elem);
if (typeof(rst?.then) === 'function') {
def.promise = rst;
}
}
};
if (proms.length) Promise.all(proms).then(() => operation());
else operation();
config.dirty(true);
return true;
}
});
}
configure() {
this.form = $(this.formSelector);
if (!this.form.length) throw `Form not found: ${this.formSelector}`;
this.form.on('submit', e => { e.preventDefault(); return false; });
let controls = this.form.find('input[name],select[name],textarea[name]');
controls.on('input change keyup', e => {
this.setState('editing');
this.config.dirty(true);
});
controls.each((i,e) => {
let name = $(e).attr('name');
if (!(name in this.config)) this.config[name] = {};
});
this.config.properties().forEach(key => {
let def = this.config[key];
if (!def) def = this.config[key] = {};
else if (typeof(def) === 'function') return true; // continue foreach
if (!def.getter) {
let elem = def.elem;
if (!elem || !elem.length) elem = $(`${this.formSelector} [name="${key}"]`);
if (!elem || !elem.length) elem = $(`#${key}`);
if (!elem || !elem.length) throw `element not found: ${key}`;
def.elem = elem;
def.getter = elem.is('input,select,textarea')
? elem.attr('type') === 'radio'
? (() => elem.filter(':checked').val())
: (() => elem.data('default')
? elem.val()
? elem.is('.number')
? elem.val().replace(/ /g, '')
: elem.val()
: elem.data('default')
: elem.is('.number')
? elem.val() ? elem.val().replace(/ /g, '') : elem.val()
: elem.val())
: (() => elem.text());
def.setter = elem.is('input,select,textarea')
? elem.attr('type') === 'radio'
? (value => elem.filter(`[value="${value}"]`).prop('checked', true))
: elem.is('input.number') ? (value => elem.val(fixNumber(value))) : (value => elem.val(value))
: (value => elem.text(value));
if (typeof(def.change) === 'function') {
elem.on('change', () => def.change(def.getter(), elem));
}
}
let loading = def?.loading;
switch (typeof(loading)) {
case 'function':
let rst = loading(def.elem);
if (typeof(rst?.then) === 'function') {
this.promises.push(rst);
}
break;
}
});
setTimeout(() => {
Promise.all(this.promises).then(() => { this.promises = []; this.initialize(); });
}, 10);
}
initialize() {
this.config.properties().forEach(key => {
let def = this.config[key];
if (typeof(def.initial) === 'undefined') {
this.proxy[key] = '';
} else {
if (typeof(def.initial) === 'function') {
def.initial(def.elem)
} else if (def.initial != null) {
this.proxy[key] = def.initial;
}
}
});
this.config.dirty(false);
this.setState('initial');
}
setState(state) {
if (this.form && this.form.length) this.form[0].dispatchEvent(new Event(state));
}
}

View File

@@ -102,6 +102,35 @@ Element.prototype.modal = function(show) {
return this;
}
/* DOM helpers */
function formValue(name) {
let ctl = $(`[name="${name}"]`)[0];
let type = ctl.tagName;
if (
(type === 'INPUT' && ['text', 'number'].includes(ctl.attr('type'))) ||
type === 'SELECT'
) {
return ctl.value;
} else if (type === 'INPUT' && ctl.attr('type') === 'radio') {
ctl = $(`input[name="${name}"]:checked`)[0];
if (ctl) return ctl.value;
} else if (type === 'INPUT' && ctl.attr('type') === 'radio') {
return ctl.checked;
}
console.error(`unknown input name: ${name}`);
return null;
}
function msg(id) {
let ctl = $(`#${id}`)[0];
return ctl.textContent;
}
function spinner(show) {
if (show) $('#backdrop').addClass('active');
else $('#backdrop').removeClass('active');
}
onLoad(() => {
/*

View File

@@ -0,0 +1 @@
date picker: https://mymth.github.io/vanillajs-datepicker/#/

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,317 @@
.datepicker {
width: -moz-min-content;
width: min-content;
}
.datepicker:not(.active) {
display: none;
}
.datepicker-dropdown {
position: absolute;
z-index: 20;
padding-top: 4px;
}
.datepicker-dropdown.datepicker-orient-top {
padding-top: 0;
padding-bottom: 4px;
}
.datepicker-picker {
display: flex;
flex-direction: column;
border-radius: 4px;
background-color: hsl(0, 0%, 100%);
}
.datepicker-dropdown .datepicker-picker {
box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
}
.datepicker-main {
flex: auto;
padding: 2px;
}
.datepicker-footer {
box-shadow: inset 0 1px 1px rgba(10, 10, 10, 0.1);
background-color: hsl(0, 0%, 96%);
}
.datepicker-title {
box-shadow: inset 0 -1px 1px rgba(10, 10, 10, 0.1);
background-color: hsl(0, 0%, 96%);
padding: 0.375rem 0.75rem;
text-align: center;
font-weight: 700;
}
.datepicker-controls {
display: flex;
}
.datepicker-header .datepicker-controls {
padding: 2px 2px 0;
}
.datepicker-controls .button {
display: inline-flex;
position: relative;
align-items: center;
justify-content: center;
margin: 0;
border: 1px solid gainsboro;
border-radius: 4px;
box-shadow: none;
background-color: hsl(0, 0%, 100%);
cursor: pointer;
padding: calc(0.375em - 1px) 0.75em;
height: 2.25em;
vertical-align: top;
text-align: center;
line-height: 1.5;
white-space: nowrap;
color: hsl(0, 0%, 21%);
font-size: 1rem;
}
.datepicker-controls .button:focus,
.datepicker-controls .button:active {
outline: none;
}
.datepicker-controls .button:hover {
border-color: #b8b8b8;
color: hsl(0, 0%, 21%);
}
.datepicker-controls .button:focus {
border-color: hsl(217, 71%, 53%);
color: hsl(0, 0%, 21%);
}
.datepicker-controls .button:focus:not(:active) {
box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
}
.datepicker-controls .button:active {
border-color: #474747;
color: hsl(0, 0%, 21%);
}
.datepicker-controls .button[disabled] {
cursor: not-allowed;
}
.datepicker-header .datepicker-controls .button {
border-color: transparent;
font-weight: bold;
}
.datepicker-header .datepicker-controls .button:hover {
background-color: #f9f9f9;
}
.datepicker-header .datepicker-controls .button:active {
background-color: #f2f2f2;
}
.datepicker-footer .datepicker-controls .button {
flex: auto;
margin: calc(0.375rem - 1px) 0.375rem;
border-radius: 2px;
font-size: 0.75rem;
}
.datepicker-controls .view-switch {
flex: auto;
}
.datepicker-controls .prev-button,
.datepicker-controls .next-button {
padding-right: 0.375rem;
padding-left: 0.375rem;
flex: 0 0 14.2857142857%;
}
.datepicker-controls .prev-button.disabled,
.datepicker-controls .next-button.disabled {
visibility: hidden;
}
.datepicker-view,
.datepicker-grid {
display: flex;
}
.datepicker-view {
align-items: stretch;
width: 15.75rem;
}
.datepicker-grid {
flex-wrap: wrap;
flex: auto;
}
.datepicker .days {
display: flex;
flex-direction: column;
flex: auto;
}
.datepicker .days-of-week {
display: flex;
}
.datepicker .week-numbers {
display: flex;
flex-direction: column;
flex: 0 0 9.6774193548%;
}
.datepicker .weeks {
display: flex;
flex-direction: column;
align-items: stretch;
flex: auto;
}
.datepicker span {
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
cursor: default;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.datepicker .dow {
height: 1.5rem;
font-size: 0.875rem;
font-weight: 700;
}
.datepicker .week {
flex: auto;
color: #b8b8b8;
font-size: 0.75rem;
}
.datepicker-cell,
.datepicker .days .dow {
flex-basis: 14.2857142857%;
}
.datepicker-cell {
height: 2.25rem;
}
.datepicker-cell:not(.day) {
flex-basis: 25%;
height: 4.5rem;
}
.datepicker-cell:not(.disabled):hover {
background-color: #f9f9f9;
cursor: pointer;
}
.datepicker-cell.focused:not(.selected) {
background-color: #e9e9e9;
}
.datepicker-cell.selected,
.datepicker-cell.selected:hover {
background-color: hsl(217, 71%, 53%);
color: #fff;
font-weight: 600;
}
.datepicker-cell.disabled {
color: gainsboro;
}
.datepicker-cell.prev:not(.disabled),
.datepicker-cell.next:not(.disabled) {
color: hsl(0, 0%, 48%);
}
.datepicker-cell.prev.selected,
.datepicker-cell.next.selected {
color: #e6e6e6;
}
.datepicker-cell.highlighted:not(.selected):not(.range):not(.today) {
border-radius: 0;
background-color: hsl(0, 0%, 96%);
}
.datepicker-cell.highlighted:not(.selected):not(.range):not(.today):not(.disabled):hover {
background-color: #efefef;
}
.datepicker-cell.highlighted:not(.selected):not(.range):not(.today).focused {
background-color: #e9e9e9;
}
.datepicker-cell.today:not(.selected) {
background-color: hsl(171, 100%, 41%);
}
.datepicker-cell.today:not(.selected):not(.disabled) {
color: #fff;
}
.datepicker-cell.today.focused:not(.selected) {
background-color: #00ccad;
}
.datepicker-cell.range-end:not(.selected),
.datepicker-cell.range-start:not(.selected) {
background-color: #b8b8b8;
color: #fff;
}
.datepicker-cell.range-end.focused:not(.selected),
.datepicker-cell.range-start.focused:not(.selected) {
background-color: #b3b3b3;
}
.datepicker-cell.range-start:not(.range-end) {
border-radius: 4px 0 0 4px;
}
.datepicker-cell.range-end:not(.range-start) {
border-radius: 0 4px 4px 0;
}
.datepicker-cell.range {
border-radius: 0;
background-color: gainsboro;
}
.datepicker-cell.range:not(.disabled):not(.focused):not(.today):hover {
background-color: #d7d7d7;
}
.datepicker-cell.range.disabled {
color: #c6c6c6;
}
.datepicker-cell.range.focused {
background-color: #d1d1d1;
}
.datepicker-input.in-edit {
border-color: #276bda;
}
.datepicker-input.in-edit:focus,
.datepicker-input.in-edit:active {
box-shadow: 0 0 0.25em 0.25em rgba(39, 107, 218, 0.2);
}

View File

@@ -0,0 +1 @@
.datepicker{width:-moz-min-content;width:min-content}.datepicker:not(.active){display:none}.datepicker-dropdown{padding-top:4px;position:absolute;z-index:20}.datepicker-dropdown.datepicker-orient-top{padding-bottom:4px;padding-top:0}.datepicker-picker{background-color:#fff;border-radius:4px;display:flex;flex-direction:column}.datepicker-dropdown .datepicker-picker{box-shadow:0 2px 3px hsla(0,0%,4%,.1),0 0 0 1px hsla(0,0%,4%,.1)}.datepicker-main{flex:auto;padding:2px}.datepicker-footer{background-color:#f5f5f5;box-shadow:inset 0 1px 1px hsla(0,0%,4%,.1)}.datepicker-title{background-color:#f5f5f5;box-shadow:inset 0 -1px 1px hsla(0,0%,4%,.1);font-weight:700;padding:.375rem .75rem;text-align:center}.datepicker-controls{display:flex}.datepicker-header .datepicker-controls{padding:2px 2px 0}.datepicker-controls .button{align-items:center;background-color:#fff;border:1px solid #dcdcdc;border-radius:4px;box-shadow:none;color:#363636;cursor:pointer;display:inline-flex;font-size:1rem;height:2.25em;justify-content:center;line-height:1.5;margin:0;padding:calc(.375em - 1px) .75em;position:relative;text-align:center;vertical-align:top;white-space:nowrap}.datepicker-controls .button:active,.datepicker-controls .button:focus{outline:none}.datepicker-controls .button:hover{border-color:#b8b8b8;color:#363636}.datepicker-controls .button:focus{border-color:#3273dc;color:#363636}.datepicker-controls .button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.datepicker-controls .button:active{border-color:#474747;color:#363636}.datepicker-controls .button[disabled]{cursor:not-allowed}.datepicker-header .datepicker-controls .button{border-color:transparent;font-weight:700}.datepicker-header .datepicker-controls .button:hover{background-color:#f9f9f9}.datepicker-header .datepicker-controls .button:active{background-color:#f2f2f2}.datepicker-footer .datepicker-controls .button{border-radius:2px;flex:auto;font-size:.75rem;margin:calc(.375rem - 1px) .375rem}.datepicker-controls .view-switch{flex:auto}.datepicker-controls .next-button,.datepicker-controls .prev-button{flex:0 0 14.2857142857%;padding-left:.375rem;padding-right:.375rem}.datepicker-controls .next-button.disabled,.datepicker-controls .prev-button.disabled{visibility:hidden}.datepicker-grid,.datepicker-view{display:flex}.datepicker-view{align-items:stretch;width:15.75rem}.datepicker-grid{flex:auto;flex-wrap:wrap}.datepicker .days{display:flex;flex:auto;flex-direction:column}.datepicker .days-of-week{display:flex}.datepicker .week-numbers{display:flex;flex:0 0 9.6774193548%;flex-direction:column}.datepicker .weeks{align-items:stretch;display:flex;flex:auto;flex-direction:column}.datepicker span{-webkit-touch-callout:none;align-items:center;border-radius:4px;cursor:default;display:flex;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.datepicker .dow{font-size:.875rem;font-weight:700;height:1.5rem}.datepicker .week{color:#b8b8b8;flex:auto;font-size:.75rem}.datepicker .days .dow,.datepicker-cell{flex-basis:14.2857142857%}.datepicker-cell{height:2.25rem}.datepicker-cell:not(.day){flex-basis:25%;height:4.5rem}.datepicker-cell:not(.disabled):hover{background-color:#f9f9f9;cursor:pointer}.datepicker-cell.focused:not(.selected){background-color:#e9e9e9}.datepicker-cell.selected,.datepicker-cell.selected:hover{background-color:#3273dc;color:#fff;font-weight:600}.datepicker-cell.disabled{color:#dcdcdc}.datepicker-cell.next:not(.disabled),.datepicker-cell.prev:not(.disabled){color:#7a7a7a}.datepicker-cell.next.selected,.datepicker-cell.prev.selected{color:#e6e6e6}.datepicker-cell.highlighted:not(.selected):not(.range):not(.today){background-color:#f5f5f5;border-radius:0}.datepicker-cell.highlighted:not(.selected):not(.range):not(.today):not(.disabled):hover{background-color:#efefef}.datepicker-cell.highlighted:not(.selected):not(.range):not(.today).focused{background-color:#e9e9e9}.datepicker-cell.today:not(.selected){background-color:#00d1b2}.datepicker-cell.today:not(.selected):not(.disabled){color:#fff}.datepicker-cell.today.focused:not(.selected){background-color:#00ccad}.datepicker-cell.range-end:not(.selected),.datepicker-cell.range-start:not(.selected){background-color:#b8b8b8;color:#fff}.datepicker-cell.range-end.focused:not(.selected),.datepicker-cell.range-start.focused:not(.selected){background-color:#b3b3b3}.datepicker-cell.range-start:not(.range-end){border-radius:4px 0 0 4px}.datepicker-cell.range-end:not(.range-start){border-radius:0 4px 4px 0}.datepicker-cell.range{background-color:#dcdcdc;border-radius:0}.datepicker-cell.range:not(.disabled):not(.focused):not(.today):hover{background-color:#d7d7d7}.datepicker-cell.range.disabled{color:#c6c6c6}.datepicker-cell.range.focused{background-color:#d1d1d1}.datepicker-input.in-edit{border-color:#276bda}.datepicker-input.in-edit:active,.datepicker-input.in-edit:focus{box-shadow:0 0 .25em .25em rgba(39,107,218,.2)}

View File

@@ -0,0 +1,19 @@
/**
* Arabic-Algeria translation for bootstrap-datepicker
* Rabah Saadi <infosrabah@gmail.com>
*/
(function () {
Datepicker.locales['ar-DZ'] = {
days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"],
daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"],
daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"],
months: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],
monthsShort: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],
today: "هذا اليوم",
rtl: true,
monthsTitle: "أشهر",
clear: "إزالة",
format: "yyyy/mm/dd",
weekStart: 0
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Arabic-Tunisia translation for bootstrap-datepicker
* Souhaieb Besbes <besbes.souhaieb@gmail.com>
*/
(function () {
Datepicker.locales['ar-tn'] = {
days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"],
daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"],
daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"],
months: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],
monthsShort: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],
today: "هذا اليوم",
rtl: true
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Arabic translation for bootstrap-datepicker
* Mohammed Alshehri <alshehri866@gmail.com>
*/
(function () {
Datepicker.locales.ar = {
days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"],
daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"],
daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"],
months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
today: "هذا اليوم",
rtl: true
};
}());

View File

@@ -0,0 +1,14 @@
// Azerbaijani
(function () {
Datepicker.locales.az = {
days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"],
daysShort: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."],
daysMin: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."],
months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"],
monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"],
today: "Bu gün",
weekStart: 1,
clear: "Təmizlə",
monthsTitle: 'Aylar'
};
}());

View File

@@ -0,0 +1,14 @@
/**
* Bulgarian translation for bootstrap-datepicker
* Apostol Apostolov <apostol.s.apostolov@gmail.com>
*/
(function () {
Datepicker.locales.bg = {
days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"],
daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб"],
daysMin: ["Н", "П", "В", "С", "Ч", "П", "С"],
months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"],
today: "днес"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Bamanankan (bm) translation for bootstrap-datepicker
* Fatou Fall <fatou@medicmobile.org>
*/
(function () {
Datepicker.locales.bm = {
days: ["Kari","Ntɛnɛn","Tarata","Araba","Alamisa","Juma","Sibiri"],
daysShort: ["Kar","Ntɛ","Tar","Ara","Ala","Jum","Sib"],
daysMin: ["Ka","Nt","Ta","Ar","Al","Ju","Si"],
months: ["Zanwuyekalo","Fewuruyekalo","Marisikalo","Awirilikalo","Mɛkalo","Zuwɛnkalo","Zuluyekalo","Utikalo","Sɛtanburukalo","ɔkutɔburukalo","Nowanburukalo","Desanburukalo"],
monthsShort: ["Zan","Few","Mar","Awi","Mɛ","Zuw","Zul","Uti","Sɛt","ɔku","Now","Des"],
today: "Bi",
monthsTitle: "Kalo",
clear: "Ka jɔsi",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,19 @@
/**
* Bengali (Bangla) translation for bootstrap-datepicker
* Karim Khan <kkhancse91@gmail.com>
* Orif N. Jr. <orif.zade@gmail.com>
*/
(function () {
Datepicker.locales.bn = {
days: ["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],
daysShort: ["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],
daysMin: ["রবি","সোম","মঙ্গল","বুধ","বৃহস্পতি","শুক্র","শনি"],
months: ["জানুয়ারী","ফেব্রুয়ারি","মার্চ","এপ্রিল","মে","জুন","জুলাই","অগাস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],
monthsShort: ["জানুয়ারী","ফেব্রুয়ারি","মার্চ","এপ্রিল","মে","জুন","জুলাই","অগাস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],
today: "আজ",
monthsTitle: "মাস",
clear: "পরিষ্কার",
weekStart: 0,
format: "mm/dd/yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Breton translation for bootstrap-datepicker
* Gwenn Meynier <tornoz@laposte.net>
*/
(function () {
Datepicker.locales.br = {
days: ["Sul", "Lun", "Meurzh", "Merc'her", "Yaou", "Gwener", "Sadorn"],
daysShort: ["Sul", "Lun", "Meu.", "Mer.", "Yao.", "Gwe.", "Sad."],
daysMin: ["Su", "L", "Meu", "Mer", "Y", "G", "Sa"],
months: ["Genver", "C'hwevrer", "Meurzh", "Ebrel", "Mae", "Mezheven", "Gouere", "Eost", "Gwengolo", "Here", "Du", "Kerzu"],
monthsShort: ["Genv.", "C'hw.", "Meur.", "Ebre.", "Mae", "Mezh.", "Goue.", "Eost", "Gwen.", "Here", "Du", "Kerz."],
today: "Hiziv",
monthsTitle: "Miz",
clear: "Dilemel",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Bosnian translation for bootstrap-datepicker
*/
(function () {
Datepicker.locales.bs = {
days: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"],
daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"],
months: ["Januar", "Februar", "Mart", "April", "Maj", "Juni", "Juli", "August", "Septembar", "Oktobar", "Novembar", "Decembar"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
today: "Danas",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Catalan translation for bootstrap-datepicker
* J. Garcia <jogaco.en@gmail.com>
*/
(function () {
Datepicker.locales.ca = {
days: ["diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte"],
daysShort: ["dg.", "dl.", "dt.", "dc.", "dj.", "dv.", "ds."],
daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds"],
months: ["gener", "febrer", "març", "abril", "maig", "juny", "juliol", "agost", "setembre", "octubre", "novembre", "desembre"],
monthsShort: ["gen.", "febr.", "març", "abr.", "maig", "juny", "jul.", "ag.", "set.", "oct.", "nov.", "des."],
today: "Avui",
monthsTitle: "Mesos",
clear: "Esborra",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,19 @@
/**
* Czech translation for bootstrap-datepicker
* Matěj Koubík <matej@koubik.name>
* Fixes by Michal Remiš <michal.remis@gmail.com>
*/
(function () {
Datepicker.locales.cs = {
days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"],
daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob"],
daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"],
today: "Dnes",
clear: "Vymazat",
monthsTitle: "Měsíc",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,14 @@
/**
* Welsh translation for bootstrap-datepicker
* S. Morris <s.morris@bangor.ac.uk>
*/
(function () {
Datepicker.locales.cy = {
days: ["Sul", "Llun", "Mawrth", "Mercher", "Iau", "Gwener", "Sadwrn"],
daysShort: ["Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad"],
daysMin: ["Su", "Ll", "Ma", "Me", "Ia", "Gwe", "Sa"],
months: ["Ionawr", "Chewfror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorfennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"],
monthsShort: ["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws", "Med", "Hyd", "Tach", "Rha"],
today: "Heddiw"
};
}());

View File

@@ -0,0 +1,19 @@
/**
* Danish translation for bootstrap-datepicker
* Christian Pedersen <https: //github.com/chripede>
* Ivan Mylyanyk <https: //github.com/imylyanyk>
*/
(function () {
Datepicker.locales.da = {
days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"],
daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
today: "I Dag",
weekStart: 1,
clear: "Nulstil",
format: "dd/mm/yyyy",
monthsTitle: "Måneder"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* German translation for bootstrap-datepicker
* Sam Zurcher <sam@orelias.ch>
*/
(function () {
Datepicker.locales.de = {
days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
daysShort: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
today: "Heute",
monthsTitle: "Monate",
clear: "Löschen",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,16 @@
/**
* Greek translation for bootstrap-datepicker
*/
(function () {
Datepicker.locales.el = {
days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"],
daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"],
daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα"],
months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"],
today: "Σήμερα",
clear: "Καθαρισμός",
weekStart: 1,
format: "d/m/yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Australian English translation for bootstrap-datepicker
* Steve Chapman <steven.p.chapman@gmail.com>
*/
(function () {
Datepicker.locales['en-AU'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
monthsTitle: "Months",
clear: "Clear",
weekStart: 1,
format: "d/mm/yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Canadian English translation for bootstrap-datepicker
* Mike Nacey <mnacey@gmail.com>
*/
(function () {
Datepicker.locales['en-CA'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
monthsTitle: "Months",
clear: "Clear",
weekStart: 0,
format: "yyyy-mm-dd"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* British English translation for bootstrap-datepicker
* Xavier Dutreilh <xavier@dutreilh.com>
*/
(function () {
Datepicker.locales['en-GB'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
monthsTitle: "Months",
clear: "Clear",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Irish English translation for bootstrap-datepicker
*/
(function () {
Datepicker.locales['en-IE'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
monthsTitle: "Months",
clear: "Clear",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* New Zealand English translation for bootstrap-datepicker
*/
(function () {
Datepicker.locales['en-NZ'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
monthsTitle: "Months",
clear: "Clear",
weekStart: 1,
format: "d/mm/yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* South African English translation for bootstrap-datepicker
*/
(function () {
Datepicker.locales['en-ZA'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
monthsTitle: "Months",
clear: "Clear",
weekStart: 1,
format: "yyyy/mm/d"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Esperanto translation for bootstrap-datepicker
* Emmanuel Debanne <https: //github.com/debanne>
*/
(function () {
Datepicker.locales.eo = {
days: ["dimanĉo", "lundo", "mardo", "merkredo", "ĵaŭdo", "vendredo", "sabato"],
daysShort: ["dim.", "lun.", "mar.", "mer.", "ĵaŭ.", "ven.", "sam."],
daysMin: ["d", "l", "ma", "me", "ĵ", "v", "s"],
months: ["januaro", "februaro", "marto", "aprilo", "majo", "junio", "julio", "aŭgusto", "septembro", "oktobro", "novembro", "decembro"],
monthsShort: ["jan.", "feb.", "mar.", "apr.", "majo", "jun.", "jul.", "aŭg.", "sep.", "okt.", "nov.", "dec."],
today: "Hodiaŭ",
clear: "Nuligi",
weekStart: 1,
format: "yyyy-mm-dd"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Spanish translation for bootstrap-datepicker
* Bruno Bonamin <bruno.bonamin@gmail.com>
*/
(function () {
Datepicker.locales.es = {
days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"],
months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
today: "Hoy",
monthsTitle: "Meses",
clear: "Borrar",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Estonian translation for bootstrap-datepicker
* Ando Roots <https: //github.com/anroots>
* Fixes by Illimar Tambek <<https: //github.com/ragulka>
*/
(function () {
Datepicker.locales.et = {
days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"],
daysShort: ["Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup"],
daysMin: ["P", "E", "T", "K", "N", "R", "L"],
months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"],
monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"],
today: "Täna",
clear: "Tühjenda",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Basque translation for bootstrap-datepicker
* Arkaitz Etxeberria <kondi80@gmail.com>
*/
(function () {
Datepicker.locales.eu = {
days: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata'],
daysShort: ['Ig', 'Al', 'Ar', 'Az', 'Og', 'Ol', 'Lr'],
daysMin: ['Ig', 'Al', 'Ar', 'Az', 'Og', 'Ol', 'Lr'],
months: ['Urtarrila', 'Otsaila', 'Martxoa', 'Apirila', 'Maiatza', 'Ekaina', 'Uztaila', 'Abuztua', 'Iraila', 'Urria', 'Azaroa', 'Abendua'],
monthsShort: ['Urt', 'Ots', 'Mar', 'Api', 'Mai', 'Eka', 'Uzt', 'Abu', 'Ira', 'Urr', 'Aza', 'Abe'],
today: "Gaur",
monthsTitle: "Hilabeteak",
clear: "Ezabatu",
weekStart: 1,
format: "yyyy/mm/dd"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Persian translation for bootstrap-datepicker
* Mostafa Rokooie <mostafa.rokooie@gmail.com>
*/
(function () {
Datepicker.locales.fa = {
days: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"],
daysShort: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک"],
daysMin: ["ی", "د", "س", "چ", "پ", "ج", "ش", "ی"],
months: ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"],
monthsShort: ["ژان", "فور", "مار", "آور", "مه", "ژون", "ژوی", "اوت", "سپت", "اکت", "نوا", "دسا"],
today: "امروز",
clear: "پاک کن",
weekStart: 1,
format: "yyyy/mm/dd"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Finnish translation for bootstrap-datepicker
* Jaakko Salonen <https: //github.com/jsalonen>
*/
(function () {
Datepicker.locales.fi = {
days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"],
daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau"],
daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la"],
months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
monthsShort: ["tammi", "helmi", "maalis", "huhti", "touko", "kesä", "heinä", "elo", "syys", "loka", "marras", "joulu"],
today: "tänään",
clear: "Tyhjennä",
weekStart: 1,
format: "d.m.yyyy"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Faroese translation for bootstrap-datepicker
* Theodor Johannesen <https: //github.com/theodorjohannesen>
*/
(function () {
Datepicker.locales.fo = {
days: ["Sunnudagur", "Mánadagur", "Týsdagur", "Mikudagur", "Hósdagur", "Fríggjadagur", "Leygardagur"],
daysShort: ["Sun", "Mán", "Týs", "Mik", "Hós", "Frí", "Ley"],
daysMin: ["Su", "Má", "Tý", "Mi", "Hó", "Fr", "Le"],
months: ["Januar", "Februar", "Marts", "Apríl", "Mei", "Juni", "Juli", "August", "Septembur", "Oktobur", "Novembur", "Desembur"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
today: "Í Dag",
clear: "Reinsa"
};
}());

View File

@@ -0,0 +1,21 @@
/**
* French (Switzerland) translation for bootstrap-datepicker
* Christoph Jossi <c.jossi@ascami.ch>
* Based on
* French translation for bootstrap-datepicker
* Nico Mollet <nico.mollet@gmail.com>
*/
(function () {
Datepicker.locales['fr-CH'] = {
days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"],
daysMin: ["D", "L", "Ma", "Me", "J", "V", "S"],
months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"],
today: "Aujourd'hui",
monthsTitle: "Mois",
clear: "Effacer",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* French translation for bootstrap-datepicker
* Nico Mollet <nico.mollet@gmail.com>
*/
(function () {
Datepicker.locales.fr = {
days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
daysShort: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
daysMin: ["d", "l", "ma", "me", "j", "v", "s"],
months: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
monthsShort: ["janv.", "févr.", "mars", "avril", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."],
today: "Aujourd'hui",
monthsTitle: "Mois",
clear: "Effacer",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,16 @@
/**
* Galician translation
*/
(function () {
Datepicker.locales.gl = {
days: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"],
daysShort: ["Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb"],
daysMin: ["Do", "Lu", "Ma", "Me", "Xo", "Ve", "Sa"],
months: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"],
monthsShort: ["Xan", "Feb", "Mar", "Abr", "Mai", "Xun", "Xul", "Ago", "Sep", "Out", "Nov", "Dec"],
today: "Hoxe",
clear: "Limpar",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Hebrew translation for bootstrap-datepicker
* Sagie Maoz <sagie@maoz.info>
*/
(function () {
Datepicker.locales.he = {
days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"],
daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"],
today: "היום",
rtl: true
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Hindi translation for bootstrap-datepicker
* Visar Uruqi <visar.uruqi@gmail.com>
*/
(function () {
Datepicker.locales.hi = {
days: ["रविवार", "सोमवार", "मंगलवार", "बुधवार", "गुरुवार", "शुक्रवार", "शनिवार"],
daysShort: ["सूर्य", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
daysMin: ["र", "सो", "मं", "बु", "गु", "शु", "श"],
months: ["जनवरी", "फ़रवरी", "मार्च", "अप्रैल", "मई", "जून", "जुलाई", "अगस्त", "सितम्बर", "अक्टूबर", "नवंबर", "दिसम्बर"],
monthsShort: ["जन", "फ़रवरी", "मार्च", "अप्रैल", "मई", "जून", "जुलाई", "अगस्त", "सितं", "अक्टूबर", "नवं", "दिसम्बर"],
today: "आज",
monthsTitle: "महीने",
clear: "साफ",
weekStart: 1,
format: "dd / mm / yyyy"
};
}());

View File

@@ -0,0 +1,13 @@
/**
* Croatian localisation
*/
(function () {
Datepicker.locales.hr = {
days: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"],
daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"],
months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
monthsShort: ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"],
today: "Danas"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Hungarian translation for bootstrap-datepicker
* Sotus László <lacisan@gmail.com>
*/
(function () {
Datepicker.locales.hu = {
days: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"],
daysShort: ["vas", "hét", "ked", "sze", "csü", "pén", "szo"],
daysMin: ["V", "H", "K", "Sze", "Cs", "P", "Szo"],
months: ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"],
monthsShort: ["jan", "feb", "már", "ápr", "máj", "jún", "júl", "aug", "sze", "okt", "nov", "dec"],
today: "ma",
weekStart: 1,
clear: "töröl",
titleFormat: "y. MM",
format: "yyyy.mm.dd"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Armenian translation for bootstrap-datepicker
* Hayk Chamyan <hamshen@gmail.com>
*/
(function () {
Datepicker.locales.hy = {
days: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"],
daysShort: ["Կիր", "Երկ", "Երե", "Չոր", "Հին", "Ուրբ", "Շաբ"],
daysMin: ["Կի", "Եկ", "Եք", "Չո", "Հի", "Ու", "Շա"],
months: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"],
monthsShort: ["Հնվ", "Փետ", "Մար", "Ապր", "Մայ", "Հուն", "Հուլ", "Օգս", "Սեպ", "Հոկ", "Նոյ", "Դեկ"],
today: "Այսօր",
clear: "Ջնջել",
format: "dd.mm.yyyy",
weekStart: 1,
monthsTitle: 'Ամիսնէր'
};
}());

View File

@@ -0,0 +1,19 @@
/**
* Bahasa translation for bootstrap-datepicker
* Azwar Akbar <azwar.akbar@gmail.com>
* Ardeman <mail@ardeman.com>
*/
(function () {
Datepicker.locales.id = {
days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
daysShort: ["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
daysMin: ["Mg", "Sn", "Sl", "Rb", "Km", "Jm", "Sb"],
months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agt", "Sep", "Okt", "Nov", "Des"],
today: "Hari Ini",
monthsTitle: "Bulan",
clear: "Kosongkan",
weekStart: 0,
format: "dd-mm-yyyy"
};
}());

View File

@@ -0,0 +1,14 @@
/**
* Icelandic translation for bootstrap-datepicker
* Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
*/
(function () {
Datepicker.locales.is = {
days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"],
daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau"],
daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La"],
months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"],
today: "Í Dag"
};
}());

View File

@@ -0,0 +1,20 @@
/**
* Italian (Switzerland) translation for bootstrap-datepicker
* Christoph Jossi <c.jossi@ascami.ch>
* Based on
* Italian translation for bootstrap-datepicker
* Enrico Rubboli <rubboli@gmail.com>
*/
(function () {
Datepicker.locales['it-CH'] = {
days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"],
months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
today: "Oggi",
clear: "Cancella",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Italian translation for bootstrap-datepicker
* Enrico Rubboli <rubboli@gmail.com>
*/
(function () {
Datepicker.locales.it = {
days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"],
months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
today: "Oggi",
monthsTitle: "Mesi",
clear: "Cancella",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Japanese translation for bootstrap-datepicker
* Norio Suzuki <https: //github.com/suzuki/>
*/
(function () {
Datepicker.locales.ja = {
days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"],
daysShort: ["日", "月", "火", "水", "木", "金", "土"],
daysMin: ["日", "月", "火", "水", "木", "金", "土"],
months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
today: "今日",
format: "yyyy/mm/dd",
titleFormat: "y年mm月",
clear: "クリア"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Georgian translation for bootstrap-datepicker
* Levan Melikishvili <levani0101@yahoo.com>
*/
(function () {
Datepicker.locales.ka = {
days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"],
daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ"],
daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა"],
months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"],
monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"],
today: "დღეს",
clear: "გასუფთავება",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Kazakh translation for bootstrap-datepicker
* Yerzhan Tolekov <era.tolekov@gmail.com>
*/
(function () {
Datepicker.locales.kk = {
days: ["Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі"],
daysShort: ["Жек", "Дүй", "Сей", "Сәр", "Бей", "Жұм", "Сен"],
daysMin: ["Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн"],
months: ["Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым", "Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан"],
monthsShort: ["Қаң", "Ақп", "Нау", "Сәу", "Мам", "Мау", "Шіл", "Там", "Қыр", "Қаз", "Қар", "Жел"],
today: "Бүгін",
weekStart: 1
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Khmer translation for bootstrap-datepicker
* This is the Updated Version of: https: //github.com/uxsolutions/bootstrap-datepicker/blob/71308d42cce9524284c50c6fac50422d1790ac0f/js/locales/bootstrap-datepicker.kh.js
*/
(function () {
Datepicker.locales.km = {
days: ["អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍"],
daysShort: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"],
daysMin: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"],
months: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"],
monthsShort: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"],
today: "ថ្ងៃនេះ",
clear: "សំអាត"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Korean translation for bootstrap-datepicker
* This is a port from https: //github.com/moment/moment/blob/develop/src/locale/ko.js
*/
(function () {
Datepicker.locales.ko = {
days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
daysShort: ["일", "월", "화", "수", "목", "금", "토"],
daysMin: ["일", "월", "화", "수", "목", "금", "토"],
months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
today: "오늘",
clear: "삭제",
format: "yyyy-mm-dd",
titleFormat: "y년mm월",
weekStart: 0
};
}());

View File

@@ -0,0 +1,19 @@
/**
* Lithuanian translation for bootstrap-datepicker
* Šarūnas Gliebus <ssharunas@yahoo.co.uk>
*/
(function () {
Datepicker.locales.lt = {
days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"],
daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š"],
daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št"],
months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"],
today: "Šiandien",
monthsTitle: "Mėnesiai",
clear: "Išvalyti",
weekStart: 1,
format: "yyyy-mm-dd"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Latvian translation for bootstrap-datepicker
* Artis Avotins <artis@apit.lv>
*/
(function () {
Datepicker.locales.lv = {
days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"],
daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S"],
daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se"],
months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec"],
monthsTitle: "Mēneši",
today: "Šodien",
clear: "Nodzēst",
weekStart: 1
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Montenegrin translation for bootstrap-datepicker
* Miodrag Nikač <miodrag@restartit.me>
*/
(function () {
Datepicker.locales.me = {
days: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"],
daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"],
months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
today: "Danas",
weekStart: 1,
clear: "Izbriši",
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Macedonian translation for bootstrap-datepicker
* Marko Aleksic <psybaron@gmail.com>
*/
(function () {
Datepicker.locales.mk = {
days: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"],
daysShort: ["Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб"],
daysMin: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са"],
months: ["Јануари", "Февруари", "Март", "Април", "Мај", "Јуни", "Јули", "Август", "Септември", "Октомври", "Ноември", "Декември"],
monthsShort: ["Јан", "Фев", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Ное", "Дек"],
today: "Денес",
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Mongolian translation for bootstrap-datepicker
* Andrey Torsunov <andrey.torsunov@gmail.com>
*/
(function () {
Datepicker.locales.mn = {
days: ["Ням", "Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба"],
daysShort: ["Ням", "Дав", "Мяг", "Лха", "Пүр", "Баа", "Бям"],
daysMin: ["Ня", "Да", "Мя", "Лх", "Пү", "Ба", "Бя"],
months: ["Хулгана", "Үхэр", "Бар", "Туулай", "Луу", "Могой", "Морь", "Хонь", "Бич", "Тахиа", "Нохой", "Гахай"],
monthsShort: ["Хул", "Үхэ", "Бар", "Туу", "Луу", "Мог", "Мор", "Хон", "Бич", "Тах", "Нох", "Гах"],
today: "Өнөөдөр",
clear: "Тодорхой",
format: "yyyy.mm.dd",
weekStart: 1
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Marathi translation for bootstrap-datepicker
* Sushant Pimple <pimplesushant@gmail.com>
*/
(function () {
Datepicker.locales.mr = {
days: ["रविवार", "सोमवार", "मंगळवार", "बुधवार", "गुरुवार", "शुक्रवार", "शनिवार"],
daysShort: ["रवि", "सोम", "मंगळ", "बुध", "गुरु", "शुक्र", "शनि"],
daysMin: ["र", "सो", "मं", "बु", "गु", "शु", "श"],
months: ["जानेवारी", "फेब्रुवारी", "मार्च", "एप्रिल", "मे", "जून", "जुलै", "ऑगस्ट", "सप्टेंबर", "ऑक्टोबर", "नोव्हेंबर", "डिसेंबर"],
monthsShort: ["जाने.", "फेब्रु.", "मार्च", "एप्रिल", "मे", "जून", "जुलै", "ऑगस्ट", "सप्टें.", "ऑक्टो.", "नोव्हें.", "डिसें."],
today: "आज",
monthsTitle: "महीने",
clear: "हटवा",
weekStart: 1,
format: "dd / mm / yyyy"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Malay translation for bootstrap-datepicker
* Ateman Faiz <noorulfaiz@gmail.com>
*/
(function () {
Datepicker.locales.ms = {
days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"],
daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"],
daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa"],
months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"],
today: "Hari Ini",
clear: "Bersihkan"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Belgium-Dutch translation for bootstrap-datepicker
* Julien Poulin <poulin_julien@hotmail.com>
*/
(function () {
Datepicker.locales['nl-BE'] = {
days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"],
daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"],
months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"],
today: "Vandaag",
monthsTitle: "Maanden",
clear: "Leegmaken",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Dutch translation for bootstrap-datepicker
* Reinier Goltstein <mrgoltstein@gmail.com>
*/
(function () {
Datepicker.locales.nl = {
days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"],
daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"],
months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"],
today: "Vandaag",
monthsTitle: "Maanden",
clear: "Wissen",
weekStart: 1,
format: "dd-mm-yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Norwegian translation for bootstrap-datepicker
* George Gooding <george@nettsentrisk.no>
*/
(function () {
Datepicker.locales.no = {
days: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],
daysShort: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'],
daysMin: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],
months: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],
monthsShort: ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],
today: 'i dag',
monthsTitle: 'Måneder',
clear: 'Nullstill',
weekStart: 1,
format: 'dd.mm.yyyy'
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Occitan translation for bootstrap-datepicker
*/
(function () {
Datepicker.locales.oc = {
days: ["Dimenge", "Diluns", "Dimars", "Dimècres", "Dijòus", "Divendres", "Dissabte"],
daysShort: ["Dim", "Dil", "Dmr", "Dmc", "Dij", "Div", "Dis"],
daysMin: ["dg", "dl", "dr", "dc", "dj", "dv", "ds"],
months: ["Genièr", "Febrièr", "Març", "Abrial", "Mai", "Junh", "Julhet", "Agost", "Setembre", "Octobre", "Novembre", "Decembre"],
monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Dec"],
today: "Uèi",
monthsTitle: "Meses",
clear: "Escafar",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Polish translation for bootstrap-datepicker
* Robert <rtpm@gazeta.pl>
*/
(function () {
Datepicker.locales.pl = {
days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
daysShort: ["Niedz.", "Pon.", "Wt.", "Śr.", "Czw.", "Piąt.", "Sob."],
daysMin: ["Ndz.", "Pn.", "Wt.", "Śr.", "Czw.", "Pt.", "Sob."],
months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
monthsShort: ["Sty.", "Lut.", "Mar.", "Kwi.", "Maj", "Cze.", "Lip.", "Sie.", "Wrz.", "Paź.", "Lis.", "Gru."],
today: "Dzisiaj",
weekStart: 1,
clear: "Wyczyść",
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Brazilian translation for bootstrap-datepicker
* Cauan Cabral <cauan@radig.com.br>
*/
(function () {
Datepicker.locales['pt-BR'] = {
days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"],
months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
today: "Hoje",
monthsTitle: "Meses",
clear: "Limpar",
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Portuguese translation for bootstrap-datepicker
* Original code: Cauan Cabral <cauan@radig.com.br>
* Tiago Melo <tiago.blackcode@gmail.com>
*/
(function () {
Datepicker.locales.pt = {
days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"],
months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
today: "Hoje",
monthsTitle: "Meses",
clear: "Limpar",
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Romanian translation for bootstrap-datepicker
* Cristian Vasile <cristi.mie@gmail.com>
*/
(function () {
Datepicker.locales.ro = {
days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"],
daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm"],
daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"],
months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"],
monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Astăzi",
clear: "Șterge",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Russian translation for bootstrap-datepicker
* Victor Taranenko <darwin@snowdale.com>
*/
(function () {
Datepicker.locales.ru = {
days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"],
daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
today: "Сегодня",
clear: "Очистить",
format: "dd.mm.yyyy",
weekStart: 1,
monthsTitle: 'Месяцы'
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Sinhala translation for bootstrap-datepicker
* Chanaka Fernando <chanaka.fernando@hotmail.com>
*/
(function () {
Datepicker.locales.si = {
days: ["ඉරිදා", "සඳුදා", "අඟහරුවාදා", "බදාදා", "බ්‍රහස්පතින්දා", "සිකුරාදා", "සෙනසුරාදා"],
daysShort: ["ඉරි", "සඳු", "අඟ", "බදා", "බ්‍රහ", "සිකු", "සෙන"],
daysMin: ["ඉ", "ස", "අ", "බ", "බ්‍ර", "සි", "සෙ"],
months: ["ජනවාරි", "පෙබරවාරි", "මාර්තු", "අප්‍රේල්", "මැයි", "ජුනි", "ජූලි", "අගෝස්තු", "සැප්තැම්බර්", "ඔක්තෝබර්", "නොවැම්බර්", "දෙසැම්බර්"],
monthsShort: ["ජන", "පෙබ", "මාර්", "අප්‍රේ", "මැයි", "ජුනි", "ජූලි", "අගෝ", "සැප්", "ඔක්", "නොවැ", "දෙසැ"],
today: "අද",
monthsTitle: "මාස",
clear: "මකන්න",
weekStart: 0,
format: "yyyy-mm-dd"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Slovak translation for bootstrap-datepicker
* Marek Lichtner <marek@licht.sk>
* Fixes by Michal Remiš <michal.remis@gmail.com>
*/
(function () {
Datepicker.locales.sk = {
days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"],
daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob"],
daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So"],
months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
today: "Dnes",
clear: "Vymazať",
weekStart: 1,
format: "d.m.yyyy"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Slovene translation for bootstrap-datepicker
* Gregor Rudolf <gregor.rudolf@gmail.com>
*/
(function () {
Datepicker.locales.sl = {
days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"],
daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"],
daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So"],
months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
today: "Danes",
weekStart: 1
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Albanian translation for bootstrap-datepicker
* Tomor Pupovci <https: //www.github.com/ttomor>
*/
(function () {
Datepicker.locales.sq = {
days: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"],
daysShort: ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"],
daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht"],
months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"],
monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"],
monthsTitle: "Muaj",
today: "Sot",
weekStart: 1,
format: "dd/mm/yyyy",
clear: "Pastro"
};
}());

View File

@@ -0,0 +1,16 @@
/**
* Serbian latin translation for bootstrap-datepicker
* Bojan Milosavlević <milboj@gmail.com>
*/
(function () {
Datepicker.locales['sr-latn'] = {
days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"],
daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"],
months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
today: "Danas",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,16 @@
/**
* Serbian cyrillic translation for bootstrap-datepicker
* Bojan Milosavlević <milboj@gmail.com>
*/
(function () {
Datepicker.locales.sr = {
days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"],
daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб"],
daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су"],
months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
today: "Данас",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Swedish translation for bootstrap-datepicker
* Patrik Ragnarsson <patrik@starkast.net>
*/
(function () {
Datepicker.locales.sv = {
days: ["söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"],
daysShort: ["sön", "mån", "tis", "ons", "tor", "fre", "lör"],
daysMin: ["sö", "må", "ti", "on", "to", "fr", "lö"],
months: ["januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december"],
monthsShort: ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"],
today: "Idag",
format: "yyyy-mm-dd",
weekStart: 1,
clear: "Rensa"
};
}());

View File

@@ -0,0 +1,15 @@
/**
* Swahili translation for bootstrap-datepicker
* Edwin Mugendi <https: //github.com/edwinmugendi>
* Source: http: //scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku
*/
(function () {
Datepicker.locales.sw = {
days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi"],
daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1"],
daysMin: ["2", "3", "4", "5", "A", "I", "1"],
months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"],
monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"],
today: "Leo"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Tamil translation for bootstrap-datepicker
* Abubacker Siddik A <abuabdul86@hotmail.com>
*/
(function () {
Datepicker.locales.ta = {
days: ["ஞாயிறு", "திங்கள்", "செவ்வாய்", "புதன்", "வியாழன்", "வெள்ளி", "சனி"],
daysShort: ["ஞாயி", "திங்", "செவ்", "புத", "வியா", "வெள்", "சனி"],
daysMin: ["ஞா", "தி", "செ", "பு", "வி", "வெ", "ச"],
months: ["ஜனவரி", "பிப்ரவரி", "மார்ச்", "ஏப்ரல்", "மே", "ஜூன்", "ஜூலை", "ஆகஸ்டு", "செப்டம்பர்", "அக்டோபர்", "நவம்பர்", "டிசம்பர்"],
monthsShort: ["ஜன", "பிப்", "மார்", "ஏப்", "மே", "ஜூன்", "ஜூலை", "ஆக", "செப்", "அக்", "நவ", "டிச"],
today: "இன்று",
monthsTitle: "மாதங்கள்",
clear: "நீக்கு",
weekStart: 1,
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,19 @@
/**
* Tajik (cyrillic) translation for bootstrap-datepicker
* Bakhtiyor Bahritidinov <i@bakhtiyor.tj>
* Orif N. Jr. <orif.zade@gmail.com>
*/
(function () {
Datepicker.locales.tg = {
days: ["Якшанбе", "Душанбе", "Сешанбе", "Чоршанбе", "Панҷшанбе", "Ҷумъа", "Шанбе"],
daysShort: ["Яшб", "Дшб", "Сшб", "Чшб", "Пшб", "Ҷум", "Шнб"],
daysMin: ["Яш", "Дш", "Сш", "Чш", "Пш", "Ҷм", "Шб"],
months: ["Январ", "Феврал", "Март", "Апрел", "Май", "Июн", "Июл", "Август", "Сентябр", "Октябр", "Ноябр", "Декабр"],
monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
today: "Имрӯз",
monthsTitle: "Моҳҳо",
clear: "Тоза намудан",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,14 @@
/**
* Thai translation for bootstrap-datepicker
* Suchau Jiraprapot <seroz24@gmail.com>
*/
(function () {
Datepicker.locales.th = {
days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"],
daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"],
monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
today: "วันนี้"
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Turkmen translation for bootstrap-datepicker
* N'Bayramberdiyev <nbayramberdiyev@outlook.com>
*/
(function () {
Datepicker.locales.tk = {
days: ["Ýekşenbe", "Duşenbe", "Sişenbe", "Çarşenbe", "Penşenbe", "Anna", "Şenbe"],
daysShort: ["Ýek", "Duş", "Siş", "Çar", "Pen", "Ann", "Şen"],
daysMin: ["Ýe", "Du", "Si", "Ça", "Pe", "An", "Şe"],
months: ["Ýanwar", "Fewral", "Mart", "Aprel", "Maý", "Iýun", "Iýul", "Awgust", "Sentýabr", "Oktýabr", "Noýabr", "Dekabr"],
monthsShort: ["Ýan", "Few", "Mar", "Apr", "Maý", "Iýn", "Iýl", "Awg", "Sen", "Okt", "Noý", "Dek"],
today: "Bu gün",
monthsTitle: "Aýlar",
clear: "Aýyr",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Turkish translation for bootstrap-datepicker
* Serkan Algur <kaisercrazy_2@hotmail.com>
*/
(function () {
Datepicker.locales.tr = {
days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"],
daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts"],
daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct"],
months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
today: "Bugün",
clear: "Temizle",
weekStart: 1,
format: "dd.mm.yyyy"
};
}());

View File

@@ -0,0 +1,17 @@
/**
* Ukrainian translation for bootstrap-datepicker
* Igor Polynets
*/
(function () {
Datepicker.locales.uk = {
days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"],
daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"],
daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"],
today: "Сьогодні",
clear: "Очистити",
format: "dd.mm.yyyy",
weekStart: 1
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Uzbek cyrillic translation for bootstrap-datepicker
* Kakhramonov Javlonbek <kakjavlon@gmail.com>
*/
(function () {
Datepicker.locales['uz-cyrl'] = {
days: ["Якшанба", "Душанба", "Сешанба", "Чоршанба", "Пайшанба", "Жума", "Шанба"],
daysShort: ["Якш", "Ду", "Се", "Чор", "Пай", "Жу", "Ша"],
daysMin: ["Як", "Ду", "Се", "Чо", "Па", "Жу", "Ша"],
months: ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],
monthsShort: ["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],
today: "Бугун",
clear: "Ўчириш",
format: "dd.mm.yyyy",
weekStart: 1,
monthsTitle: 'Ойлар'
};
}());

View File

@@ -0,0 +1,18 @@
/**
* Uzbek latin translation for bootstrap-datepicker
* Kakhramonov Javlonbek <kakjavlon@gmail.com>
*/
(function () {
Datepicker.locales['uz-latn'] = {
days: ["Yakshanba", "Dushanba", "Seshanba", "Chorshanba", "Payshanba", "Juma", "Shanba"],
daysShort: ["Yak", "Du", "Se", "Chor", "Pay", "Ju", "Sha"],
daysMin: ["Ya", "Du", "Se", "Cho", "Pa", "Ju", "Sha"],
months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avgust", "Sentabr", "Oktabr", "Noyabr", "Dekabr"],
monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "Iyn", "Iyl", "Avg", "Sen", "Okt", "Noy", "Dek"],
today: "Bugun",
clear: "O'chirish",
format: "dd.mm.yyyy",
weekStart: 1,
monthsTitle: 'Oylar'
};
}());

View File

@@ -0,0 +1,16 @@
/**
* Vietnamese translation for bootstrap-datepicker
* An Vo <https: //github.com/anvoz/>
*/
(function () {
Datepicker.locales.vi = {
days: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"],
daysShort: ["CN", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7"],
daysMin: ["CN", "T2", "T3", "T4", "T5", "T6", "T7"],
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"],
monthsShort: ["Th1", "Th2", "Th3", "Th4", "Th5", "Th6", "Th7", "Th8", "Th9", "Th10", "Th11", "Th12"],
today: "Hôm nay",
clear: "Xóa",
format: "dd/mm/yyyy"
};
}());

View File

@@ -0,0 +1,19 @@
/**
* Simplified Chinese translation for bootstrap-datepicker
* Yuan Cheung <advanimal@gmail.com>
*/
(function () {
Datepicker.locales['zh-CN'] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
daysMin: ["日", "一", "二", "三", "四", "五", "六"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
today: "今天",
monthsTitle: "选择月份",
clear: "清除",
format: "yyyy-mm-dd",
titleFormat: "y年mm月",
weekStart: 1
};
}());

View File

@@ -0,0 +1,20 @@
/**
* Traditional Chinese translation for bootstrap-datepicker
* Rung-Sheng Jang <daniel@i-trend.co.cc>
* FrankWu <frankwu100@gmail.com> Fix more appropriate use of Traditional Chinese habit
*/
(function () {
Datepicker.locales['zh-TW'] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
daysMin: ["日", "一", "二", "三", "四", "五", "六"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
today: "今天",
monthsTitle: "月份",
format: "yyyy/mm/dd",
weekStart: 0,
titleFormat: "y年mm月",
clear: "清除"
};
}());

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,309 @@
#macro(hms $value)#if($value)#set($hh = $value / 3600)#set($mm = ($value - $hh) / 60)#set($ss = $value % 60)$hh:$mm:$ss#end#end
#macro(levels $sel)
#foreach($k in [-30..-1])
#set($disp = "${math.abs($k)}k"
<option value="$k" #if($sel && $sel == $k)selected#end>$disp</option>
#end
#foreach($d in [0..9])
#set($dan = $d + 1)
#set($disp = "${dan}d")
<option value="$d" #if($sel && $sel == $d)selected#end>$disp</option>
#end
#end
#if($params.tour)
#set($tour = $api.get("tour/${params.tour}"))
#if (!$tour)
<div class="section">
<h2 class="error">Invalid tournament id</h2>
</div>
#end
#end
<div class="section">
<h2>#if($tour)$tour.name#{else}New tournament#end</h2>
<form id="tournament-infos" class="ui form">
<div class="roundbox">
<div class="two stackable fields">
<div class="eleven wide field">
<label>Name</label>
<input type="text" name="name" required placeholder="Tournament name" #if($tour)value="$tour.name"#end/>
</div>
<div class="five wide field">
<label>Short name</label>
<input type="text" name="shortName" required placeholder="short_name" #if($tour)value="$tour.shortName"#end/>
</div>
</div>
<div class="field">
<label>Dates</label>
<span id="date-range">
from
<input type="text" name="startDate" required class="date" placeholder="start date" #if($tour)value="$tour.startDate"#end/>
to
<input type="text" name="endDate" required class="date" placeholder="end date" #if($tour)value="$tour.startDate"#end/>
</span>
</div>
<div class="two stackable fields">
<div class="seven wide field">
<label>Country</label>
<select name="country">
<option></option>
#foreach($country in $countries.countries)
<option value="$country.key" #if($tour && $country.key == $tour.country || !$tour && $country.key == $request.lang)selected#end>$country.value</option>
#end
</select>
</div>
<div class="nine wide field">
<label>Location</label>
<input name="location" type="text" placeholder="tournament location" value="#if($tour)$!tour.location#end"/>
<div>
or
<label>
<input name="online" type="checkbox" #if($tour && $tour.online)checked#end/>&nbsp;<b>online tournament</b>
</label>
</div>
</div>
</div>
</div>
<div class="roundbox">
<div class="two fields">
<div class="fourteen wide field">
<label>Tournament type</label>
<select name="type">
<option value="INDIVIDUAL" #if(!$tour || $tour.type == 'INDIVIDUAL')checked#end>Standard tournament of individual players</option>
<option value="PAIRGO" #if($tour && $tour.type == 'PAIRGO')checked#end>Pair-go tournament</option>
<option value="RENGO2" #if($tour && $tour.type == 'RENGO2')checked#end>Rengo tournament with 2 players per team</option>
<option value="RENGO3" #if($tour && $tour.type == 'RENGO3')checked#end>Rengo tournament with 3 players per team</option>
<option value="TEAM2" #if($tour && $tour.type == 'TEAM2')checked#end>Team tournament of 2 individual players per team</option>
<option value="TEAM3" #if($tour && $tour.type == 'TEAM3')checked#end>Team tournament of 3 individual players per team</option>
<option value="TEAM4" #if($tour && $tour.type == 'TEAM4')checked#end>Team tournament of 4 individual players per team</option>
<option value="TEAM5" #if($tour && $tour.type == 'TEAM5')checked#end>Team tournament of 5 individual players per team</option>
</select>
</div>
<div class="four wide field">
<label>Rounds</label>
<span><input type="number" name="rounds" required min="1" value="#if($tour)rounds#{else}1#end"/> rounds</span>
</div>
</div>
<div class="four fields">
<div class="four wide field">
<label>Pairing</label>
<select name="pairing">
<option value="SWISS" #if($tour && $tour.pairing.type == 'SWISS')checked#end>Swiss</option>
<option value="MAC_MAHON" #if(!$tour || $tour.pairing.type == 'MAC_MAHON')checked#end>Mac Mahon</option>
<option value="ROUND_ROBIN" #if($tour && $tour.pairing.type == 'ROUND_ROBIN')checked#end>Round-robin</option>
</select>
</div>
<div class="mms four wide field">
<label>MMS floor</label>
<select name="mmsFloor">
#set($floor = -20)
#if($tour) #set($floor = $tour.pairing.
</select>
</div>
<div class="mms four wide field">
<label>MMS ceiling</label>
</div>
</div>
</div>
<div class="roundbox">
<div class="three stackable fields">
<div class="seven wide field">
<label>Rules</label>
<select name="rules">
<option value="CHINESE" #if($tour && $tour.rules == 'CHINESE')selected#end>Chinese rules</option>
<option value="FRENCH" #if(!$tour || $tour.rules == 'FRENCH')selected#end>French rules</option>
<option value="JAPANESE" #if($tour && $tour.rules == 'JAPANESE')selected#end>Japanese rules</option>
</select>
</div>
<div class="three wide field">
<label>Goban</label>
<select name="gobanSize">
<option value="9" #if($tour && $tour.gobanSize == 9)selected#end>9x9</option>
<option value="13" #if($tour && $tour.gobanSize == 9)selected#end>13x13</option>
<option value="19" #if(!$tour || $tour.gobanSize == 9)selected#end>19x19</option>
</select>
</div>
<div class="three wide field">
<label>Komi</label>
<input name="komi" type="number" step="0.5" value="#if($tour)$tour.komi#{else}7.5#end"/>
</div>
</div>
<div class="four fields">
<div class="seven wide field">
<label>Time system</label>
<select name="timeSystemType">
<option value="FISCHER" #if(!$tour || $tour.timeSystem.type == 'FISCHER')selected#end>Fischer timing</option>
<option value="CANADIAN" #if($tour && $tour.timeSystem.type == 'CANADIAN')selected#end>Canadian byo-yomi</option>
<option value="STANDARD" #if($tour && $tour.timeSystem.type == 'STANDARD')selected#end>Standard byo-yomi</option>
<option value="SUDDEN_DEATH" #if($tour && $tour.timeSystem.type == 'SUDDEN_DEATH')selected#end>Sudden death</option>
</select>
</div>
<div class="three wide field">
<label>Main time</label>
<input name="mainTime" type="text" class="duration" value="#if($tour)#hms($tour.timeSystem.mainTime)#{else}00:40:00#end"/>
</div>
<div id="increment" class="three wide field #if($tour && $tour.timeSystem.type != 'FISCHER')hidden#end">
<label>Increment</label>
<input name="increment" type="text" class="duration" value="#if($tour)#hms($tour.timeSystem.increment)#{else}00:00:20#end"/>
</div>
<div id="maxTime" class="three wide field #if($tour && $tour.timeSystem.type != 'FISCHER')hidden#end">
<label>Max time</label>
<input name="maxTime" type="text" class="duration" value="#if($tour)#hms($tour.timeSystem.maxTime)#{else}00:40:00#end"/>
</div>
<div id="byoyomi" class="three wide field #if(!$tour || $tour.timeSystem.type != 'CANADIAN' && $tour.timeSystem.type != 'STANDARD')hidden#end">
<label>Byo-yomi time</label>
<input name="byoyomi" type="text" class="duration" value="#if($tour)#hms($tour.timeSystem.byoyomi)#{else}00:05:00#end"/>
</div>
<div id="periods" class="three wide field #if(!$tour || $tour.timeSystem.type != 'STANDARD')hidden#end">
<label>Byo-yomi periods</label>
<input name="periods" type="number" min="0" value="#if($tour)$tour.timeSystem.periods#{else}3#end"/>
</div>
<div id="stones" class="three wide field #if(!$tour || $tour.timeSystem.type != 'CANADIAN')hidden#end">
<label>Byo-yomi stones</label>
<input name="stones" class="seconds" type="number" min="0" value="#if($tour)$tour.timeSystem.stones#{else}15#end"/>
</div>
</div>
</div>
<div>
<button id="validate" class="ui next green right labeled icon floating button">
<i class="checkmark icon"></i>
Validate
</button>
</div>
</form>
</div>
<!-- error messages included as html elements so that they are translated -->
<div id="required_field" class="hidden">Required field</div>
<div id="invalid_character" class="hidden">Invalid character</div>
<script type="text/javascript">
#if($tour)
const tour_id = ${tour.id};
#end
// #[[
const safeRegex = /^[-a-zA-Z0-9_.]+$/;
function parseDate(value) {
let locale = Datepicker.locales[lang];
if (locale) {
let date = Datepicker.parseDate(value, locale.format, locale);
return Datepicker.formatDate(date, 'yyyy-mm-dd')
}
else return undefined;
}
onLoad(() => {
$('#validate').on('click', e => {
let valid = true;
// validate required fields
let required = ['name', 'shortName', 'startDate', 'endDate'];
if (!$('input[name="online"]')[0].checked) required.push('location')
for (let name of required) {
let ctl = $(`input[name=${name}]`)[0];
let val = ctl.value;
if (val) {
ctl.setCustomValidity('');
} else {
valid = false;
ctl.setCustomValidity(msg('required_field'));
}
}
if (!valid) return;
// validate short_name
let shortNameCtl = $('input[name="shortName"]')[0];
let shortName = shortNameCtl.value;
if (safeRegex.test(shortName)) {
shortNameCtl.setCustomValidity('');
} else {
valid = false;
shortNameCtl.setCustomValidity(msg('invalid_character'));
}
});
new DateRangePicker($('#date-range')[0], {
autohide: true,
language: lang
});
$('#tournament-infos').on('submit', e => {
e.preventDefault();
let tour = {
name: formValue('name'),
shortName: formValue('shortName'),
startDate: parseDate(formValue('startDate')),
endDate: parseDate(formValue('endDate')),
type: formValue('type'),
rounds: formValue('rounds'),
country: formValue('country'),
online: formValue('online'),
location: formValue('online') ? "" : formValue('location'),
pairing: {
type: formValue('pairing')
},
timeSystem: {
type: formValue('timeSystemType')
}
}
console.log(tour);
if (typeof(tour_id) !== 'undefined') {
api.putJson(`tour/${tour_id}`, tour);
} else {
api.postJson('tour', tour)
.then((o) => {
if (o !== 'error') {
console.log("success ==> %o", o);
}
});
}
});
$('input[name="online"]').on('change', e => {
$('input[name="location"]')[0].disabled = e.target.checked;
});
$('select[name="timeSystemType"]').on('change', e => {
switch (e.target.value) {
case 'CANADIAN':
$('#increment').addClass('hidden');
$('#maxTime').addClass('hidden');
$('#byoyomi').removeClass('hidden');
$('#periods').addClass('hidden');
$('#stones').removeClass('hidden');
break;
case 'FISCHER':
$('#increment').removeClass('hidden');
$('#maxTime').removeClass('hidden');
$('#byoyomi').addClass('hidden');
$('#periods').addClass('hidden');
$('#stones').addClass('hidden');
break;
case 'STANDARD':
$('#increment').addClass('hidden');
$('#maxTime').addClass('hidden');
$('#byoyomi').removeClass('hidden');
$('#periods').removeClass('hidden');
$('#stones').addClass('hidden');
break;
case 'SUDDEN_DEATH':
$('#increment').addClass('hidden');
$('#maxTime').addClass('hidden');
$('#byoyomi').addClass('hidden');
$('#periods').addClass('hidden');
$('#stones').addClass('hidden');
break;
}
});
$('input.duration').imask({
mask: '00:00:00',
lazy: false,
overwrite: true
});
});
// ]]#
</script>
<script type="text/javascript" src="/lib/datepicker-1.3.3/datepicker-full.min.js"></script>
<script type="text/javascript" src="/lib/datepicker-1.3.3/locales/${request.lang}.js"></script>
<link rel="stylesheet" href="/lib/datepicker-1.3.3/datepicker.min.css">
<style type="text/css">
.ui.form input[type=checkbox][name=online] {
vertical-align: initial;
}
</style>