Get off off rails-assets

Just moving the things we currently use (and should drop in the ASAP) to vendor/assets
This commit is contained in:
Henne Vogelsang
2024-03-05 15:30:53 +01:00
parent 9fd0807a9a
commit b6560dbb34
659 changed files with 129299 additions and 67 deletions

31
Gemfile
View File

@@ -8,11 +8,6 @@ source 'https://rubygems.org'
ruby ENV.fetch('OSEM_RUBY_VERSION', '3.1.4')
# rails-assets requires >= 1.8.4
if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4')
abort "Bundler version >= 1.8.4 is required"
end
# as web framework
if next?
gem 'rails', '~> 7.1'
@@ -94,32 +89,6 @@ gem 'jquery-ui-rails', '~> 6.0.1'
# for languages validation
gem 'iso-639'
# frontend javascripts
source 'https://rails-assets.org' do
# for placeholder images
gem 'rails-assets-holderjs'
# for formating dates
gem 'rails-assets-date.format'
# for or parsing, validating, manipulating, and formatting dates
gem 'rails-assets-momentjs'
# for smooth scrolling
gem 'rails-assets-jquery-smooth-scroll'
# as color picker
gem 'rails-assets-spectrum'
# for color manipulation
gem 'rails-assets-tinycolor'
# for drawing triangle backgrounds
gem 'rails-assets-trianglify'
# for scroll way points
gem 'rails-assets-waypoints'
# for markdown editors
gem 'rails-assets-bootstrap-markdown'
# for select with icon
gem 'rails-assets-bootstrap-select'
gem 'rails-assets-markdown'
gem 'rails-assets-to-markdown', '~> 3'
end
# as date picker
gem 'bootstrap3-datetimepicker-rails', '~> 4.17.47'

View File

@@ -1,27 +1,3 @@
GEM
remote: https://rails-assets.org/
specs:
rails-assets-bootstrap (3.4.1)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-bootstrap-markdown (2.10.0)
rails-assets-bootstrap (~> 3)
rails-assets-bootstrap-select (1.13.10)
rails-assets-bootstrap (>= 3.0.0)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-date.format (1.2.3)
rails-assets-holderjs (2.9.6)
rails-assets-jquery (3.4.1)
rails-assets-jquery-smooth-scroll (2.2.0)
rails-assets-jquery (>= 1.7.0)
rails-assets-markdown (0.5.0)
rails-assets-momentjs (2.29.4)
rails-assets-spectrum (1.8.0)
rails-assets-jquery (>= 1.7.2)
rails-assets-tinycolor (1.6.0)
rails-assets-to-markdown (3.1.1)
rails-assets-trianglify (1.2.0)
rails-assets-waypoints (4.0.1)
GEM
remote: https://rubygems.org/
specs:
@@ -697,18 +673,6 @@ DEPENDENCIES
prawn-rails
puma
rails (~> 7.0)
rails-assets-bootstrap-markdown!
rails-assets-bootstrap-select!
rails-assets-date.format!
rails-assets-holderjs!
rails-assets-jquery-smooth-scroll!
rails-assets-markdown!
rails-assets-momentjs!
rails-assets-spectrum!
rails-assets-tinycolor!
rails-assets-to-markdown (~> 3)!
rails-assets-trianglify!
rails-assets-waypoints!
rails-controller-testing
rails-i18n
recaptcha

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -0,0 +1 @@
//= require bootstrap-markdown/bootstrap-markdown.js

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
//= require bootstrap-select/bootstrap-select.js

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'ምንም አልተመረጠም',
noneResultsText: 'ከ{0} ጋር ተመሳሳይ ውጤት የለም',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} ምርጫ ተመርጧል' : '{0} ምርጫዎች ተመርጠዋል';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫ)' : 'ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫዎች)',
(numGroup == 1) ? 'የቡድን ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫ)' : 'የቡድን ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫዎች)'
];
},
selectAllText: 'ሁሉም ይመረጥ',
deselectAllText: 'ሁሉም አይመረጥ',
multipleSeparator: ' ፣ '
};
})(jQuery);
}));

View File

@@ -0,0 +1,50 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
/*!
* Translated default messages for bootstrap-select.
* Locale: AR (Arabic)
* Author: Yasser Lotfy <y_l@alive.com>
*/
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'لم يتم إختيار شئ',
noneResultsText: 'لا توجد نتائج مطابقة لـ {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} خيار تم إختياره' : '{0} خيارات تمت إختيارها';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'تخطى الحد المسموح ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح ({n} خيارات بحد أقصى)',
(numGroup == 1) ? 'تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)'
];
},
selectAllText: 'إختيار الجميع',
deselectAllText: 'إلغاء إختيار الجميع',
multipleSeparator: '، '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Нищо избрано',
noneResultsText: 'Няма резултат за {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} избран елемент' : '{0} избрани елемента';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)',
(numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)'
];
},
selectAllText: 'Избери всички',
deselectAllText: 'Размаркирай всички',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nic není vybráno',
noneResultsText: 'Žádné výsledky {0}',
countSelectedText: 'Označeno {0} z {1}',
maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']],
multipleSeparator: ', ',
selectAllText: 'Vybrat Vše',
deselectAllText: 'Odznačit Vše'
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Intet valgt',
noneResultsText: 'Ingen resultater fundet {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} valgt' : '{0} valgt';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)',
(numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)'
];
},
selectAllText: 'Markér alle',
deselectAllText: 'Afmarkér alle',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Bitte wählen...',
noneResultsText: 'Keine Ergebnisse für {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} Element ausgewählt' : '{0} Elemente ausgewählt';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Limit erreicht ({n} Element max.)' : 'Limit erreicht ({n} Elemente max.)',
(numGroup == 1) ? 'Gruppen-Limit erreicht ({n} Element max.)' : 'Gruppen-Limit erreicht ({n} Elemente max.)'
];
},
selectAllText: 'Alles auswählen',
deselectAllText: 'Nichts auswählen',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nothing selected',
noneResultsText: 'No results match {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} item selected' : '{0} items selected';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
(numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
];
},
selectAllText: 'Select All',
deselectAllText: 'Deselect All',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'No hay selección',
noneResultsText: 'No hay resultados {0}',
countSelectedText: 'Seleccionados {0} de {1}',
maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']],
multipleSeparator: ', ',
selectAllText: 'Seleccionar Todos',
deselectAllText: 'Desmarcar Todos'
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'No hay selección',
noneResultsText: 'No hay resultados {0}',
countSelectedText: 'Seleccionados {0} de {1}',
maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']],
multipleSeparator: ', ',
selectAllText: 'Seleccionar Todos',
deselectAllText: 'Desmarcar Todos'
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Valikut pole tehtud',
noneResultsText: 'Otsingule {0} ei ole vasteid',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} item selected' : '{0} items selected';
},
maxOptionsText: function (numAll, numGroup) {
return [
'Limiit on {n} max',
'Globaalne limiit on {n} max'
];
},
selectAllText: 'Vali kõik',
deselectAllText: 'Tühista kõik',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Hautapenik ez',
noneResultsText: 'Emaitzarik ez {0}',
countSelectedText: '{1}(e)tik {0} hautatuta',
maxOptionsText: ['Mugara iritsita ({n} {var} gehienez)', 'Taldearen mugara iritsita ({n} {var} gehienez)', ['elementu', 'elementu']],
multipleSeparator: ', ',
selectAllText: 'Hautatu Guztiak',
deselectAllText: 'Desautatu Guztiak'
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'چیزی انتخاب نشده است',
noneResultsText: 'هیج مشابهی برای {0} پیدا نشد',
countSelectedText: '{0} از {1} مورد انتخاب شده',
maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'],
selectAllText: 'انتخاب همه',
deselectAllText: 'انتخاب هیچ کدام',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Ei valintoja',
noneResultsText: 'Ei hakutuloksia {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} valittu' : '{0} valitut';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Valintojen maksimimäärä ({n} saavutettu)' : 'Valintojen maksimimäärä ({n} saavutettu)',
(numGroup == 1) ? 'Ryhmän maksimimäärä ({n} saavutettu)' : 'Ryhmän maksimimäärä ({n} saavutettu)'
];
},
selectAllText: 'Valitse kaikki',
deselectAllText: 'Poista kaikki',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Aucune sélection',
noneResultsText: 'Aucun résultat pour {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected > 1) ? '{0} éléments sélectionnés' : '{0} élément sélectionné';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)',
(numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)'
];
},
multipleSeparator: ', ',
selectAllText: 'Tout sélectionner',
deselectAllText: 'Tout désélectionner'
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Odaberite stavku',
noneResultsText: 'Nema rezultata pretrage {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} stavka selektirana' : '{0} stavke selektirane';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Limit je postignut ({n} stvar maximalno)' : 'Limit je postignut ({n} stavke maksimalno)',
(numGroup == 1) ? 'Grupni limit je postignut ({n} stvar maksimalno)' : 'Grupni limit je postignut ({n} stavke maksimalno)'
];
},
selectAllText: 'Selektiraj sve',
deselectAllText: 'Deselektiraj sve',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Válasszon!',
noneResultsText: 'Nincs találat {0}',
countSelectedText: function (numSelected, numTotal) {
return '{0} elem kiválasztva';
},
maxOptionsText: function (numAll, numGroup) {
return [
'Legfeljebb {n} elem választható',
'A csoportban legfeljebb {n} elem választható'
];
},
selectAllText: 'Mind',
deselectAllText: 'Egyik sem',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Tidak ada yang dipilih',
noneResultsText: 'Tidak ada yang cocok {0}',
countSelectedText: '{0} terpilih',
maxOptionsText: ['Mencapai batas (maksimum {n})', 'Mencapai batas grup (maksimum {n})'],
selectAllText: 'Pilih Semua',
deselectAllText: 'Hapus Semua',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,40 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nessuna selezione',
noneResultsText: 'Nessun risultato per {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? 'Selezionato {0} di {1}' : 'Selezionati {0} di {1}';
},
maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']],
multipleSeparator: ', ',
selectAllText: 'Seleziona Tutto',
deselectAllText: 'Deseleziona Tutto'
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: '何もが選択した',
noneResultsText: '\'{0}\'が結果を返さない',
countSelectedText: '{0}/{1}が選択した',
maxOptionsText: ['限界は達した({n}{var}最大)', '限界をグループは達した({n}{var}最大)', ['アイテム', 'アイテム']],
selectAllText: '全部を選択する',
deselectAllText: '何も選択しない',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'មិនមានអ្វីបានជ្រើសរើស',
noneResultsText: 'មិនមានលទ្ធផល {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} ធាតុដែលបានជ្រើស' : '{0} ធាតុដែលបានជ្រើស';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'ឈានដល់ដែនកំណត់ ( {n} ធាតុអតិបរមា)' : 'អតិបរមាឈានដល់ដែនកំណត់ ( {n} ធាតុ)',
(numGroup == 1) ? 'ដែនកំណត់ក្រុមឈានដល់ ( {n} អតិបរមាធាតុ)' : 'អតិបរមាក្រុមឈានដល់ដែនកំណត់ ( {n} ធាតុ)'
];
},
selectAllText: 'ជ្រើស​យក​ទាំងអស់',
deselectAllText: 'មិនជ្រើស​យក​ទាំងអស',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: '항목을 선택해주세요',
noneResultsText: '{0} 검색 결과가 없습니다',
countSelectedText: function (numSelected, numTotal) {
return '{0}개를 선택하였습니다';
},
maxOptionsText: function (numAll, numGroup) {
return [
'{n}개까지 선택 가능합니다',
'해당 그룹은 {n}개까지 선택 가능합니다'
];
},
selectAllText: '전체선택',
deselectAllText: '전체해제',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Niekas nepasirinkta',
noneResultsText: 'Niekas nesutapo su {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} elementas pasirinktas' : '{0} elementai(-ų) pasirinkta';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Pasiekta riba ({n} elementas daugiausiai)' : 'Riba pasiekta ({n} elementai(-ų) daugiausiai)',
(numGroup == 1) ? 'Grupės riba pasiekta ({n} elementas daugiausiai)' : 'Grupės riba pasiekta ({n} elementai(-ų) daugiausiai)'
];
},
selectAllText: 'Pasirinkti visus',
deselectAllText: 'Atmesti visus',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nekas nav atzīmēts',
noneResultsText: 'Nav neviena rezultāta {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} ieraksts atzīmēts' : '{0} ieraksti atzīmēts';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Sasniegts limits ({n} ieraksts maksimums)' : 'Sasniegts limits ({n} ieraksti maksimums)',
(numGroup == 1) ? 'Sasniegts grupas limits ({n} ieraksts maksimums)' : 'Sasniegts grupas limits ({n} ieraksti maksimums)'
];
},
selectAllText: 'Atzīmēt visu',
deselectAllText: 'Neatzīmēt nevienu',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Ingen valgt',
noneResultsText: 'Søket gir ingen treff {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} alternativ valgt' : '{0} alternativer valgt';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Grense nådd (maks {n} valg)' : 'Grense nådd (maks {n} valg)',
(numGroup == 1) ? 'Grense for grupper nådd (maks {n} grupper)' : 'Grense for grupper nådd (maks {n} grupper)'
];
},
selectAllText: 'Merk alle',
deselectAllText: 'Fjern alle',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Niets geselecteerd',
noneResultsText: 'Geen resultaten gevonden voor {0}',
countSelectedText: '{0} van {1} geselecteerd',
maxOptionsText: ['Limiet bereikt ({n} {var} max)', 'Groep limiet bereikt ({n} {var} max)', ['items', 'item']],
selectAllText: 'Alles selecteren',
deselectAllText: 'Alles deselecteren',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nic nie zaznaczono',
noneResultsText: 'Brak wyników wyszukiwania {0}',
countSelectedText: 'Zaznaczono {0} z {1}',
maxOptionsText: ['Osiągnięto limit ({n} {var} max)', 'Limit grupy osiągnięty ({n} {var} max)', ['elementy', 'element']],
selectAllText: 'Zaznacz wszystkie',
deselectAllText: 'Odznacz wszystkie',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nada selecionado',
noneResultsText: 'Nada encontrado contendo {0}',
countSelectedText: 'Selecionado {0} de {1}',
maxOptionsText: ['Limite excedido (máx. {n} {var})', 'Limite do grupo excedido (máx. {n} {var})', ['itens', 'item']],
multipleSeparator: ', ',
selectAllText: 'Selecionar Todos',
deselectAllText: 'Desmarcar Todos'
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nenhum seleccionado',
noneResultsText: 'Sem resultados contendo {0}',
countSelectedText: 'Selecionado {0} de {1}',
maxOptionsText: ['Limite ultrapassado (máx. {n} {var})', 'Limite de seleções ultrapassado (máx. {n} {var})', ['itens', 'item']],
multipleSeparator: ', ',
selectAllText: 'Selecionar Tudo',
deselectAllText: 'Desmarcar Todos'
};
})(jQuery);
}));

View File

@@ -0,0 +1,39 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
doneButtonText: 'Închide',
noneSelectedText: 'Nu a fost selectat nimic',
noneResultsText: 'Nu există niciun rezultat {0}',
countSelectedText: '{0} din {1} selectat(e)',
maxOptionsText: ['Limita a fost atinsă ({n} {var} max)', 'Limita de grup a fost atinsă ({n} {var} max)', ['iteme', 'item']],
selectAllText: 'Selectează toate',
deselectAllText: 'Deselectează toate',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,39 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Ничего не выбрано',
noneResultsText: 'Совпадений не найдено {0}',
countSelectedText: 'Выбрано {0} из {1}',
maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['шт.', 'шт.']],
doneButtonText: 'Закрыть',
selectAllText: 'Выбрать все',
deselectAllText: 'Отменить все',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Vyberte zo zoznamu',
noneResultsText: 'Pre výraz {0} neboli nájdené žiadne výsledky',
countSelectedText: 'Vybrané {0} z {1}',
maxOptionsText: ['Limit prekročený ({n} {var} max)', 'Limit skupiny prekročený ({n} {var} max)', ['položiek', 'položka']],
selectAllText: 'Vybrať všetky',
deselectAllText: 'Zrušiť výber',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,43 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nič izbranega',
noneResultsText: 'Ni zadetkov za {0}',
countSelectedText: '{0} od {1} izbranih',
maxOptionsText: function (numAll, numGroup) {
return [
'Omejitev dosežena (max. izbranih: {n})',
'Omejitev skupine dosežena (max. izbranih: {n})'
];
},
selectAllText: 'Izberi vse',
deselectAllText: 'Počisti izbor',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Inget valt',
noneResultsText: 'Inget sökresultat matchar {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected === 1) ? '{0} alternativ valt' : '{0} alternativ valda';
},
maxOptionsText: function (numAll, numGroup) {
return [
'Gräns uppnåd (max {n} alternativ)',
'Gräns uppnåd (max {n} gruppalternativ)'
];
},
selectAllText: 'Markera alla',
deselectAllText: 'Avmarkera alla',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Hiçbiri seçilmedi',
noneResultsText: 'Hiçbir sonuç bulunamadı {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} öğe seçildi' : '{0} öğe seçildi';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Limit aşıldı (maksimum {n} sayıda öğe )' : 'Limit aşıldı (maksimum {n} sayıda öğe)',
(numGroup == 1) ? 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' : 'Grup limiti aşıldı (maksimum {n} sayıda öğe)'
];
},
selectAllText: 'Tümünü Seç',
deselectAllText: 'Seçiniz',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Нічого не вибрано',
noneResultsText: 'Збігів не знайдено {0}',
countSelectedText: 'Вибрано {0} із {1}',
maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']],
multipleSeparator: ', ',
selectAllText: 'Вибрати все',
deselectAllText: 'Скасувати вибір усі'
};
})(jQuery);
}));

View File

@@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Chưa chọn',
noneResultsText: 'Không có kết quả cho {0}',
countSelectedText: function (numSelected, numTotal) {
return '{0} mục đã chọn';
},
maxOptionsText: function (numAll, numGroup) {
return [
'Không thể chọn (giới hạn {n} mục)',
'Không thể chọn (giới hạn {n} mục)'
];
},
selectAllText: 'Chọn tất cả',
deselectAllText: 'Bỏ chọn',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: '没有选中任何项',
noneResultsText: '没有找到匹配项',
countSelectedText: '选中{1}中的{0}项',
maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'],
multipleSeparator: ', ',
selectAllText: '全选',
deselectAllText: '取消全选'
};
})(jQuery);
}));

View File

@@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.10 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: '沒有選取任何項目',
noneResultsText: '沒有找到符合的結果',
countSelectedText: '已經選取{0}個項目',
maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'],
selectAllText: '選取全部',
deselectAllText: '全部取消',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@@ -0,0 +1 @@
//= require date.format/date.format.js

View File

@@ -0,0 +1,126 @@
/*
* Date Format 1.2.3
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
* MIT license
*
* Includes enhancements by Scott Trenda <scott.trenda.net>
* and Kris Kowal <cixar.com/~kris.kowal/>
*
* Accepts a date, a mask, or a date and a mask.
* Returns a formatted version of the given date.
* The date defaults to the current date/time.
* The mask defaults to dateFormat.masks.default.
*/
var dateFormat = function () {
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
timezoneClip = /[^-+\dA-Z]/g,
pad = function (val, len) {
val = String(val);
len = len || 2;
while (val.length < len) val = "0" + val;
return val;
};
// Regexes and supporting functions are cached through closure
return function (date, mask, utc) {
var dF = dateFormat;
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
mask = date;
date = undefined;
}
// Passing date through Date applies Date.parse, if necessary
date = date ? new Date(date) : new Date;
if (isNaN(date)) throw SyntaxError("invalid date");
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
// Allow setting the utc argument via the mask
if (mask.slice(0, 4) == "UTC:") {
mask = mask.slice(4);
utc = true;
}
var _ = utc ? "getUTC" : "get",
d = date[_ + "Date"](),
D = date[_ + "Day"](),
m = date[_ + "Month"](),
y = date[_ + "FullYear"](),
H = date[_ + "Hours"](),
M = date[_ + "Minutes"](),
s = date[_ + "Seconds"](),
L = date[_ + "Milliseconds"](),
o = utc ? 0 : date.getTimezoneOffset(),
flags = {
d: d,
dd: pad(d),
ddd: dF.i18n.dayNames[D],
dddd: dF.i18n.dayNames[D + 7],
m: m + 1,
mm: pad(m + 1),
mmm: dF.i18n.monthNames[m],
mmmm: dF.i18n.monthNames[m + 12],
yy: String(y).slice(2),
yyyy: y,
h: H % 12 || 12,
hh: pad(H % 12 || 12),
H: H,
HH: pad(H),
M: M,
MM: pad(M),
s: s,
ss: pad(s),
l: pad(L, 3),
L: pad(L > 99 ? Math.round(L / 10) : L),
t: H < 12 ? "a" : "p",
tt: H < 12 ? "am" : "pm",
T: H < 12 ? "A" : "P",
TT: H < 12 ? "AM" : "PM",
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
};
return mask.replace(token, function ($0) {
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
});
};
}();
// Some common format strings
dateFormat.masks = {
"default": "ddd mmm dd yyyy HH:MM:ss",
shortDate: "m/d/yy",
mediumDate: "mmm d, yyyy",
longDate: "mmmm d, yyyy",
fullDate: "dddd, mmmm d, yyyy",
shortTime: "h:MM TT",
mediumTime: "h:MM:ss TT",
longTime: "h:MM:ss TT Z",
isoDate: "yyyy-mm-dd",
isoTime: "HH:MM:ss",
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
// Internationalization strings
dateFormat.i18n = {
dayNames: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
]
};
// For convenience...
Date.prototype.format = function (mask, utc) {
return dateFormat(this, mask, utc);
};

1
vendor/assets/javascripts/holderjs.js vendored Normal file
View File

@@ -0,0 +1 @@
//= require holderjs/holder.js

View File

@@ -0,0 +1,114 @@
var gulp = require('gulp');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var header = require('gulp-header');
var jshint = require('gulp-jshint');
var todo = require('gulp-todo');
var gulputil = require('gulp-util');
var replace = require('gulp-replace');
var webpack = require('webpack-stream');
var beautify = require('gulp-jsbeautifier');
var rename = require('gulp-rename');
var moment = require('moment');
var pkg = require('./package.json');
var banner =
'/*!\n\n' +
'<%= pkg.officialName %> - <%= pkg.summary %>\nVersion <%= pkg.version %>+<%= build %>\n' +
'\u00A9 <%= year %> <%= pkg.author.name %> - <%= pkg.author.url %>\n\n' +
'Site: <%= pkg.homepage %>\n' +
'Issues: <%= pkg.bugs.url %>\n' +
'License: <%= pkg.license %>\n\n' +
'*/\n';
function generateBuild() {
var date = new Date;
return Math.floor((date - (new Date(date.getFullYear(), 0, 0))) / 1000).toString(36)
}
var build = generateBuild();
gulp.task('jshint', function() {
return gulp.src([
'src/lib/*.js',
'src/lib/renderers/*.js',
'src/renderers/*.js',
'src/index.js'
])
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
gulp.task('todo', function() {
return gulp.src([
'src/lib/*.js',
'src/lib/renderers/*.js',
'src/renderers/*.js',
'src/index.js'
])
.pipe(todo())
.pipe(gulp.dest('./'));
});
gulp.task('build', ['jshint'], function() {
return gulp.src('src/index.js')
.pipe(webpack({
output: {
library: 'Holder',
filename: 'holder.js',
libraryTarget: 'umd'
}
}))
.pipe(gulp.dest('./'));
});
gulp.task('bundle', ['build'], function() {
return gulp.src([
'src/lib/vendor/polyfills.js',
'holder.js',
'src/meteor/shim.js'
])
.pipe(concat('holder.js'))
.pipe(gulp.dest('./'));
});
gulp.task('minify', ['bundle'], function() {
return gulp.src('holder.js')
.pipe(uglify())
.pipe(rename('holder.min.js'))
.pipe(gulp.dest('./'));
});
gulp.task('banner', ['minify'], function() {
return gulp.src(['holder*.js'])
.pipe(replace('%version%', pkg.version))
.pipe(header(banner, {
pkg: pkg,
year: moment().format('YYYY'),
build: build
}))
.pipe(gulp.dest('./'));
});
gulp.task('beautify', function() {
return gulp.src(['src/lib/*.js'])
.pipe(beautify())
.pipe(gulp.dest('src/lib/'));
});
gulp.task('meteor', function() {
return gulp.src('src/meteor/package.js')
.pipe(replace('%version%', pkg.version))
.pipe(replace('%summary%', pkg.description))
.pipe(gulp.dest('./'));
});
gulp.task('watch', function() {
gulp.watch('src/*.js', ['default']);
});
gulp.task('default', ['todo', 'bundle', 'minify', 'banner', 'meteor'], function() {
gulputil.log('Finished build ' + build);
build = generateBuild();
});

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
Package.describe({
summary: 'Holder uses SVG to render image placeholders entirely in browser.',
version: '2.9.6',
name: 'imsky:holder',
git: 'https://github.com/imsky/holder',
});
Package.onUse(function(api) {
api.versionsFrom('0.9.0');
api.export('Holder', 'client');
api.addFiles('holder.js', 'client');
});

View File

@@ -0,0 +1,6 @@
/*
Holder.js - client side image placeholders
(c) 2012-2015 Ivan Malopinsky - http://imsky.co
*/
module.exports = require('./lib');

View File

@@ -0,0 +1,202 @@
var Color = function(color, options) {
//todo: support rgba, hsla, and rrggbbaa notation
//todo: use CIELAB internally
//todo: add clamp function (with sign)
if (typeof color !== 'string') return;
this.original = color;
if (color.charAt(0) === '#') {
color = color.slice(1);
}
if (/[^a-f0-9]+/i.test(color)) return;
if (color.length === 3) {
color = color.replace(/./g, '$&$&');
}
if (color.length !== 6) return;
this.alpha = 1;
if (options && options.alpha) {
this.alpha = options.alpha;
}
this.set(parseInt(color, 16));
};
//todo: jsdocs
Color.rgb2hex = function(r, g, b) {
function format (decimal) {
var hex = (decimal | 0).toString(16);
if (decimal < 16) {
hex = '0' + hex;
}
return hex;
}
return [r, g, b].map(format).join('');
};
//todo: jsdocs
Color.hsl2rgb = function (h, s, l) {
var H = h / 60;
var C = (1 - Math.abs(2 * l - 1)) * s;
var X = C * (1 - Math.abs(parseInt(H) % 2 - 1));
var m = l - (C / 2);
var r = 0, g = 0, b = 0;
if (H >= 0 && H < 1) {
r = C;
g = X;
} else if (H >= 1 && H < 2) {
r = X;
g = C;
} else if (H >= 2 && H < 3) {
g = C;
b = X;
} else if (H >= 3 && H < 4) {
g = X;
b = C;
} else if (H >= 4 && H < 5) {
r = X;
b = C;
} else if (H >= 5 && H < 6) {
r = C;
b = X;
}
r += m;
g += m;
b += m;
r = parseInt(r * 255);
g = parseInt(g * 255);
b = parseInt(b * 255);
return [r, g, b];
};
/**
* Sets the color from a raw RGB888 integer
* @param raw RGB888 representation of color
*/
//todo: refactor into a static method
//todo: factor out individual color spaces
//todo: add HSL, CIELAB, and CIELUV
Color.prototype.set = function (val) {
this.raw = val;
var r = (this.raw & 0xFF0000) >> 16;
var g = (this.raw & 0x00FF00) >> 8;
var b = (this.raw & 0x0000FF);
// BT.709
var y = 0.2126 * r + 0.7152 * g + 0.0722 * b;
var u = -0.09991 * r - 0.33609 * g + 0.436 * b;
var v = 0.615 * r - 0.55861 * g - 0.05639 * b;
this.rgb = {
r: r,
g: g,
b: b
};
this.yuv = {
y: y,
u: u,
v: v
};
return this;
};
/**
* Lighten or darken a color
* @param multiplier Amount to lighten or darken (-1 to 1)
*/
Color.prototype.lighten = function(multiplier) {
var cm = Math.min(1, Math.max(0, Math.abs(multiplier))) * (multiplier < 0 ? -1 : 1);
var bm = (255 * cm) | 0;
var cr = Math.min(255, Math.max(0, this.rgb.r + bm));
var cg = Math.min(255, Math.max(0, this.rgb.g + bm));
var cb = Math.min(255, Math.max(0, this.rgb.b + bm));
var hex = Color.rgb2hex(cr, cg, cb);
return new Color(hex);
};
/**
* Output color in hex format
* @param addHash Add a hash character to the beginning of the output
*/
Color.prototype.toHex = function(addHash) {
return (addHash ? '#' : '') + this.raw.toString(16);
};
/**
* Returns whether or not current color is lighter than another color
* @param color Color to compare against
*/
Color.prototype.lighterThan = function(color) {
if (!(color instanceof Color)) {
color = new Color(color);
}
return this.yuv.y > color.yuv.y;
};
/**
* Returns the result of mixing current color with another color
* @param color Color to mix with
* @param multiplier How much to mix with the other color
*/
/*
Color.prototype.mix = function (color, multiplier) {
if (!(color instanceof Color)) {
color = new Color(color);
}
var r = this.rgb.r;
var g = this.rgb.g;
var b = this.rgb.b;
var a = this.alpha;
var m = typeof multiplier !== 'undefined' ? multiplier : 0.5;
//todo: write a lerp function
r = r + m * (color.rgb.r - r);
g = g + m * (color.rgb.g - g);
b = b + m * (color.rgb.b - b);
a = a + m * (color.alpha - a);
return new Color(Color.rgbToHex(r, g, b), {
'alpha': a
});
};
*/
/**
* Returns the result of blending another color on top of current color with alpha
* @param color Color to blend on top of current color, i.e. "Ca"
*/
//todo: see if .blendAlpha can be merged into .mix
Color.prototype.blendAlpha = function(color) {
if (!(color instanceof Color)) {
color = new Color(color);
}
var Ca = color;
var Cb = this;
//todo: write alpha blending function
var r = Ca.alpha * Ca.rgb.r + (1 - Ca.alpha) * Cb.rgb.r;
var g = Ca.alpha * Ca.rgb.g + (1 - Ca.alpha) * Cb.rgb.g;
var b = Ca.alpha * Ca.rgb.b + (1 - Ca.alpha) * Cb.rgb.b;
return new Color(Color.rgb2hex(r, g, b));
};
module.exports = Color;

View File

@@ -0,0 +1,4 @@
module.exports = {
'version': '%version%',
'svg_ns': 'http://www.w3.org/2000/svg'
};

View File

@@ -0,0 +1,62 @@
/**
* Generic new DOM element function
*
* @param tag Tag to create
* @param namespace Optional namespace value
*/
exports.newEl = function(tag, namespace) {
if (!global.document) return;
if (namespace == null) {
return global.document.createElement(tag);
} else {
return global.document.createElementNS(namespace, tag);
}
};
/**
* Generic setAttribute function
*
* @param el Reference to DOM element
* @param attrs Object with attribute keys and values
*/
exports.setAttr = function (el, attrs) {
for (var a in attrs) {
el.setAttribute(a, attrs[a]);
}
};
/**
* Creates a XML document
* @private
*/
exports.createXML = function() {
if (!global.DOMParser) return;
return new DOMParser().parseFromString('<xml />', 'application/xml');
};
/**
* Converts a value into an array of DOM nodes
*
* @param val A string, a NodeList, a Node, or an HTMLCollection
*/
exports.getNodeArray = function(val) {
var retval = null;
if (typeof(val) == 'string') {
retval = document.querySelectorAll(val);
} else if (global.NodeList && val instanceof global.NodeList) {
retval = val;
} else if (global.Node && val instanceof global.Node) {
retval = [val];
} else if (global.HTMLCollection && val instanceof global.HTMLCollection) {
retval = val;
} else if (val instanceof Array) {
retval = val;
} else if (val === null) {
retval = [];
}
retval = Array.prototype.slice.call(retval);
return retval;
};

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,64 @@
var DOM = require('../dom');
var utils = require('../utils');
module.exports = (function() {
var canvas = DOM.newEl('canvas');
var ctx = null;
return function(sceneGraph) {
if (ctx == null) {
ctx = canvas.getContext('2d');
}
var dpr = utils.canvasRatio();
var root = sceneGraph.root;
canvas.width = dpr * root.properties.width;
canvas.height = dpr * root.properties.height ;
ctx.textBaseline = 'middle';
var bg = root.children.holderBg;
var bgWidth = dpr * bg.width;
var bgHeight = dpr * bg.height;
//todo: parametrize outline width (e.g. in scene object)
var outlineWidth = 2;
var outlineOffsetWidth = outlineWidth / 2;
ctx.fillStyle = bg.properties.fill;
ctx.fillRect(0, 0, bgWidth, bgHeight);
if (bg.properties.outline) {
//todo: abstract this into a method
ctx.strokeStyle = bg.properties.outline.fill;
ctx.lineWidth = bg.properties.outline.width;
ctx.moveTo(outlineOffsetWidth, outlineOffsetWidth);
// TL, TR, BR, BL
ctx.lineTo(bgWidth - outlineOffsetWidth, outlineOffsetWidth);
ctx.lineTo(bgWidth - outlineOffsetWidth, bgHeight - outlineOffsetWidth);
ctx.lineTo(outlineOffsetWidth, bgHeight - outlineOffsetWidth);
ctx.lineTo(outlineOffsetWidth, outlineOffsetWidth);
// Diagonals
ctx.moveTo(0, outlineOffsetWidth);
ctx.lineTo(bgWidth, bgHeight - outlineOffsetWidth);
ctx.moveTo(0, bgHeight - outlineOffsetWidth);
ctx.lineTo(bgWidth, outlineOffsetWidth);
ctx.stroke();
}
var textGroup = root.children.holderTextGroup;
ctx.font = textGroup.properties.font.weight + ' ' + (dpr * textGroup.properties.font.size) + textGroup.properties.font.units + ' ' + textGroup.properties.font.family + ', monospace';
ctx.fillStyle = textGroup.properties.fill;
for (var lineKey in textGroup.children) {
var line = textGroup.children[lineKey];
for (var wordKey in line.children) {
var word = line.children[wordKey];
var x = dpr * (textGroup.x + line.x + word.x);
var y = dpr * (textGroup.y + line.y + word.y + (textGroup.properties.leading / 2));
ctx.fillText(word.properties.text, x, y);
}
}
return canvas.toDataURL('image/png');
};
})();

View File

@@ -0,0 +1,122 @@
var SVG = require('../svg');
var DOM = require('../dom');
var utils = require('../utils');
var constants = require('../constants');
var SVG_NS = constants.svg_ns;
var generatorComment = '\n' +
'Created with Holder.js ' + constants.version + '.\n' +
'Learn more at http://holderjs.com\n' +
'(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n';
module.exports = (function() {
//Prevent IE <9 from initializing SVG renderer
if (!global.XMLSerializer) return;
var xml = DOM.createXML();
var svg = SVG.initSVG(null, 0, 0);
var bgEl = DOM.newEl('rect', SVG_NS);
svg.appendChild(bgEl);
//todo: create a reusable pool for textNodes, resize if more words present
return function(sceneGraph, renderSettings) {
var root = sceneGraph.root;
SVG.initSVG(svg, root.properties.width, root.properties.height);
var groups = svg.querySelectorAll('g');
for (var i = 0; i < groups.length; i++) {
groups[i].parentNode.removeChild(groups[i]);
}
var holderURL = renderSettings.holderSettings.flags.holderURL;
var holderId = 'holder_' + (Number(new Date()) + 32768 + (0 | Math.random() * 32768)).toString(16);
var sceneGroupEl = DOM.newEl('g', SVG_NS);
var textGroup = root.children.holderTextGroup;
var tgProps = textGroup.properties;
var textGroupEl = DOM.newEl('g', SVG_NS);
var tpdata = textGroup.textPositionData;
var textCSSRule = '#' + holderId + ' text { ' +
utils.cssProps({
'fill': tgProps.fill,
'font-weight': tgProps.font.weight,
'font-family': tgProps.font.family + ', monospace',
'font-size': tgProps.font.size + tgProps.font.units
}) + ' } ';
var commentNode = xml.createComment('\n' + 'Source URL: ' + holderURL + generatorComment);
var holderCSS = xml.createCDATASection(textCSSRule);
var styleEl = svg.querySelector('style');
var bg = root.children.holderBg;
DOM.setAttr(sceneGroupEl, {
id: holderId
});
svg.insertBefore(commentNode, svg.firstChild);
styleEl.appendChild(holderCSS);
sceneGroupEl.appendChild(bgEl);
//todo: abstract this into a cross-browser SVG outline method
if (bg.properties.outline) {
var outlineEl = DOM.newEl('path', SVG_NS);
var outlineWidth = bg.properties.outline.width;
var outlineOffsetWidth = outlineWidth / 2;
DOM.setAttr(outlineEl, {
'd': [
'M', outlineOffsetWidth, outlineOffsetWidth,
'H', bg.width - outlineOffsetWidth,
'V', bg.height - outlineOffsetWidth,
'H', outlineOffsetWidth,
'V', 0,
'M', 0, outlineOffsetWidth,
'L', bg.width, bg.height - outlineOffsetWidth,
'M', 0, bg.height - outlineOffsetWidth,
'L', bg.width, outlineOffsetWidth
].join(' '),
'stroke-width': bg.properties.outline.width,
'stroke': bg.properties.outline.fill,
'fill': 'none'
});
sceneGroupEl.appendChild(outlineEl);
}
sceneGroupEl.appendChild(textGroupEl);
svg.appendChild(sceneGroupEl);
DOM.setAttr(bgEl, {
'width': bg.width,
'height': bg.height,
'fill': bg.properties.fill
});
textGroup.y += tpdata.boundingBox.height * 0.8;
for (var lineKey in textGroup.children) {
var line = textGroup.children[lineKey];
for (var wordKey in line.children) {
var word = line.children[wordKey];
var x = textGroup.x + line.x + word.x;
var y = textGroup.y + line.y + word.y;
var textEl = DOM.newEl('text', SVG_NS);
var textNode = document.createTextNode(null);
DOM.setAttr(textEl, {
'x': x,
'y': y
});
textNode.nodeValue = word.properties.text;
textEl.appendChild(textNode);
textGroupEl.appendChild(textEl);
}
}
//todo: factor the background check up the chain, perhaps only return reference
var svgString = SVG.svgStringToDataURI(SVG.serializeSVG(svg, renderSettings.engineSettings), renderSettings.mode === 'background');
return svgString;
};
})();

View File

@@ -0,0 +1,157 @@
var shaven = require('shaven');
var SVG = require('../svg');
var constants = require('../constants');
var utils = require('../utils');
var SVG_NS = constants.svg_ns;
var templates = {
'element': function (options) {
var tag = options.tag;
var content = options.content || '';
delete options.tag;
delete options.content;
return [tag, content, options];
}
};
//todo: deprecate tag arg, infer tag from shape object
function convertShape (shape, tag) {
return templates.element({
'tag': tag,
'width': shape.width,
'height': shape.height,
'fill': shape.properties.fill
});
}
function textCss (properties) {
return utils.cssProps({
'fill': properties.fill,
'font-weight': properties.font.weight,
'font-family': properties.font.family + ', monospace',
'font-size': properties.font.size + properties.font.units
});
}
function outlinePath (bgWidth, bgHeight, outlineWidth) {
var outlineOffsetWidth = outlineWidth / 2;
return [
'M', outlineOffsetWidth, outlineOffsetWidth,
'H', bgWidth - outlineOffsetWidth,
'V', bgHeight - outlineOffsetWidth,
'H', outlineOffsetWidth,
'V', 0,
'M', 0, outlineOffsetWidth,
'L', bgWidth, bgHeight - outlineOffsetWidth,
'M', 0, bgHeight - outlineOffsetWidth,
'L', bgWidth, outlineOffsetWidth
].join(' ');
}
module.exports = function (sceneGraph, renderSettings) {
var engineSettings = renderSettings.engineSettings;
var stylesheets = engineSettings.stylesheets;
var stylesheetXml = stylesheets.map(function (stylesheet) {
return '<?xml-stylesheet rel="stylesheet" href="' + stylesheet + '"?>';
}).join('\n');
var holderId = 'holder_' + Number(new Date()).toString(16);
var root = sceneGraph.root;
var textGroup = root.children.holderTextGroup;
var css = '#' + holderId + ' text { ' + textCss(textGroup.properties) + ' } ';
// push text down to be equally vertically aligned with canvas renderer
textGroup.y += textGroup.textPositionData.boundingBox.height * 0.8;
var wordTags = [];
Object.keys(textGroup.children).forEach(function (lineKey) {
var line = textGroup.children[lineKey];
Object.keys(line.children).forEach(function (wordKey) {
var word = line.children[wordKey];
var x = textGroup.x + line.x + word.x;
var y = textGroup.y + line.y + word.y;
var wordTag = templates.element({
'tag': 'text',
'content': word.properties.text,
'x': x,
'y': y
});
wordTags.push(wordTag);
});
});
var text = templates.element({
'tag': 'g',
'content': wordTags
});
var outline = null;
if (root.children.holderBg.properties.outline) {
var outlineProperties = root.children.holderBg.properties.outline;
outline = templates.element({
'tag': 'path',
'd': outlinePath(root.children.holderBg.width, root.children.holderBg.height, outlineProperties.width),
'stroke-width': outlineProperties.width,
'stroke': outlineProperties.fill,
'fill': 'none'
});
}
var bg = convertShape(root.children.holderBg, 'rect');
var sceneContent = [];
sceneContent.push(bg);
if (outlineProperties) {
sceneContent.push(outline);
}
sceneContent.push(text);
var scene = templates.element({
'tag': 'g',
'id': holderId,
'content': sceneContent
});
var style = templates.element({
'tag': 'style',
//todo: figure out how to add CDATA directive
'content': css,
'type': 'text/css'
});
var defs = templates.element({
'tag': 'defs',
'content': style
});
var svg = templates.element({
'tag': 'svg',
'content': [defs, scene],
'width': root.properties.width,
'height': root.properties.height,
'xmlns': SVG_NS,
'viewBox': [0, 0, root.properties.width, root.properties.height].join(' '),
'preserveAspectRatio': 'none'
});
var output = shaven(svg);
if (/\&amp;(x)?#[0-9A-Fa-f]/.test(output[0])) {
output[0] = output[0].replace(/&amp;#/gm, '&#');
}
output = stylesheetXml + output[0];
var svgString = SVG.svgStringToDataURI(output, renderSettings.mode === 'background');
return svgString;
};

View File

@@ -0,0 +1,105 @@
var SceneGraph = function(sceneProperties) {
var nodeCount = 1;
//todo: move merge to helpers section
function merge(parent, child) {
for (var prop in child) {
parent[prop] = child[prop];
}
return parent;
}
var SceneNode = function(name) {
nodeCount++;
this.parent = null;
this.children = {};
this.id = nodeCount;
this.name = 'n' + nodeCount;
if (typeof name !== 'undefined') {
this.name = name;
}
this.x = this.y = this.z = 0;
this.width = this.height = 0;
};
SceneNode.prototype.resize = function(width, height) {
if (width != null) {
this.width = width;
}
if (height != null) {
this.height = height;
}
};
SceneNode.prototype.moveTo = function(x, y, z) {
this.x = x != null ? x : this.x;
this.y = y != null ? y : this.y;
this.z = z != null ? z : this.z;
};
SceneNode.prototype.add = function(child) {
var name = child.name;
if (typeof this.children[name] === 'undefined') {
this.children[name] = child;
child.parent = this;
} else {
throw 'SceneGraph: child already exists: ' + name;
}
};
var RootNode = function() {
SceneNode.call(this, 'root');
this.properties = sceneProperties;
};
RootNode.prototype = new SceneNode();
var Shape = function(name, props) {
SceneNode.call(this, name);
this.properties = {
'fill': '#000000'
};
if (typeof props !== 'undefined') {
merge(this.properties, props);
} else if (typeof name !== 'undefined' && typeof name !== 'string') {
throw 'SceneGraph: invalid node name';
}
};
Shape.prototype = new SceneNode();
var Group = function() {
Shape.apply(this, arguments);
this.type = 'group';
};
Group.prototype = new Shape();
var Rect = function() {
Shape.apply(this, arguments);
this.type = 'rect';
};
Rect.prototype = new Shape();
var Text = function(text) {
Shape.call(this);
this.type = 'text';
this.properties.text = text;
};
Text.prototype = new Shape();
var root = new RootNode();
this.Shape = {
'Rect': Rect,
'Text': Text,
'Group': Group
};
this.root = root;
return this;
};
module.exports = SceneGraph;

View File

@@ -0,0 +1,109 @@
var DOM = require('./dom');
var SVG_NS = 'http://www.w3.org/2000/svg';
var NODE_TYPE_COMMENT = 8;
/**
* Generic SVG element creation function
*
* @param svg SVG context, set to null if new
* @param width Document width
* @param height Document height
*/
exports.initSVG = function(svg, width, height) {
var defs, style, initialize = false;
if (svg && svg.querySelector) {
style = svg.querySelector('style');
if (style === null) {
initialize = true;
}
} else {
svg = DOM.newEl('svg', SVG_NS);
initialize = true;
}
if (initialize) {
defs = DOM.newEl('defs', SVG_NS);
style = DOM.newEl('style', SVG_NS);
DOM.setAttr(style, {
'type': 'text/css'
});
defs.appendChild(style);
svg.appendChild(defs);
}
//IE throws an exception if this is set and Chrome requires it to be set
if (svg.webkitMatchesSelector) {
svg.setAttribute('xmlns', SVG_NS);
}
//Remove comment nodes
for (var i = 0; i < svg.childNodes.length; i++) {
if (svg.childNodes[i].nodeType === NODE_TYPE_COMMENT) {
svg.removeChild(svg.childNodes[i]);
}
}
//Remove CSS
while (style.childNodes.length) {
style.removeChild(style.childNodes[0]);
}
DOM.setAttr(svg, {
'width': width,
'height': height,
'viewBox': '0 0 ' + width + ' ' + height,
'preserveAspectRatio': 'none'
});
return svg;
};
/**
* Converts serialized SVG to a string suitable for data URI use
* @param svgString Serialized SVG string
* @param [base64] Use base64 encoding for data URI
*/
exports.svgStringToDataURI = function() {
var rawPrefix = 'data:image/svg+xml;charset=UTF-8,';
var base64Prefix = 'data:image/svg+xml;charset=UTF-8;base64,';
return function(svgString, base64) {
if (base64) {
return base64Prefix + btoa(global.unescape(encodeURIComponent(svgString)));
} else {
return rawPrefix + encodeURIComponent(svgString);
}
};
}();
/**
* Returns serialized SVG with XML processing instructions
*
* @param svg SVG context
* @param stylesheets CSS stylesheets to include
*/
exports.serializeSVG = function(svg, engineSettings) {
if (!global.XMLSerializer) return;
var serializer = new XMLSerializer();
var svgCSS = '';
var stylesheets = engineSettings.stylesheets;
//External stylesheets: Processing Instruction method
if (engineSettings.svgXMLStylesheet) {
var xml = DOM.createXML();
//Add <?xml-stylesheet ?> directives
for (var i = stylesheets.length - 1; i >= 0; i--) {
var csspi = xml.createProcessingInstruction('xml-stylesheet', 'href="' + stylesheets[i] + '" rel="stylesheet"');
xml.insertBefore(csspi, xml.firstChild);
}
xml.removeChild(xml.documentElement);
svgCSS = serializer.serializeToString(xml);
}
var svgText = serializer.serializeToString(svg);
svgText = svgText.replace(/\&amp;(\#[0-9]{2,}\;)/g, '&$1');
return svgCSS + svgText;
};

View File

@@ -0,0 +1,173 @@
/**
* Shallow object clone and merge
*
* @param a Object A
* @param b Object B
* @returns {Object} New object with all of A's properties, and all of B's properties, overwriting A's properties
*/
exports.extend = function(a, b) {
var c = {};
for (var x in a) {
if (a.hasOwnProperty(x)) {
c[x] = a[x];
}
}
if (b != null) {
for (var y in b) {
if (b.hasOwnProperty(y)) {
c[y] = b[y];
}
}
}
return c;
};
/**
* Takes a k/v list of CSS properties and returns a rule
*
* @param props CSS properties object
*/
exports.cssProps = function(props) {
var ret = [];
for (var p in props) {
if (props.hasOwnProperty(p)) {
ret.push(p + ':' + props[p]);
}
}
return ret.join(';');
};
/**
* Encodes HTML entities in a string
*
* @param str Input string
*/
exports.encodeHtmlEntity = function(str) {
var buf = [];
var charCode = 0;
for (var i = str.length - 1; i >= 0; i--) {
charCode = str.charCodeAt(i);
if (charCode > 128) {
buf.unshift(['&#', charCode, ';'].join(''));
} else {
buf.unshift(str[i]);
}
}
return buf.join('');
};
/**
* Checks if an image exists
*
* @param src URL of image
* @param callback Callback to call once image status has been found
*/
exports.imageExists = function(src, callback) {
var image = new Image();
image.onerror = function() {
callback.call(this, false);
};
image.onload = function() {
callback.call(this, true);
};
image.src = src;
};
/**
* Decodes HTML entities in a string
*
* @param str Input string
*/
exports.decodeHtmlEntity = function(str) {
return str.replace(/&#(\d+);/g, function(match, dec) {
return String.fromCharCode(dec);
});
};
/**
* Returns an element's dimensions if it's visible, `false` otherwise.
*
* @param el DOM element
*/
exports.dimensionCheck = function(el) {
var dimensions = {
height: el.clientHeight,
width: el.clientWidth
};
if (dimensions.height && dimensions.width) {
return dimensions;
} else {
return false;
}
};
/**
* Returns true if value is truthy or if it is "semantically truthy"
* @param val
*/
exports.truthy = function(val) {
if (typeof val === 'string') {
return val === 'true' || val === 'yes' || val === '1' || val === 'on' || val === '✓';
}
return !!val;
};
/**
* Parses input into a well-formed CSS color
* @param val
*/
exports.parseColor = function(val) {
var hexre = /(^(?:#?)[0-9a-f]{6}$)|(^(?:#?)[0-9a-f]{3}$)/i;
var rgbre = /^rgb\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/;
var rgbare = /^rgba\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0\.\d{1,}|1)\)$/;
var match = val.match(hexre);
var retval;
if (match !== null) {
retval = match[1] || match[2];
if (retval[0] !== '#') {
return '#' + retval;
} else {
return retval;
}
}
match = val.match(rgbre);
if (match !== null) {
retval = 'rgb(' + match.slice(1).join(',') + ')';
return retval;
}
match = val.match(rgbare);
if (match !== null) {
retval = 'rgba(' + match.slice(1).join(',') + ')';
return retval;
}
return null;
};
/**
* Provides the correct scaling ratio for canvas drawing operations on HiDPI screens (e.g. Retina displays)
*/
exports.canvasRatio = function () {
var devicePixelRatio = 1;
var backingStoreRatio = 1;
if (global.document) {
var canvas = global.document.createElement('canvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
devicePixelRatio = global.devicePixelRatio || 1;
backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
}
}
return devicePixelRatio / backingStoreRatio;
};

View File

@@ -0,0 +1,155 @@
/*!
* onDomReady.js 1.4.0 (c) 2013 Tubal Martin - MIT license
*
* Specially modified to work with Holder.js
*/
function _onDomReady(win) {
//Lazy loading fix for Firefox < 3.6
//http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
if (document.readyState == null && document.addEventListener) {
document.addEventListener("DOMContentLoaded", function DOMContentLoaded() {
document.removeEventListener("DOMContentLoaded", DOMContentLoaded, false);
document.readyState = "complete";
}, false);
document.readyState = "loading";
}
var doc = win.document,
docElem = doc.documentElement,
LOAD = "load",
FALSE = false,
ONLOAD = "on"+LOAD,
COMPLETE = "complete",
READYSTATE = "readyState",
ATTACHEVENT = "attachEvent",
DETACHEVENT = "detachEvent",
ADDEVENTLISTENER = "addEventListener",
DOMCONTENTLOADED = "DOMContentLoaded",
ONREADYSTATECHANGE = "onreadystatechange",
REMOVEEVENTLISTENER = "removeEventListener",
// W3C Event model
w3c = ADDEVENTLISTENER in doc,
_top = FALSE,
// isReady: Is the DOM ready to be used? Set to true once it occurs.
isReady = FALSE,
// Callbacks pending execution until DOM is ready
callbacks = [];
// Handle when the DOM is ready
function ready( fn ) {
if ( !isReady ) {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( !doc.body ) {
return defer( ready );
}
// Remember that the DOM is ready
isReady = true;
// Execute all callbacks
while ( fn = callbacks.shift() ) {
defer( fn );
}
}
}
// The ready event handler
function completed( event ) {
// readyState === "complete" is good enough for us to call the dom ready in oldIE
if ( w3c || event.type === LOAD || doc[READYSTATE] === COMPLETE ) {
detach();
ready();
}
}
// Clean-up method for dom ready events
function detach() {
if ( w3c ) {
doc[REMOVEEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );
win[REMOVEEVENTLISTENER]( LOAD, completed, FALSE );
} else {
doc[DETACHEVENT]( ONREADYSTATECHANGE, completed );
win[DETACHEVENT]( ONLOAD, completed );
}
}
// Defers a function, scheduling it to run after the current call stack has cleared.
function defer( fn, wait ) {
// Allow 0 to be passed
setTimeout( fn, +wait >= 0 ? wait : 1 );
}
// Attach the listeners:
// Catch cases where onDomReady is called after the browser event has already occurred.
// we once tried to use readyState "interactive" here, but it caused issues like the one
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
if ( doc[READYSTATE] === COMPLETE ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
defer( ready );
// Standards-based browsers support DOMContentLoaded
} else if ( w3c ) {
// Use the handy event callback
doc[ADDEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );
// A fallback to window.onload, that will always work
win[ADDEVENTLISTENER]( LOAD, completed, FALSE );
// If IE event model is used
} else {
// Ensure firing before onload, maybe late but safe also for iframes
doc[ATTACHEVENT]( ONREADYSTATECHANGE, completed );
// A fallback to window.onload, that will always work
win[ATTACHEVENT]( ONLOAD, completed );
// If IE and not a frame
// continually check to see if the document is ready
try {
_top = win.frameElement == null && docElem;
} catch(e) {}
if ( _top && _top.doScroll ) {
(function doScrollCheck() {
if ( !isReady ) {
try {
// Use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
_top.doScroll("left");
} catch(e) {
return defer( doScrollCheck, 50 );
}
// detach all dom ready events
detach();
// and execute any waiting functions
ready();
}
})();
}
}
function onDomReady( fn ) {
// If DOM is ready, execute the function (async), otherwise wait
isReady ? defer( fn ) : callbacks.push( fn );
}
// Add version
onDomReady.version = "1.4.0";
// Add method to check if DOM is ready
onDomReady.isReady = function(){
return isReady;
};
return onDomReady;
}
module.exports = typeof window !== "undefined" && _onDomReady(window);

View File

@@ -0,0 +1,234 @@
(function (window) {
if (!window.document) return;
var document = window.document;
//https://github.com/inexorabletash/polyfill/blob/master/web.js
if (!document.querySelectorAll) {
document.querySelectorAll = function (selectors) {
var style = document.createElement('style'), elements = [], element;
document.documentElement.firstChild.appendChild(style);
document._qsa = [];
style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';
window.scrollBy(0, 0);
style.parentNode.removeChild(style);
while (document._qsa.length) {
element = document._qsa.shift();
element.style.removeAttribute('x-qsa');
elements.push(element);
}
document._qsa = null;
return elements;
};
}
if (!document.querySelector) {
document.querySelector = function (selectors) {
var elements = document.querySelectorAll(selectors);
return (elements.length) ? elements[0] : null;
};
}
if (!document.getElementsByClassName) {
document.getElementsByClassName = function (classNames) {
classNames = String(classNames).replace(/^|\s+/g, '.');
return document.querySelectorAll(classNames);
};
}
//https://github.com/inexorabletash/polyfill
// ES5 15.2.3.14 Object.keys ( O )
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
Object.keys = function (o) {
if (o !== Object(o)) { throw TypeError('Object.keys called on non-object'); }
var ret = [], p;
for (p in o) {
if (Object.prototype.hasOwnProperty.call(o, p)) {
ret.push(p);
}
}
return ret;
};
}
// ES5 15.4.4.18 Array.prototype.forEach ( callbackfn [ , thisArg ] )
// From https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach
if (!Array.prototype.forEach) {
Array.prototype.forEach = function (fun /*, thisp */) {
if (this === void 0 || this === null) { throw TypeError(); }
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function") { throw TypeError(); }
var thisp = arguments[1], i;
for (i = 0; i < len; i++) {
if (i in t) {
fun.call(thisp, t[i], i, t);
}
}
};
}
//https://github.com/inexorabletash/polyfill/blob/master/web.js
(function (global) {
var B64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
global.atob = global.atob || function (input) {
input = String(input);
var position = 0,
output = [],
buffer = 0, bits = 0, n;
input = input.replace(/\s/g, '');
if ((input.length % 4) === 0) { input = input.replace(/=+$/, ''); }
if ((input.length % 4) === 1) { throw Error('InvalidCharacterError'); }
if (/[^+/0-9A-Za-z]/.test(input)) { throw Error('InvalidCharacterError'); }
while (position < input.length) {
n = B64_ALPHABET.indexOf(input.charAt(position));
buffer = (buffer << 6) | n;
bits += 6;
if (bits === 24) {
output.push(String.fromCharCode((buffer >> 16) & 0xFF));
output.push(String.fromCharCode((buffer >> 8) & 0xFF));
output.push(String.fromCharCode(buffer & 0xFF));
bits = 0;
buffer = 0;
}
position += 1;
}
if (bits === 12) {
buffer = buffer >> 4;
output.push(String.fromCharCode(buffer & 0xFF));
} else if (bits === 18) {
buffer = buffer >> 2;
output.push(String.fromCharCode((buffer >> 8) & 0xFF));
output.push(String.fromCharCode(buffer & 0xFF));
}
return output.join('');
};
global.btoa = global.btoa || function (input) {
input = String(input);
var position = 0,
out = [],
o1, o2, o3,
e1, e2, e3, e4;
if (/[^\x00-\xFF]/.test(input)) { throw Error('InvalidCharacterError'); }
while (position < input.length) {
o1 = input.charCodeAt(position++);
o2 = input.charCodeAt(position++);
o3 = input.charCodeAt(position++);
// 111111 112222 222233 333333
e1 = o1 >> 2;
e2 = ((o1 & 0x3) << 4) | (o2 >> 4);
e3 = ((o2 & 0xf) << 2) | (o3 >> 6);
e4 = o3 & 0x3f;
if (position === input.length + 2) {
e3 = 64; e4 = 64;
}
else if (position === input.length + 1) {
e4 = 64;
}
out.push(B64_ALPHABET.charAt(e1),
B64_ALPHABET.charAt(e2),
B64_ALPHABET.charAt(e3),
B64_ALPHABET.charAt(e4));
}
return out.join('');
};
}(window));
//https://gist.github.com/jimeh/332357
if (!Object.prototype.hasOwnProperty){
/*jshint -W001, -W103 */
Object.prototype.hasOwnProperty = function(prop) {
var proto = this.__proto__ || this.constructor.prototype;
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
};
/*jshint +W001, +W103 */
}
// @license http://opensource.org/licenses/MIT
// copyright Paul Irish 2015
// Date.now() is supported everywhere except IE8. For IE8 we use the Date.now polyfill
// github.com/Financial-Times/polyfill-service/blob/master/polyfills/Date.now/polyfill.js
// as Safari 6 doesn't have support for NavigationTiming, we use a Date.now() timestamp for relative values
// if you want values similar to what you'd get with real perf.now, place this towards the head of the page
// but in reality, you're just getting the delta between now() calls, so it's not terribly important where it's placed
(function(){
if ('performance' in window === false) {
window.performance = {};
}
Date.now = (Date.now || function () { // thanks IE8
return new Date().getTime();
});
if ('now' in window.performance === false){
var nowOffset = Date.now();
if (performance.timing && performance.timing.navigationStart){
nowOffset = performance.timing.navigationStart;
}
window.performance.now = function now(){
return Date.now() - nowOffset;
};
}
})();
//requestAnimationFrame polyfill for older Firefox/Chrome versions
if (!window.requestAnimationFrame) {
if (window.webkitRequestAnimationFrame && window.webkitCancelAnimationFrame) {
//https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-webkit.js
(function (global) {
global.requestAnimationFrame = function (callback) {
return webkitRequestAnimationFrame(function () {
callback(global.performance.now());
});
};
global.cancelAnimationFrame = global.webkitCancelAnimationFrame;
}(window));
} else if (window.mozRequestAnimationFrame && window.mozCancelAnimationFrame) {
//https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/requestAnimationFrame/polyfill-moz.js
(function (global) {
global.requestAnimationFrame = function (callback) {
return mozRequestAnimationFrame(function () {
callback(global.performance.now());
});
};
global.cancelAnimationFrame = global.mozCancelAnimationFrame;
}(window));
} else {
(function (global) {
global.requestAnimationFrame = function (callback) {
return global.setTimeout(callback, 1000 / 60);
};
global.cancelAnimationFrame = global.clearTimeout;
})(window);
}
}
})(this);

View File

@@ -0,0 +1,102 @@
//Modified version of component/querystring
//Changes: updated dependencies, dot notation parsing, JSHint fixes
//Fork at https://github.com/imsky/querystring
/**
* Module dependencies.
*/
var encode = encodeURIComponent;
var decode = decodeURIComponent;
var trim = require('trim');
var type = require('component-type');
var arrayRegex = /(\w+)\[(\d+)\]/;
var objectRegex = /\w+\.\w+/;
/**
* Parse the given query `str`.
*
* @param {String} str
* @return {Object}
* @api public
*/
exports.parse = function(str){
if ('string' !== typeof str) return {};
str = trim(str);
if ('' === str) return {};
if ('?' === str.charAt(0)) str = str.slice(1);
var obj = {};
var pairs = str.split('&');
for (var i = 0; i < pairs.length; i++) {
var parts = pairs[i].split('=');
var key = decode(parts[0]);
var m, ctx, prop;
if (m = arrayRegex.exec(key)) {
obj[m[1]] = obj[m[1]] || [];
obj[m[1]][m[2]] = decode(parts[1]);
continue;
}
if (m = objectRegex.test(key)) {
m = key.split('.');
ctx = obj;
while (m.length) {
prop = m.shift();
if (!prop.length) continue;
if (!ctx[prop]) {
ctx[prop] = {};
} else if (ctx[prop] && typeof ctx[prop] !== 'object') {
break;
}
if (!m.length) {
ctx[prop] = decode(parts[1]);
}
ctx = ctx[prop];
}
continue;
}
obj[parts[0]] = null == parts[1] ? '' : decode(parts[1]);
}
return obj;
};
/**
* Stringify the given `obj`.
*
* @param {Object} obj
* @return {String}
* @api public
*/
exports.stringify = function(obj){
if (!obj) return '';
var pairs = [];
for (var key in obj) {
var value = obj[key];
if ('array' == type(value)) {
for (var i = 0; i < value.length; ++i) {
pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));
}
continue;
}
pairs.push(encode(key) + '=' + encode(obj[key]));
}
return pairs.join('&');
};

View File

@@ -0,0 +1,12 @@
Package.describe({
summary: '%summary%',
version: '%version%',
name: 'imsky:holder',
git: 'https://github.com/imsky/holder',
});
Package.onUse(function(api) {
api.versionsFrom('0.9.0');
api.export('Holder', 'client');
api.addFiles('holder.js', 'client');
});

View File

@@ -0,0 +1,5 @@
(function(ctx, isMeteorPackage) {
if (isMeteorPackage) {
Holder = ctx.Holder;
}
})(this, typeof Meteor !== 'undefined' && typeof Package !== 'undefined');

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
var runner = require('./runner');
var server = require('node-http-server');
server.deploy({
'port': 8000,
'root': __dirname
});
runner({
'browserName': 'chrome'
}, function (err, retval) {
console.log('Test result: ', retval);
if (!retval) {
process.exitCode = -1;
}
process.exit();
});

View File

@@ -0,0 +1,15 @@
var page = require('webpage').create();
page.onConsoleMessage = function (message) {
console.log('Page: ', message);
};
page.open('index.html', function (status) {
console.log(status);
if (status === 'success') {
page.render('phantom.png');
}
phantom.exit();
});

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,37 @@
var client = require('webdriverio');
module.exports = function (options, cb) {
var retval = true;
client.remote({
'user': process.env.SAUCE_USERNAME,
'key': process.env.SAUCE_ACCESS_KEY,
'host': 'localhost',
'port': 4445,
'desiredCapabilities': {
'browserName': options.browserName,
'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER,
'name': 'Holder.js Test',
'tags': [options.browserName]
}
})
.init()
.url('http://localhost:8000')
.execute(function () {
var expectImages = document.querySelectorAll('img').length - document.querySelectorAll('img[data-exclude]').length;
var renderedImages = document.querySelectorAll('img[data-holder-rendered]').length;
return {'expected': expectImages, 'rendered': renderedImages};
}, function (err, ret) {
var expected = ret.value.expected;
var rendered = ret.value.rendered;
console.log('Expected', expected);
console.log('Rendered', rendered);
if (expected !== rendered) {
retval = false;
}
})
.pause(15 * 1000)
.end(function () {
cb(null, retval);
});
};

View File

@@ -0,0 +1 @@
//= require jquery-smooth-scroll/jquery.smooth-scroll.js

View File

@@ -0,0 +1,358 @@
/*!
* jQuery Smooth Scroll - v2.2.0 - 2017-05-05
* https://github.com/kswedberg/jquery-smooth-scroll
* Copyright (c) 2017 Karl Swedberg
* Licensed MIT
*/
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS
factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function($) {
var version = '2.2.0';
var optionOverrides = {};
var defaults = {
exclude: [],
excludeWithin: [],
offset: 0,
// one of 'top' or 'left'
direction: 'top',
// if set, bind click events through delegation
// supported since jQuery 1.4.2
delegateSelector: null,
// jQuery set of elements you wish to scroll (for $.smoothScroll).
// if null (default), $('html, body').firstScrollable() is used.
scrollElement: null,
// only use if you want to override default behavior
scrollTarget: null,
// automatically focus the target element after scrolling to it
autoFocus: false,
// fn(opts) function to be called before scrolling occurs.
// `this` is the element(s) being scrolled
beforeScroll: function() {},
// fn(opts) function to be called after scrolling occurs.
// `this` is the triggering element
afterScroll: function() {},
// easing name. jQuery comes with "swing" and "linear." For others, you'll need an easing plugin
// from jQuery UI or elsewhere
easing: 'swing',
// speed can be a number or 'auto'
// if 'auto', the speed will be calculated based on the formula:
// (current scroll position - target scroll position) / autoCoeffic
speed: 400,
// coefficient for "auto" speed
autoCoefficient: 2,
// $.fn.smoothScroll only: whether to prevent the default click action
preventDefault: true
};
var getScrollable = function(opts) {
var scrollable = [];
var scrolled = false;
var dir = opts.dir && opts.dir === 'left' ? 'scrollLeft' : 'scrollTop';
this.each(function() {
var el = $(this);
if (this === document || this === window) {
return;
}
if (document.scrollingElement && (this === document.documentElement || this === document.body)) {
scrollable.push(document.scrollingElement);
return false;
}
if (el[dir]() > 0) {
scrollable.push(this);
} else {
// if scroll(Top|Left) === 0, nudge the element 1px and see if it moves
el[dir](1);
scrolled = el[dir]() > 0;
if (scrolled) {
scrollable.push(this);
}
// then put it back, of course
el[dir](0);
}
});
if (!scrollable.length) {
this.each(function() {
// If no scrollable elements and <html> has scroll-behavior:smooth because
// "When this property is specified on the root element, it applies to the viewport instead."
// and "The scroll-behavior property of the … body element is *not* propagated to the viewport."
// → https://drafts.csswg.org/cssom-view/#propdef-scroll-behavior
if (this === document.documentElement && $(this).css('scrollBehavior') === 'smooth') {
scrollable = [this];
}
// If still no scrollable elements, fall back to <body>,
// if it's in the jQuery collection
// (doing this because Safari sets scrollTop async,
// so can't set it to 1 and immediately get the value.)
if (!scrollable.length && this.nodeName === 'BODY') {
scrollable = [this];
}
});
}
// Use the first scrollable element if we're calling firstScrollable()
if (opts.el === 'first' && scrollable.length > 1) {
scrollable = [scrollable[0]];
}
return scrollable;
};
var rRelative = /^([\-\+]=)(\d+)/;
$.fn.extend({
scrollable: function(dir) {
var scrl = getScrollable.call(this, {dir: dir});
return this.pushStack(scrl);
},
firstScrollable: function(dir) {
var scrl = getScrollable.call(this, {el: 'first', dir: dir});
return this.pushStack(scrl);
},
smoothScroll: function(options, extra) {
options = options || {};
if (options === 'options') {
if (!extra) {
return this.first().data('ssOpts');
}
return this.each(function() {
var $this = $(this);
var opts = $.extend($this.data('ssOpts') || {}, extra);
$(this).data('ssOpts', opts);
});
}
var opts = $.extend({}, $.fn.smoothScroll.defaults, options);
var clickHandler = function(event) {
var escapeSelector = function(str) {
return str.replace(/(:|\.|\/)/g, '\\$1');
};
var link = this;
var $link = $(this);
var thisOpts = $.extend({}, opts, $link.data('ssOpts') || {});
var exclude = opts.exclude;
var excludeWithin = thisOpts.excludeWithin;
var elCounter = 0;
var ewlCounter = 0;
var include = true;
var clickOpts = {};
var locationPath = $.smoothScroll.filterPath(location.pathname);
var linkPath = $.smoothScroll.filterPath(link.pathname);
var hostMatch = location.hostname === link.hostname || !link.hostname;
var pathMatch = thisOpts.scrollTarget || (linkPath === locationPath);
var thisHash = escapeSelector(link.hash);
if (thisHash && !$(thisHash).length) {
include = false;
}
if (!thisOpts.scrollTarget && (!hostMatch || !pathMatch || !thisHash)) {
include = false;
} else {
while (include && elCounter < exclude.length) {
if ($link.is(escapeSelector(exclude[elCounter++]))) {
include = false;
}
}
while (include && ewlCounter < excludeWithin.length) {
if ($link.closest(excludeWithin[ewlCounter++]).length) {
include = false;
}
}
}
if (include) {
if (thisOpts.preventDefault) {
event.preventDefault();
}
$.extend(clickOpts, thisOpts, {
scrollTarget: thisOpts.scrollTarget || thisHash,
link: link
});
$.smoothScroll(clickOpts);
}
};
if (options.delegateSelector !== null) {
this
.off('click.smoothscroll', options.delegateSelector)
.on('click.smoothscroll', options.delegateSelector, clickHandler);
} else {
this
.off('click.smoothscroll')
.on('click.smoothscroll', clickHandler);
}
return this;
}
});
var getExplicitOffset = function(val) {
var explicit = {relative: ''};
var parts = typeof val === 'string' && rRelative.exec(val);
if (typeof val === 'number') {
explicit.px = val;
} else if (parts) {
explicit.relative = parts[1];
explicit.px = parseFloat(parts[2]) || 0;
}
return explicit;
};
var onAfterScroll = function(opts) {
var $tgt = $(opts.scrollTarget);
if (opts.autoFocus && $tgt.length) {
$tgt[0].focus();
if (!$tgt.is(document.activeElement)) {
$tgt.prop({tabIndex: -1});
$tgt[0].focus();
}
}
opts.afterScroll.call(opts.link, opts);
};
$.smoothScroll = function(options, px) {
if (options === 'options' && typeof px === 'object') {
return $.extend(optionOverrides, px);
}
var opts, $scroller, speed, delta;
var explicitOffset = getExplicitOffset(options);
var scrollTargetOffset = {};
var scrollerOffset = 0;
var offPos = 'offset';
var scrollDir = 'scrollTop';
var aniProps = {};
var aniOpts = {};
if (explicitOffset.px) {
opts = $.extend({link: null}, $.fn.smoothScroll.defaults, optionOverrides);
} else {
opts = $.extend({link: null}, $.fn.smoothScroll.defaults, options || {}, optionOverrides);
if (opts.scrollElement) {
offPos = 'position';
if (opts.scrollElement.css('position') === 'static') {
opts.scrollElement.css('position', 'relative');
}
}
if (px) {
explicitOffset = getExplicitOffset(px);
}
}
scrollDir = opts.direction === 'left' ? 'scrollLeft' : scrollDir;
if (opts.scrollElement) {
$scroller = opts.scrollElement;
if (!explicitOffset.px && !(/^(?:HTML|BODY)$/).test($scroller[0].nodeName)) {
scrollerOffset = $scroller[scrollDir]();
}
} else {
$scroller = $('html, body').firstScrollable(opts.direction);
}
// beforeScroll callback function must fire before calculating offset
opts.beforeScroll.call($scroller, opts);
scrollTargetOffset = explicitOffset.px ? explicitOffset : {
relative: '',
px: ($(opts.scrollTarget)[offPos]() && $(opts.scrollTarget)[offPos]()[opts.direction]) || 0
};
aniProps[scrollDir] = scrollTargetOffset.relative + (scrollTargetOffset.px + scrollerOffset + opts.offset);
speed = opts.speed;
// automatically calculate the speed of the scroll based on distance / coefficient
if (speed === 'auto') {
// $scroller[scrollDir]() is position before scroll, aniProps[scrollDir] is position after
// When delta is greater, speed will be greater.
delta = Math.abs(aniProps[scrollDir] - $scroller[scrollDir]());
// Divide the delta by the coefficient
speed = delta / opts.autoCoefficient;
}
aniOpts = {
duration: speed,
easing: opts.easing,
complete: function() {
onAfterScroll(opts);
}
};
if (opts.step) {
aniOpts.step = opts.step;
}
if ($scroller.length) {
$scroller.stop().animate(aniProps, aniOpts);
} else {
onAfterScroll(opts);
}
};
$.smoothScroll.version = version;
$.smoothScroll.filterPath = function(string) {
string = string || '';
return string
.replace(/^\//, '')
.replace(/(?:index|default).[a-zA-Z]{3,4}$/, '')
.replace(/\/$/, '');
};
// default options
$.fn.smoothScroll.defaults = defaults;
}));

1
vendor/assets/javascripts/markdown.js vendored Normal file
View File

@@ -0,0 +1 @@
//= require markdown/markdown.js

View File

@@ -0,0 +1,3 @@
// super simple module for the most common nodejs use case.
exports.markdown = require("./markdown");
exports.parse = exports.markdown.toHTML;

View File

File diff suppressed because it is too large Load Diff

1
vendor/assets/javascripts/momentjs.js vendored Normal file
View File

@@ -0,0 +1 @@
//= require momentjs/moment.js

View File

@@ -0,0 +1,71 @@
//! moment.js locale configuration
//! locale : Afrikaans [af]
//! author : Werner Mollentze : https://github.com/wernerm
import moment from '../moment';
export default moment.defineLocale('af', {
months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
'_'
),
monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
'_'
),
weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
meridiemParse: /vm|nm/i,
isPM: function (input) {
return /^nm$/i.test(input);
},
meridiem: function (hours, minutes, isLower) {
if (hours < 12) {
return isLower ? 'vm' : 'VM';
} else {
return isLower ? 'nm' : 'NM';
}
},
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd, D MMMM YYYY HH:mm',
},
calendar: {
sameDay: '[Vandag om] LT',
nextDay: '[Môre om] LT',
nextWeek: 'dddd [om] LT',
lastDay: '[Gister om] LT',
lastWeek: '[Laas] dddd [om] LT',
sameElse: 'L',
},
relativeTime: {
future: 'oor %s',
past: '%s gelede',
s: "'n paar sekondes",
ss: '%d sekondes',
m: "'n minuut",
mm: '%d minute',
h: "'n uur",
hh: '%d ure',
d: "'n dag",
dd: '%d dae',
M: "'n maand",
MM: '%d maande',
y: "'n jaar",
yy: '%d jaar',
},
dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
ordinal: function (number) {
return (
number +
(number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
); // Thanks to Joris Röling : https://github.com/jjupiter
},
week: {
dow: 1, // Maandag is die eerste dag van die week.
doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
},
});

View File

@@ -0,0 +1,156 @@
//! moment.js locale configuration
//! locale : Arabic (Algeria) [ar-dz]
//! author : Amine Roukh: https://github.com/Amine27
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi
//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
import moment from '../moment';
var pluralForm = function (n) {
return n === 0
? 0
: n === 1
? 1
: n === 2
? 2
: n % 100 >= 3 && n % 100 <= 10
? 3
: n % 100 >= 11
? 4
: 5;
},
plurals = {
s: [
'أقل من ثانية',
'ثانية واحدة',
['ثانيتان', 'ثانيتين'],
'%d ثوان',
'%d ثانية',
'%d ثانية',
],
m: [
'أقل من دقيقة',
'دقيقة واحدة',
['دقيقتان', 'دقيقتين'],
'%d دقائق',
'%d دقيقة',
'%d دقيقة',
],
h: [
'أقل من ساعة',
'ساعة واحدة',
['ساعتان', 'ساعتين'],
'%d ساعات',
'%d ساعة',
'%d ساعة',
],
d: [
'أقل من يوم',
'يوم واحد',
['يومان', 'يومين'],
'%d أيام',
'%d يومًا',
'%d يوم',
],
M: [
'أقل من شهر',
'شهر واحد',
['شهران', 'شهرين'],
'%d أشهر',
'%d شهرا',
'%d شهر',
],
y: [
'أقل من عام',
'عام واحد',
['عامان', 'عامين'],
'%d أعوام',
'%d عامًا',
'%d عام',
],
},
pluralize = function (u) {
return function (number, withoutSuffix, string, isFuture) {
var f = pluralForm(number),
str = plurals[u][pluralForm(number)];
if (f === 2) {
str = str[withoutSuffix ? 0 : 1];
}
return str.replace(/%d/i, number);
};
},
months = [
'جانفي',
'فيفري',
'مارس',
'أفريل',
'ماي',
'جوان',
'جويلية',
'أوت',
'سبتمبر',
'أكتوبر',
'نوفمبر',
'ديسمبر',
];
export default moment.defineLocale('ar-dz', {
months: months,
monthsShort: months,
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'D/\u200FM/\u200FYYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
},
meridiemParse: /ص|م/,
isPM: function (input) {
return 'م' === input;
},
meridiem: function (hour, minute, isLower) {
if (hour < 12) {
return 'ص';
} else {
return 'م';
}
},
calendar: {
sameDay: '[اليوم عند الساعة] LT',
nextDay: '[غدًا عند الساعة] LT',
nextWeek: 'dddd [عند الساعة] LT',
lastDay: '[أمس عند الساعة] LT',
lastWeek: 'dddd [عند الساعة] LT',
sameElse: 'L',
},
relativeTime: {
future: 'بعد %s',
past: 'منذ %s',
s: pluralize('s'),
ss: pluralize('s'),
m: pluralize('m'),
mm: pluralize('m'),
h: pluralize('h'),
hh: pluralize('h'),
d: pluralize('d'),
dd: pluralize('d'),
M: pluralize('M'),
MM: pluralize('M'),
y: pluralize('y'),
yy: pluralize('y'),
},
postformat: function (string) {
return string.replace(/,/g, '،');
},
week: {
dow: 0, // Sunday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

View File

@@ -0,0 +1,55 @@
//! moment.js locale configuration
//! locale : Arabic (Kuwait) [ar-kw]
//! author : Nusret Parlak: https://github.com/nusretparlak
import moment from '../moment';
export default moment.defineLocale('ar-kw', {
months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
'_'
),
monthsShort:
'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
'_'
),
weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
},
calendar: {
sameDay: '[اليوم على الساعة] LT',
nextDay: '[غدا على الساعة] LT',
nextWeek: 'dddd [على الساعة] LT',
lastDay: '[أمس على الساعة] LT',
lastWeek: 'dddd [على الساعة] LT',
sameElse: 'L',
},
relativeTime: {
future: 'في %s',
past: 'منذ %s',
s: 'ثوان',
ss: '%d ثانية',
m: 'دقيقة',
mm: '%d دقائق',
h: 'ساعة',
hh: '%d ساعات',
d: 'يوم',
dd: '%d أيام',
M: 'شهر',
MM: '%d أشهر',
y: 'سنة',
yy: '%d سنوات',
},
week: {
dow: 0, // Sunday is the first day of the week.
doy: 12, // The week that contains Jan 12th is the first week of the year.
},
});

View File

@@ -0,0 +1,171 @@
//! moment.js locale configuration
//! locale : Arabic (Libya) [ar-ly]
//! author : Ali Hmer: https://github.com/kikoanis
import moment from '../moment';
var symbolMap = {
1: '1',
2: '2',
3: '3',
4: '4',
5: '5',
6: '6',
7: '7',
8: '8',
9: '9',
0: '0',
},
pluralForm = function (n) {
return n === 0
? 0
: n === 1
? 1
: n === 2
? 2
: n % 100 >= 3 && n % 100 <= 10
? 3
: n % 100 >= 11
? 4
: 5;
},
plurals = {
s: [
'أقل من ثانية',
'ثانية واحدة',
['ثانيتان', 'ثانيتين'],
'%d ثوان',
'%d ثانية',
'%d ثانية',
],
m: [
'أقل من دقيقة',
'دقيقة واحدة',
['دقيقتان', 'دقيقتين'],
'%d دقائق',
'%d دقيقة',
'%d دقيقة',
],
h: [
'أقل من ساعة',
'ساعة واحدة',
['ساعتان', 'ساعتين'],
'%d ساعات',
'%d ساعة',
'%d ساعة',
],
d: [
'أقل من يوم',
'يوم واحد',
['يومان', 'يومين'],
'%d أيام',
'%d يومًا',
'%d يوم',
],
M: [
'أقل من شهر',
'شهر واحد',
['شهران', 'شهرين'],
'%d أشهر',
'%d شهرا',
'%d شهر',
],
y: [
'أقل من عام',
'عام واحد',
['عامان', 'عامين'],
'%d أعوام',
'%d عامًا',
'%d عام',
],
},
pluralize = function (u) {
return function (number, withoutSuffix, string, isFuture) {
var f = pluralForm(number),
str = plurals[u][pluralForm(number)];
if (f === 2) {
str = str[withoutSuffix ? 0 : 1];
}
return str.replace(/%d/i, number);
};
},
months = [
'يناير',
'فبراير',
'مارس',
'أبريل',
'مايو',
'يونيو',
'يوليو',
'أغسطس',
'سبتمبر',
'أكتوبر',
'نوفمبر',
'ديسمبر',
];
export default moment.defineLocale('ar-ly', {
months: months,
monthsShort: months,
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'D/\u200FM/\u200FYYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
},
meridiemParse: /ص|م/,
isPM: function (input) {
return 'م' === input;
},
meridiem: function (hour, minute, isLower) {
if (hour < 12) {
return 'ص';
} else {
return 'م';
}
},
calendar: {
sameDay: '[اليوم عند الساعة] LT',
nextDay: '[غدًا عند الساعة] LT',
nextWeek: 'dddd [عند الساعة] LT',
lastDay: '[أمس عند الساعة] LT',
lastWeek: 'dddd [عند الساعة] LT',
sameElse: 'L',
},
relativeTime: {
future: 'بعد %s',
past: 'منذ %s',
s: pluralize('s'),
ss: pluralize('s'),
m: pluralize('m'),
mm: pluralize('m'),
h: pluralize('h'),
hh: pluralize('h'),
d: pluralize('d'),
dd: pluralize('d'),
M: pluralize('M'),
MM: pluralize('M'),
y: pluralize('y'),
yy: pluralize('y'),
},
preparse: function (string) {
return string.replace(/،/g, ',');
},
postformat: function (string) {
return string
.replace(/\d/g, function (match) {
return symbolMap[match];
})
.replace(/,/g, '،');
},
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 12th is the first week of the year.
},
});

View File

@@ -0,0 +1,56 @@
//! moment.js locale configuration
//! locale : Arabic (Morocco) [ar-ma]
//! author : ElFadili Yassine : https://github.com/ElFadiliY
//! author : Abdel Said : https://github.com/abdelsaid
import moment from '../moment';
export default moment.defineLocale('ar-ma', {
months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
'_'
),
monthsShort:
'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
'_'
),
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
},
calendar: {
sameDay: '[اليوم على الساعة] LT',
nextDay: '[غدا على الساعة] LT',
nextWeek: 'dddd [على الساعة] LT',
lastDay: '[أمس على الساعة] LT',
lastWeek: 'dddd [على الساعة] LT',
sameElse: 'L',
},
relativeTime: {
future: 'في %s',
past: 'منذ %s',
s: 'ثوان',
ss: '%d ثانية',
m: 'دقيقة',
mm: '%d دقائق',
h: 'ساعة',
hh: '%d ساعات',
d: 'يوم',
dd: '%d أيام',
M: 'شهر',
MM: '%d أشهر',
y: 'سنة',
yy: '%d سنوات',
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

View File

@@ -0,0 +1,105 @@
//! moment.js locale configuration
//! locale : Arabic (Saudi Arabia) [ar-sa]
//! author : Suhail Alkowaileet : https://github.com/xsoh
import moment from '../moment';
var symbolMap = {
1: '١',
2: '٢',
3: '٣',
4: '٤',
5: '٥',
6: '٦',
7: '٧',
8: '٨',
9: '٩',
0: '٠',
},
numberMap = {
'١': '1',
'٢': '2',
'٣': '3',
'٤': '4',
'٥': '5',
'٦': '6',
'٧': '7',
'٨': '8',
'٩': '9',
'٠': '0',
};
export default moment.defineLocale('ar-sa', {
months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
'_'
),
monthsShort:
'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
'_'
),
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
},
meridiemParse: /ص|م/,
isPM: function (input) {
return 'م' === input;
},
meridiem: function (hour, minute, isLower) {
if (hour < 12) {
return 'ص';
} else {
return 'م';
}
},
calendar: {
sameDay: '[اليوم على الساعة] LT',
nextDay: '[غدا على الساعة] LT',
nextWeek: 'dddd [على الساعة] LT',
lastDay: '[أمس على الساعة] LT',
lastWeek: 'dddd [على الساعة] LT',
sameElse: 'L',
},
relativeTime: {
future: 'في %s',
past: 'منذ %s',
s: 'ثوان',
ss: '%d ثانية',
m: 'دقيقة',
mm: '%d دقائق',
h: 'ساعة',
hh: '%d ساعات',
d: 'يوم',
dd: '%d أيام',
M: 'شهر',
MM: '%d أشهر',
y: 'سنة',
yy: '%d سنوات',
},
preparse: function (string) {
return string
.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
return numberMap[match];
})
.replace(/،/g, ',');
},
postformat: function (string) {
return string
.replace(/\d/g, function (match) {
return symbolMap[match];
})
.replace(/,/g, '،');
},
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 6th is the first week of the year.
},
});

View File

@@ -0,0 +1,55 @@
//! moment.js locale configuration
//! locale : Arabic (Tunisia) [ar-tn]
//! author : Nader Toukabri : https://github.com/naderio
import moment from '../moment';
export default moment.defineLocale('ar-tn', {
months: انفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
'_'
),
monthsShort:
انفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
'_'
),
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
},
calendar: {
sameDay: '[اليوم على الساعة] LT',
nextDay: '[غدا على الساعة] LT',
nextWeek: 'dddd [على الساعة] LT',
lastDay: '[أمس على الساعة] LT',
lastWeek: 'dddd [على الساعة] LT',
sameElse: 'L',
},
relativeTime: {
future: 'في %s',
past: 'منذ %s',
s: 'ثوان',
ss: '%d ثانية',
m: 'دقيقة',
mm: '%d دقائق',
h: 'ساعة',
hh: '%d ساعات',
d: 'يوم',
dd: '%d أيام',
M: 'شهر',
MM: '%d أشهر',
y: 'سنة',
yy: '%d سنوات',
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

View File

@@ -0,0 +1,189 @@
//! moment.js locale configuration
//! locale : Arabic [ar]
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi
import moment from '../moment';
var symbolMap = {
1: '١',
2: '٢',
3: '٣',
4: '٤',
5: '٥',
6: '٦',
7: '٧',
8: '٨',
9: '٩',
0: '٠',
},
numberMap = {
'١': '1',
'٢': '2',
'٣': '3',
'٤': '4',
'٥': '5',
'٦': '6',
'٧': '7',
'٨': '8',
'٩': '9',
'٠': '0',
},
pluralForm = function (n) {
return n === 0
? 0
: n === 1
? 1
: n === 2
? 2
: n % 100 >= 3 && n % 100 <= 10
? 3
: n % 100 >= 11
? 4
: 5;
},
plurals = {
s: [
'أقل من ثانية',
'ثانية واحدة',
['ثانيتان', 'ثانيتين'],
'%d ثوان',
'%d ثانية',
'%d ثانية',
],
m: [
'أقل من دقيقة',
'دقيقة واحدة',
['دقيقتان', 'دقيقتين'],
'%d دقائق',
'%d دقيقة',
'%d دقيقة',
],
h: [
'أقل من ساعة',
'ساعة واحدة',
['ساعتان', 'ساعتين'],
'%d ساعات',
'%d ساعة',
'%d ساعة',
],
d: [
'أقل من يوم',
'يوم واحد',
['يومان', 'يومين'],
'%d أيام',
'%d يومًا',
'%d يوم',
],
M: [
'أقل من شهر',
'شهر واحد',
['شهران', 'شهرين'],
'%d أشهر',
'%d شهرا',
'%d شهر',
],
y: [
'أقل من عام',
'عام واحد',
['عامان', 'عامين'],
'%d أعوام',
'%d عامًا',
'%d عام',
],
},
pluralize = function (u) {
return function (number, withoutSuffix, string, isFuture) {
var f = pluralForm(number),
str = plurals[u][pluralForm(number)];
if (f === 2) {
str = str[withoutSuffix ? 0 : 1];
}
return str.replace(/%d/i, number);
};
},
months = [
'يناير',
'فبراير',
'مارس',
'أبريل',
'مايو',
'يونيو',
'يوليو',
'أغسطس',
'سبتمبر',
'أكتوبر',
'نوفمبر',
'ديسمبر',
];
export default moment.defineLocale('ar', {
months: months,
monthsShort: months,
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'D/\u200FM/\u200FYYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
},
meridiemParse: /ص|م/,
isPM: function (input) {
return 'م' === input;
},
meridiem: function (hour, minute, isLower) {
if (hour < 12) {
return 'ص';
} else {
return 'م';
}
},
calendar: {
sameDay: '[اليوم عند الساعة] LT',
nextDay: '[غدًا عند الساعة] LT',
nextWeek: 'dddd [عند الساعة] LT',
lastDay: '[أمس عند الساعة] LT',
lastWeek: 'dddd [عند الساعة] LT',
sameElse: 'L',
},
relativeTime: {
future: 'بعد %s',
past: 'منذ %s',
s: pluralize('s'),
ss: pluralize('s'),
m: pluralize('m'),
mm: pluralize('m'),
h: pluralize('h'),
hh: pluralize('h'),
d: pluralize('d'),
dd: pluralize('d'),
M: pluralize('M'),
MM: pluralize('M'),
y: pluralize('y'),
yy: pluralize('y'),
},
preparse: function (string) {
return string
.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
return numberMap[match];
})
.replace(/،/g, ',');
},
postformat: function (string) {
return string
.replace(/\d/g, function (match) {
return symbolMap[match];
})
.replace(/,/g, '،');
},
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 12th is the first week of the year.
},
});

View File

@@ -0,0 +1,102 @@
//! moment.js locale configuration
//! locale : Azerbaijani [az]
//! author : topchiyev : https://github.com/topchiyev
import moment from '../moment';
var suffixes = {
1: '-inci',
5: '-inci',
8: '-inci',
70: '-inci',
80: '-inci',
2: '-nci',
7: '-nci',
20: '-nci',
50: '-nci',
3: '-üncü',
4: '-üncü',
100: '-üncü',
6: '-ncı',
9: '-uncu',
10: '-uncu',
30: '-uncu',
60: '-ıncı',
90: '-ıncı',
};
export default moment.defineLocale('az', {
months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
'_'
),
monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
weekdays:
'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(
'_'
),
weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd, D MMMM YYYY HH:mm',
},
calendar: {
sameDay: '[bugün saat] LT',
nextDay: '[sabah saat] LT',
nextWeek: '[gələn həftə] dddd [saat] LT',
lastDay: '[dünən] LT',
lastWeek: '[keçən həftə] dddd [saat] LT',
sameElse: 'L',
},
relativeTime: {
future: '%s sonra',
past: '%s əvvəl',
s: 'bir neçə saniyə',
ss: '%d saniyə',
m: 'bir dəqiqə',
mm: '%d dəqiqə',
h: 'bir saat',
hh: '%d saat',
d: 'bir gün',
dd: '%d gün',
M: 'bir ay',
MM: '%d ay',
y: 'bir il',
yy: '%d il',
},
meridiemParse: /gecə|səhər|gündüz|axşam/,
isPM: function (input) {
return /^(gündüz|axşam)$/.test(input);
},
meridiem: function (hour, minute, isLower) {
if (hour < 4) {
return 'gecə';
} else if (hour < 12) {
return 'səhər';
} else if (hour < 17) {
return 'gündüz';
} else {
return 'axşam';
}
},
dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
ordinal: function (number) {
if (number === 0) {
// special case for zero
return number + '-ıncı';
}
var a = number % 10,
b = (number % 100) - a,
c = number >= 100 ? 100 : null;
return number + (suffixes[a] || suffixes[b] || suffixes[c]);
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 7th is the first week of the year.
},
});

View File

@@ -0,0 +1,142 @@
//! moment.js locale configuration
//! locale : Belarusian [be]
//! author : Dmitry Demidov : https://github.com/demidov91
//! author: Praleska: http://praleska.pro/
//! Author : Menelion Elensúle : https://github.com/Oire
import moment from '../moment';
function plural(word, num) {
var forms = word.split('_');
return num % 10 === 1 && num % 100 !== 11
? forms[0]
: num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
? forms[1]
: forms[2];
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
var format = {
ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
dd: 'дзень_дні_дзён',
MM: есяц_месяцы_месяцаў',
yy: 'год_гады_гадоў',
};
if (key === 'm') {
return withoutSuffix ? 'хвіліна' : 'хвіліну';
} else if (key === 'h') {
return withoutSuffix ? 'гадзіна' : 'гадзіну';
} else {
return number + ' ' + plural(format[key], +number);
}
}
export default moment.defineLocale('be', {
months: {
format: 'студзеня_лютага_сакавікарасавікараўня_чэрвеня_ліпеня_жніўня_верасня_кастрычнікаістапада_снежня'.split(
'_'
),
standalone:
'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(
'_'
),
},
monthsShort:
'студ_лют_сак_красрав_чэрв_ліп_жнів_вераст_ліст_снеж'.split('_'),
weekdays: {
format: 'нядзелю_панядзелак_аўторак_серадуацвер_пятніцу_суботу'.split(
'_'
),
standalone:
'нядзеля_панядзелак_аўторак_серадаацвер_пятніца_субота'.split(
'_'
),
isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/,
},
weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D MMMM YYYY г.',
LLL: 'D MMMM YYYY г., HH:mm',
LLLL: 'dddd, D MMMM YYYY г., HH:mm',
},
calendar: {
sameDay: '[Сёння ў] LT',
nextDay: '[Заўтра ў] LT',
lastDay: '[Учора ў] LT',
nextWeek: function () {
return '[У] dddd [ў] LT';
},
lastWeek: function () {
switch (this.day()) {
case 0:
case 3:
case 5:
case 6:
return '[У мінулую] dddd [ў] LT';
case 1:
case 2:
case 4:
return '[У мінулы] dddd [ў] LT';
}
},
sameElse: 'L',
},
relativeTime: {
future: 'праз %s',
past: '%s таму',
s: 'некалькі секунд',
m: relativeTimeWithPlural,
mm: relativeTimeWithPlural,
h: relativeTimeWithPlural,
hh: relativeTimeWithPlural,
d: 'дзень',
dd: relativeTimeWithPlural,
M: 'месяц',
MM: relativeTimeWithPlural,
y: 'год',
yy: relativeTimeWithPlural,
},
meridiemParse: /ночы|раніцы|дня|вечара/,
isPM: function (input) {
return /^(дня|вечара)$/.test(input);
},
meridiem: function (hour, minute, isLower) {
if (hour < 4) {
return 'ночы';
} else if (hour < 12) {
return 'раніцы';
} else if (hour < 17) {
return 'дня';
} else {
return 'вечара';
}
},
dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
ordinal: function (number, period) {
switch (period) {
case 'M':
case 'd':
case 'DDD':
case 'w':
case 'W':
return (number % 10 === 2 || number % 10 === 3) &&
number % 100 !== 12 &&
number % 100 !== 13
? number + '-і'
: number + '-ы';
case 'D':
return number + '-га';
default:
return number;
}
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 7th is the first week of the year.
},
});

View File

@@ -0,0 +1,87 @@
//! moment.js locale configuration
//! locale : Bulgarian [bg]
//! author : Krasen Borisov : https://github.com/kraz
import moment from '../moment';
export default moment.defineLocale('bg', {
months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(
'_'
),
monthsShort: 'януев_мар_апрай_юни_юли_авг_сеп_окт_ноеек'.split('_'),
weekdays: еделя_понеделник_вторник_срядаетвъртък_петък_събота'.split(
'_'
),
weekdaysShort: ед_пон_вто_сря_чет_пет_съб'.split('_'),
weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
longDateFormat: {
LT: 'H:mm',
LTS: 'H:mm:ss',
L: 'D.MM.YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY H:mm',
LLLL: 'dddd, D MMMM YYYY H:mm',
},
calendar: {
sameDay: '[Днес в] LT',
nextDay: '[Утре в] LT',
nextWeek: 'dddd [в] LT',
lastDay: '[Вчера в] LT',
lastWeek: function () {
switch (this.day()) {
case 0:
case 3:
case 6:
return '[Миналата] dddd [в] LT';
case 1:
case 2:
case 4:
case 5:
return '[Миналия] dddd [в] LT';
}
},
sameElse: 'L',
},
relativeTime: {
future: 'след %s',
past: 'преди %s',
s: 'няколко секунди',
ss: '%d секунди',
m: 'минута',
mm: '%d минути',
h: 'час',
hh: '%d часа',
d: 'ден',
dd: '%d дена',
w: 'седмица',
ww: '%d седмици',
M: 'месец',
MM: '%d месеца',
y: 'година',
yy: '%d години',
},
dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
ordinal: function (number) {
var lastDigit = number % 10,
last2Digits = number % 100;
if (number === 0) {
return number + '-ев';
} else if (last2Digits === 0) {
return number + '-ен';
} else if (last2Digits > 10 && last2Digits < 20) {
return number + '-ти';
} else if (lastDigit === 1) {
return number + '-ви';
} else if (lastDigit === 2) {
return number + '-ри';
} else if (lastDigit === 7 || lastDigit === 8) {
return number + '-ми';
} else {
return number + '-ти';
}
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 7th is the first week of the year.
},
});

View File

@@ -0,0 +1,52 @@
//! moment.js locale configuration
//! locale : Bambara [bm]
//! author : Estelle Comment : https://github.com/estellecomment
// Language contact person : Abdoufata Kane : https://github.com/abdoufata
import moment from '../moment';
export default moment.defineLocale('bm', {
months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(
'_'
),
monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'MMMM [tile] D [san] YYYY',
LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
},
calendar: {
sameDay: '[Bi lɛrɛ] LT',
nextDay: '[Sini lɛrɛ] LT',
nextWeek: 'dddd [don lɛrɛ] LT',
lastDay: '[Kunu lɛrɛ] LT',
lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
sameElse: 'L',
},
relativeTime: {
future: '%s kɔnɔ',
past: 'a bɛ %s bɔ',
s: 'sanga dama dama',
ss: 'sekondi %d',
m: 'miniti kelen',
mm: 'miniti %d',
h: 'lɛrɛ kelen',
hh: 'lɛrɛ %d',
d: 'tile kelen',
dd: 'tile %d',
M: 'kalo kelen',
MM: 'kalo %d',
y: 'san kelen',
yy: 'san %d',
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

View File

@@ -0,0 +1,129 @@
//! moment.js locale configuration
//! locale : Bengali (Bangladesh) [bn-bd]
//! author : Asraf Hossain Patoary : https://github.com/ashwoolford
import moment from '../moment';
var symbolMap = {
1: '১',
2: '২',
3: '৩',
4: '',
5: '৫',
6: '৬',
7: '',
8: '৮',
9: '৯',
0: '',
},
numberMap = {
'১': '1',
'২': '2',
'৩': '3',
'': '4',
'৫': '5',
'৬': '6',
'': '7',
'৮': '8',
'৯': '9',
'': '0',
};
export default moment.defineLocale('bn-bd', {
months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
'_'
),
monthsShort:
'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
'_'
),
weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
'_'
),
weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
longDateFormat: {
LT: 'A h:mm সময়',
LTS: 'A h:mm:ss সময়',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY, A h:mm সময়',
LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
},
calendar: {
sameDay: '[আজ] LT',
nextDay: '[আগামীকাল] LT',
nextWeek: 'dddd, LT',
lastDay: '[গতকাল] LT',
lastWeek: '[গত] dddd, LT',
sameElse: 'L',
},
relativeTime: {
future: '%s পরে',
past: '%s আগে',
s: 'কয়েক সেকেন্ড',
ss: '%d সেকেন্ড',
m: 'এক মিনিট',
mm: '%d মিনিট',
h: 'এক ঘন্টা',
hh: '%d ঘন্টা',
d: 'এক দিন',
dd: '%d দিন',
M: 'এক মাস',
MM: '%d মাস',
y: 'এক বছর',
yy: '%d বছর',
},
preparse: function (string) {
return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
return numberMap[match];
});
},
postformat: function (string) {
return string.replace(/\d/g, function (match) {
return symbolMap[match];
});
},
meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,
meridiemHour: function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
if (meridiem === 'রাত') {
return hour < 4 ? hour : hour + 12;
} else if (meridiem === 'ভোর') {
return hour;
} else if (meridiem === 'সকাল') {
return hour;
} else if (meridiem === 'দুপুর') {
return hour >= 3 ? hour : hour + 12;
} else if (meridiem === 'বিকাল') {
return hour + 12;
} else if (meridiem === 'সন্ধ্যা') {
return hour + 12;
}
},
meridiem: function (hour, minute, isLower) {
if (hour < 4) {
return 'রাত';
} else if (hour < 6) {
return 'ভোর';
} else if (hour < 12) {
return 'সকাল';
} else if (hour < 15) {
return 'দুপুর';
} else if (hour < 18) {
return 'বিকাল';
} else if (hour < 20) {
return 'সন্ধ্যা';
} else {
return 'রাত';
}
},
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 6th is the first week of the year.
},
});

View File

@@ -0,0 +1,119 @@
//! moment.js locale configuration
//! locale : Bengali [bn]
//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
import moment from '../moment';
var symbolMap = {
1: '১',
2: '২',
3: '৩',
4: '',
5: '৫',
6: '৬',
7: '',
8: '৮',
9: '৯',
0: '',
},
numberMap = {
'১': '1',
'২': '2',
'৩': '3',
'': '4',
'৫': '5',
'৬': '6',
'': '7',
'৮': '8',
'৯': '9',
'': '0',
};
export default moment.defineLocale('bn', {
months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
'_'
),
monthsShort:
'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
'_'
),
weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
'_'
),
weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
longDateFormat: {
LT: 'A h:mm সময়',
LTS: 'A h:mm:ss সময়',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY, A h:mm সময়',
LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
},
calendar: {
sameDay: '[আজ] LT',
nextDay: '[আগামীকাল] LT',
nextWeek: 'dddd, LT',
lastDay: '[গতকাল] LT',
lastWeek: '[গত] dddd, LT',
sameElse: 'L',
},
relativeTime: {
future: '%s পরে',
past: '%s আগে',
s: 'কয়েক সেকেন্ড',
ss: '%d সেকেন্ড',
m: 'এক মিনিট',
mm: '%d মিনিট',
h: 'এক ঘন্টা',
hh: '%d ঘন্টা',
d: 'এক দিন',
dd: '%d দিন',
M: 'এক মাস',
MM: '%d মাস',
y: 'এক বছর',
yy: '%d বছর',
},
preparse: function (string) {
return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
return numberMap[match];
});
},
postformat: function (string) {
return string.replace(/\d/g, function (match) {
return symbolMap[match];
});
},
meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
meridiemHour: function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
if (
(meridiem === 'রাত' && hour >= 4) ||
(meridiem === 'দুপুর' && hour < 5) ||
meridiem === 'বিকাল'
) {
return hour + 12;
} else {
return hour;
}
},
meridiem: function (hour, minute, isLower) {
if (hour < 4) {
return 'রাত';
} else if (hour < 10) {
return 'সকাল';
} else if (hour < 17) {
return 'দুপুর';
} else if (hour < 20) {
return 'বিকাল';
} else {
return 'রাত';
}
},
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 6th is the first week of the year.
},
});

View File

@@ -0,0 +1,124 @@
//! moment.js locale configuration
//! locale : Tibetan [bo]
//! author : Thupten N. Chakrishar : https://github.com/vajradog
import moment from '../moment';
var symbolMap = {
1: '༡',
2: '༢',
3: '༣',
4: '༤',
5: '༥',
6: '༦',
7: '༧',
8: '༨',
9: '༩',
0: '༠',
},
numberMap = {
'༡': '1',
'༢': '2',
'༣': '3',
'༤': '4',
'༥': '5',
'༦': '6',
'༧': '7',
'༨': '8',
'༩': '9',
'༠': '0',
};
export default moment.defineLocale('bo', {
months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(
'_'
),
monthsShort:
'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(
'_'
),
monthsShortRegex: /^(ཟླ་\d{1,2})/,
monthsParseExact: true,
weekdays:
'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(
'_'
),
weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(
'_'
),
weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
longDateFormat: {
LT: 'A h:mm',
LTS: 'A h:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY, A h:mm',
LLLL: 'dddd, D MMMM YYYY, A h:mm',
},
calendar: {
sameDay: '[དི་རིང] LT',
nextDay: '[སང་ཉིན] LT',
nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
lastDay: '[ཁ་སང] LT',
lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
sameElse: 'L',
},
relativeTime: {
future: '%s ལ་',
past: '%s སྔན་ལ',
s: 'ལམ་སང',
ss: '%d སྐར་ཆ།',
m: 'སྐར་མ་གཅིག',
mm: '%d སྐར་མ',
h: 'ཆུ་ཚོད་གཅིག',
hh: '%d ཆུ་ཚོད',
d: 'ཉིན་གཅིག',
dd: '%d ཉིན་',
M: 'ཟླ་བ་གཅིག',
MM: '%d ཟླ་བ',
y: 'ལོ་གཅིག',
yy: '%d ལོ',
},
preparse: function (string) {
return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
return numberMap[match];
});
},
postformat: function (string) {
return string.replace(/\d/g, function (match) {
return symbolMap[match];
});
},
meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
meridiemHour: function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
if (
(meridiem === 'མཚན་མོ' && hour >= 4) ||
(meridiem === 'ཉིན་གུང' && hour < 5) ||
meridiem === 'དགོང་དག'
) {
return hour + 12;
} else {
return hour;
}
},
meridiem: function (hour, minute, isLower) {
if (hour < 4) {
return 'མཚན་མོ';
} else if (hour < 10) {
return 'ཞོགས་ཀས';
} else if (hour < 17) {
return 'ཉིན་གུང';
} else if (hour < 20) {
return 'དགོང་དག';
} else {
return 'མཚན་མོ';
}
},
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 6th is the first week of the year.
},
});

View File

@@ -0,0 +1,168 @@
//! moment.js locale configuration
//! locale : Breton [br]
//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
import moment from '../moment';
function relativeTimeWithMutation(number, withoutSuffix, key) {
var format = {
mm: 'munutenn',
MM: 'miz',
dd: 'devezh',
};
return number + ' ' + mutation(format[key], number);
}
function specialMutationForYears(number) {
switch (lastNumber(number)) {
case 1:
case 3:
case 4:
case 5:
case 9:
return number + ' bloaz';
default:
return number + ' vloaz';
}
}
function lastNumber(number) {
if (number > 9) {
return lastNumber(number % 10);
}
return number;
}
function mutation(text, number) {
if (number === 2) {
return softMutation(text);
}
return text;
}
function softMutation(text) {
var mutationTable = {
m: 'v',
b: 'v',
d: 'z',
};
if (mutationTable[text.charAt(0)] === undefined) {
return text;
}
return mutationTable[text.charAt(0)] + text.substring(1);
}
var monthsParse = [
/^gen/i,
/^c[ʼ\']hwe/i,
/^meu/i,
/^ebr/i,
/^mae/i,
/^(mez|eve)/i,
/^gou/i,
/^eos/i,
/^gwe/i,
/^her/i,
/^du/i,
/^ker/i,
],
monthsRegex =
/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
monthsStrictRegex =
/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
monthsShortStrictRegex =
/^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
fullWeekdaysParse = [
/^sul/i,
/^lun/i,
/^meurzh/i,
/^merc[ʼ\']her/i,
/^yaou/i,
/^gwener/i,
/^sadorn/i,
],
shortWeekdaysParse = [
/^Sul/i,
/^Lun/i,
/^Meu/i,
/^Mer/i,
/^Yao/i,
/^Gwe/i,
/^Sad/i,
],
minWeekdaysParse = [
/^Su/i,
/^Lu/i,
/^Me([^r]|$)/i,
/^Mer/i,
/^Ya/i,
/^Gw/i,
/^Sa/i,
];
export default moment.defineLocale('br', {
months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
'_'
),
monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
weekdaysParse: minWeekdaysParse,
fullWeekdaysParse: fullWeekdaysParse,
shortWeekdaysParse: shortWeekdaysParse,
minWeekdaysParse: minWeekdaysParse,
monthsRegex: monthsRegex,
monthsShortRegex: monthsRegex,
monthsStrictRegex: monthsStrictRegex,
monthsShortStrictRegex: monthsShortStrictRegex,
monthsParse: monthsParse,
longMonthsParse: monthsParse,
shortMonthsParse: monthsParse,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D [a viz] MMMM YYYY',
LLL: 'D [a viz] MMMM YYYY HH:mm',
LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
},
calendar: {
sameDay: '[Hiziv da] LT',
nextDay: '[Warcʼhoazh da] LT',
nextWeek: 'dddd [da] LT',
lastDay: '[Decʼh da] LT',
lastWeek: 'dddd [paset da] LT',
sameElse: 'L',
},
relativeTime: {
future: 'a-benn %s',
past: '%s ʼzo',
s: 'un nebeud segondennoù',
ss: '%d eilenn',
m: 'ur vunutenn',
mm: relativeTimeWithMutation,
h: 'un eur',
hh: '%d eur',
d: 'un devezh',
dd: relativeTimeWithMutation,
M: 'ur miz',
MM: relativeTimeWithMutation,
y: 'ur bloaz',
yy: specialMutationForYears,
},
dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
ordinal: function (number) {
var output = number === 1 ? 'añ' : 'vet';
return number + output;
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
isPM: function (token) {
return token === 'g.m.';
},
meridiem: function (hour, minute, isLower) {
return hour < 12 ? 'a.m.' : 'g.m.';
},
});

View File

@@ -0,0 +1,150 @@
//! moment.js locale configuration
//! locale : Bosnian [bs]
//! author : Nedim Cholich : https://github.com/frontyard
//! based on (hr) translation by Bojan Marković
import moment from '../moment';
function translate(number, withoutSuffix, key) {
var result = number + ' ';
switch (key) {
case 'ss':
if (number === 1) {
result += 'sekunda';
} else if (number === 2 || number === 3 || number === 4) {
result += 'sekunde';
} else {
result += 'sekundi';
}
return result;
case 'm':
return withoutSuffix ? 'jedna minuta' : 'jedne minute';
case 'mm':
if (number === 1) {
result += 'minuta';
} else if (number === 2 || number === 3 || number === 4) {
result += 'minute';
} else {
result += 'minuta';
}
return result;
case 'h':
return withoutSuffix ? 'jedan sat' : 'jednog sata';
case 'hh':
if (number === 1) {
result += 'sat';
} else if (number === 2 || number === 3 || number === 4) {
result += 'sata';
} else {
result += 'sati';
}
return result;
case 'dd':
if (number === 1) {
result += 'dan';
} else {
result += 'dana';
}
return result;
case 'MM':
if (number === 1) {
result += 'mjesec';
} else if (number === 2 || number === 3 || number === 4) {
result += 'mjeseca';
} else {
result += 'mjeseci';
}
return result;
case 'yy':
if (number === 1) {
result += 'godina';
} else if (number === 2 || number === 3 || number === 4) {
result += 'godine';
} else {
result += 'godina';
}
return result;
}
}
export default moment.defineLocale('bs', {
months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
'_'
),
monthsShort:
'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
'_'
),
monthsParseExact: true,
weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
'_'
),
weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'H:mm',
LTS: 'H:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
LLL: 'D. MMMM YYYY H:mm',
LLLL: 'dddd, D. MMMM YYYY H:mm',
},
calendar: {
sameDay: '[danas u] LT',
nextDay: '[sutra u] LT',
nextWeek: function () {
switch (this.day()) {
case 0:
return '[u] [nedjelju] [u] LT';
case 3:
return '[u] [srijedu] [u] LT';
case 6:
return '[u] [subotu] [u] LT';
case 1:
case 2:
case 4:
case 5:
return '[u] dddd [u] LT';
}
},
lastDay: '[jučer u] LT',
lastWeek: function () {
switch (this.day()) {
case 0:
case 3:
return '[prošlu] dddd [u] LT';
case 6:
return '[prošle] [subote] [u] LT';
case 1:
case 2:
case 4:
case 5:
return '[prošli] dddd [u] LT';
}
},
sameElse: 'L',
},
relativeTime: {
future: 'za %s',
past: 'prije %s',
s: 'par sekundi',
ss: translate,
m: translate,
mm: translate,
h: translate,
hh: translate,
d: 'dan',
dd: translate,
M: 'mjesec',
MM: translate,
y: 'godinu',
yy: translate,
},
dayOfMonthOrdinalParse: /\d{1,2}\./,
ordinal: '%d.',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 7th is the first week of the year.
},
});

View File

@@ -0,0 +1,100 @@
//! moment.js locale configuration
//! locale : Catalan [ca]
//! author : Juan G. Hurtado : https://github.com/juanghurtado
import moment from '../moment';
export default moment.defineLocale('ca', {
months: {
standalone:
'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
'_'
),
format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
'_'
),
isFormat: /D[oD]?(\s)+MMMM/,
},
monthsShort:
'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
'_'
),
monthsParseExact: true,
weekdays:
'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
'_'
),
weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'H:mm',
LTS: 'H:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM [de] YYYY',
ll: 'D MMM YYYY',
LLL: 'D MMMM [de] YYYY [a les] H:mm',
lll: 'D MMM YYYY, H:mm',
LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
llll: 'ddd D MMM YYYY, H:mm',
},
calendar: {
sameDay: function () {
return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
},
nextDay: function () {
return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
},
nextWeek: function () {
return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
},
lastDay: function () {
return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
},
lastWeek: function () {
return (
'[el] dddd [passat a ' +
(this.hours() !== 1 ? 'les' : 'la') +
'] LT'
);
},
sameElse: 'L',
},
relativeTime: {
future: "d'aquí %s",
past: 'fa %s',
s: 'uns segons',
ss: '%d segons',
m: 'un minut',
mm: '%d minuts',
h: 'una hora',
hh: '%d hores',
d: 'un dia',
dd: '%d dies',
M: 'un mes',
MM: '%d mesos',
y: 'un any',
yy: '%d anys',
},
dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
ordinal: function (number, period) {
var output =
number === 1
? 'r'
: number === 2
? 'n'
: number === 3
? 'r'
: number === 4
? 't'
: 'è';
if (period === 'w' || period === 'W') {
output = 'a';
}
return number + output;
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

View File

@@ -0,0 +1,180 @@
//! moment.js locale configuration
//! locale : Czech [cs]
//! author : petrbela : https://github.com/petrbela
import moment from '../moment';
var months = {
format: 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(
'_'
),
standalone:
'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(
'_'
),
},
monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
monthsParse = [
/^led/i,
/^úno/i,
/^bře/i,
/^dub/i,
/^kvě/i,
/^(čvn|červen$|června)/i,
/^(čvc|červenec|července)/i,
/^srp/i,
/^zář/i,
/^říj/i,
/^lis/i,
/^pro/i,
],
// NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
// Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
monthsRegex =
/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;
function plural(n) {
return n > 1 && n < 5 && ~~(n / 10) !== 1;
}
function translate(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
case 's': // a few seconds / in a few seconds / a few seconds ago
return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';
case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
if (withoutSuffix || isFuture) {
return result + (plural(number) ? 'sekundy' : 'sekund');
} else {
return result + 'sekundami';
}
case 'm': // a minute / in a minute / a minute ago
return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
if (withoutSuffix || isFuture) {
return result + (plural(number) ? 'minuty' : 'minut');
} else {
return result + 'minutami';
}
case 'h': // an hour / in an hour / an hour ago
return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
case 'hh': // 9 hours / in 9 hours / 9 hours ago
if (withoutSuffix || isFuture) {
return result + (plural(number) ? 'hodiny' : 'hodin');
} else {
return result + 'hodinami';
}
case 'd': // a day / in a day / a day ago
return withoutSuffix || isFuture ? 'den' : 'dnem';
case 'dd': // 9 days / in 9 days / 9 days ago
if (withoutSuffix || isFuture) {
return result + (plural(number) ? 'dny' : 'dní');
} else {
return result + 'dny';
}
case 'M': // a month / in a month / a month ago
return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';
case 'MM': // 9 months / in 9 months / 9 months ago
if (withoutSuffix || isFuture) {
return result + (plural(number) ? 'měsíce' : 'měsíců');
} else {
return result + 'měsíci';
}
case 'y': // a year / in a year / a year ago
return withoutSuffix || isFuture ? 'rok' : 'rokem';
case 'yy': // 9 years / in 9 years / 9 years ago
if (withoutSuffix || isFuture) {
return result + (plural(number) ? 'roky' : 'let');
} else {
return result + 'lety';
}
}
}
export default moment.defineLocale('cs', {
months: months,
monthsShort: monthsShort,
monthsRegex: monthsRegex,
monthsShortRegex: monthsRegex,
// NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
// Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
monthsStrictRegex:
/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
monthsShortStrictRegex:
/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
monthsParse: monthsParse,
longMonthsParse: monthsParse,
shortMonthsParse: monthsParse,
weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
longDateFormat: {
LT: 'H:mm',
LTS: 'H:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
LLL: 'D. MMMM YYYY H:mm',
LLLL: 'dddd D. MMMM YYYY H:mm',
l: 'D. M. YYYY',
},
calendar: {
sameDay: '[dnes v] LT',
nextDay: '[zítra v] LT',
nextWeek: function () {
switch (this.day()) {
case 0:
return '[v neděli v] LT';
case 1:
case 2:
return '[v] dddd [v] LT';
case 3:
return '[ve středu v] LT';
case 4:
return '[ve čtvrtek v] LT';
case 5:
return '[v pátek v] LT';
case 6:
return '[v sobotu v] LT';
}
},
lastDay: '[včera v] LT',
lastWeek: function () {
switch (this.day()) {
case 0:
return '[minulou neděli v] LT';
case 1:
case 2:
return '[minulé] dddd [v] LT';
case 3:
return '[minulou středu v] LT';
case 4:
case 5:
return '[minulý] dddd [v] LT';
case 6:
return '[minulou sobotu v] LT';
}
},
sameElse: 'L',
},
relativeTime: {
future: 'za %s',
past: 'před %s',
s: translate,
ss: translate,
m: translate,
mm: translate,
h: translate,
hh: translate,
d: translate,
dd: translate,
M: translate,
MM: translate,
y: translate,
yy: translate,
},
dayOfMonthOrdinalParse: /\d{1,2}\./,
ordinal: '%d.',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

View File

@@ -0,0 +1,63 @@
//! moment.js locale configuration
//! locale : Chuvash [cv]
//! author : Anatoly Mironov : https://github.com/mirontoli
import moment from '../moment';
export default moment.defineLocale('cv', {
months: 'кӑрлач_нарӑс_пуш_акаай_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(
'_'
),
monthsShort: 'кӑрар_пуш_акаай_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
weekdays:
'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(
'_'
),
weekdaysShort: 'вырун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
weekdaysMin: р_тн_ыт_юн_кҫ_эр_шм'.split('_'),
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD-MM-YYYY',
LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
},
calendar: {
sameDay: '[Паян] LT [сехетре]',
nextDay: '[Ыран] LT [сехетре]',
lastDay: '[Ӗнер] LT [сехетре]',
nextWeek: '[Ҫитес] dddd LT [сехетре]',
lastWeek: '[Иртнӗ] dddd LT [сехетре]',
sameElse: 'L',
},
relativeTime: {
future: function (output) {
var affix = /сехет$/i.exec(output)
? 'рен'
: /ҫул$/i.exec(output)
? 'тан'
: 'ран';
return output + affix;
},
past: '%s каялла',
s: 'пӗр-ик ҫеккунт',
ss: '%d ҫеккунт',
m: 'пӗр минут',
mm: '%d минут',
h: 'пӗр сехет',
hh: '%d сехет',
d: 'пӗр кун',
dd: '%d кун',
M: 'пӗр уйӑх',
MM: '%d уйӑх',
y: 'пӗр ҫул',
yy: '%d ҫул',
},
dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
ordinal: '%d-мӗш',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 7th is the first week of the year.
},
});

View File

@@ -0,0 +1,98 @@
//! moment.js locale configuration
//! locale : Welsh [cy]
//! author : Robert Allen : https://github.com/robgallen
//! author : https://github.com/ryangreaves
import moment from '../moment';
export default moment.defineLocale('cy', {
months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
'_'
),
monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
'_'
),
weekdays:
'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
'_'
),
weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
weekdaysParseExact: true,
// time formats are the same as en-gb
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd, D MMMM YYYY HH:mm',
},
calendar: {
sameDay: '[Heddiw am] LT',
nextDay: '[Yfory am] LT',
nextWeek: 'dddd [am] LT',
lastDay: '[Ddoe am] LT',
lastWeek: 'dddd [diwethaf am] LT',
sameElse: 'L',
},
relativeTime: {
future: 'mewn %s',
past: '%s yn ôl',
s: 'ychydig eiliadau',
ss: '%d eiliad',
m: 'munud',
mm: '%d munud',
h: 'awr',
hh: '%d awr',
d: 'diwrnod',
dd: '%d diwrnod',
M: 'mis',
MM: '%d mis',
y: 'blwyddyn',
yy: '%d flynedd',
},
dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
// traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
ordinal: function (number) {
var b = number,
output = '',
lookup = [
'',
'af',
'il',
'ydd',
'ydd',
'ed',
'ed',
'ed',
'fed',
'fed',
'fed', // 1af to 10fed
'eg',
'fed',
'eg',
'eg',
'fed',
'eg',
'eg',
'fed',
'eg',
'fed', // 11eg to 20fed
];
if (b > 20) {
if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
output = 'fed'; // not 30ain, 70ain or 90ain
} else {
output = 'ain';
}
} else if (b > 0) {
output = lookup[b];
}
return number + output;
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

View File

@@ -0,0 +1,53 @@
//! moment.js locale configuration
//! locale : Danish [da]
//! author : Ulrik Nielsen : https://github.com/mrbase
import moment from '../moment';
export default moment.defineLocale('da', {
months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
'_'
),
monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
LLL: 'D. MMMM YYYY HH:mm',
LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
},
calendar: {
sameDay: '[i dag kl.] LT',
nextDay: '[i morgen kl.] LT',
nextWeek: 'på dddd [kl.] LT',
lastDay: '[i går kl.] LT',
lastWeek: '[i] dddd[s kl.] LT',
sameElse: 'L',
},
relativeTime: {
future: 'om %s',
past: '%s siden',
s: 'få sekunder',
ss: '%d sekunder',
m: 'et minut',
mm: '%d minutter',
h: 'en time',
hh: '%d timer',
d: 'en dag',
dd: '%d dage',
M: 'en måned',
MM: '%d måneder',
y: 'et år',
yy: '%d år',
},
dayOfMonthOrdinalParse: /\d{1,2}\./,
ordinal: '%d.',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
});

Some files were not shown because too many files have changed in this diff Show More