Browse Source

replace git submodules with directly included code

pull/517/head
Joe Germuska 11 years ago
parent
commit
b56fdcb28f
  1. 5
      source/js/Core/.gitignore
  2. 156
      source/js/Core/Core/VMM.Browser.js
  3. 15
      source/js/Core/Core/VMM.Core.js
  4. 569
      source/js/Core/Core/VMM.Date.js
  5. 21
      source/js/Core/Core/VMM.FileExtention.js
  6. 600
      source/js/Core/Core/VMM.Library.js
  7. 49
      source/js/Core/Core/VMM.LoadLib.js
  8. 478
      source/js/Core/Core/VMM.Util.js
  9. 382
      source/js/Core/Core/VMM.js
  10. 50
      source/js/Core/Embed/Embed.LoadLib.js
  11. 355
      source/js/Core/Embed/Embed.js
  12. 361
      source/js/Core/LICENSE
  13. 37
      source/js/Core/Language/VMM.Language.js
  14. 38
      source/js/Core/Language/locale/af.js
  15. 38
      source/js/Core/Language/locale/ar.js
  16. 37
      source/js/Core/Language/locale/bg.js
  17. 37
      source/js/Core/Language/locale/ca.js
  18. 37
      source/js/Core/Language/locale/cz.js
  19. 37
      source/js/Core/Language/locale/da.js
  20. 37
      source/js/Core/Language/locale/de.js
  21. 37
      source/js/Core/Language/locale/el.js
  22. 37
      source/js/Core/Language/locale/en-24hr.js
  23. 37
      source/js/Core/Language/locale/en.js
  24. 37
      source/js/Core/Language/locale/es.js
  25. 38
      source/js/Core/Language/locale/eu.js
  26. 37
      source/js/Core/Language/locale/fi.js
  27. 37
      source/js/Core/Language/locale/fo.js
  28. 38
      source/js/Core/Language/locale/fr.js
  29. 37
      source/js/Core/Language/locale/gl.js
  30. 38
      source/js/Core/Language/locale/he.js
  31. 37
      source/js/Core/Language/locale/hu.js
  32. 37
      source/js/Core/Language/locale/hy.js
  33. 37
      source/js/Core/Language/locale/id.js
  34. 38
      source/js/Core/Language/locale/is.js
  35. 38
      source/js/Core/Language/locale/it.js
  36. 39
      source/js/Core/Language/locale/iw.js
  37. 38
      source/js/Core/Language/locale/ja.js
  38. 37
      source/js/Core/Language/locale/ka.js
  39. 38
      source/js/Core/Language/locale/ko.js
  40. 37
      source/js/Core/Language/locale/lb.js
  41. 37
      source/js/Core/Language/locale/lv.js
  42. 38
      source/js/Core/Language/locale/nl.js
  43. 37
      source/js/Core/Language/locale/no.js
  44. 37
      source/js/Core/Language/locale/pl.js
  45. 38
      source/js/Core/Language/locale/pt-br.js
  46. 37
      source/js/Core/Language/locale/pt.js
  47. 37
      source/js/Core/Language/locale/ru.js
  48. 34
      source/js/Core/Language/locale/si.js
  49. 35
      source/js/Core/Language/locale/sk.js
  50. 37
      source/js/Core/Language/locale/sl.js
  51. 38
      source/js/Core/Language/locale/sr-cy.js
  52. 38
      source/js/Core/Language/locale/sr.js
  53. 37
      source/js/Core/Language/locale/sv.js
  54. 37
      source/js/Core/Language/locale/ta.js
  55. 37
      source/js/Core/Language/locale/tl.js
  56. 37
      source/js/Core/Language/locale/tr.js
  57. 38
      source/js/Core/Language/locale/zh-cn.js
  58. 38
      source/js/Core/Language/locale/zh-tw.js
  59. 463
      source/js/Core/Library/AES.js
  60. 391
      source/js/Core/Library/LazyLoad.js
  61. 5670
      source/js/Core/Library/Leaflet.js
  62. 270
      source/js/Core/Library/bootstrap-tooltip.js
  63. 205
      source/js/Core/Library/jQuery/easing.js
  64. 1590
      source/js/Core/Media/VMM.ExternalAPI.js
  65. 10
      source/js/Core/Media/VMM.Media.js
  66. 228
      source/js/Core/Media/VMM.MediaElement.js
  67. 145
      source/js/Core/Media/VMM.MediaType.js
  68. 16
      source/js/Core/Media/VMM.TextElement.js
  69. 8
      source/js/Core/README.md
  70. 247
      source/js/Core/Slider/VMM.DragSlider.js
  71. 281
      source/js/Core/Slider/VMM.Slider.Slide.js
  72. 805
      source/js/Core/Slider/VMM.Slider.js
  73. 30
      source/js/Core/VMM.StoryJS.js
  74. 2
      source/less/Core/.gitignore
  75. 37
      source/less/Core/Font.Default.less
  76. 40
      source/less/Core/Font/AbrilFatface-Average.less
  77. 39
      source/less/Core/Font/Arvo-PTSans.less
  78. 39
      source/less/Core/Font/Bevan-PotanoSans.less
  79. 39
      source/less/Core/Font/BreeSerif-OpenSans.less
  80. 45
      source/less/Core/Font/DroidSerif-DroidSans.less
  81. 37
      source/less/Core/Font/Georgia-Helvetica.less
  82. 39
      source/less/Core/Font/Lekton-Molengo.less
  83. 40
      source/less/Core/Font/Lora-Istok.less
  84. 50
      source/less/Core/Font/Merriweather-NewsCycle.less
  85. 50
      source/less/Core/Font/NewsCycle-Merriweather.less
  86. 39
      source/less/Core/Font/NixieOne-Ledger.less
  87. 44
      source/less/Core/Font/PT.less
  88. 40
      source/less/Core/Font/PTSerif-PTSans.less
  89. 39
      source/less/Core/Font/Pacifico-Arimo.less
  90. 39
      source/less/Core/Font/PlayfairDisplay-Muli.less
  91. 49
      source/less/Core/Font/PoiretOne-Molengo.less
  92. 41
      source/less/Core/Font/Rancho-Gudea.less
  93. 39
      source/less/Core/Font/SansitaOne-Kameron.less
  94. 453
      source/less/Core/GFX.less
  95. 361
      source/less/Core/LICENSE
  96. 236
      source/less/Core/Mixins.less
  97. 8
      source/less/Core/README.md
  98. 117
      source/less/Core/Reset.less
  99. 195
      source/less/Core/Typography.less
  100. 404
      source/less/Core/VMM.Core.less
  101. Some files were not shown because too many files have changed in this diff Show More

5
source/js/Core/.gitignore vendored

@ -0,0 +1,5 @@
.buildpath
.project
.settings
*.DS_Store
.DS_Store*

156
source/js/Core/Core/VMM.Browser.js

@ -0,0 +1,156 @@
/* * DEVICE AND BROWSER DETECTION
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.Browser == 'undefined') {
VMM.Browser = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
this.device = this.searchDevice(navigator.userAgent);
this.orientation = this.searchOrientation(window.orientation);
},
searchOrientation: function(orientation) {
var orient = "";
if ( orientation == 0 || orientation == 180) {
orient = "portrait";
} else if ( orientation == 90 || orientation == -90) {
orient = "landscape";
} else {
orient = "normal";
}
return orient;
},
searchDevice: function(d) {
var device = "";
if (d.match(/Android/i) || d.match(/iPhone|iPod/i)) {
device = "mobile";
} else if (d.match(/iPad/i)) {
device = "tablet";
} else if (d.match(/BlackBerry/i) || d.match(/IEMobile/i)) {
device = "other mobile";
} else {
device = "desktop";
}
return device;
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string,
dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1) {
return data[i].identity;
}
} else if (dataProp) {
return data[i].identity;
}
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera",
versionSearch: "Version"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.userAgent,
subString: "iPad",
identity: "iPad"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
}
VMM.Browser.init();
}

15
source/js/Core/Core/VMM.Core.js

@ -0,0 +1,15 @@
/* VeriteCo Core
================================================== */
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "VMM.js";
// @codekit-prepend "VMM.Library.js";
// @codekit-prepend "VMM.Browser.js";
// @codekit-prepend "VMM.FileExtention.js";
// @codekit-prepend "VMM.Date.js";
// @codekit-prepend "VMM.Util.js";
// @codekit-prepend "VMM.LoadLib.js";
// @codekit-prepend "VMM.Language.js";

569
source/js/Core/Core/VMM.Date.js

@ -0,0 +1,569 @@
/* * Utilities and Useful Functions
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.Date == 'undefined') {
VMM.Date = ({
init: function() {
return this;
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."],
hour: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
hour_suffix: ["am"],
//B.C.
bc_format: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "dddd', 'h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "dddd',' mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>'dddd',' mmm d',' yyyy'</small>'"
},
setLanguage: function(lang) {
trace("SET DATE LANGUAGE");
VMM.Date.dateformats = lang.dateformats;
VMM.Date.month = lang.date.month;
VMM.Date.month_abbr = lang.date.month_abbr;
VMM.Date.day = lang.date.day;
VMM.Date.day_abbr = lang.date.day_abbr;
dateFormat.i18n.dayNames = lang.date.day_abbr.concat(lang.date.day);
dateFormat.i18n.monthNames = lang.date.month_abbr.concat(lang.date.month);
},
parse: function(d, precision) {
"use strict";
var date,
date_array,
time_array,
time_parse,
p = {
year: false,
month: false,
day: false,
hour: false,
minute: false,
second: false,
millisecond: false
};
if (type.of(d) == "date") {
trace("DEBUG THIS, ITs A DATE");
date = d;
} else {
date = new Date(0, 0, 1, 0, 0, 0, 0);
if ( d.match(/,/gi) ) {
date_array = d.split(",");
for(var i = 0; i < date_array.length; i++) {
date_array[i] = parseInt(date_array[i], 10);
}
if (date_array[0]) {
date.setFullYear(date_array[0]);
p.year = true;
}
if (date_array[1]) {
date.setMonth(date_array[1] - 1);
p.month = true;
}
if (date_array[2]) {
date.setDate(date_array[2]);
p.day = true;
}
if (date_array[3]) {
date.setHours(date_array[3]);
p.hour = true;
}
if (date_array[4]) {
date.setMinutes(date_array[4]);
p.minute = true;
}
if (date_array[5]) {
date.setSeconds(date_array[5]);
if (date_array[5] >= 1) {
p.second = true;
}
}
if (date_array[6]) {
date.setMilliseconds(date_array[6]);
if (date_array[6] >= 1) {
p.millisecond = true;
}
}
} else if (d.match("/")) {
if (d.match(" ")) {
time_parse = d.split(" ");
if (d.match(":")) {
time_array = time_parse[1].split(":");
if (time_array[0] >= 0 ) {
date.setHours(time_array[0]);
p.hour = true;
}
if (time_array[1] >= 0) {
date.setMinutes(time_array[1]);
p.minute = true;
}
if (time_array[2] >= 0) {
date.setSeconds(time_array[2]);
p.second = true;
}
if (time_array[3] >= 0) {
date.setMilliseconds(time_array[3]);
p.millisecond = true;
}
}
date_array = time_parse[0].split("/");
} else {
date_array = d.split("/");
}
if (date_array[2]) {
date.setFullYear(date_array[2]);
p.year = true;
}
if (date_array[0] >= 0) {
date.setMonth(date_array[0] - 1);
p.month = true;
}
if (date_array[1] >= 0) {
if (date_array[1].length > 2) {
date.setFullYear(date_array[1]);
p.year = true;
} else {
date.setDate(date_array[1]);
p.day = true;
}
}
} else if (d.match("now")) {
var now = new Date();
date.setFullYear(now.getFullYear());
p.year = true;
date.setMonth(now.getMonth());
p.month = true;
date.setDate(now.getDate());
p.day = true;
if (d.match("hours")) {
date.setHours(now.getHours());
p.hour = true;
}
if (d.match("minutes")) {
date.setHours(now.getHours());
date.setMinutes(now.getMinutes());
p.hour = true;
p.minute = true;
}
if (d.match("seconds")) {
date.setHours(now.getHours());
date.setMinutes(now.getMinutes());
date.setSeconds(now.getSeconds());
p.hour = true;
p.minute = true;
p.second = true;
}
if (d.match("milliseconds")) {
date.setHours(now.getHours());
date.setMinutes(now.getMinutes());
date.setSeconds(now.getSeconds());
date.setMilliseconds(now.getMilliseconds());
p.hour = true;
p.minute = true;
p.second = true;
p.millisecond = true;
}
} else if (d.length <= 8) {
p.year = true;
date.setFullYear(parseInt(d, 10));
date.setMonth(0);
date.setDate(1);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
} else if (d.match("T")) {
if (navigator.userAgent.match(/MSIE\s(?!9.0)/)) {
// IE 8 < Won't accept dates with a "-" in them.
time_parse = d.split("T");
if (d.match(":")) {
time_array = time_parse[1].split(":");
if (time_array[0] >= 1) {
date.setHours(time_array[0]);
p.hour = true;
}
if (time_array[1] >= 1) {
date.setMinutes(time_array[1]);
p.minute = true;
}
if (time_array[2] >= 1) {
date.setSeconds(time_array[2]);
if (time_array[2] >= 1) {
p.second = true;
}
}
if (time_array[3] >= 1) {
date.setMilliseconds(time_array[3]);
if (time_array[3] >= 1) {
p.millisecond = true;
}
}
}
date_array = time_parse[0].split("-");
if (date_array[0]) {
date.setFullYear(date_array[0]);
p.year = true;
}
if (date_array[1] >= 0) {
date.setMonth(date_array[1] - 1);
p.month = true;
}
if (date_array[2] >= 0) {
date.setDate(date_array[2]);
p.day = true;
}
} else {
date = new Date(Date.parse(d));
p.year = true;
p.month = true;
p.day = true;
p.hour = true;
p.minute = true;
if (date.getSeconds() >= 1) {
p.second = true;
}
if (date.getMilliseconds() >= 1) {
p.millisecond = true;
}
}
} else {
date = new Date(
parseInt(d.slice(0,4), 10),
parseInt(d.slice(4,6), 10) - 1,
parseInt(d.slice(6,8), 10),
parseInt(d.slice(8,10), 10),
parseInt(d.slice(10,12), 10)
);
p.year = true;
p.month = true;
p.day = true;
p.hour = true;
p.minute = true;
if (date.getSeconds() >= 1) {
p.second = true;
}
if (date.getMilliseconds() >= 1) {
p.millisecond = true;
}
}
}
if (precision != null && precision != "") {
return {
date: date,
precision: p
};
} else {
return date;
}
},
prettyDate: function(d, is_abbr, p, d2) {
var _date,
_date2,
format,
bc_check,
is_pair = false,
bc_original,
bc_number,
bc_string;
if (d2 != null && d2 != "" && typeof d2 != 'undefined') {
is_pair = true;
trace("D2 " + d2);
}
if (type.of(d) == "date") {
if (type.of(p) == "object") {
if (p.millisecond || p.second && d.getSeconds() >= 1) {
// YEAR MONTH DAY HOUR MINUTE
if (is_abbr){
format = VMM.Date.dateformats.time_short;
} else {
format = VMM.Date.dateformats.time_short;
}
} else if (p.minute) {
// YEAR MONTH DAY HOUR MINUTE
if (is_abbr){
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.time_no_seconds_small_date;
}
} else if (p.hour) {
// YEAR MONTH DAY HOUR
if (is_abbr) {
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.time_no_seconds_small_date;
}
} else if (p.day) {
// YEAR MONTH DAY
if (is_abbr) {
format = VMM.Date.dateformats.full_short;
} else {
format = VMM.Date.dateformats.full;
}
} else if (p.month) {
// YEAR MONTH
if (is_abbr) {
format = VMM.Date.dateformats.month_short;
} else {
format = VMM.Date.dateformats.month;
}
} else if (p.year) {
format = VMM.Date.dateformats.year;
} else {
format = VMM.Date.dateformats.year;
}
} else {
if (d.getMonth() === 0 && d.getDate() == 1 && d.getHours() === 0 && d.getMinutes() === 0 ) {
// YEAR ONLY
format = VMM.Date.dateformats.year;
} else if (d.getDate() <= 1 && d.getHours() === 0 && d.getMinutes() === 0) {
// YEAR MONTH
if (is_abbr) {
format = VMM.Date.dateformats.month_short;
} else {
format = VMM.Date.dateformats.month;
}
} else if (d.getHours() === 0 && d.getMinutes() === 0) {
// YEAR MONTH DAY
if (is_abbr) {
format = VMM.Date.dateformats.full_short;
} else {
format = VMM.Date.dateformats.full;
}
} else if (d.getMinutes() === 0) {
// YEAR MONTH DAY HOUR
if (is_abbr) {
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.time_no_seconds_small_date;
}
} else {
// YEAR MONTH DAY HOUR MINUTE
if (is_abbr){
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.full_long;
}
}
}
_date = dateFormat(d, format, false);
//_date = "Jan"
bc_check = _date.split(" ");
// BC TIME SUPPORT
for(var i = 0; i < bc_check.length; i++) {
if ( parseInt(bc_check[i], 10) < 0 ) {
trace("YEAR IS BC");
bc_original = bc_check[i];
bc_number = Math.abs( parseInt(bc_check[i], 10) );
bc_string = bc_number.toString() + " B.C.";
_date = _date.replace(bc_original, bc_string);
}
}
if (is_pair) {
_date2 = dateFormat(d2, format, false);
bc_check = _date2.split(" ");
// BC TIME SUPPORT
for(var j = 0; j < bc_check.length; j++) {
if ( parseInt(bc_check[j], 10) < 0 ) {
trace("YEAR IS BC");
bc_original = bc_check[j];
bc_number = Math.abs( parseInt(bc_check[j], 10) );
bc_string = bc_number.toString() + " B.C.";
_date2 = _date2.replace(bc_original, bc_string);
}
}
}
} else {
trace("NOT A VALID DATE?");
trace(d);
}
if (is_pair) {
return _date + " &mdash; " + _date2;
} else {
return _date;
}
}
}).init();
/*
* 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
// Caused problems in IE
// date = date ? new Date(date) : new Date;
if (isNaN(date)) {
trace("invalid date " + date);
//return "";
}
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);
};
}

21
source/js/Core/Core/VMM.FileExtention.js

@ -0,0 +1,21 @@
/* * File Extention
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.FileExtention == 'undefined') {
VMM.FileExtention = {
googleDocType: function(url) {
var fileName = url.replace(/\s\s*$/, ''),
fileExtension = "",
validFileExtensions = ["DOC","DOCX","XLS","XLSX","PPT","PPTX","PDF","PAGES","AI","PSD","TIFF","DXF","SVG","EPS","PS","TTF","XPS","ZIP","RAR"],
flag = false;
fileExtension = fileName.substr(fileName.length - 5, 5);
for (var i = 0; i < validFileExtensions.length; i++) {
if (fileExtension.toLowerCase().match(validFileExtensions[i].toString().toLowerCase()) || fileName.match("docs.google.com") ) {
flag = true;
}
}
return flag;
}
}
}

600
source/js/Core/Core/VMM.Library.js

@ -0,0 +1,600 @@
/* * LIBRARY ABSTRACTION
================================================== */
if(typeof VMM != 'undefined') {
VMM.smoothScrollTo = function(elem, duration, ease) {
if( typeof( jQuery ) != 'undefined' ){
var _ease = "easein",
_duration = 1000;
if (duration != null) {
if (duration < 1) {
_duration = 1;
} else {
_duration = Math.round(duration);
}
}
if (ease != null && ease != "") {
_ease = ease;
}
if (jQuery(window).scrollTop() != VMM.Lib.offset(elem).top) {
VMM.Lib.animate('html,body', _duration, _ease, {scrollTop: VMM.Lib.offset(elem).top})
}
}
};
VMM.attachElement = function(element, content) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).html(content);
}
};
VMM.appendElement = function(element, content) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).append(content);
}
};
VMM.getHTML = function(element) {
var e;
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(element).html();
return e;
}
};
VMM.getElement = function(element, p) {
var e;
if( typeof( jQuery ) != 'undefined' ){
if (p) {
e = jQuery(element).parent().get(0);
} else {
e = jQuery(element).get(0);
}
return e;
}
};
VMM.bindEvent = function(element, the_handler, the_event_type, event_data) {
var e;
var _event_type = "click";
var _event_data = {};
if (the_event_type != null && the_event_type != "") {
_event_type = the_event_type;
}
if (_event_data != null && _event_data != "") {
_event_data = event_data;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).bind(_event_type, _event_data, the_handler);
//return e;
}
};
VMM.unbindEvent = function(element, the_handler, the_event_type) {
var e;
var _event_type = "click";
var _event_data = {};
if (the_event_type != null && the_event_type != "") {
_event_type = the_event_type;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).unbind(_event_type, the_handler);
//return e;
}
};
VMM.fireEvent = function(element, the_event_type, the_data) {
var e;
var _event_type = "click";
var _data = [];
if (the_event_type != null && the_event_type != "") {
_event_type = the_event_type;
}
if (the_data != null && the_data != "") {
_data = the_data;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).trigger(_event_type, _data);
//return e;
}
};
VMM.getJSON = function(url, data, callback) {
if( typeof( jQuery ) != 'undefined' ){
jQuery.ajaxSetup({
timeout: 3000
});
/* CHECK FOR IE
================================================== */
if ( VMM.Browser.browser == "Explorer" && parseInt(VMM.Browser.version, 10) >= 7 && window.XDomainRequest) {
trace("IE JSON");
var ie_url = url;
if (ie_url.match('^http://')){
return jQuery.getJSON(ie_url, data, callback);
} else if (ie_url.match('^https://')) {
ie_url = ie_url.replace("https://","http://");
return jQuery.getJSON(ie_url, data, callback);
} else {
return jQuery.getJSON(url, data, callback);
}
} else {
return jQuery.getJSON(url, data, callback);
}
}
}
VMM.parseJSON = function(the_json) {
if( typeof( jQuery ) != 'undefined' ){
return jQuery.parseJSON(the_json);
}
}
// ADD ELEMENT AND RETURN IT
VMM.appendAndGetElement = function(append_to_element, tag, cName, content) {
var e,
_tag = "<div>",
_class = "",
_content = "",
_id = "";
if (tag != null && tag != "") {
_tag = tag;
}
if (cName != null && cName != "") {
_class = cName;
}
if (content != null && content != "") {
_content = content;
}
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(tag);
e.addClass(_class);
e.html(_content);
jQuery(append_to_element).append(e);
}
return e;
};
VMM.Lib = {
init: function() {
return this;
},
hide: function(element, duration) {
if (duration != null && duration != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).hide(duration);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).hide();
}
}
},
remove: function(element) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).remove();
}
},
detach: function(element) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).detach();
}
},
append: function(element, value) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).append(value);
}
},
prepend: function(element, value) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).prepend(value);
}
},
show: function(element, duration) {
if (duration != null && duration != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).show(duration);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).show();
}
}
},
load: function(element, callback_function, event_data) {
var _event_data = {elem:element}; // return element by default
if (_event_data != null && _event_data != "") {
_event_data = event_data;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).load(_event_data, callback_function);
}
},
addClass: function(element, cName) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).addClass(cName);
}
},
removeClass: function(element, cName) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).removeClass(cName);
}
},
attr: function(element, aName, value) {
if (value != null && value != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).attr(aName, value);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).attr(aName);
}
}
},
prop: function(element, aName, value) {
if (typeof jQuery == 'undefined' || !/[1-9]\.[3-9].[1-9]/.test(jQuery.fn.jquery)) {
VMM.Lib.attribute(element, aName, value);
} else {
jQuery(element).prop(aName, value);
}
},
attribute: function(element, aName, value) {
if (value != null && value != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).attr(aName, value);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).attr(aName);
}
}
},
visible: function(element, show) {
if (show != null) {
if( typeof( jQuery ) != 'undefined' ){
if (show) {
jQuery(element).show(0);
} else {
jQuery(element).hide(0);
}
}
} else {
if( typeof( jQuery ) != 'undefined' ){
if ( jQuery(element).is(':visible')){
return true;
} else {
return false;
}
}
}
},
css: function(element, prop, value) {
if (value != null && value != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).css(prop, value);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).css(prop);
}
}
},
cssmultiple: function(element, propval) {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).css(propval);
}
},
offset: function(element) {
var p;
if( typeof( jQuery ) != 'undefined' ){
p = jQuery(element).offset();
}
return p;
},
position: function(element) {
var p;
if( typeof( jQuery ) != 'undefined' ){
p = jQuery(element).position();
}
return p;
},
width: function(element, s) {
if (s != null && s != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).width(s);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).width();
}
}
},
height: function(element, s) {
if (s != null && s != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).height(s);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).height();
}
}
},
toggleClass: function(element, cName) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).toggleClass(cName);
}
},
each:function(element, return_function) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).each(return_function);
}
},
html: function(element, str) {
var e;
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(element).html();
return e;
}
if (str != null && str != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).html(str);
}
} else {
var e;
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(element).html();
return e;
}
}
},
find: function(element, selec) {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).find(selec);
}
},
stop: function(element) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).stop();
}
},
delay_animate: function(delay, element, duration, ease, att, callback_function) {
if (VMM.Browser.device == "mobile" || VMM.Browser.device == "tablet") {
var _tdd = Math.round((duration/1500)*10)/10,
__duration = _tdd + 's';
VMM.Lib.css(element, '-webkit-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, '-moz-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, '-o-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, '-ms-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, 'transition', 'all '+ __duration + ' ease');
VMM.Lib.cssmultiple(element, _att);
} else {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).delay(delay).animate(att, {duration:duration, easing:ease} );
}
}
},
animate: function(element, duration, ease, att, que, callback_function) {
var _ease = "easein",
_que = false,
_duration = 1000,
_att = {};
if (duration != null) {
if (duration < 1) {
_duration = 1;
} else {
_duration = Math.round(duration);
}
}
if (ease != null && ease != "") {
_ease = ease;
}
if (que != null && que != "") {
_que = que;
}
if (att != null) {
_att = att
} else {
_att = {opacity: 0}
}
if (VMM.Browser.device == "mobile" || VMM.Browser.device == "tablet") {
var _tdd = Math.round((_duration/1500)*10)/10,
__duration = _tdd + 's';
_ease = " cubic-bezier(0.33, 0.66, 0.66, 1)";
//_ease = " ease-in-out";
for (x in _att) {
if (Object.prototype.hasOwnProperty.call(_att, x)) {
trace(x + " to " + _att[x]);
VMM.Lib.css(element, '-webkit-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, '-moz-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, '-o-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, '-ms-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, 'transition', x + ' ' + __duration + _ease);
}
}
VMM.Lib.cssmultiple(element, _att);
} else {
if( typeof( jQuery ) != 'undefined' ){
if (callback_function != null && callback_function != "") {
jQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease, complete:callback_function} );
} else {
jQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease} );
}
}
}
}
}
}
if( typeof( jQuery ) != 'undefined' ){
/* XDR AJAX EXTENTION FOR jQuery
https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js
================================================== */
(function( jQuery ) {
if ( window.XDomainRequest ) {
jQuery.ajaxTransport(function( s ) {
if ( s.crossDomain && s.async ) {
if ( s.timeout ) {
s.xdrTimeout = s.timeout;
delete s.timeout;
}
var xdr;
return {
send: function( _, complete ) {
function callback( status, statusText, responses, responseHeaders ) {
xdr.onload = xdr.onerror = xdr.ontimeout = jQuery.noop;
xdr = undefined;
complete( status, statusText, responses, responseHeaders );
}
xdr = new XDomainRequest();
xdr.open( s.type, s.url );
xdr.onload = function() {
callback( 200, "OK", { text: xdr.responseText }, "Content-Type: " + xdr.contentType );
};
xdr.onerror = function() {
callback( 404, "Not Found" );
};
if ( s.xdrTimeout ) {
xdr.ontimeout = function() {
callback( 0, "timeout" );
};
xdr.timeout = s.xdrTimeout;
}
xdr.send( ( s.hasContent && s.data ) || null );
},
abort: function() {
if ( xdr ) {
xdr.onerror = jQuery.noop();
xdr.abort();
}
}
};
}
});
}
})( jQuery );
/* jQuery Easing v1.3
http://gsgd.co.uk/sandbox/jquery/easing/
================================================== */
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend( jQuery.easing, {
def: 'easeOutQuad',
swing: function (x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInExpo: function (x, t, b, c, d) {
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOutExpo: function (x, t, b, c, d) {
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOutExpo: function (x, t, b, c, d) {
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInQuad: function (x, t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
easeInOutQuad: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
}
});
}

49
source/js/Core/Core/VMM.LoadLib.js

@ -0,0 +1,49 @@
/*
LoadLib
Designed and built by Zach Wise digitalartwork.net
*/
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "../Library/LazyLoad.js";
LoadLib = (function (doc) {
var loaded = [];
function isLoaded(url) {
var i = 0,
has_loaded = false;
for (i = 0; i < loaded.length; i++) {
if (loaded[i] == url) {
has_loaded = true;
}
}
if (has_loaded) {
return true;
} else {
loaded.push(url);
return false;
}
}
return {
css: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.css(urls, callback, obj, context);
}
},
js: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.js(urls, callback, obj, context);
}
}
};
})(this.document);

478
source/js/Core/Core/VMM.Util.js

@ -0,0 +1,478 @@
/* * Utilities and Useful Functions
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.Util == 'undefined') {
VMM.Util = ({
init: function() {
return this;
},
/* * CORRECT PROTOCOL (DOES NOT WORK)
================================================== */
correctProtocol: function(url) {
var loc = (window.parent.location.protocol).toString(),
prefix = "",
the_url = url.split("://", 2);
if (loc.match("http")) {
prefix = loc;
} else {
prefix = "https";
}
return prefix + "://" + the_url[1];
},
/* * MERGE CONFIG
================================================== */
mergeConfig: function(config_main, config_to_merge) {
var x;
for (x in config_to_merge) {
if (Object.prototype.hasOwnProperty.call(config_to_merge, x)) {
config_main[x] = config_to_merge[x];
}
}
return config_main;
},
/* * GET OBJECT ATTRIBUTE BY INDEX
================================================== */
getObjectAttributeByIndex: function(obj, index) {
if(typeof obj != 'undefined') {
var i = 0;
for (var attr in obj){
if (index === i){
return obj[attr];
}
i++;
}
return "";
} else {
return "";
}
},
/* * ORDINAL
================================================== */
ordinal: function(n) {
return ["th","st","nd","rd"][(!( ((n%10) >3) || (Math.floor(n%100/10)==1)) ) * (n%10)];
},
/* * RANDOM BETWEEN
================================================== */
//VMM.Util.randomBetween(1, 3)
randomBetween: function(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
},
/* * AVERAGE
* http://jsfromhell.com/array/average
* var x = VMM.Util.average([2, 3, 4]);
* VMM.Util.average([2, 3, 4]).mean
================================================== */
average: function(a) {
var r = {mean: 0, variance: 0, deviation: 0}, t = a.length;
for(var m, s = 0, l = t; l--; s += a[l]);
for(m = r.mean = s / t, l = t, s = 0; l--; s += Math.pow(a[l] - m, 2));
return r.deviation = Math.sqrt(r.variance = s / t), r;
},
/* * CUSTOM SORT
================================================== */
customSort: function(a, b) {
var a1= a, b1= b;
if(a1== b1) return 0;
return a1> b1? 1: -1;
},
/* * Remove Duplicates from Array
================================================== */
deDupeArray: function(arr) {
var i,
len=arr.length,
out=[],
obj={};
for (i=0;i<len;i++) {
obj[arr[i]]=0;
}
for (i in obj) {
out.push(i);
}
return out;
},
/* * Given an int or decimal, turn that into string in $xxx,xxx.xx format.
================================================== */
number2money: function(n, symbol, padding) {
var symbol = (symbol !== null) ? symbol : true; // add $
var padding = (padding !== null) ? padding : false; //pad with .00
var number = VMM.Math2.floatPrecision(n,2); // rounded correctly to two digits, if decimals passed
var formatted = this.niceNumber(number);
// no decimal and padding is enabled
if (!formatted.split(/\./g)[1] && padding) formatted = formatted + ".00";
// add money sign
if (symbol) formatted = "$"+formatted;
return formatted;
},
/* * Returns a word count number
================================================== */
wordCount: function(s) {
var fullStr = s + " ";
var initial_whitespace_rExp = /^[^A-Za-z0-9\'\-]+/gi;
var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
var non_alphanumerics_rExp = /[^A-Za-z0-9\'\-]+/gi;
var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
var splitString = cleanedStr.split(" ");
var word_count = splitString.length -1;
if (fullStr.length <2) {
word_count = 0;
}
return word_count;
},
ratio: {
fit: function(w, h, ratio_w, ratio_h) {
//VMM.Util.ratio.fit(w, h, ratio_w, ratio_h).width;
var _fit = {width:0,height:0};
// TRY WIDTH FIRST
_fit.width = w;
//_fit.height = Math.round((h / ratio_h) * ratio_w);
_fit.height = Math.round((w / ratio_w) * ratio_h);
if (_fit.height > h) {
_fit.height = h;
//_fit.width = Math.round((w / ratio_w) * ratio_h);
_fit.width = Math.round((h / ratio_h) * ratio_w);
if (_fit.width > w) {
trace("FIT: DIDN'T FIT!!! ")
}
}
return _fit;
},
r16_9: function(w,h) {
//VMM.Util.ratio.r16_9(w, h) // Returns corresponding number
if (w !== null && w !== "") {
return Math.round((h / 16) * 9);
} else if (h !== null && h !== "") {
return Math.round((w / 9) * 16);
}
},
r4_3: function(w,h) {
if (w !== null && w !== "") {
return Math.round((h / 4) * 3);
} else if (h !== null && h !== "") {
return Math.round((w / 3) * 4);
}
}
},
doubledigit: function(n) {
return (n < 10 ? '0' : '') + n;
},
/* * Returns a truncated segement of a long string of between min and max words. If possible, ends on a period (otherwise goes to max).
================================================== */
truncateWords: function(s, min, max) {
if (!min) min = 30;
if (!max) max = min;
var initial_whitespace_rExp = /^[^A-Za-z0-9\'\-]+/gi;
var left_trimmedStr = s.replace(initial_whitespace_rExp, "");
var words = left_trimmedStr.split(" ");
var result = [];
min = Math.min(words.length, min);
max = Math.min(words.length, max);
for (var i = 0; i<min; i++) {
result.push(words[i]);
}
for (var j = min; i<max; i++) {
var word = words[i];
result.push(word);
if (word.charAt(word.length-1) == '.') {
break;
}
}
return (result.join(' '));
},
/* * Turns plain text links into real links
================================================== */
linkify: function(text,targets,is_touch) {
// http://, https://, ftp://
var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;
// www. sans http:// or https://
var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
// Email addresses
var emailAddressPattern = /(([a-zA-Z0-9_\-\.]+)@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6}))+/gim;
return text
.replace(urlPattern, "<a target='_blank' href='$&' onclick='void(0)'>$&</a>")
.replace(pseudoUrlPattern, "$1<a target='_blank' onclick='void(0)' href='http://$2'>$2</a>")
.replace(emailAddressPattern, "<a target='_blank' onclick='void(0)' href='mailto:$1'>$1</a>");
},
linkify_with_twitter: function(text,targets,is_touch) {
// http://, https://, ftp://
var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;
var url_pattern = /(\()((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\))|(\[)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\])|(\{)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\s'"\]])\s*['"]?|[^=\s]\s+)(\b(?:ht|f)tps?:\/\/[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]|$))&[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]*)*[a-z0-9\-_~$()*+=\/#[\]@%])/img;
var url_replace = '$1$4$7$10$13<a href="$2$5$8$11$14" target="_blank" class="hyphenate">$2$5$8$11$14</a>$3$6$9$12';
// www. sans http:// or https://
var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#%?=~_|!:,.;]*)([-A-Z0-9+&@#%?\/=~_|!:,.;]*)[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp, "<a href='$1' target='_blank'>$3</a>");
}
// Email addresses
var emailAddressPattern = /(([a-zA-Z0-9_\-\.]+)@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6}))+/gim;
//var twitterHandlePattern = /(@([\w]+))/g;
var twitterHandlePattern = /\B@([\w-]+)/gm;
var twitterSearchPattern = /(#([\w]+))/g;
return text
//.replace(urlPattern, "<a target='_blank' href='$&' onclick='void(0)'>$&</a>")
.replace(url_pattern, url_replace)
.replace(pseudoUrlPattern, "$1<a target='_blank' class='hyphenate' onclick='void(0)' href='http://$2'>$2</a>")
.replace(emailAddressPattern, "<a target='_blank' onclick='void(0)' href='mailto:$1'>$1</a>")
.replace(twitterHandlePattern, "<a href='http://twitter.com/$1' target='_blank' onclick='void(0)'>@$1</a>");
// TURN THIS BACK ON TO AUTOMAGICALLY LINK HASHTAGS TO TWITTER SEARCH
//.replace(twitterSearchPattern, "<a href='http://twitter.com/search?q=%23$2' target='_blank' 'void(0)'>$1</a>");
},
linkify_wikipedia: function(text) {
var urlPattern = /<i[^>]*>(.*?)<\/i>/gim;
return text
.replace(urlPattern, "<a target='_blank' href='http://en.wikipedia.org/wiki/$&' onclick='void(0)'>$&</a>")
.replace(/<i\b[^>]*>/gim, "")
.replace(/<\/i>/gim, "")
.replace(/<b\b[^>]*>/gim, "")
.replace(/<\/b>/gim, "");
},
/* * Turns plain text links into real links
================================================== */
// VMM.Util.unlinkify();
unlinkify: function(text) {
if(!text) return text;
text = text.replace(/<a\b[^>]*>/i,"");
text = text.replace(/<\/a>/i, "");
return text;
},
untagify: function(text) {
if (!text) {
return text;
}
text = text.replace(/<\s*\w.*?>/g,"");
return text;
},
/* * TK
================================================== */
nl2br: function(text) {
return text.replace(/(\r\n|[\r\n]|\\n|\\r)/g,"<br/>");
},
/* * Generate a Unique ID
================================================== */
// VMM.Util.unique_ID(size);
unique_ID: function(size) {
var getRandomNumber = function(range) {
return Math.floor(Math.random() * range);
};
var getRandomChar = function() {
var chars = "abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
return chars.substr( getRandomNumber(62), 1 );
};
var randomID = function(size) {
var str = "";
for(var i = 0; i < size; i++) {
str += getRandomChar();
}
return str;
};
return randomID(size);
},
/* * Tells you if a number is even or not
================================================== */
// VMM.Util.isEven(n)
isEven: function(n){
return (n%2 === 0) ? true : false;
},
/* * Get URL Variables
================================================== */
// var somestring = VMM.Util.getUrlVars(str_url)["varname"];
getUrlVars: function(string) {
var str = string.toString();
if (str.match('&#038;')) {
str = str.replace("&#038;", "&");
} else if (str.match('&#38;')) {
str = str.replace("&#38;", "&");
} else if (str.match('&amp;')) {
str = str.replace("&amp;", "&");
}
var vars = [], hash;
var hashes = str.slice(str.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
/* * Cleans up strings to become real HTML
================================================== */
toHTML: function(text) {
text = this.nl2br(text);
text = this.linkify(text);
return text.replace(/\s\s/g,"&nbsp;&nbsp;");
},
/* * Returns text strings as CamelCase
================================================== */
toCamelCase: function(s,forceLowerCase) {
if(forceLowerCase !== false) forceLowerCase = true;
var sps = ((forceLowerCase) ? s.toLowerCase() : s).split(" ");
for(var i=0; i<sps.length; i++) {
sps[i] = sps[i].substr(0,1).toUpperCase() + sps[i].substr(1);
}
return sps.join(" ");
},
/* * Replaces dumb quote marks with smart ones
================================================== */
properQuotes: function(str) {
return str.replace(/\"([^\"]*)\"/gi,"&#8220;$1&#8221;");
},
/* * Add Commas to numbers
================================================== */
niceNumber: function(nStr){
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
},
/* * Transform text to Title Case
================================================== */
toTitleCase: function(t){
if ( VMM.Browser.browser == "Explorer" && parseInt(VMM.Browser.version, 10) >= 7) {
return t.replace("_", "%20");
} else {
var __TitleCase = {
__smallWords: ['a', 'an', 'and', 'as', 'at', 'but','by', 'en', 'for', 'if', 'in', 'of', 'on', 'or','the', 'to', 'v[.]?', 'via', 'vs[.]?'],
init: function() {
this.__smallRE = this.__smallWords.join('|');
this.__lowerCaseWordsRE = new RegExp('\\b(' + this.__smallRE + ')\\b', 'gi');
this.__firstWordRE = new RegExp('^([^a-zA-Z0-9 \\r\\n\\t]*)(' + this.__smallRE + ')\\b', 'gi');
this.__lastWordRE = new RegExp('\\b(' + this.__smallRE + ')([^a-zA-Z0-9 \\r\\n\\t]*)$', 'gi');
},
toTitleCase: function(string) {
var line = '';
var split = string.split(/([:.;?!][ ]|(?:[ ]|^)["“])/);
for (var i = 0; i < split.length; ++i) {
var s = split[i];
s = s.replace(/\b([a-zA-Z][a-z.'’]*)\b/g,this.__titleCaseDottedWordReplacer);
// lowercase the list of small words
s = s.replace(this.__lowerCaseWordsRE, this.__lowerReplacer);
// if the first word in the title is a small word then capitalize it
s = s.replace(this.__firstWordRE, this.__firstToUpperCase);
// if the last word in the title is a small word, then capitalize it
s = s.replace(this.__lastWordRE, this.__firstToUpperCase);
line += s;
}
// special cases
line = line.replace(/ V(s?)\. /g, ' v$1. ');
line = line.replace(/(['’])S\b/g, '$1s');
line = line.replace(/\b(AT&T|Q&A)\b/ig, this.__upperReplacer);
return line;
},
__titleCaseDottedWordReplacer: function (w) {
return (w.match(/[a-zA-Z][.][a-zA-Z]/)) ? w : __TitleCase.__firstToUpperCase(w);
},
__lowerReplacer: function (w) { return w.toLowerCase() },
__upperReplacer: function (w) { return w.toUpperCase() },
__firstToUpperCase: function (w) {
var split = w.split(/(^[^a-zA-Z0-9]*[a-zA-Z0-9])(.*)$/);
if (split[1]) {
split[1] = split[1].toUpperCase();
}
return split.join('');
}
};
__TitleCase.init();
t = t.replace(/_/g," ");
t = __TitleCase.toTitleCase(t);
return t;
}
}
}).init();
}

382
source/js/Core/Core/VMM.js

@ -0,0 +1,382 @@
/**
* VéritéCo JS Core
* Designed and built by Zach Wise at VéritéCo zach@verite.co
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* Simple JavaScript Inheritance
By John Resig http://ejohn.org/
MIT Licensed.
================================================== */
(function() {
var initializing = false,
fnTest = /xyz/.test(function() {
xyz;
}) ? /\b_super\b/: /.*/;
// The base Class implementation (does nothing)
this.Class = function() {};
// Create a new Class that inherits from this class
Class.extend = function(prop) {
var _super = this.prototype;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
initializing = false;
// Copy the properties over onto the new prototype
for (var name in prop) {
// Check if we're overwriting an existing function
prototype[name] = typeof prop[name] == "function" &&
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
(function(name, fn) {
return function() {
var tmp = this._super;
// Add a new ._super() method that is the same method
// but on the super-class
this._super = _super[name];
// The method only need to be bound temporarily, so we
// remove it when we're done executing
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
};
})(name, prop[name]) :
prop[name];
}
// The dummy class constructor
function Class() {
// All construction is actually done in the init method
if (!initializing && this.init)
this.init.apply(this, arguments);
}
// Populate our constructed prototype object
Class.prototype = prototype;
// Enforce the constructor to be what we expect
Class.prototype.constructor = Class;
// And make this class extendable
Class.extend = arguments.callee;
return Class;
};
})();
/* Access to the Global Object
access the global object without hard-coding the identifier window
================================================== */
var global = (function () {
return this || (1,eval)('this');
}());
/* VMM
================================================== */
if (typeof VMM == 'undefined') {
/* Main Scope Container
================================================== */
//var VMM = {};
var VMM = Class.extend({});
/* Debug
================================================== */
VMM.debug = true;
/* Master Config
================================================== */
VMM.master_config = ({
init: function() {
return this;
},
sizes: {
api: {
width: 0,
height: 0
}
},
vp: "Pellentesque nibh felis, eleifend id, commodo in, interdum vitae, leo",
api_keys_master: {
flickr: "RAIvxHY4hE/Elm5cieh4X5ptMyDpj7MYIxziGxi0WGCcy1s+yr7rKQ==",
//google: "jwNGnYw4hE9lmAez4ll0QD+jo6SKBJFknkopLS4FrSAuGfIwyj57AusuR0s8dAo=",
google: "uQKadH1VMlCsp560gN2aOiMz4evWkl1s34yryl3F/9FJOsn+/948CbBUvKLN46U=",
twitter: ""
},
timers: {
api: 7000
},
api: {
pushques: []
},
twitter: {
active: false,
array: [],
api_loaded: false,
que: []
},
flickr: {
active: false,
array: [],
api_loaded: false,
que: []
},
youtube: {
active: false,
array: [],
api_loaded: false,
que: []
},
vimeo: {
active: false,
array: [],
api_loaded: false,
que: []
},
vine: {
active: false,
array: [],
api_loaded: false,
que: []
},
webthumb: {
active: false,
array: [],
api_loaded: false,
que: []
},
googlemaps: {
active: false,
map_active: false,
places_active: false,
array: [],
api_loaded: false,
que: []
},
googledocs: {
active: false,
array: [],
api_loaded: false,
que: []
},
googleplus: {
active: false,
array: [],
api_loaded: false,
que: []
},
wikipedia: {
active: false,
array: [],
api_loaded: false,
que: [],
tries: 0
},
soundcloud: {
active: false,
array: [],
api_loaded: false,
que: []
}
}).init();
//VMM.createElement(tag, value, cName, attrs, styles);
VMM.createElement = function(tag, value, cName, attrs, styles) {
var ce = "";
if (tag != null && tag != "") {
// TAG
ce += "<" + tag;
if (cName != null && cName != "") {
ce += " class='" + cName + "'";
};
if (attrs != null && attrs != "") {
ce += " " + attrs;
};
if (styles != null && styles != "") {
ce += " style='" + styles + "'";
};
ce += ">";
if (value != null && value != "") {
ce += value;
}
// CLOSE TAG
ce = ce + "</" + tag + ">";
}
return ce;
};
VMM.createMediaElement = function(media, caption, credit) {
var ce = "";
var _valid = false;
ce += "<div class='media'>";
if (media != null && media != "") {
valid = true;
ce += "<img src='" + media + "'>";
// CREDIT
if (credit != null && credit != "") {
ce += VMM.createElement("div", credit, "credit");
}
// CAPTION
if (caption != null && caption != "") {
ce += VMM.createElement("div", caption, "caption");
}
}
ce += "</div>";
return ce;
};
// Hide URL Bar for iOS and Android by Scott Jehl
// https://gist.github.com/1183357
VMM.hideUrlBar = function () {
var win = window,
doc = win.document;
// If there's a hash, or addEventListener is undefined, stop here
if( !location.hash || !win.addEventListener ){
//scroll to 1
window.scrollTo( 0, 1 );
var scrollTop = 1,
//reset to 0 on bodyready, if needed
bodycheck = setInterval(function(){
if( doc.body ){
clearInterval( bodycheck );
scrollTop = "scrollTop" in doc.body ? doc.body.scrollTop : 1;
win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
}
}, 15 );
win.addEventListener( "load", function(){
setTimeout(function(){
//reset to hide addr bar at onload
win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
}, 0);
}, false );
}
};
}
/* Trace (console.log)
================================================== */
function trace( msg ) {
if (VMM.debug) {
if (window.console) {
console.log(msg);
} else if ( typeof( jsTrace ) != 'undefined' ) {
jsTrace.send( msg );
} else {
//alert(msg);
}
}
}
/* Array Remove - By John Resig (MIT Licensed)
http://ejohn.org/blog/javascript-array-remove/
================================================== */
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
}
/* Extending Date to include Week
================================================== */
Date.prototype.getWeek = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
}
/* Extending Date to include Day of Year
================================================== */
Date.prototype.getDayOfYear = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
}
/* A MORE SPECIFIC TYPEOF();
// http://rolandog.com/archives/2007/01/18/typeof-a-more-specific-typeof/
================================================== */
// type.of()
var is={
Null:function(a){return a===null;},
Undefined:function(a){return a===undefined;},
nt:function(a){return(a===null||a===undefined);},
Function:function(a){return(typeof(a)==="function")?a.constructor.toString().match(/Function/)!==null:false;},
String:function(a){return(typeof(a)==="string")?true:(typeof(a)==="object")?a.constructor.toString().match(/string/i)!==null:false;},
Array:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/array/i)!==null||a.length!==undefined:false;},
Boolean:function(a){return(typeof(a)==="boolean")?true:(typeof(a)==="object")?a.constructor.toString().match(/boolean/i)!==null:false;},
Date:function(a){return(typeof(a)==="date")?true:(typeof(a)==="object")?a.constructor.toString().match(/date/i)!==null:false;},
HTML:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/html/i)!==null:false;},
Number:function(a){return(typeof(a)==="number")?true:(typeof(a)==="object")?a.constructor.toString().match(/Number/)!==null:false;},
Object:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/object/i)!==null:false;},
RegExp:function(a){return(typeof(a)==="function")?a.constructor.toString().match(/regexp/i)!==null:false;}
};
var type={
of:function(a){
for(var i in is){
if(is[i](a)){
return i.toLowerCase();
}
}
}
};

50
source/js/Core/Embed/Embed.LoadLib.js

@ -0,0 +1,50 @@
/*
LoadLib
Designed and built by Zach Wise http://zachwise.com/
Extends LazyLoad
*/
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "../Library/LazyLoad.js";
LoadLib = (function (doc) {
var loaded = [];
function isLoaded(url) {
var i = 0,
has_loaded = false;
for (i = 0; i < loaded.length; i++) {
if (loaded[i] == url) {
has_loaded = true;
}
}
if (has_loaded) {
return true;
} else {
loaded.push(url);
return false;
}
}
return {
css: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.css(urls, callback, obj, context);
}
},
js: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.js(urls, callback, obj, context);
}
}
};
})(this.document);

355
source/js/Core/Embed/Embed.js

@ -0,0 +1,355 @@
//StoryJS Embed Loader
// Provide a bootstrap method for instantiating a timeline. On page load, check the definition of these window scoped variables in this order: [url_config, timeline_config, storyjs_config, config]. As soon as one of these is found to be defined with type 'object,' it will be used to automatically instantiate a timeline.
/* CodeKit Import
http://incident57.com/codekit/
================================================== */
// @codekit-prepend "Embed.LoadLib.js";
var WebFontConfig;
if(typeof embed_path == 'undefined' || typeof embed_path == 'undefined') {
// REPLACE WITH YOUR BASEPATH IF YOU WANT OTHERWISE IT WILL TRY AND FIGURE IT OUT
var embed_path = getEmbedScriptPath("storyjs-embed.js").split("js/")[0];
}
function getEmbedScriptPath(scriptname) {
var scriptTags = document.getElementsByTagName('script'),
script_path = "",
script_path_end = "";
for(var i = 0; i < scriptTags.length; i++) {
if (scriptTags[i].src.match(scriptname)) {
script_path = scriptTags[i].src;
}
}
if (script_path != "") {
script_path_end = "/"
}
return script_path.split('?')[0].split('/').slice(0, -1).join('/') + script_path_end;
}
/* CHECK TO SEE IF A CONFIG IS ALREADY DEFINED (FOR EASY EMBED)
================================================== */
(function() {
if (typeof url_config == 'object') {
createStoryJS(url_config);
} else if (typeof timeline_config == 'object') {
createStoryJS(timeline_config);
} else if (typeof storyjs_config == 'object') {
createStoryJS(storyjs_config);
} else if (typeof config == 'object') {
createStoryJS(config);
} else {
// No existing config. Call createStoryJS(your_config) manually with a config
}
})();
/* CREATE StoryJS Embed
================================================== */
function createStoryJS(c, src) {
/* VARS
================================================== */
var storyjs_embedjs, t, te, x,
isCDN = false,
js_version = "2.24",
jquery_version_required = "1.7.1",
jquery_version = "",
ready = {
timeout: "",
checks: 0,
finished: false,
js: false,
css: false,
jquery: false,
has_jquery: false,
language: false,
font: {
css: false,
js: false
}
},
path = {
base: embed_path,
css: embed_path + "css/",
js: embed_path + "js/",
locale: embed_path + "js/locale/",
jquery: "//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js",
font: {
google: false,
css: embed_path + "css/themes/font/",
js: "//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"
}
},
storyjs_e_config = {
version: js_version,
debug: false,
type: 'timeline',
id: 'storyjs',
embed_id: 'timeline-embed',
embed: true,
width: '100%',
height: '100%',
source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadFYzRjJPUGktY0NkWXFUWkVIZDNGRHc&output=html',
lang: 'en',
font: 'default',
css: path.css + 'timeline.css?'+js_version,
js: '',
api_keys: {
google: "",
flickr: "",
twitter: ""
},
gmap_key: ""
},
font_presets = [
{ name: "Merriweather-NewsCycle", google: [ 'News+Cycle:400,700:latin', 'Merriweather:400,700,900:latin' ] },
{ name: "NewsCycle-Merriweather", google: [ 'News+Cycle:400,700:latin', 'Merriweather:300,400,700:latin' ] },
{ name: "PoiretOne-Molengo", google: [ 'Poiret+One::latin', 'Molengo::latin' ] },
{ name: "Arvo-PTSans", google: [ 'Arvo:400,700,400italic:latin', 'PT+Sans:400,700,400italic:latin' ] },
{ name: "PTSerif-PTSans", google: [ 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },
{ name: "PT", google: [ 'PT+Sans+Narrow:400,700:latin', 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },
{ name: "DroidSerif-DroidSans", google: [ 'Droid+Sans:400,700:latin', 'Droid+Serif:400,700,400italic:latin' ] },
{ name: "Lekton-Molengo", google: [ 'Lekton:400,700,400italic:latin', 'Molengo::latin' ] },
{ name: "NixieOne-Ledger", google: [ 'Nixie+One::latin', 'Ledger::latin' ] },
{ name: "AbrilFatface-Average", google: [ 'Average::latin', 'Abril+Fatface::latin' ] },
{ name: "PlayfairDisplay-Muli", google: [ 'Playfair+Display:400,400italic:latin', 'Muli:300,400,300italic,400italic:latin' ] },
{ name: "Rancho-Gudea", google: [ 'Rancho::latin', 'Gudea:400,700,400italic:latin' ] },
{ name: "Bevan-PotanoSans", google: [ 'Bevan::latin', 'Pontano+Sans::latin' ] },
{ name: "BreeSerif-OpenSans", google: [ 'Bree+Serif::latin', 'Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800:latin' ] },
{ name: "SansitaOne-Kameron", google: [ 'Sansita+One::latin', 'Kameron:400,700:latin' ] },
{ name: "Lora-Istok", google: [ 'Lora:400,700,400italic,700italic:latin', 'Istok+Web:400,700,400italic,700italic:latin' ] },
{ name: "Pacifico-Arimo", google: [ 'Pacifico::latin', 'Arimo:400,700,400italic,700italic:latin' ] }
];
/* BUILD CONFIG
================================================== */
if (typeof c == 'object') {
for (x in c) {
if (Object.prototype.hasOwnProperty.call(c, x)) {
storyjs_e_config[x] = c[x];
}
}
}
if (typeof src != 'undefined') {
storyjs_e_config.source = src;
}
/* CDN VERSION?
================================================== */
if (typeof url_config == 'object') {
isCDN = true;
/* IS THE SOURCE GOOGLE SPREADSHEET WITH JUST THE KEY?
================================================== */
if (storyjs_e_config.source.match("docs.google.com") || storyjs_e_config.source.match("json") || storyjs_e_config.source.match("storify") ) {
} else {
storyjs_e_config.source = "https://docs.google.com/spreadsheet/pub?key=" + storyjs_e_config.source + "&output=html";
}
}
/* DETERMINE TYPE
================================================== */
// Check for old installs still using the old method of language
if (storyjs_e_config.js.match("locale")) {
storyjs_e_config.lang = storyjs_e_config.js.split("locale/")[1].replace(".js", "");
storyjs_e_config.js = path.js + 'timeline-min.js?' + js_version;
}
if (storyjs_e_config.js.match("/")) {
} else {
storyjs_e_config.css = path.css + storyjs_e_config.type + ".css?" + js_version;
// Use unminified js file if in debug mode
storyjs_e_config.js = path.js + storyjs_e_config.type;
if (storyjs_e_config.debug) {
storyjs_e_config.js += ".js?" + js_version;
} else {
storyjs_e_config.js += "-min.js?" + js_version;
}
storyjs_e_config.id = "storyjs-" + storyjs_e_config.type;
}
/* PREPARE LANGUAGE
================================================== */
if (storyjs_e_config.lang.match("/")) {
path.locale = storyjs_e_config.lang;
} else {
path.locale = path.locale + storyjs_e_config.lang + ".js?" + js_version;
}
/* PREPARE
================================================== */
createEmbedDiv();
/* Load CSS
================================================== */
LoadLib.css(storyjs_e_config.css, onloaded_css);
/* Load FONT
================================================== */
if (storyjs_e_config.font == "default") {
ready.font.js = true;
ready.font.css = true;
} else {
// FONT CSS
var fn;
if (storyjs_e_config.font.match("/")) {
fn = storyjs_e_config.font.split(".css")[0].split("/");
path.font.name = fn[fn.length -1];
path.font.css = storyjs_e_config.font;
} else {
path.font.name = storyjs_e_config.font;
path.font.css = path.font.css + storyjs_e_config.font + ".css?" + js_version;
}
LoadLib.css(path.font.css, onloaded_font_css);
// FONT GOOGLE JS
for(var i = 0; i < font_presets.length; i++) {
if (path.font.name == font_presets[i].name) {
path.font.google = true;
WebFontConfig = {google: { families: font_presets[i].google }};
}
}
if (path.font.google) {
LoadLib.js(path.font.js, onloaded_font_js);
} else {
ready.font.js = true;
}
}
/* Load jQuery
================================================== */
try {
ready.has_jquery = jQuery;
ready.has_jquery = true;
if (ready.has_jquery) {
var jquery_version = parseFloat(jQuery.fn.jquery);
if (jquery_version < parseFloat(jquery_version_required) ) {
//console.log("NOT THE REQUIRED VERSION OF JQUERY, LOADING THE REQUIRED VERSION");
//console.log("YOU HAVE VERSION " + jQuery.fn.jquery + ", JQUERY VERSION " + jquery_version_required + " OR ABOVE NEEDED");
ready.jquery = false;
} else {
ready.jquery = true;
}
}
} catch(err) {
ready.jquery = false;
}
if (!ready.jquery) {
LoadLib.js(path.jquery, onloaded_jquery);
} else {
onloaded_jquery();
}
/* On Loaded
================================================== */
function onloaded_jquery() {
LoadLib.js(storyjs_e_config.js, onloaded_js);
}
function onloaded_js() {
ready.js = true;
if (storyjs_e_config.lang != "en") {
LazyLoad.js(path.locale, onloaded_language);
} else {
ready.language = true;
}
onloaded_check();
}
function onloaded_language() {
ready.language = true;
onloaded_check();
}
function onloaded_css() {
ready.css = true;
onloaded_check();
}
function onloaded_font_css() {
ready.font.css = true;
onloaded_check();
}
function onloaded_font_js() {
ready.font.js = true;
onloaded_check();
}
function onloaded_check() {
if (ready.checks > 40) {
return;
alert("Error Loading Files");
} else {
ready.checks++;
if (ready.js && ready.css && ready.font.css && ready.font.js && ready.language) {
if (!ready.finished) {
ready.finished = true;
buildEmbed();
}
} else {
ready.timeout = setTimeout('onloaded_check_again();', 250);
}
}
};
this.onloaded_check_again = function() {
onloaded_check();
};
/* Build Timeline
================================================== */
function createEmbedDiv() {
var embed_classname = "storyjs-embed";
t = document.createElement('div');
if (storyjs_e_config.embed_id != "") {
te = document.getElementById(storyjs_e_config.embed_id);
} else {
te = document.getElementById("timeline-embed");
}
te.appendChild(t);
t.setAttribute("id", storyjs_e_config.id);
if (storyjs_e_config.width.toString().match("%") ) {
te.style.width = storyjs_e_config.width.split("%")[0] + "%";
} else {
storyjs_e_config.width = storyjs_e_config.width - 2;
te.style.width = (storyjs_e_config.width) + 'px';
}
if (storyjs_e_config.height.toString().match("%")) {
te.style.height = storyjs_e_config.height;
embed_classname += " full-embed";
te.style.height = storyjs_e_config.height.split("%")[0] + "%";
} else if (storyjs_e_config.width.toString().match("%")) {
embed_classname += " full-embed";
storyjs_e_config.height = storyjs_e_config.height - 16;
te.style.height = (storyjs_e_config.height) + 'px';
}else {
embed_classname += " sized-embed";
storyjs_e_config.height = storyjs_e_config.height - 16;
te.style.height = (storyjs_e_config.height) + 'px';
}
te.setAttribute("class", embed_classname);
te.setAttribute("className", embed_classname);
t.style.position = 'relative';
}
function buildEmbed() {
VMM.debug = storyjs_e_config.debug;
storyjs_embedjs = new VMM.Timeline(storyjs_e_config.id);
storyjs_embedjs.init(storyjs_e_config);
if (isCDN) {
VMM.bindEvent(global, onHeadline, "HEADLINE");
}
}
}

361
source/js/Core/LICENSE

@ -0,0 +1,361 @@
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
-------------------------------------------

37
source/js/Core/Language/VMM.Language.js

@ -0,0 +1,37 @@
/* DEFAULT LANGUAGE
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.Language == 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.","Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Loading Content",
loading: "Loading"
}
}
};

38
source/js/Core/Language/locale/af.js

@ -0,0 +1,38 @@
/* Afrikaans LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "af",
api: {
wikipedia: "af"
},
date: {
month: ["Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September", "Oktober", "November", "Desember"],
month_abbr: ["Jan.", "Feb.", "Maart", "April", "Mei", "Junei", "Julie", "Aug.", "Sept.", "Okt.", "Nov.", "Des."],
day: ["Sondag","Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"],
day_abbr: ["Son.","Maan.", "Dins.", "Woen.", "Don.", "Vry.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "d mmm',' yyyy 'om' HH:MM",
full_long_small_date: "HH:MM'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Die tydlyn laai... ",
return_to_title: "Begin voor",
expand_timeline: "Rek die tydlyn",
contract_timeline: "Krimp die tydlyn",
wikipedia: "Van Wikipedia, die gratis ensiklopedie",
loading_content: "Die inhoud laai",
loading: "Aan't laai"
}
}
}

38
source/js/Core/Language/locale/ar.js

@ -0,0 +1,38 @@
/* Arabic LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ar",
right_to_left: true,
api: {
wikipedia: "ar"
},
date: {
month: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"],
month_abbr: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"],
day: ["الأحد","الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"],
day_abbr: ["الأحد","الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:SS TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "جاري التحميل... ",
return_to_title: "العودة",
expand_timeline: "تكبير العرض",
contract_timeline: "الاتفاقية",
wikipedia: "من ويكيبيديا, الموسوعة الحرة",
loading_content: "تحميل المحتوى",
loading: "تحميل"
}
}
}

37
source/js/Core/Language/locale/bg.js

@ -0,0 +1,37 @@
/* Bulgarian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "bg",
api: {
wikipedia: "bg"
},
date: {
month: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
month_abbr: ["Ян.", "Фев.", "Март", "Апр.", "Май", "Юни", "Юли", "Авг.", "Септ.", "Окт.", "Ноем.", "Дек."],
day: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"],
day_abbr: ["Нед.", "Пон.", "Вт.", "Ср.", "Четв.", "Пет.", "Съб."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "h:MM:SS TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'d mmmm yyyy'</small>'",
full_long: "d mmm yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Зареждане... ",
return_to_title: "В началото",
expand_timeline: "Разширяване",
contract_timeline: "Свиване",
wikipedia: "От Уикипедия, свободната енциклопедия",
loading_content: "Съдържанието се зарежда",
loading: "Зарежда се"
}
}
}

37
source/js/Core/Language/locale/ca.js

@ -0,0 +1,37 @@
/* Catalan LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ca",
api: {
wikipedia: "ca"
},
date: {
month: ['Gener','Febrer','Març','Abril','Maig','Juny','Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
month_abbr: ['Gen','Feb','Mar','Abr','Mai','Jun','Jul','Ago','Set','Oct','Nov','Des'],
day: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
day_abbr: ['Dg.','Dl.','Dt.','Dc.','Dj.','Dv.','Ds.']
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "'<small>'d mmmm yyyy'</small>' HH:MM",
full_long: "dddd',' d mmm yyyy HH:MM",
full_long_small_date: "HH:MM'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Carregant cronologia...",
return_to_title: "Tornar al títol",
expand_timeline: "Ampliar la cronologia",
contract_timeline: "Reduir la cronologia",
wikipedia: "Des de Wikipedia, l'enciclopèdia lliure",
loading_content: "Carregant contingut",
loading: "Carregant"
}
}
}

37
source/js/Core/Language/locale/cz.js

@ -0,0 +1,37 @@
/* Czech LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "cz",
api: {
wikipedia: "cs"
},
date: {
month: ["ledna", "února", "března", "dubna", "května", "června", "července", "srpna", "září", "října", "listopadu", "prosince"],
month_abbr: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čen", "Čec", "Srp", "Zář", "Říj", "Lis", "Pro"],
day: ["neděle","pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota"],
day_abbr: ["Ne","Po", "Út", "St", "Čt", "Pá", "So"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm ",
full: "d. mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm yyyy'</small>'",
full_long: "dddd d. mmm yyyy 'v' HH:MM",
full_long_small_date: "HH:MM'<br/><small>dddd d. mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Načítám časovou osu... ",
return_to_title: "Zpět na začátek",
expand_timeline: "Rozbalit časovou osu",
contract_timeline: "Sbalit časovou osu",
wikipedia: "Zdroj: otevřená encyklopedie Wikipedia",
loading_content: "Nahrávám obsah",
loading: "Nahrávám"
}
}
}

37
source/js/Core/Language/locale/da.js

@ -0,0 +1,37 @@
/* Danish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "da",
api: {
wikipedia: "da"
},
date: {
month: ["januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december"],
month_abbr: ["jan.", "feb.", "mar.", "apr.", "maj.", "jun.", "jul.", "aug.", "sep.", "okt.", "nov.", "dec."],
day: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"],
day_abbr: ["sø.", "ma.", "ti.", "on.", "to.", "fr.", "lø."],
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm",
full: "d. mmmm',' yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm',' yyyy'</small>'",
full_long: "dddd',' d. mmm',' yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d. mmm yyyy'</small>'",
},
messages: {
loading_timeline: "Henter tidslinie...",
return_to_title: "Tilbage til titel",
expand_timeline: "Udvid tidslinien",
contract_timeline: "Træk tidslinien sammen",
wikipedia: "Fra Wikipedia",
loading_content: "Henter indhold",
loading: "Henter"
}
}
}

37
source/js/Core/Language/locale/de.js

@ -0,0 +1,37 @@
/* German / Deutsch LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "de",
api: {
wikipedia: "de"
},
date: {
month: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
month_abbr: ["Jan.", "Feb.", "März", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."],
day: ["Sonntag","Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
day_abbr: ["So.","Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm",
full: "d. mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm yyyy'</small>'",
full_long: "dddd',' d. mmm yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d. mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Chronologie wird geladen...",
return_to_title: "Zurück zum Anfang",
expand_timeline: "Chronologie vergrößern",
contract_timeline: "Chronologie verkleinern",
wikipedia: "Wikipedia, Die freie Enzyklopädie",
loading_content: "Loading",
loading: "Loading"
}
}
}

37
source/js/Core/Language/locale/el.js

@ -0,0 +1,37 @@
/* Greek LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
month_abbr: ["Ιαν.", "Φεβ.", "Μαρ.", "Απρ.", "Μαη", "Ιουν.", "Ιουλ.", "Αύγ.", "Σεπτ.", "Οκτ.", "Νοεμ.", "Δεκ."],
day: ["Κυριακή","Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"],
day_abbr: ["Κυρ.","Δευ.", "Τρίτη.", "Τετ.", "Πεμπ.", "Παρ.", "Σαβ."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:SS TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Φόρτωση Timeline... ",
return_to_title: "Επιστροφή στον Τίτλο",
expand_timeline: "Μεγέθυνση",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Φόρτωση Περιεχομένου",
loading: "Γίνεται Φόρτωση"
}
}
}

37
source/js/Core/Language/locale/en-24hr.js

@ -0,0 +1,37 @@
/* English LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.","Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM TT",
time_no_seconds_small_date: "HH:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' HH:MM TT",
full_long_small_date: "HH:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Loading Content",
loading: "Loading"
}
}
}

37
source/js/Core/Language/locale/en.js

@ -0,0 +1,37 @@
/* English LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.","Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Loading Content",
loading: "Loading"
}
}
}

37
source/js/Core/Language/locale/es.js

@ -0,0 +1,37 @@
/* Spanish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "es",
api: {
wikipedia: "es"
},
date: {
month: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
month_abbr: ["Ene.", "Feb.", "Mar.", "Abr.", "May.", "Jun.", "Jul.", "Ago.", "Sep.", "Oct.", "Nov.", "Dic."],
day: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
day_abbr: ["Dom.", "Lun.", "Mar.", "Mié.", "Jue.", "Vie.", "Sáb."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "'<small>'d mmmm yyyy'</small>' HH:MM",
full_long: "dddd',' d mmm yyyy HH:MM",
full_long_small_date: "HH:MM'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Cronología esta cargando",
return_to_title: "Volver al título",
expand_timeline: "Enlargar la cronología",
contract_timeline: "Reducir la cronología",
wikipedia: "Desde Wikipedia, la enciclopedia libre",
loading_content: "cargando",
loading: "cargando"
}
}
}

38
source/js/Core/Language/locale/eu.js

@ -0,0 +1,38 @@
/* Basque/ Euskara LANGUAGE
================================================== */
if (typeof VMM != 'undefined') {
VMM.Language = {
lang: "eu",
api: {
wikipedia: "eu"
},
date: {
month: ["Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"],
month_abbr: ["Urt.", "Ots.", "Mar.", "Api.", "Mai.", "Eka.", "Uzt.", "Abu.", "Ira.", "Urr.", "Aza.", "Abe."],
day: ["Igandea", "Astelehena", "Asteartea", "Asteazkena", "Osteguna", "Ostirala", "Larunbata"],
day_abbr: ["Iga.", "Asl.", "Asr.", "Asz.", "Osg.", "Osr.", "Lar."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "yyyy'(e)ko' mmmm",
full_short: "mmm'-'d",
full: "yyyy'(e)ko' mmmm'k' d",
time_short: "h:MM:SS TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br /><small>'yyyy'-'mmm'-'d'</small>",
full_long: "yyyy'(e)ko' mmmm'ren' d'(e)an,' hh:MM TT'(r)etan'",
full_long_small_date: "hh:MM TT'<br /><small>'yyyy'-'mmm'-'d'</small>"
},
messages: {
loading_timeline: "Kronologia kargatzen...",
return_to_title: "Titulura itzuli",
expand_timeline: "Handiago ikusi",
contract_timeline: "Txikiago ikusi",
wikipedia: "Wikipedia entziklopedia libretik",
loading_content: "Edukia kargatzen",
loading: "Kargatzen"
}
}
}

37
source/js/Core/Language/locale/fi.js

@ -0,0 +1,37 @@
/* Finnish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "fi",
api: {
wikipedia: "fi"
},
date: {
month: ["tammikuuta", "helmikuuta", "maaliskuuta", "huhtikuuta", "toukokuuta", "kesäkuuta", "heinäkuuta", "elokuuta", "syyskuuta", "lokakuuta", "marraskuuta", "joulukuuta"],
month_abbr: ["tammi", "helmi", "maalis", "huhti", "touko", "kesä", "heinä", "elo", "syys", "loka", "marras", "joulu"],
day: ["sunnuntai","maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauauntai"],
day_abbr: ["su","ma", "ti", "ke", "to", "pe", "la"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm",
full: "d. mmmm yyyy",
time_short: "h:MM:SS TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'d. mmmm yyyy'</small>'",
full_long: "mmm d yyyy 'klo' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>d. mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Ladataan aikajanaa… ",
return_to_title: "Takaisin etusivulle",
expand_timeline: "Laajenna aikajanaa",
contract_timeline: "Tiivistä aikajanaa",
wikipedia: "Wikipediasta",
loading_content: "Ladataan sisältöä",
loading: "Ladataan"
}
}
}

37
source/js/Core/Language/locale/fo.js

@ -0,0 +1,37 @@
/* Faroese LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "fo",
api: {
wikipedia: "fo"
},
date: {
month: ["januar", "februar", "mars", "aprÌl", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"],
month_abbr: ["jan.", "febr.", "mars", "aprÌl", "mai", "juni", "juli", "aug.", "sept.", "okt.", "nov.", "des."],
day: ["sunnudagur","m·nadagur", "t˝sdagur", "mikudagur", "hÛsdagur", "frÌggjadagur", "leygardagur"],
day_abbr: ["sun.","m·n.", "t˝s.", "mik.", "hÛs.", "frÌ.", "ley."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d'.' mmm",
full: "d'.' mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d'.' mmmm yyyy'</small>'",
full_long: "d'.' mmmm yyyy 'klokkan' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'d'.' mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Lesur inn t&iacute;&eth;arr&aacute;s...",
return_to_title: "V&iacute;&eth;ka t&iacute;&eth;arr&aacute;s...",
expand_timeline: "Minka t&iacute;&eth;arr&aacute;s...",
contract_timeline: "Minka t&iacute;&eth;arr&aacute;s",
wikipedia: "Fr· Wikipedia",
loading_content: "Lesur inn tilfar",
loading: "Lesur inn"
}
}
}

38
source/js/Core/Language/locale/fr.js

@ -0,0 +1,38 @@
/* French LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "fr",
api: {
wikipedia: "fr"
},
date: {
month: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
month_abbr: ["janv.", "févr.", "mars", "avril", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "dec."],
day: ["Dimanche","Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
day_abbr: ["Dim.","Lu.", "Ma.", "Me.", "Jeu.", "Vend.", "Sam."],
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'à' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Chargement de la frise en cours... ",
return_to_title: "Retour à la page d'accueil",
expand_timeline: "Elargir la frise",
contract_timeline: "Réduire la frise",
wikipedia: "Extrait de Wikipedia, l'encyclopédie libre",
loading_content: "Chargement",
loading: "Chargement"
}
}
}

37
source/js/Core/Language/locale/gl.js

@ -0,0 +1,37 @@
/* Galician LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "gl",
api: {
wikipedia: "gl"
},
date: {
month: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"],
month_abbr: ["Xan.", "Feb.", "Mar.", "Abr.", "Mai.", "Xuñ.", "Xul.", "Ago.", "Set.", "Out.", "Nov.", "Dec."],
day: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"],
day_abbr: ["Dom.", "Lun.", "Mar.", "Mér.", "Xov.", "Ven.", "Sáb."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Cronoloxía esta cargando",
return_to_title: "Volver ao título",
expand_timeline: "Alongar a cronoloxía",
contract_timeline: "Acurtar a cronoloxía",
wikipedia: "Dende Wikipedia, a enciclopedia libre",
loading_content: "cargando",
loading: "cargando"
}
}
}

38
source/js/Core/Language/locale/he.js

@ -0,0 +1,38 @@
/* Hebrew (beta) LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "he",
right_to_left: true,
api: {
wikipedia: "he"
},
date: {
month: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
month_abbr: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
day: ["ראשון","שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
day_abbr: ["יום א'","יום ב'", "יום ג'", "יום ד'", "יום ה'", "יום ו'", "שבת"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm,' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "d' mmm,' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "טוען את ציר הזמן... ",
return_to_title: "חזור לכותרת",
expand_timeline: "הרחב את ציר הזמן",
contract_timeline: "צמצם את ציר הזמן",
wikipedia: "מויקיפדיה, האינציקלופדיה החופשית",
loading_content: "התוכן בטעינה...",
loading: "טוען..."
}
}
}

37
source/js/Core/Language/locale/hu.js

@ -0,0 +1,37 @@
/* Hungarian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "hu",
api: {
wikipedia: "hu"
},
date: {
month: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"],
month_abbr: ["Jan.", "Febr.", "Márc", "Ápr.", "Máj.", "Jún.", "Júl.", "Aug.", "Szept.", "Okt.", "Nov.", "Dec."],
day: ["Vasárnap","Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat"],
day_abbr: ["Vas.","Hétfő", "Kedd", "Szer.", "Csüt.", "Pén.", "Szom."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "yyyy mmmm",
full_short: "mmm d",
full: "yyyy mmmm d",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM '<br/><small>'yyyy mmmm d'</small>'",
full_long: "yyyy mmm d',' HH:MM",
full_long_small_date: "HH:MM '<br/><small>yyyy mmm d'</small>'"
},
messages: {
loading_timeline: "Az idővonal betöltése... ",
return_to_title: "Vissza a címhez",
expand_timeline: "Nagyítás",
contract_timeline: "Kicsinyítés",
wikipedia: "A Wikipédiából, a szabad enciklopédiából",
loading_content: "Tartalom betöltése",
loading: "Betöltés"
}
}
}

37
source/js/Core/Language/locale/hy.js

@ -0,0 +1,37 @@
/* Armenian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "hy",
api: {
wikipedia: "hy"
},
date: {
month: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"],
month_abbr: ["Հնվ.", "Փետ.", "Մար", "Ապր", "Մայ", "Հուն", "Հուլ", "Օգս.", "Սեպ.", "Հոկ.", "Նոյ.", "Դեկ."],
day: ["Կիրակի","Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"],
day_abbr: ["Կի.","Եկ.", "Եք.", "Չո.", "Հի.", "Ու.", "Շա."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm',' yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "H:MM",
time_no_seconds_small_date: "H:MM'<br/><small>'d mmmm',' yyyy'</small>'",
full_long: "d mmm',' yyyy 'at' H:MM",
full_long_small_date: "H:MM '<br/><small>d mmm',' yyyy'</small>'"
},
messages: {
loading_timeline: "Ժամանակագրությունը բեռնվում է... ",
return_to_title: "Վերադառնալ վերնագրին",
expand_timeline: "Լայնացնել ժամանակագրությունը",
contract_timeline: "Նեղացնել ժամանակագրությունը",
wikipedia: "Ըստ Վիքիպեդիա ազատ հանրագիտարանի",
loading_content: "Բովանդակությունը բեռնվում է",
loading: "Բեռնում"
}
}
}

37
source/js/Core/Language/locale/id.js

@ -0,0 +1,37 @@
/* Indonesian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "id",
api: {
wikipedia: "id"
},
date: {
month: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
month_abbr: ["Jan.", "Feb.", "Maret", "April", "Mei", "Juni", "July", "Agus.", "Sept.", "Okt.", "Nov.", "Des."],
day: ["Ahad","Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"],
day_abbr: ["Ahad","Sen.", "Sel.", "Rabu", "Kamis", "Jum.", "Sab."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:SS",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'pukul' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Memuat Timeline... ",
return_to_title: "Kembali ke Judul",
expand_timeline: "Kembangkan Timeline",
contract_timeline: "Ciutkan Timeline",
wikipedia: "dari Wikipedia, ensiklopedia bebas",
loading_content: "Memuat Isi",
loading: "Memuat"
}
}
}

38
source/js/Core/Language/locale/is.js

@ -0,0 +1,38 @@
/* Icelandic LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "is",
api: {
wikipedia: "is"
},
date: {
month: ["janúar", "febrúar", "mars", "apríl", "maí", "júní", "júlí", "ágúst", "september", "október", "nóvember", "desember"],
month_abbr: ["jan.", "feb.", "mars", "apríl", "maí", "júní", "júlí", "ágúst", "sept.", "okt.", "nóv.", "des."],
day: ["sunnudagur", "mánudagur", "þriðjudagur", "miðvikudagur", "fimmtudagur", "föstudagur", "laugardagur"],
day_abbr: ["sun.","mán.", "þri.", "mið.", "fim.", "fös.", "lau."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:SS TT",
time_no_seconds_short: "hh:MM TT",
time_no_seconds_small_date: "hh:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "dddd',' mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>'dddd',' mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Raða upp tímalínu... ",
return_to_title: "Til baka á forsíðu",
expand_timeline: "Stækka tímalínu",
contract_timeline: "Minnka tímalínu",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Raða",
loading: "Raða"
}
}
}

38
source/js/Core/Language/locale/it.js

@ -0,0 +1,38 @@
/* Italian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "it",
api: {
wikipedia: "it"
},
date: {
month: ["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],
month_abbr: ["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],
day: ["Domenica","Lunedi","Martedi","Mercoledi","Giovedi","Venerdi","Sabato"],
day_abbr: ["Dom.","Lun.","Mar.","Mer.","Gio.","Ven.","Sab."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "Wikipedia, L’enciclopedia libera",
loading_content: "Loading Content",
loading: "Loading"
}
}
}

39
source/js/Core/Language/locale/iw.js

@ -0,0 +1,39 @@
/* Hebrew (beta) LANGUAGE
================================================== */
trace("Language code 'iw' for Hebrew is deprecated. Use 'he' instead.")
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "iw",
right_to_left: true,
api: {
wikipedia: "he"
},
date: {
month: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
month_abbr: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
day: ["ראשון","שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
day_abbr: ["יום א'","יום ב'", "יום ג'", "יום ד'", "יום ה'", "יום ו'", "שבת"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm,' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "d' mmm,' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "טוען את ציר הזמן... ",
return_to_title: "חזור לכותרת",
expand_timeline: "הרחב את ציר הזמן",
contract_timeline: "צמצם את ציר הזמן",
wikipedia: "מויקיפדיה, האינציקלופדיה החופשית",
loading_content: "התוכן בטעינה...",
loading: "טוען..."
}
}
}

38
source/js/Core/Language/locale/ja.js

@ -0,0 +1,38 @@
/* Japanese LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ja",
api: {
wikipedia: "ja"
},
date: {
month: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
month_abbr: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
day: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
day_abbr: ["日", "月", "火", "水", "木", "金", "土"]
},
dateformats: {
year: "yyyy年",
month_short: "mmm",
month: "yyyy年 m月d日 (ddd)",
full_short: "yyyy年m月d日",
full: "yyyy年 m月d日 (ddd)",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'yyyy年m月d日'</small>'",
full_long: "yyyy年m月d日 H時M分s秒",
full_long_small_date: "HH:MM:ss'<br/><small>'yyyy年m月d日'</small>'"
},
messages: {
loading_timeline: "タイムラインをロードしています…",
return_to_title: "タイトルへ戻ります",
expand_timeline: "タイムラインを展開します",
contract_timeline: "タイムラインを縮めます",
wikipedia: "出典:フリー百科事典『ウィキペディア(Wikipedia)』",
loading_content: "コンテンツをロードしています",
loading: "ローディング"
}
}
}

37
source/js/Core/Language/locale/ka.js

@ -0,0 +1,37 @@
/* Georgian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ka",
api: {
wikipedia: "ka"
},
date: {
month: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"],
month_abbr: ["იან.", "თებ.", "მარტი", "აპრ", "მაი.", "ივნ.", "ივლ.", "აგვ.", "სექ.", "ოქტ.", "ნოე.", "დეკ."],
day: ["კვირა","ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"],
day_abbr: ["კვ.","ორ.", "სამ.", "ოთხ.", "ხუთ.", "პარ.", "შაბ."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "იტვირთება თაიმლაინი... ",
return_to_title: "დაბრუნდი თავში",
expand_timeline: "გაშალე თაიმლაინი",
contract_timeline: "Contract Timeline",
wikipedia: "თავისუფალი ენციკლოპედია Wikipedia-დან",
loading_content: "შინაარსის ჩამოტვირთვა",
loading: "ჩამოტვირთვა"
}
}
}

38
source/js/Core/Language/locale/ko.js

@ -0,0 +1,38 @@
/* Korean LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ko",
api: {
wikipedia: "ko"
},
date: {
month: ["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],
month_abbr: ["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],
day: ["일요일" , "월요일" , "화요일" , "수요일" , "목요일" , "금요일" , "토요일"],
day_abbr: ["일" , "월" , "화" , "수" , "목" , "금" , "토"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "yyyy mmm",
full_short: "mmm d",
full: "yyyy mmm d ",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'yyyy mmm d'</small>'",
full_long: "dddd',' d mmm yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd','yyyy mmm d'</small>'"
},
messages: {
loading_timeline: "타임라인을 불러오고 있습니다.... ",
return_to_title: "첫화면으로",
expand_timeline: "타임라인 확대",
contract_timeline: "타임라인 축소",
wikipedia: "출처: 위키피디아, 우리 모두의 백과사전",
loading_content: "내용을 불러오고 있습니다.",
loading: "불러오는중"
}
}
}

37
source/js/Core/Language/locale/lb.js

@ -0,0 +1,37 @@
/* Luxembourgish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "lb",
api: {
wikipedia: "lb"
},
date: {
month: ["Januar", "Februar", "Mäerz", "Abrëll", "Mee", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
month_abbr: ["Jan.", "Feb.", "Mäe.", "Abr.", "Mee", "Jun.", "Jul", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."],
day: ["Sonndeg","Méindeg", "Dënschdeg", "Mëttwoch", "Donneschden", "Freiden", "Samschden"],
day_abbr: ["Son.","Méi.", "Dë.", "Më.", "Do.", "Fr.", "Sa."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "d'.' mmmm yyyy",
time_short: "hh:MM:ss",
time_no_seconds_short: "hh:MM",
time_no_seconds_small_date: "h:MM TT'<br/><small>'d'.' mmmm yyyy'</small>'",
full_long: "d'.' mmm yyyy 'um' hh:MM TT",
full_long_small_date: "hh:MM'<br/><small>d'.' mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Timeline gëtt gelueden... ",
return_to_title: "Zeréck zum Titel",
expand_timeline: "Timeline vergréisseren",
contract_timeline: "Timeline verklengeren",
wikipedia: "Vu Wikipedia, der fräier Enzyklopedie",
loading_content: "Inhalt lued",
loading: "Lued"
}
}
}

37
source/js/Core/Language/locale/lv.js

@ -0,0 +1,37 @@
/* Latvian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "lv",
api: {
wikipedia: "lv"
},
date: {
month: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
month_abbr: ["Jan.", "Feb.", "Mar.", "Apr.", "Mai.", "Jūn.", "Jūl.", "Aug.", "Sep.", "Okt.", "Nov.", "Dec."],
day: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"],
day_abbr: ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "d. mmmm',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "HH:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Ielādējas grafiks... ",
return_to_title: "Atgriezties uz sākumu",
expand_timeline: "Izvērst grafiku",
contract_timeline: "Sašaurināt grafiku",
wikipedia: "No Wikipedia, brīvās enciklopēdijas",
loading_content: "Ielādējas saturs",
loading: "Ielādējas"
}
}
}

38
source/js/Core/Language/locale/nl.js

@ -0,0 +1,38 @@
/* Dutch LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "nl",
api: {
wikipedia: "nl"
},
date: {
month: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
month_abbr: ["jan", "febr", "maa", "apr", "mei", "juni", "juli", "aug", "sept", "okt", "nov", "dec"],
day: ["zondag","maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
day_abbr: ["zo","ma", "di", "wo", "do", "vr", "za"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'om' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Tijdlijn laden ... ",
return_to_title: "Terug naar het begin",
expand_timeline: "Tijdlijn uitzoomen",
contract_timeline: "Tijdlijn inzoomen",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Inhoud laden",
loading: "Laden"
}
}
}

37
source/js/Core/Language/locale/no.js

@ -0,0 +1,37 @@
/* Norwegian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "no",
api: {
wikipedia: "no"
},
date: {
month: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
month_abbr: ["Jan.", "Feb.", "Mars", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sep.", "Okt.", "Nov.", "Des."],
day: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
day_abbr: ["Søn.", "Man.", "Tir.", "Ons.", "Tor.", "Fre.", "Lør."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm",
full: "d. mmmm',' yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm',' yyyy'</small>'",
full_long: "dddd',' d. mmm',' yyyy 'kl.' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d. mmm',' yyyy'</small>'"
},
messages: {
loading_timeline: "Laster timeline... ",
return_to_title: "Tilbake til tittel",
expand_timeline: "Utvid timeline",
contract_timeline: "Krymp timeline",
wikipedia: "Fra Wikipedia, den frie encyklopedi",
loading_content: "Laster innhold",
loading: "Laster"
}
}
}

37
source/js/Core/Language/locale/pl.js

@ -0,0 +1,37 @@
/* Polish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "pl",
api: {
wikipedia: "pl"
},
date: {
month: ["Stycznia", "Lutego", "Marca", "Kwietnia", "Maja", "Czerwca", "Lipca", "Sierpnia", "Września", "Października", "Listopada", "Grudnia"],
month_abbr: ["Sty.", "Lut.", "Mar.", "Kwi.", "Maj.", "Cze.", "Lip.", "Sie.", "Wrz.", "Paź.", "Lis.", "Gru."],
day: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
day_abbr: ["Nie.", "Pon.", "Wto.", "Śro.", "Czw.", "Pią.", "Sob."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages:{
loading_timeline: "Ładowanie Timeline... ",
return_to_title: "Wróć do tytułu",
expand_timeline: "Powiększ Timeline",
contract_timeline: "Zmniejsz Timeline",
wikipedia: "Z Wikipedii, wolnej encyklopedii",
loading_content: "Ładowanie zawartości",
loading: "Ładowanie"
}
}
}

38
source/js/Core/Language/locale/pt-br.js

@ -0,0 +1,38 @@
/* Brazilian Portuguese LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "pt-br",
api: {
wikipedia: "pt"
},
date: {
month: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
month_abbr: ["Jan.", "Fev.", "Mar.", "Abr.", "Mai.", "Jun.", "Jul.", "Ago.", "Set.", "Out.", "Nov.", "Dez."],
day: ["Domingo","Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
day_abbr: ["Dom.","Seg.", "Ter.", "Qua.", "Qui.", "Sex.", "Sáb."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm 'de' yyyy",
full_short: "d 'de' mmm",
full: "d 'de' mmmm',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "hh:MM TT",
time_no_seconds_small_date: "hh:MM TT'<br/><small>'d 'de' mmmm',' yyyy'</small>'",
full_long: "dddd',' d 'de' mmm',' yyyy 'às' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>'dddd',' d 'de' mmm',' yyyy'</small>'"
},
messages: {
loading_timeline: "Carregando Timeline... ",
return_to_title: "Voltar para o título",
expand_timeline: "Expandir Timeline",
contract_timeline: "Contrair Timeline",
wikipedia: "Wikipedia, A enciclopédia livre",
loading_content: "Carregando Conteúdo",
loading: "Carregando"
}
}
}

37
source/js/Core/Language/locale/pt.js

@ -0,0 +1,37 @@
/* Portuguese LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "pt",
api: {
wikipedia: "pt"
},
date: {
month: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
month_abbr: ["Jan", "Fev", "Mar", "Abr", "Maio", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
day: ["Domingo","Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado"],
day_abbr: ["Dom","Seg", "Ter", "Qua", "Qui", "Sex", "Sab"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "A carregar a timeline... ",
return_to_title: "Voltar ao Título",
expand_timeline: "Expandir Timeline",
contract_timeline: "Colapsar Timeline",
wikipedia: "Wikipedia, A enciclopedia Livre.",
loading_content: "A carregar o conteúdo",
loading: "A carregar"
}
}
}

37
source/js/Core/Language/locale/ru.js

@ -0,0 +1,37 @@
/* Russian LANGUAGE
================================================== */
if (typeof VMM != "undefined") {
VMM.Language = {
lang:"ru",
api:{
wikipedia:"ru"
},
date:{
month:["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
month_abbr:["Янв.", "Фев.", "Март", "Апр.", "Май", "Июнь", "Июль", "Авг.", "Сент.", "Окт.", "Нояб.", "Дек."],
day:["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
day_abbr:["Вск.", "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Сб."]
},
dateformats:{
year:"yyyy",
month_short:"mmm",
month:"mmmm yyyy",
full_short:"mmm d",
full:"mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short:"h:MM TT",
time_no_seconds_small_date:"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long:"mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date:"hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages:{
loading_timeline:"Загрузка... ",
return_to_title:"Вернуться к заголовку",
expand_timeline:"Увеличить",
contract_timeline:"Уменьшить",
wikipedia:"Из Wikipedia",
loading_content:"Загрузка контента",
loading: "Загрузка"
}
}
};

34
source/js/Core/Language/locale/si.js

@ -0,0 +1,34 @@
/* Sinhalese LANGUAGE
================================================== */
typeof VMM != "undefined" && (VMM.Language = {
lang: "si",
api: {
wikipedia: "si"
},
date: {
month: ["ජනව", "පබරව", "ම", "අප", "ම", "ජ", "ජ", "අග", "සබර", "ඔකබර", "නබර", "දබර"],
month_abbr: ["ජන.", "පබ.", "ම", "අප", "ම", "ජ", "ජ", "අග.", "ස.", "ඔක.", "න.", "ද."],
day: ["ඉර", "සද", "අගහරවද", "බද", "බරහසපත", "ස", "සනස"],
day_abbr: ["ඉර.", "සද.", "අග.", "බද.", "බරහස.", "ස.", "සන."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "කල රව ල... ",
return_to_title: "නවත මවට",
expand_timeline: "කල රව වදනන",
contract_timeline: "කල රව අකලනන",
wikipedia: "ව, නදහසවකෂය ව",
loading_content: "අනතරගතය ල",
loading: "ල"
}
});

35
source/js/Core/Language/locale/sk.js

@ -0,0 +1,35 @@
/* Slovak LANGUAGE
================================================== */
typeof VMM != "undefined" && (VMM.Language = {
lang: "sk",
api: {
wikipedia: "sk"
},
date: {
month: ["Janu&#225;r", "Febru&#225;r", "Marec", "Apr&#237;l", "M&#225;j", "J&#250;n", "J&#250;l", "August", "September", "Okt&#243;ber", "November", "December"],
month_abbr: ["Jan.", "Feb.", "Marec", "Apr&#237;l", "M&#225;j", "J&#250;n", "J&#250;l", "Aug.", "Sept.", "Okt.", "Nov.", "Dec."],
day: ["Nede&#318;a", "Pondelok", "Utorok", "Streda", "&#352;tvrtok", "Piatok", "Sobota"],
day_abbr: ["Ned.", "Pon.", "Uto.", "Str.", "&#352;tv.", "Pia.", "Sob."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "d. mmmm',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Na&#269;&#237;tam &#269;asov&#250; os... ",
return_to_title: "Sp&#228;&#357; na &#250;vod",
expand_timeline: "Zv&#228;&#269;&#353;i&#357; &#269;asov&#250; os",
contract_timeline: "Zmen&#353;i&#357; &#269;asov&#250; os",
wikipedia: "Z Wikipedie, encyklop&#233;die zadarmo",
loading_content: "Na&#269;&#237;tam obsah",
loading: "Na&#269;&#237;tanie"
}
});

37
source/js/Core/Language/locale/sl.js

@ -0,0 +1,37 @@
/* Slovenian LANGUAGE SLOVENIAN
================================================== */
if (typeof VMM != 'undefined') {
VMM.Language = {
lang: "sl",
api: {
wikipedia: "sl"
},
date: {
month: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
month_abbr: ["Jan.", "Feb.", "Marec", "April", "Maj", "Junij", "July", "Avg.", "Sept.", "Okt.", "Nov.", "Dec."],
day: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Čertek", "Petek", "Sobota"],
day_abbr: ["Ned.", "Pon.", "Tor.", "Sre.", "Čet.", "Pet.", "Sob."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM",
time_no_seconds_small_date: "h:MM' 'd mmmm' 'yyyy",
full_long: "d mmm yyyy 'ob' hh:MM",
full_long_small_date: "hh:MM' d mmm yyyy"
},
messages: {
loading_timeline: "Nalagam časovni trak... ",
return_to_title: "Nazaj na naslov",
expand_timeline: "Razširi časovni trak",
contract_timeline: "Pokrči časovni trak",
wikipedia: "Vir Wikipedija",
loading_content: "Nalaganje vsebine",
loading: "Nalaganje"
}
}
}

38
source/js/Core/Language/locale/sr-cy.js

@ -0,0 +1,38 @@
/* Serbian (Cyrillic) LANGUAGE
================================================== */
if (typeof VMM != 'undefined') {
VMM.Language = {
lang: "рп",
api: {
wikipedia: "рп"
},
date: {
month: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
month_abbr: ["Јан.", "Феб.", "Март", "Апр.", "Мај", "Јун", "Јул", "Авг.", "Сеп.", "Окт.", "Нов.", "Дец."],
day: ["Недеља", "Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"],
day_abbr: ["Нед.", "Пон.", "Уто.", "Сре.", "Чет.", "Пет.", "Суб."]
},
dateformats: {
year: "yyyy.",
month_short: "mmm",
month: "mmmm yyyy.",
full_short: "d. mmm",
full: "d. mmmm yyyy.",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm yyyy.'</small>'",
full_long: "d. mmm yyyy. 'u' HH:MM",
full_long_small_date: "HH:MM'<br/><small>d. mmm yyyy.'</small>'"
},
messages: {
loading_timeline: "Учитавање... ",
return_to_title: "Почетак",
expand_timeline: "Увећај",
contract_timeline: "Умањи",
wikipedia: "Из Википедије, слободне енциклопедије",
loading_content: "Садржај се учитава",
loading: "Учитава се"
}
}
}

38
source/js/Core/Language/locale/sr.js

@ -0,0 +1,38 @@
/* Serbian (Latin) LANGUAGE
================================================== */
if (typeof VMM != 'undefined') {
VMM.Language = {
lang: "sr",
api: {
wikipedia: "sr"
},
date: {
month: ["januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
month_abbr: ["Jan.", "Feb.", "Mart", "Apr.", "Maj", "Jun", "Jul", "Avg.", "Sep.", "Okt.", "Nov.", "Dec."],
day: ["Nedelja", "Ponedeljak", "Utorak", "Sreda", "Četvratk", "Petak", "Subota"],
day_abbr: ["Ned.", "Pon.", "Uto.", "Sre.", "Čet.", "Pet.", "Sub."]
},
dateformats: {
year: "yyyy.",
month_short: "mmm",
month: "mmmm yyyy.",
full_short: "d. mmm",
full: "d. mmmm yyyy.",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm yyyy.'</small>'",
full_long: "d. mmm yyyy. 'u' HH:MM",
full_long_small_date: "HH:MM'<br/><small>d. mmm yyyy.'</small>'"
},
messages: {
loading_timeline: "Učitavanje... ",
return_to_title: "Početak",
expand_timeline: "Uvećaj",
contract_timeline: "Umanji",
wikipedia: "Iz Vikipedije, slobodne enciklopedije",
loading_content: "Sadržaj se učitava",
loading: "Učitava se"
}
}
}

37
source/js/Core/Language/locale/sv.js

@ -0,0 +1,37 @@
/* Swedish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "sv",
api: {
wikipedia: "sv"
},
date: {
month: ["januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december"],
month_abbr: ["jan", "febr", "mars", "april", "maj", "juni", "juli", "aug", "sept", "okt", "nov", "dec"],
day: ["söndag","måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"],
day_abbr: ["sön","mån", "tis", "ons", "tors", "fre", "lör"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm',' yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "H:MM",
time_no_seconds_small_date: "H:MM'<br/><small>'d mmmm',' yyyy'</small>'",
full_long: "d mmm',' yyyy 'vid' H:MM",
full_long_small_date: "H:MM'<br/><small>d mmm',' yyyy'</small>'"
},
messages: {
loading_timeline: "Laddar tidslinje... ",
return_to_title: "Tillbaka till start",
expand_timeline: "Förstora tidslinje",
contract_timeline: "Förminska tidslinje",
wikipedia: "Från Wikipedia, den fria encyklopedin",
loading_content: "Laddar innehåll",
loading: "Laddar"
}
}
}

37
source/js/Core/Language/locale/ta.js

@ -0,0 +1,37 @@
/* Tamil LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ta",
api: {
wikipedia: "ta"
},
date: {
month: ["ஜனவரி", "பரவரி", "ம", "ஏபரல", "ம", "ஜ", "ஜ", "ஆகஸ", "சடமபர", "ஒகபர", "நவமபர", "டிசமபர"],
month_abbr: ["ஜன.", "ப.", "ம", "ஏபரல", "ம", "ஜ", "ஜ", "ஆகஸ", "ச.", "ஒக.", "நவமபர", "டிசமபர"],
day: ["ஞி","திகள", "ச", "பதன", "விழன", "வி", "சனி"],
day_abbr: ["ஞ","தி", "ச", "ப", "வி", "வ", "சனி"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "நரக தரவிறத.... ",
return_to_title: "தலில",
expand_timeline: "நரகிிக",
contract_timeline: "நரகக",
wikipedia: "கடடறற கலகளஞியம, விிிிி",
loading_content: "உளளடககம தரவிறத...",
loading: "தரவிறத"
}
}
}

37
source/js/Core/Language/locale/tl.js

@ -0,0 +1,37 @@
/* Tagalog LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "tl",
api: {
wikipedia: "tl"
},
date: {
month: ["Enemo", "Pebrero", "Marso", "Abril", "Mayo", "Hunyo", "Hulyo", "Agosto", "Setyembre", "Oktubre", "Nobyembre", "Disyembre"],
month_abbr: ["Ene.", "Peb.", "Mar.", "Abr.", "Mayo", "Hun.", "Hul.", "Ago.", "Set.", "Okt.", "Nob.", "Dis."],
day: ["Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"],
day_abbr: ["Li.","L.", "M.", "Mi.", "H.", "B.", "S."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "Mula sa Wikipedia, ang malayang ensiklopedya",
loading_content: "Loading Content",
loading: "Loading"
}
}
}

37
source/js/Core/Language/locale/tr.js

@ -0,0 +1,37 @@
/* Turkish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "tr",
api: {
wikipedia: "tr"
},
date: {
month: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
month_abbr: ["Oca.", "Şub.", "Mar.", "Nis.", "May.", "Haz.", "Tem.", "Ağu.", "Eyl.", "Eki.", "Kas.", "Ara."],
day: ["Pazar","Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"],
day_abbr: ["Paz.","Pzt.", "Sal.", "Çar.", "Per.", "Cum.", "Cts."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm',' yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "H:MM",
time_no_seconds_small_date: "H:MM'<br/><small>'d mmmm',' yyyy'</small>'",
full_long: "d mmm',' yyyy 'at' H:MM",
full_long_small_date: "H:MM '<br/><small>d mmm',' yyyy'</small>'"
},
messages: {
loading_timeline: "Zaman Çizelgesi Yükleniyor... ",
return_to_title: "Başlığa Dön",
expand_timeline: "Zaman Çizelgesini Genişlet",
contract_timeline: "Zaman Çizelgesini Daralt",
wikipedia: "Wikipedia'dan, özgür ansiklopedi",
loading_content: "İçerik Yükleniyor",
loading: "Yükleniyor"
}
}
}

38
source/js/Core/Language/locale/zh-cn.js

@ -0,0 +1,38 @@
/* Chinese LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "zh-cn",
api: {
wikipedia: "zh"
},
date: {
month: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
month_abbr: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
day: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
day_abbr: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
},
dateformats: {
year: "yyyy年",
month_short: "mmm",
month: "yyyy年 mmmm",
full_short: "mmm d",
full: "yyyy年mmmm d日",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'yyyy年mmmm d日'</small>'",
full_long: "dddd',' yyyy年 mmm d日'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' yyyy年 mmm d日'</small>'"
},
messages: {
loading_timeline: "加载时间线... ",
return_to_title: "回到开头",
expand_timeline: "伸展时间",
contract_timeline: "缩短时间",
wikipedia: "来自维基百科,自由的百科全书",
loading_content: "正在加载内容",
loading: "加载中"
}
}
}

38
source/js/Core/Language/locale/zh-tw.js

@ -0,0 +1,38 @@
/* Taiwanese LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "zh-tw",
api: {
wikipedia: "zh"
},
date: {
month: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
month_abbr: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
day: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
day_abbr: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "載入時間線... ",
return_to_title: "回到開頭",
expand_timeline: "展開時間",
contract_timeline: "縮短時間",
wikipedia: "擷取自維基百科, 自由之百科全書",
loading_content: "載入內容",
loading: "載入中"
}
}
}

463
source/js/Core/Library/AES.js

@ -0,0 +1,463 @@
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* AES implementation in JavaScript (c) Chris Veness 2005-2011 */
/* - see http://csrc.nist.gov/publications/PubsFIPS.html#197 */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
var Aes = {}; // Aes namespace
/**
* AES Cipher function: encrypt 'input' state with Rijndael algorithm
* applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage
*
* @param {Number[]} input 16-byte (128-bit) input state array
* @param {Number[][]} w Key schedule as 2D byte-array (Nr+1 x Nb bytes)
* @returns {Number[]} Encrypted output state array
*/
Aes.cipher = function(input, w) { // main Cipher function [§5.1]
var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys
var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4]
for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i];
state = Aes.addRoundKey(state, w, 0, Nb);
for (var round=1; round<Nr; round++) {
state = Aes.subBytes(state, Nb);
state = Aes.shiftRows(state, Nb);
state = Aes.mixColumns(state, Nb);
state = Aes.addRoundKey(state, w, round, Nb);
}
state = Aes.subBytes(state, Nb);
state = Aes.shiftRows(state, Nb);
state = Aes.addRoundKey(state, w, Nr, Nb);
var output = new Array(4*Nb); // convert state to 1-d array before returning [§3.4]
for (var i=0; i<4*Nb; i++) output[i] = state[i%4][Math.floor(i/4)];
return output;
}
/**
* Perform Key Expansion to generate a Key Schedule
*
* @param {Number[]} key Key as 16/24/32-byte array
* @returns {Number[][]} Expanded key schedule as 2D byte-array (Nr+1 x Nb bytes)
*/
Aes.keyExpansion = function(key) { // generate Key Schedule (byte-array Nr+1 x Nb) from Key [§5.2]
var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
var Nk = key.length/4 // key length (in words): 4/6/8 for 128/192/256-bit keys
var Nr = Nk + 6; // no of rounds: 10/12/14 for 128/192/256-bit keys
var w = new Array(Nb*(Nr+1));
var temp = new Array(4);
for (var i=0; i<Nk; i++) {
var r = [key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]];
w[i] = r;
}
for (var i=Nk; i<(Nb*(Nr+1)); i++) {
w[i] = new Array(4);
for (var t=0; t<4; t++) temp[t] = w[i-1][t];
if (i % Nk == 0) {
temp = Aes.subWord(Aes.rotWord(temp));
for (var t=0; t<4; t++) temp[t] ^= Aes.rCon[i/Nk][t];
} else if (Nk > 6 && i%Nk == 4) {
temp = Aes.subWord(temp);
}
for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t];
}
return w;
}
/*
* ---- remaining routines are private, not called externally ----
*/
Aes.subBytes = function(s, Nb) { // apply SBox to state S [§5.1.1]
for (var r=0; r<4; r++) {
for (var c=0; c<Nb; c++) s[r][c] = Aes.sBox[s[r][c]];
}
return s;
}
Aes.shiftRows = function(s, Nb) { // shift row r of state S left by r bytes [§5.1.2]
var t = new Array(4);
for (var r=1; r<4; r++) {
for (var c=0; c<4; c++) t[c] = s[r][(c+r)%Nb]; // shift into temp copy
for (var c=0; c<4; c++) s[r][c] = t[c]; // and copy back
} // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):
return s; // see asmaes.sourceforge.net/rijndael/rijndaelImplementation.pdf
}
Aes.mixColumns = function(s, Nb) { // combine bytes of each col of state S [§5.1.3]
for (var c=0; c<4; c++) {
var a = new Array(4); // 'a' is a copy of the current column from 's'
var b = new Array(4); // 'b' is a•{02} in GF(2^8)
for (var i=0; i<4; i++) {
a[i] = s[i][c];
b[i] = s[i][c]&0x80 ? s[i][c]<<1 ^ 0x011b : s[i][c]<<1;
}
// a[n] ^ b[n] is a•{03} in GF(2^8)
s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // 2*a0 + 3*a1 + a2 + a3
s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 * 2*a1 + 3*a2 + a3
s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + 2*a2 + 3*a3
s[3][c] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]; // 3*a0 + a1 + a2 + 2*a3
}
return s;
}
Aes.addRoundKey = function(state, w, rnd, Nb) { // xor Round Key into state S [§5.1.4]
for (var r=0; r<4; r++) {
for (var c=0; c<Nb; c++) state[r][c] ^= w[rnd*4+c][r];
}
return state;
}
Aes.subWord = function(w) { // apply SBox to 4-byte word w
for (var i=0; i<4; i++) w[i] = Aes.sBox[w[i]];
return w;
}
Aes.rotWord = function(w) { // rotate 4-byte word w left by one byte
var tmp = w[0];
for (var i=0; i<3; i++) w[i] = w[i+1];
w[3] = tmp;
return w;
}
// sBox is pre-computed multiplicative inverse in GF(2^8) used in subBytes and keyExpansion [§5.1.1]
Aes.sBox = [0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16];
// rCon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2]
Aes.rCon = [ [0x00, 0x00, 0x00, 0x00],
[0x01, 0x00, 0x00, 0x00],
[0x02, 0x00, 0x00, 0x00],
[0x04, 0x00, 0x00, 0x00],
[0x08, 0x00, 0x00, 0x00],
[0x10, 0x00, 0x00, 0x00],
[0x20, 0x00, 0x00, 0x00],
[0x40, 0x00, 0x00, 0x00],
[0x80, 0x00, 0x00, 0x00],
[0x1b, 0x00, 0x00, 0x00],
[0x36, 0x00, 0x00, 0x00] ];
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* AES Counter-mode implementation in JavaScript (c) Chris Veness 2005-2011 */
/* - see http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
Aes.Ctr = {}; // Aes.Ctr namespace: a subclass or extension of Aes
/**
* Encrypt a text using AES encryption in Counter mode of operation
*
* Unicode multi-byte character safe
*
* @param {String} plaintext Source text to be encrypted
* @param {String} password The password to use to generate a key
* @param {Number} nBits Number of bits to be used in the key (128, 192, or 256)
* @returns {string} Encrypted text
*/
Aes.Ctr.encrypt = function(plaintext, password, nBits) {
var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
plaintext = Utf8.encode(plaintext);
password = Utf8.encode(password);
//var t = new Date(); // timer
// use AES itself to encrypt password to get cipher key (using plain password as source for key
// expansion) - gives us well encrypted key (though hashed key might be preferred for prod'n use)
var nBytes = nBits/8; // no bytes in key (16/24/32)
var pwBytes = new Array(nBytes);
for (var i=0; i<nBytes; i++) { // use 1st 16/24/32 chars of password for key
pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);
}
var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes)); // gives us 16-byte key
key = key.concat(key.slice(0, nBytes-16)); // expand key to 16/24/32 bytes long
// initialise 1st 8 bytes of counter block with nonce (NIST SP800-38A §B.2): [0-1] = millisec,
// [2-3] = random, [4-7] = seconds, together giving full sub-millisec uniqueness up to Feb 2106
var counterBlock = new Array(blockSize);
var nonce = (new Date()).getTime(); // timestamp: milliseconds since 1-Jan-1970
var nonceMs = nonce%1000;
var nonceSec = Math.floor(nonce/1000);
var nonceRnd = Math.floor(Math.random()*0xffff);
for (var i=0; i<2; i++) counterBlock[i] = (nonceMs >>> i*8) & 0xff;
for (var i=0; i<2; i++) counterBlock[i+2] = (nonceRnd >>> i*8) & 0xff;
for (var i=0; i<4; i++) counterBlock[i+4] = (nonceSec >>> i*8) & 0xff;
// and convert it to a string to go on the front of the ciphertext
var ctrTxt = '';
for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]);
// generate key schedule - an expansion of the key into distinct Key Rounds for each round
var keySchedule = Aes.keyExpansion(key);
var blockCount = Math.ceil(plaintext.length/blockSize);
var ciphertxt = new Array(blockCount); // ciphertext as array of strings
for (var b=0; b<blockCount; b++) {
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
// done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB)
for (var c=0; c<4; c++) counterBlock[15-c] = (b >>> c*8) & 0xff;
for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8)
var cipherCntr = Aes.cipher(counterBlock, keySchedule); // -- encrypt counter block --
// block size is reduced on final block
var blockLength = b<blockCount-1 ? blockSize : (plaintext.length-1)%blockSize+1;
var cipherChar = new Array(blockLength);
for (var i=0; i<blockLength; i++) { // -- xor plaintext with ciphered counter char-by-char --
cipherChar[i] = cipherCntr[i] ^ plaintext.charCodeAt(b*blockSize+i);
cipherChar[i] = String.fromCharCode(cipherChar[i]);
}
ciphertxt[b] = cipherChar.join('');
}
// Array.join is more efficient than repeated string concatenation in IE
var ciphertext = ctrTxt + ciphertxt.join('');
ciphertext = Base64.encode(ciphertext); // encode in base64
//alert((new Date()) - t);
return ciphertext;
}
/**
* Decrypt a text encrypted by AES in counter mode of operation
*
* @param {String} ciphertext Source text to be encrypted
* @param {String} password The password to use to generate a key
* @param {Number} nBits Number of bits to be used in the key (128, 192, or 256)
* @returns {String} Decrypted text
*/
Aes.Ctr.decrypt = function(ciphertext, password, nBits) {
var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
ciphertext = Base64.decode(ciphertext);
password = Utf8.encode(password);
//var t = new Date(); // timer
// use AES to encrypt password (mirroring encrypt routine)
var nBytes = nBits/8; // no bytes in key
var pwBytes = new Array(nBytes);
for (var i=0; i<nBytes; i++) {
pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);
}
var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes));
key = key.concat(key.slice(0, nBytes-16)); // expand key to 16/24/32 bytes long
// recover nonce from 1st 8 bytes of ciphertext
var counterBlock = new Array(8);
ctrTxt = ciphertext.slice(0, 8);
for (var i=0; i<8; i++) counterBlock[i] = ctrTxt.charCodeAt(i);
// generate key schedule
var keySchedule = Aes.keyExpansion(key);
// separate ciphertext into blocks (skipping past initial 8 bytes)
var nBlocks = Math.ceil((ciphertext.length-8) / blockSize);
var ct = new Array(nBlocks);
for (var b=0; b<nBlocks; b++) ct[b] = ciphertext.slice(8+b*blockSize, 8+b*blockSize+blockSize);
ciphertext = ct; // ciphertext is now array of block-length strings
// plaintext will get generated block-by-block into array of block-length strings
var plaintxt = new Array(ciphertext.length);
for (var b=0; b<nBlocks; b++) {
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
for (var c=0; c<4; c++) counterBlock[15-c] = ((b) >>> c*8) & 0xff;
for (var c=0; c<4; c++) counterBlock[15-c-4] = (((b+1)/0x100000000-1) >>> c*8) & 0xff;
var cipherCntr = Aes.cipher(counterBlock, keySchedule); // encrypt counter block
var plaintxtByte = new Array(ciphertext[b].length);
for (var i=0; i<ciphertext[b].length; i++) {
// -- xor plaintxt with ciphered counter byte-by-byte --
plaintxtByte[i] = cipherCntr[i] ^ ciphertext[b].charCodeAt(i);
plaintxtByte[i] = String.fromCharCode(plaintxtByte[i]);
}
plaintxt[b] = plaintxtByte.join('');
}
// join array of blocks into single plaintext string
var plaintext = plaintxt.join('');
plaintext = Utf8.decode(plaintext); // decode from UTF8 back to Unicode multi-byte chars
//alert((new Date()) - t);
return plaintext;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* Base64 class: Base 64 encoding / decoding (c) Chris Veness 2002-2011 */
/* note: depends on Utf8 class */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
var Base64 = {}; // Base64 namespace
Base64.code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
/**
* Encode string into Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648]
* (instance method extending String object). As per RFC 4648, no newlines are added.
*
* @param {String} str The string to be encoded as base-64
* @param {Boolean} [utf8encode=false] Flag to indicate whether str is Unicode string to be encoded
* to UTF8 before conversion to base64; otherwise string is assumed to be 8-bit characters
* @returns {String} Base64-encoded string
*/
Base64.encode = function(str, utf8encode) { // http://tools.ietf.org/html/rfc4648
utf8encode = (typeof utf8encode == 'undefined') ? false : utf8encode;
var o1, o2, o3, bits, h1, h2, h3, h4, e=[], pad = '', c, plain, coded;
var b64 = Base64.code;
plain = utf8encode ? str.encodeUTF8() : str;
c = plain.length % 3; // pad string to length of multiple of 3
if (c > 0) { while (c++ < 3) { pad += '='; plain += '\0'; } }
// note: doing padding here saves us doing special-case packing for trailing 1 or 2 chars
for (c=0; c<plain.length; c+=3) { // pack three octets into four hexets
o1 = plain.charCodeAt(c);
o2 = plain.charCodeAt(c+1);
o3 = plain.charCodeAt(c+2);
bits = o1<<16 | o2<<8 | o3;
h1 = bits>>18 & 0x3f;
h2 = bits>>12 & 0x3f;
h3 = bits>>6 & 0x3f;
h4 = bits & 0x3f;
// use hextets to index into code string
e[c/3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
}
coded = e.join(''); // join() is far faster than repeated string concatenation in IE
// replace 'A's from padded nulls with '='s
coded = coded.slice(0, coded.length-pad.length) + pad;
return coded;
}
/**
* Decode string from Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648]
* (instance method extending String object). As per RFC 4648, newlines are not catered for.
*
* @param {String} str The string to be decoded from base-64
* @param {Boolean} [utf8decode=false] Flag to indicate whether str is Unicode string to be decoded
* from UTF8 after conversion from base64
* @returns {String} decoded string
*/
Base64.decode = function(str, utf8decode) {
utf8decode = (typeof utf8decode == 'undefined') ? false : utf8decode;
var o1, o2, o3, h1, h2, h3, h4, bits, d=[], plain, coded;
var b64 = Base64.code;
coded = utf8decode ? str.decodeUTF8() : str;
for (var c=0; c<coded.length; c+=4) { // unpack four hexets into three octets
h1 = b64.indexOf(coded.charAt(c));
h2 = b64.indexOf(coded.charAt(c+1));
h3 = b64.indexOf(coded.charAt(c+2));
h4 = b64.indexOf(coded.charAt(c+3));
bits = h1<<18 | h2<<12 | h3<<6 | h4;
o1 = bits>>>16 & 0xff;
o2 = bits>>>8 & 0xff;
o3 = bits & 0xff;
d[c/4] = String.fromCharCode(o1, o2, o3);
// check for padding
if (h4 == 0x40) d[c/4] = String.fromCharCode(o1, o2);
if (h3 == 0x40) d[c/4] = String.fromCharCode(o1);
}
plain = d.join(''); // join() is far faster than repeated string concatenation in IE
return utf8decode ? plain.decodeUTF8() : plain;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple */
/* single-byte character encoding (c) Chris Veness 2002-2011 */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
var Utf8 = {}; // Utf8 namespace
/**
* Encode multi-byte Unicode string into utf-8 multiple single-byte characters
* (BMP / basic multilingual plane only)
*
* Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars
*
* @param {String} strUni Unicode string to be encoded as UTF-8
* @returns {String} encoded string
*/
Utf8.encode = function(strUni) {
// use regular expressions & String.replace callback function for better efficiency
// than procedural approaches
var strUtf = strUni.replace(
/[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz
function(c) {
var cc = c.charCodeAt(0);
return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); }
);
strUtf = strUtf.replace(
/[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
function(c) {
var cc = c.charCodeAt(0);
return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); }
);
return strUtf;
}
/**
* Decode utf-8 encoded string back into multi-byte Unicode characters
*
* @param {String} strUtf UTF-8 string to be decoded back to Unicode
* @returns {String} decoded string
*/
Utf8.decode = function(strUtf) {
// note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
var strUni = strUtf.replace(
/[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars
function(c) { // (note parentheses for precence)
var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f);
return String.fromCharCode(cc); }
);
strUni = strUni.replace(
/[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars
function(c) { // (note parentheses for precence)
var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;
return String.fromCharCode(cc); }
);
return strUni;
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

391
source/js/Core/Library/LazyLoad.js

@ -0,0 +1,391 @@
/*jslint browser: true, eqeqeq: true, bitwise: true, newcap: true, immed: true, regexp: false */
/*
LazyLoad makes it easy and painless to lazily load one or more external
JavaScript or CSS files on demand either during or after the rendering of a web
page.
Supported browsers include Firefox 2+, IE6+, Safari 3+ (including Mobile
Safari), Google Chrome, and Opera 9+. Other browsers may or may not work and
are not officially supported.
Visit https://github.com/rgrove/lazyload/ for more info.
Copyright (c) 2011 Ryan Grove <ryan@wonko.com>
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the 'Software'), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@module lazyload
@class LazyLoad
@static
@version 2.0.3 (git)
*/
LazyLoad = (function (doc) {
// -- Private Variables ------------------------------------------------------
// User agent and feature test information.
var env,
// Reference to the <head> element (populated lazily).
head,
// Requests currently in progress, if any.
pending = {},
// Number of times we've polled to check whether a pending stylesheet has
// finished loading. If this gets too high, we're probably stalled.
pollCount = 0,
// Queued requests.
queue = {css: [], js: []},
// Reference to the browser's list of stylesheets.
styleSheets = doc.styleSheets;
// -- Private Methods --------------------------------------------------------
/**
Creates and returns an HTML element with the specified name and attributes.
@method createNode
@param {String} name element name
@param {Object} attrs name/value mapping of element attributes
@return {HTMLElement}
@private
*/
function createNode(name, attrs) {
var node = doc.createElement(name), attr;
for (attr in attrs) {
if (attrs.hasOwnProperty(attr)) {
node.setAttribute(attr, attrs[attr]);
}
}
return node;
}
/**
Called when the current pending resource of the specified type has finished
loading. Executes the associated callback (if any) and loads the next
resource in the queue.
@method finish
@param {String} type resource type ('css' or 'js')
@private
*/
function finish(type) {
var p = pending[type],
callback,
urls;
if (p) {
callback = p.callback;
urls = p.urls;
urls.shift();
pollCount = 0;
// If this is the last of the pending URLs, execute the callback and
// start the next request in the queue (if any).
if (!urls.length) {
callback && callback.call(p.context, p.obj);
pending[type] = null;
queue[type].length && load(type);
}
}
}
/**
Populates the <code>env</code> variable with user agent and feature test
information.
@method getEnv
@private
*/
function getEnv() {
var ua = navigator.userAgent;
env = {
// True if this browser supports disabling async mode on dynamically
// created script nodes. See
// http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order
async: doc.createElement('script').async === true
};
(env.webkit = /AppleWebKit\//.test(ua))
|| (env.ie = /MSIE/.test(ua))
|| (env.opera = /Opera/.test(ua))
|| (env.gecko = /Gecko\//.test(ua))
|| (env.unknown = true);
}
/**
Loads the specified resources, or the next resource of the specified type
in the queue if no resources are specified. If a resource of the specified
type is already being loaded, the new request will be queued until the
first request has been finished.
When an array of resource URLs is specified, those URLs will be loaded in
parallel if it is possible to do so while preserving execution order. All
browsers support parallel loading of CSS, but only Firefox and Opera
support parallel loading of scripts. In other browsers, scripts will be
queued and loaded one at a time to ensure correct execution order.
@method load
@param {String} type resource type ('css' or 'js')
@param {String|Array} urls (optional) URL or array of URLs to load
@param {Function} callback (optional) callback function to execute when the
resource is loaded
@param {Object} obj (optional) object to pass to the callback function
@param {Object} context (optional) if provided, the callback function will
be executed in this object's context
@private
*/
function load(type, urls, callback, obj, context) {
var _finish = function () { finish(type); },
isCSS = type === 'css',
nodes = [],
i, len, node, p, pendingUrls, url;
env || getEnv();
if (urls) {
// If urls is a string, wrap it in an array. Otherwise assume it's an
// array and create a copy of it so modifications won't be made to the
// original.
urls = typeof urls === 'string' ? [urls] : urls.concat();
// Create a request object for each URL. If multiple URLs are specified,
// the callback will only be executed after all URLs have been loaded.
//
// Sadly, Firefox and Opera are the only browsers capable of loading
// scripts in parallel while preserving execution order. In all other
// browsers, scripts must be loaded sequentially.
//
// All browsers respect CSS specificity based on the order of the link
// elements in the DOM, regardless of the order in which the stylesheets
// are actually downloaded.
if (isCSS || env.async || env.gecko || env.opera) {
// Load in parallel.
queue[type].push({
urls : urls,
callback: callback,
obj : obj,
context : context
});
} else {
// Load sequentially.
for (i = 0, len = urls.length; i < len; ++i) {
queue[type].push({
urls : [urls[i]],
callback: i === len - 1 ? callback : null, // callback is only added to the last URL
obj : obj,
context : context
});
}
}
}
// If a previous load request of this type is currently in progress, we'll
// wait our turn. Otherwise, grab the next item in the queue.
if (pending[type] || !(p = pending[type] = queue[type].shift())) {
return;
}
head || (head = doc.head || doc.getElementsByTagName('head')[0]);
pendingUrls = p.urls;
for (i = 0, len = pendingUrls.length; i < len; ++i) {
url = pendingUrls[i];
if (isCSS) {
node = env.gecko ? createNode('style') : createNode('link', {
href: url,
rel : 'stylesheet'
});
} else {
node = createNode('script', {src: url});
node.async = false;
}
node.className = 'lazyload';
node.setAttribute('charset', 'utf-8');
if (env.ie && !isCSS) {
node.onreadystatechange = function () {
if (/loaded|complete/.test(node.readyState)) {
node.onreadystatechange = null;
_finish();
}
};
} else if (isCSS && (env.gecko || env.webkit)) {
// Gecko and WebKit don't support the onload event on link nodes.
if (env.webkit) {
// In WebKit, we can poll for changes to document.styleSheets to
// figure out when stylesheets have loaded.
p.urls[i] = node.href; // resolve relative URLs (or polling won't work)
pollWebKit();
} else {
// In Gecko, we can import the requested URL into a <style> node and
// poll for the existence of node.sheet.cssRules. Props to Zach
// Leatherman for calling my attention to this technique.
node.innerHTML = '@import "' + url + '";';
pollGecko(node);
}
} else {
node.onload = node.onerror = _finish;
}
nodes.push(node);
}
for (i = 0, len = nodes.length; i < len; ++i) {
head.appendChild(nodes[i]);
}
}
/**
Begins polling to determine when the specified stylesheet has finished loading
in Gecko. Polling stops when all pending stylesheets have loaded or after 10
seconds (to prevent stalls).
Thanks to Zach Leatherman for calling my attention to the @import-based
cross-domain technique used here, and to Oleg Slobodskoi for an earlier
same-domain implementation. See Zach's blog for more details:
http://www.zachleat.com/web/2010/07/29/load-css-dynamically/
@method pollGecko
@param {HTMLElement} node Style node to poll.
@private
*/
function pollGecko(node) {
var hasRules;
try {
// We don't really need to store this value or ever refer to it again, but
// if we don't store it, Closure Compiler assumes the code is useless and
// removes it.
hasRules = !!node.sheet.cssRules;
} catch (ex) {
// An exception means the stylesheet is still loading.
pollCount += 1;
if (pollCount < 200) {
setTimeout(function () { pollGecko(node); }, 50);
} else {
// We've been polling for 10 seconds and nothing's happened. Stop
// polling and finish the pending requests to avoid blocking further
// requests.
hasRules && finish('css');
}
return;
}
// If we get here, the stylesheet has loaded.
finish('css');
}
/**
Begins polling to determine when pending stylesheets have finished loading
in WebKit. Polling stops when all pending stylesheets have loaded or after 10
seconds (to prevent stalls).
@method pollWebKit
@private
*/
function pollWebKit() {
var css = pending.css, i;
if (css) {
i = styleSheets.length;
// Look for a stylesheet matching the pending URL.
while (--i >= 0) {
if (styleSheets[i].href === css.urls[0]) {
finish('css');
break;
}
}
pollCount += 1;
if (css) {
if (pollCount < 200) {
setTimeout(pollWebKit, 50);
} else {
// We've been polling for 10 seconds and nothing's happened, which may
// indicate that the stylesheet has been removed from the document
// before it had a chance to load. Stop polling and finish the pending
// request to prevent blocking further requests.
finish('css');
}
}
}
}
return {
/**
Requests the specified CSS URL or URLs and executes the specified
callback (if any) when they have finished loading. If an array of URLs is
specified, the stylesheets will be loaded in parallel and the callback
will be executed after all stylesheets have finished loading.
@method css
@param {String|Array} urls CSS URL or array of CSS URLs to load
@param {Function} callback (optional) callback function to execute when
the specified stylesheets are loaded
@param {Object} obj (optional) object to pass to the callback function
@param {Object} context (optional) if provided, the callback function
will be executed in this object's context
@static
*/
css: function (urls, callback, obj, context) {
load('css', urls, callback, obj, context);
},
/**
Requests the specified JavaScript URL or URLs and executes the specified
callback (if any) when they have finished loading. If an array of URLs is
specified and the browser supports it, the scripts will be loaded in
parallel and the callback will be executed after all scripts have
finished loading.
Currently, only Firefox and Opera support parallel loading of scripts while
preserving execution order. In other browsers, scripts will be
queued and loaded one at a time to ensure correct execution order.
@method js
@param {String|Array} urls JS URL or array of JS URLs to load
@param {Function} callback (optional) callback function to execute when
the specified scripts are loaded
@param {Object} obj (optional) object to pass to the callback function
@param {Object} context (optional) if provided, the callback function
will be executed in this object's context
@static
*/
js: function (urls, callback, obj, context) {
load('js', urls, callback, obj, context);
}
};
})(this.document);

5670
source/js/Core/Library/Leaflet.js

File diff suppressed because it is too large Load Diff

270
source/js/Core/Library/bootstrap-tooltip.js vendored

@ -0,0 +1,270 @@
/* ===========================================================
* bootstrap-tooltip.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function( $ ) {
"use strict"
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var Tooltip = function ( element, options ) {
this.init('tooltip', element, options)
}
Tooltip.prototype = {
constructor: Tooltip
, init: function ( type, element, options ) {
var eventIn
, eventOut
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.enabled = true
if (this.options.trigger != 'manual') {
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
}
this.options.selector ?
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
this.fixTitle()
}
, getOptions: function ( options ) {
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay
, hide: options.delay
}
}
return options
}
, enter: function ( e ) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (!self.options.delay || !self.options.delay.show) {
self.show()
} else {
self.hoverState = 'in'
setTimeout(function() {
if (self.hoverState == 'in') {
self.show()
}
}, self.options.delay.show)
}
}
, leave: function ( e ) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (!self.options.delay || !self.options.delay.hide) {
self.hide()
} else {
self.hoverState = 'out'
setTimeout(function() {
if (self.hoverState == 'out') {
self.hide()
}
}, self.options.delay.hide)
}
}
, show: function () {
var $tip
, inside
, pos
, actualWidth
, actualHeight
, placement
, tp
if (this.hasContent() && this.enabled) {
$tip = this.tip()
this.setContent()
if (this.options.animation) {
$tip.addClass('fade')
}
placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) :
this.options.placement
inside = /in/.test(placement)
$tip
.remove()
.css({ top: 0, left: 0, display: 'block' })
.appendTo(inside ? this.$element : document.body)
pos = this.getPosition(inside)
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
switch (inside ? placement.split(' ')[1] : placement) {
case 'bottom':
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'top':
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'left':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
break
case 'right':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
break
}
$tip
.css(tp)
.addClass(placement)
.addClass('in')
}
}
, setContent: function () {
var $tip = this.tip()
$tip.find('.timeline-tooltip-inner').html(this.getTitle())
$tip.removeClass('fade in top bottom left right')
}
, hide: function () {
var that = this
, $tip = this.tip()
$tip.removeClass('in')
function removeWithAnimation() {
var timeout = setTimeout(function () {
$tip.off($.support.transition.end).remove()
}, 500)
$tip.one($.support.transition.end, function () {
clearTimeout(timeout)
$tip.remove()
})
}
$.support.transition && this.$tip.hasClass('fade') ?
removeWithAnimation() :
$tip.remove()
}
, fixTitle: function () {
var $e = this.$element
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
}
}
, hasContent: function () {
return this.getTitle()
}
, getPosition: function (inside) {
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
width: this.$element[0].offsetWidth
, height: this.$element[0].offsetHeight
})
}
, getTitle: function () {
var title
, $e = this.$element
, o = this.options
title = $e.attr('data-original-title')
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
title = title.toString().replace(/(^\s*|\s*$)/, "")
return title
}
, tip: function () {
return this.$tip = this.$tip || $(this.options.template)
}
, validate: function () {
if (!this.$element[0].parentNode) {
this.hide()
this.$element = null
this.options = null
}
}
, enable: function () {
this.enabled = true
}
, disable: function () {
this.enabled = false
}
, toggleEnabled: function () {
this.enabled = !this.enabled
}
, toggle: function () {
this[this.tip().hasClass('in') ? 'hide' : 'show']()
}
}
/* TOOLTIP PLUGIN DEFINITION
* ========================= */
$.fn.tooltip = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tooltip')
, options = typeof option == 'object' && option
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tooltip.Constructor = Tooltip
$.fn.tooltip.defaults = {
animation: true
, delay: 0
, selector: false
, placement: 'top'
, trigger: 'hover'
, title: ''
, template: '<div class="timeline-tooltip"><div class="timeline-tooltip-arrow"></div><div class="timeline-tooltip-inner"></div></div>'
}
}( window.jQuery );

205
source/js/Core/Library/jQuery/easing.js

@ -0,0 +1,205 @@
/*
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Uses the built in easing capabilities added In jQuery 1.1
* to offer multiple easing options
*
* TERMS OF USE - jQuery Easing
*
* Open source under the BSD License.
*
* Copyright © 2008 George McGinley Smith
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend( jQuery.easing,
{
def: 'easeOutQuad',
swing: function (x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInQuad: function (x, t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
easeInOutQuad: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
},
easeInCubic: function (x, t, b, c, d) {
return c*(t/=d)*t*t + b;
},
easeOutCubic: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOutCubic: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t + b;
return c/2*((t-=2)*t*t + 2) + b;
},
easeInQuart: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t + b;
},
easeOutQuart: function (x, t, b, c, d) {
return -c * ((t=t/d-1)*t*t*t - 1) + b;
},
easeInOutQuart: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
return -c/2 * ((t-=2)*t*t*t - 2) + b;
},
easeInQuint: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t*t + b;
},
easeOutQuint: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t*t*t + 1) + b;
},
easeInOutQuint: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
return c/2*((t-=2)*t*t*t*t + 2) + b;
},
easeInSine: function (x, t, b, c, d) {
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
},
easeOutSine: function (x, t, b, c, d) {
return c * Math.sin(t/d * (Math.PI/2)) + b;
},
easeInOutSine: function (x, t, b, c, d) {
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
},
easeInExpo: function (x, t, b, c, d) {
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOutExpo: function (x, t, b, c, d) {
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOutExpo: function (x, t, b, c, d) {
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInCirc: function (x, t, b, c, d) {
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
},
easeOutCirc: function (x, t, b, c, d) {
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
},
easeInOutCirc: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
},
easeInElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
},
easeOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
},
easeInOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
},
easeInBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*(t/=d)*t*((s+1)*t - s) + b;
},
easeOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
},
easeInOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
},
easeInBounce: function (x, t, b, c, d) {
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
},
easeOutBounce: function (x, t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
},
easeInOutBounce: function (x, t, b, c, d) {
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
}
});
/*
*
* TERMS OF USE - EASING EQUATIONS
*
* Open source under the BSD License.
*
* Copyright © 2001 Robert Penner
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/

1590
source/js/Core/Media/VMM.ExternalAPI.js

File diff suppressed because it is too large Load Diff

10
source/js/Core/Media/VMM.Media.js

@ -0,0 +1,10 @@
/* Media
================================================== */
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "VMM.ExternalAPI.js";
// @codekit-prepend "VMM.MediaElement.js";
// @codekit-prepend "VMM.MediaType.js";
// @codekit-prepend "VMM.TextElement.js";

228
source/js/Core/Media/VMM.MediaElement.js

@ -0,0 +1,228 @@
/* MediaElement
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.MediaElement == 'undefined') {
VMM.MediaElement = ({
init: function() {
return this;
},
loadingmessage: function(m) {
return "<div class='vco-loading'><div class='vco-loading-container'><div class='vco-loading-icon'></div>" + "<div class='vco-message'><p>" + m + "</p></div></div></div>";
},
thumbnail: function(data, w, h, uid) {
var _w = 16,
_h = 24,
_uid = "";
if (w != null && w != "") {_w = w};
if (h != null && h != "") {_h = h};
if (uid != null && uid != "") {_uid = uid};
if (data.media != null && data.media != "") {
var _valid = true,
mediaElem = "",
m = VMM.MediaType(data.media); //returns an object with .type and .id
// DETERMINE THUMBNAIL OR ICON
if (data.thumbnail != null && data.thumbnail != "") {
trace("CUSTOM THUMB");
mediaElem = "<div class='thumbnail thumb-custom' id='" + uid + "_custom_thumb'><img src='" + data.thumbnail + "'></div>";
return mediaElem;
} else if (m.type == "image") {
mediaElem = "<div class='thumbnail thumb-photo'></div>";
return mediaElem;
} else if (m.type == "flickr") {
mediaElem = "<div class='thumbnail thumb-photo' id='" + uid + "_thumb'></div>";
return mediaElem;
} else if (m.type == "instagram") {
mediaElem = "<div class='thumbnail thumb-instagram' id='" + uid + "_thumb'><img src='" + VMM.ExternalAPI.instagram.get(m.id, true) + "'></div>";
return mediaElem;
} else if (m.type == "youtube") {
mediaElem = "<div class='thumbnail thumb-youtube' id='" + uid + "_thumb'></div>";
return mediaElem;
} else if (m.type == "googledoc") {
mediaElem = "<div class='thumbnail thumb-document'></div>";
return mediaElem;
} else if (m.type == "vimeo") {
mediaElem = "<div class='thumbnail thumb-vimeo' id='" + uid + "_thumb'></div>";
return mediaElem;
} else if (m.type == "vine") {
mediaElem = "<div class='thumbnail thumb-vine'></div>";
return mediaElem;
} else if (m.type == "dailymotion") {
mediaElem = "<div class='thumbnail thumb-video'></div>";
return mediaElem;
} else if (m.type == "twitter"){
mediaElem = "<div class='thumbnail thumb-twitter'></div>";
return mediaElem;
} else if (m.type == "twitter-ready") {
mediaElem = "<div class='thumbnail thumb-twitter'></div>";
return mediaElem;
} else if (m.type == "soundcloud") {
mediaElem = "<div class='thumbnail thumb-audio'></div>";
return mediaElem;
} else if (m.type == "google-map") {
mediaElem = "<div class='thumbnail thumb-map'></div>";
return mediaElem;
} else if (m.type == "googleplus") {
mediaElem = "<div class='thumbnail thumb-googleplus'></div>";
return mediaElem;
} else if (m.type == "wikipedia") {
mediaElem = "<div class='thumbnail thumb-wikipedia'></div>";
return mediaElem;
} else if (m.type == "storify") {
mediaElem = "<div class='thumbnail thumb-storify'></div>";
return mediaElem;
} else if (m.type == "quote") {
mediaElem = "<div class='thumbnail thumb-quote'></div>";
return mediaElem;
} else if (m.type == "iframe") {
mediaElem = "<div class='thumbnail thumb-video'></div>";
return mediaElem;
} else if (m.type == "unknown") {
if (m.id.match("blockquote")) {
mediaElem = "<div class='thumbnail thumb-quote'></div>";
} else {
mediaElem = "<div class='thumbnail thumb-plaintext'></div>";
}
return mediaElem;
} else if (m.type == "website") {
mediaElem = "<div class='thumbnail thumb-website' id='" + uid + "_thumb'></div>";
return mediaElem;
} else {
mediaElem = "<div class='thumbnail thumb-plaintext'></div>";
return mediaElem;
}
}
},
create: function(data, uid) {
var _valid = false,
//loading_messege = "<span class='messege'><p>" + VMM.master_config.language.messages.loading + "</p></span>";
loading_messege = VMM.MediaElement.loadingmessage(VMM.master_config.language.messages.loading + "...");
if (data.media != null && data.media != "") {
var mediaElem = "", captionElem = "", creditElem = "", _id = "", isTextMedia = false, m;
m = VMM.MediaType(data.media); //returns an object with .type and .id
m.uid = uid;
_valid = true;
// CREDIT
if (data.credit != null && data.credit != "") {
creditElem = "<div class='credit'>" + VMM.Util.linkify_with_twitter(data.credit, "_blank") + "</div>";
}
// CAPTION
if (data.caption != null && data.caption != "") {
captionElem = "<div class='caption'>" + VMM.Util.linkify_with_twitter(data.caption, "_blank") + "</div>";
}
// IMAGE
if (m.type == "image") {
if (m.id.match("https://")) {
m.id = m.id.replace("https://","http://");
}
mediaElem = "<div class='media-image media-shadow'><img src='" + m.id + "' class='media-image'></div>";
// FLICKR
} else if (m.type == "flickr") {
//mediaElem = "<div class='media-image media-shadow' id='" + uid + "'>" + loading_messege + "</div>";
mediaElem = "<div class='media-image media-shadow'><a href='" + m.link + "' target='_blank'><img id='" + uid + "'></a></div>";
VMM.ExternalAPI.flickr.get(m);
// INSTAGRAM
} else if (m.type == "instagram") {
mediaElem = "<div class='media-image media-shadow'><a href='" + m.link + "' target='_blank'><img src='" + VMM.ExternalAPI.instagram.get(m) + "'></a></div>";
//VMM.ExternalAPI.instagram.get(m.id, uid);
// GOOGLE DOCS
} else if (m.type == "googledoc") {
mediaElem = "<div class='media-frame media-shadow doc' id='" + m.uid + "'>" + loading_messege + "</div>";
VMM.ExternalAPI.googledocs.get(m);
// YOUTUBE
} else if (m.type == "youtube") {
mediaElem = "<div class='media-shadow'><div class='media-frame video youtube' id='" + m.uid + "'>" + loading_messege + "</div></div>";
VMM.ExternalAPI.youtube.get(m);
// VIMEO
} else if (m.type == "vimeo") {
mediaElem = "<div class='media-shadow media-frame video vimeo' id='" + m.uid + "'>" + loading_messege + "</div>";
VMM.ExternalAPI.vimeo.get(m);
// DAILYMOTION
} else if (m.type == "dailymotion") {
mediaElem = "<div class='media-shadow'><iframe class='media-frame video dailymotion' autostart='false' frameborder='0' width='100%' height='100%' src='http://www.dailymotion.com/embed/video/" + m.id + "'></iframe></div>";
// VINE
} else if (m.type == "vine") {
mediaElem = "<div class='media-shadow media-frame video vine' id='" + m.uid + "'>" + loading_messege + "</div>";
VMM.ExternalAPI.vine.get(m);
// TWITTER
} else if (m.type == "twitter"){
mediaElem = "<div class='twitter' id='" + m.uid + "'>" + loading_messege + "</div>";
isTextMedia = true;
VMM.ExternalAPI.twitter.get(m);
// TWITTER
} else if (m.type == "twitter-ready") {
isTextMedia = true;
mediaElem = m.id;
// SOUNDCLOUD
} else if (m.type == "soundcloud") {
mediaElem = "<div class='media-frame media-shadow soundcloud' id='" + m.uid + "'>" + loading_messege + "</div>";
VMM.ExternalAPI.soundcloud.get(m);
// GOOGLE MAPS
} else if (m.type == "google-map") {
mediaElem = "<div class='media-frame media-shadow map' id='" + m.uid + "'>" + loading_messege + "</div>";
VMM.ExternalAPI.googlemaps.get(m);
// GOOGLE PLUS
} else if (m.type == "googleplus") {
_id = "googleplus_" + m.id;
mediaElem = "<div class='googleplus' id='" + _id + "'>" + loading_messege + "</div>";
isTextMedia = true;
VMM.ExternalAPI.googleplus.get(m);
// WIKIPEDIA
} else if (m.type == "wikipedia") {
mediaElem = "<div class='wikipedia' id='" + m.uid + "'>" + loading_messege + "</div>";
isTextMedia = true;
VMM.ExternalAPI.wikipedia.get(m);
// STORIFY
} else if (m.type == "storify") {
isTextMedia = true;
mediaElem = "<div class='plain-text-quote'>" + m.id + "</div>";
// IFRAME
} else if (m.type == "iframe") {
isTextMedia = true;
mediaElem = "<div class='media-shadow'><iframe class='media-frame video' autostart='false' frameborder='0' width='100%' height='100%' src='" + m.id + "'></iframe></div>";
// QUOTE
} else if (m.type == "quote") {
isTextMedia = true;
mediaElem = "<div class='plain-text-quote'>" + m.id + "</div>";
// UNKNOWN
} else if (m.type == "unknown") {
trace("NO KNOWN MEDIA TYPE FOUND TRYING TO JUST PLACE THE HTML");
isTextMedia = true;
mediaElem = "<div class='plain-text'><div class='container'>" + VMM.Util.properQuotes(m.id) + "</div></div>";
// WEBSITE
} else if (m.type == "website") {
mediaElem = "<div class='media-shadow website' id='" + m.uid + "'>" + loading_messege + "</div>";
VMM.ExternalAPI.webthumb.get(m);
//mediaElem = "<div class='media-shadow website'><a href='" + m.id + "' target='_blank'>" + "<img src='http://api1.thumbalizr.com/?url=" + m.id.replace(/[\./]$/g, "") + "&width=300' class='media-image'></a></div>";
// NO MATCH
} else {
trace("NO KNOWN MEDIA TYPE FOUND");
trace(m.type);
}
// WRAP THE MEDIA ELEMENT
mediaElem = "<div class='media-container' >" + mediaElem + creditElem + captionElem + "</div>";
// RETURN
if (isTextMedia) {
return "<div class='text-media'><div class='media-wrapper'>" + mediaElem + "</div></div>";
} else {
return "<div class='media-wrapper'>" + mediaElem + "</div>";
}
};
}
}).init();
}

145
source/js/Core/Media/VMM.MediaType.js

@ -0,0 +1,145 @@
/* MediaType
Determines the type of media the url string is.
returns an object with .type and .id
the id is a key piece of information needed to make
the request of the api.
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.MediaType == 'undefined') {
VMM.MediaType = function(_d) {
var d = _d.replace(/^\s\s*/, '').replace(/\s\s*$/, ''),
success = false,
media = {
type: "unknown",
id: "",
start: 0,
hd: false,
link: "",
lang: VMM.Language.lang,
uniqueid: VMM.Util.unique_ID(6)
};
if (d.match("div class='twitter'")) {
media.type = "twitter-ready";
media.id = d;
success = true;
} else if (d.match('(www.)?youtube|youtu\.be')) {
if (d.match('v=')) {
media.id = VMM.Util.getUrlVars(d)["v"];
} else if (d.match('\/embed\/')) {
media.id = d.split("embed\/")[1].split(/[?&]/)[0];
} else if (d.match(/v\/|v=|youtu\.be\//)){
media.id = d.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];
} else {
trace("YOUTUBE IN URL BUT NOT A VALID VIDEO");
}
media.start = VMM.Util.getUrlVars(d)["t"];
media.hd = VMM.Util.getUrlVars(d)["hd"];
media.type = "youtube";
success = true;
} else if (d.match('(player.)?vimeo\.com')) {
media.type = "vimeo";
media.id = d.split(/video\/|\/\/vimeo\.com\//)[1].split(/[?&]/)[0];;
success = true;
} else if (d.match('(www.)?dailymotion\.com')) {
media.id = d.split(/video\/|\/\/dailymotion\.com\//)[1];
media.type = "dailymotion";
success = true;
} else if (d.match('(www.)?vine\.co')) {
trace("VINE");
//https://vine.co/v/b55LOA1dgJU
if (d.match("vine.co/v/")) {
media.id = d.split("vine.co/v/")[1];
trace(media.id);
}
trace(d);
media.type = "vine";
success = true;
} else if (d.match('(player.)?soundcloud\.com')) {
media.type = "soundcloud";
media.id = d;
success = true;
} else if (d.match('(www.)?twitter\.com') && d.match('status') ) {
if (d.match("status\/")) {
media.id = d.split("status\/")[1];
} else if (d.match("statuses\/")) {
media.id = d.split("statuses\/")[1];
} else {
media.id = "";
}
media.type = "twitter";
success = true;
} else if (d.match("maps.google") && !d.match("staticmap")) {
media.type = "google-map";
media.id = d.split(/src=['|"][^'|"]*?['|"]/gi);
success = true;
} else if (d.match("plus.google")) {
media.type = "googleplus";
media.id = d.split("/posts/")[1];
//https://plus.google.com/u/0/112374836634096795698/posts/bRJSvCb5mUU
//https://plus.google.com/107096716333816995401/posts/J5iMpEDHWNL
if (d.split("/posts/")[0].match("u/0/")) {
media.user = d.split("u/0/")[1].split("/posts")[0];
} else {
media.user = d.split("google.com/")[1].split("/posts/")[0];
}
success = true;
} else if (d.match("flickr.com/photos")) {
media.type = "flickr";
media.id = d.split("photos\/")[1].split("/")[1];
media.link = d;
success = true;
} else if (d.match("instagr.am/p/")) {
media.type = "instagram";
media.link = d;
media.id = d.split("\/p\/")[1].split("/")[0];
success = true;
} else if (d.match(/jpg|jpeg|png|gif/i) || d.match("staticmap") || d.match("yfrog.com") || d.match("twitpic.com")) {
media.type = "image";
media.id = d;
success = true;
} else if (VMM.FileExtention.googleDocType(d)) {
media.type = "googledoc";
media.id = d;
success = true;
} else if (d.match('(www.)?wikipedia\.org')) {
media.type = "wikipedia";
//media.id = d.split("wiki\/")[1];
var wiki_id = d.split("wiki\/")[1].split("#")[0].replace("_", " ");
media.id = wiki_id.replace(" ", "%20");
media.lang = d.split("//")[1].split(".wikipedia")[0];
success = true;
} else if (d.indexOf('http://') == 0) {
media.type = "website";
media.id = d;
success = true;
} else if (d.match('storify')) {
media.type = "storify";
media.id = d;
success = true;
} else if (d.match('blockquote')) {
media.type = "quote";
media.id = d;
success = true;
} else if (d.match('iframe')) {
media.type = "iframe";
trace("IFRAME")
trace( d.match(/src\=([^\s]*)\s/)[1].split(/"/)[1]);
media.id = d.match(/src\=([^\s]*)\s/)[1].split(/"/)[1];
success = true;
} else {
trace("unknown media");
media.type = "unknown";
media.id = d;
success = true;
}
if (success) {
return media;
} else {
trace("No valid media id detected");
trace(d);
}
return false;
}
}

16
source/js/Core/Media/VMM.TextElement.js

@ -0,0 +1,16 @@
/* TextElement
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.TextElement == 'undefined') {
VMM.TextElement = ({
init: function() {
return this;
},
create: function(data) {
return data;
}
}).init();
}

8
source/js/Core/README.md

@ -0,0 +1,8 @@
StoryJS-Core
============
Core javascript functionality for StoryJS (including TimelineJS)
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.

247
source/js/Core/Slider/VMM.DragSlider.js

@ -0,0 +1,247 @@
/* DRAG SLIDER
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.DragSlider == 'undefined') {
VMM.DragSlider = function() {
var drag = {
element: "",
element_move: "",
constraint: "",
sliding: false,
pagex: {
start: 0,
end: 0
},
pagey: {
start: 0,
end: 0
},
left: {
start: 0,
end: 0
},
time: {
start: 0,
end: 0
},
touch: false,
ease: "easeOutExpo"
},
dragevent = {
down: "mousedown",
up: "mouseup",
leave: "mouseleave",
move: "mousemove"
},
mousedrag = {
down: "mousedown",
up: "mouseup",
leave: "mouseleave",
move: "mousemove"
},
touchdrag = {
down: "touchstart",
up: "touchend",
leave: "mouseleave",
move: "touchmove"
},
dragslider = this,
is_sticky = false;
/* PUBLIC FUNCTIONS
================================================== */
this.createPanel = function(drag_object, move_object, constraint, touch, sticky) {
drag.element = drag_object;
drag.element_move = move_object;
//dragslider = drag_object;
if ( sticky != null && sticky != "") {
is_sticky = sticky;
}
if ( constraint != null && constraint != "") {
drag.constraint = constraint;
} else {
drag.constraint = false;
}
if ( touch) {
drag.touch = touch;
} else {
drag.touch = false;
}
trace("TOUCH" + drag.touch);
if (drag.touch) {
dragevent = touchdrag;
} else {
dragevent = mousedrag;
}
makeDraggable(drag.element, drag.element_move);
}
this.updateConstraint = function(constraint) {
trace("updateConstraint");
drag.constraint = constraint;
}
this.cancelSlide = function(e) {
VMM.unbindEvent(drag.element, onDragMove, dragevent.move);
return true;
}
/* PRIVATE FUNCTIONS
================================================== */
function makeDraggable(drag_object, move_object) {
VMM.bindEvent(drag_object, onDragStart, dragevent.down, {element: move_object, delement: drag_object});
VMM.bindEvent(drag_object, onDragEnd, dragevent.up, {element: move_object, delement: drag_object});
VMM.bindEvent(drag_object, onDragLeave, dragevent.leave, {element: move_object, delement: drag_object});
}
function onDragLeave(e) {
VMM.unbindEvent(e.data.delement, onDragMove, dragevent.move);
if (!drag.touch) {
e.preventDefault();
}
e.stopPropagation();
if (drag.sliding) {
drag.sliding = false;
dragEnd(e.data.element, e.data.delement, e);
return false;
} else {
return true;
}
}
function onDragStart(e) {
dragStart(e.data.element, e.data.delement, e);
if (!drag.touch) {
e.preventDefault();
}
//e.stopPropagation();
return true;
}
function onDragEnd(e) {
if (!drag.touch) {
e.preventDefault();
}
//e.stopPropagation();
if (drag.sliding) {
drag.sliding = false;
dragEnd(e.data.element, e.data.delement, e);
return false;
} else {
return true;
}
}
function onDragMove(e) {
dragMove(e.data.element, e);
}
function dragStart(elem, delem, e) {
if (drag.touch) {
trace("IS TOUCH")
VMM.Lib.css(elem, '-webkit-transition-duration', '0');
drag.pagex.start = e.originalEvent.touches[0].screenX;
drag.pagey.start = e.originalEvent.touches[0].screenY;
} else {
drag.pagex.start = e.pageX;
drag.pagey.start = e.pageY;
}
drag.left.start = getLeft(elem);
drag.time.start = new Date().getTime();
VMM.Lib.stop(elem);
VMM.bindEvent(delem, onDragMove, dragevent.move, {element: elem});
}
function dragEnd(elem, delem, e) {
VMM.unbindEvent(delem, onDragMove, dragevent.move);
dragMomentum(elem, e);
}
function dragMove(elem, e) {
var drag_to, drag_to_y;
drag.sliding = true;
if (drag.touch) {
drag.pagex.end = e.originalEvent.touches[0].screenX;
drag.pagey.end = e.originalEvent.touches[0].screenY;
} else {
drag.pagex.end = e.pageX;
drag.pagey.end = e.pageY;
}
drag.left.end = getLeft(elem);
drag_to = -(drag.pagex.start - drag.pagex.end - drag.left.start);
if (Math.abs(drag.pagey.start) - Math.abs(drag.pagey.end) > 10) {
trace("SCROLLING Y")
trace(Math.abs(drag.pagey.start) - Math.abs(drag.pagey.end));
}
if (Math.abs(drag_to - drag.left.start) > 10) {
VMM.Lib.css(elem, 'left', drag_to);
e.preventDefault();
e.stopPropagation();
}
}
function dragMomentum(elem, e) {
var drag_info = {
left: drag.left.end,
left_adjust: 0,
change: {
x: 0
},
time: (new Date().getTime() - drag.time.start) * 10,
time_adjust: (new Date().getTime() - drag.time.start) * 10
},
multiplier = 3000;
if (drag.touch) {
multiplier = 6000;
}
drag_info.change.x = multiplier * (Math.abs(drag.pagex.end) - Math.abs(drag.pagex.start));
drag_info.left_adjust = Math.round(drag_info.change.x / drag_info.time);
drag_info.left = Math.min(drag_info.left + drag_info.left_adjust);
if (drag.constraint) {
if (drag_info.left > drag.constraint.left) {
drag_info.left = drag.constraint.left;
if (drag_info.time > 5000) {
drag_info.time = 5000;
}
} else if (drag_info.left < drag.constraint.right) {
drag_info.left = drag.constraint.right;
if (drag_info.time > 5000) {
drag_info.time = 5000;
}
}
}
VMM.fireEvent(dragslider, "DRAGUPDATE", [drag_info]);
if (!is_sticky) {
if (drag_info.time > 0) {
if (drag.touch) {
VMM.Lib.animate(elem, drag_info.time, "easeOutCirc", {"left": drag_info.left});
} else {
VMM.Lib.animate(elem, drag_info.time, drag.ease, {"left": drag_info.left});
}
}
}
}
function getLeft(elem) {
return parseInt(VMM.Lib.css(elem, 'left').substring(0, VMM.Lib.css(elem, 'left').length - 2), 10);
}
}
}

281
source/js/Core/Slider/VMM.Slider.Slide.js

@ -0,0 +1,281 @@
/* Slider Slide
================================================== */
if (typeof VMM.Slider != 'undefined') {
VMM.Slider.Slide = function(d, _parent) {
var $media, $text, $slide, $wrap, element, c,
data = d,
slide = {},
element = "",
media = "",
loaded = false,
preloaded = false,
is_skinny = false,
_enqueue = true,
_removeque = false,
_id = "slide_",
_class = 0,
timer = {pushque:"", render:"", relayout:"", remove:"", skinny:false},
times = {pushque:500, render:100, relayout:100, remove:30000};
_id = _id + data.uniqueid;
this.enqueue = _enqueue;
this.id = _id;
element = VMM.appendAndGetElement(_parent, "<div>", "slider-item");
if (typeof data.classname != 'undefined') {
trace("HAS CLASSNAME");
VMM.Lib.addClass(element, data.classname);
} else {
trace("NO CLASSNAME");
trace(data);
}
c = {slide:"", text: "", media: "", media_element: "", layout: "content-container layout", has: { headline: false, text: false, media: false }};
/* PUBLIC
================================================== */
this.show = function(skinny) {
_enqueue = false;
timer.skinny = skinny;
_removeque = false;
clearTimeout(timer.remove);
if (!loaded) {
if (preloaded) {
clearTimeout(timer.relayout);
timer.relayout = setTimeout(reloadLayout, times.relayout);
} else {
render(skinny);
}
}
};
this.hide = function() {
if (loaded && !_removeque) {
_removeque = true;
clearTimeout(timer.remove);
timer.remove = setTimeout(removeSlide, times.remove);
}
};
this.clearTimers = function() {
//clearTimeout(timer.remove);
clearTimeout(timer.relayout);
clearTimeout(timer.pushque);
clearTimeout(timer.render);
};
this.layout = function(skinny) {
if (loaded && preloaded) {
reLayout(skinny);
}
};
this.elem = function() {
return element;
};
this.position = function() {
return VMM.Lib.position(element);
};
this.leftpos = function(p) {
if(typeof p != 'undefined') {
VMM.Lib.css(element, "left", p);
} else {
return VMM.Lib.position(element).left
}
};
this.animate = function(d, e, p) {
VMM.Lib.animate(element, d, e, p);
};
this.css = function(p, v) {
VMM.Lib.css(element, p, v );
}
this.opacity = function(p) {
VMM.Lib.css(element, "opacity", p);
}
this.width = function() {
return VMM.Lib.width(element);
};
this.height = function() {
return VMM.Lib.height(element);
};
this.content_height = function () {
var ch = VMM.Lib.find( element, ".content")[0];
if (ch != 'undefined' && ch != null) {
return VMM.Lib.height(ch);
} else {
return 0;
}
}
/* PRIVATE
================================================== */
var render = function(skinny) {
trace("RENDER " + _id);
loaded = true;
preloaded = true;
timer.skinny = skinny;
buildSlide();
clearTimeout(timer.pushque);
clearTimeout(timer.render);
timer.pushque = setTimeout(VMM.ExternalAPI.pushQues, times.pushque);
};
var removeSlide = function() {
//VMM.attachElement(element, "");
trace("REMOVE SLIDE TIMER FINISHED");
loaded = false;
VMM.Lib.detach($text);
VMM.Lib.detach($media);
};
var reloadLayout = function() {
loaded = true;
reLayout(timer.skinny, true);
};
var reLayout = function(skinny, reload) {
if (c.has.text) {
if (skinny) {
if (!is_skinny || reload) {
VMM.Lib.removeClass($slide, "pad-left");
VMM.Lib.detach($text);
VMM.Lib.detach($media);
VMM.Lib.append($slide, $text);
VMM.Lib.append($slide, $media);
is_skinny = true;
}
} else {
if (is_skinny || reload) {
VMM.Lib.addClass($slide, "pad-left");
VMM.Lib.detach($text);
VMM.Lib.detach($media);
VMM.Lib.append($slide, $media);
VMM.Lib.append($slide, $text);
is_skinny = false;
}
}
} else if (reload) {
if (c.has.headline) {
VMM.Lib.detach($text);
VMM.Lib.append($slide, $text);
}
VMM.Lib.detach($media);
VMM.Lib.append($slide, $media);
}
}
var buildSlide = function() {
trace("BUILDSLIDE");
$wrap = VMM.appendAndGetElement(element, "<div>", "content");
$slide = VMM.appendAndGetElement($wrap, "<div>");
/* DATE
================================================== */
if (data.startdate != null && data.startdate != "") {
if (type.of(data.startdate) == "date") {
if (data.type != "start") {
var st = VMM.Date.prettyDate(data.startdate, false, data.precisiondate);
var en = VMM.Date.prettyDate(data.enddate, false, data.precisiondate);
var tag = "";
/* TAG / CATEGORY
================================================== */
if (data.tag != null && data.tag != "") {
tag = VMM.createElement("span", data.tag, "slide-tag");
}
if (st != en) {
c.text += VMM.createElement("h2", st + " &mdash; " + en + tag, "date");
} else {
c.text += VMM.createElement("h2", st + tag, "date");
}
}
}
}
/* HEADLINE
================================================== */
if (data.headline != null && data.headline != "") {
c.has.headline = true;
if (data.type == "start") {
c.text += VMM.createElement("h2", VMM.Util.linkify_with_twitter(data.headline, "_blank"), "start");
} else {
c.text += VMM.createElement("h3", VMM.Util.linkify_with_twitter(data.headline, "_blank"));
}
}
/* TEXT
================================================== */
if (data.text != null && data.text != "") {
c.has.text = true;
c.text += VMM.createElement("p", VMM.Util.linkify_with_twitter(data.text, "_blank"));
}
if (c.has.text || c.has.headline) {
c.text = VMM.createElement("div", c.text, "container");
//$text = VMM.appendAndGetElement($slide, "<div>", "text", c.text);
$text = VMM.appendAndGetElement($slide, "<div>", "text", VMM.TextElement.create(c.text));
}
/* SLUG
================================================== */
if (data.needs_slug) {
}
/* MEDIA
================================================== */
if (data.asset != null && data.asset != "") {
if (data.asset.media != null && data.asset.media != "") {
c.has.media = true;
$media = VMM.appendAndGetElement($slide, "<div>", "media", VMM.MediaElement.create(data.asset, data.uniqueid));
}
}
/* COMBINE
================================================== */
if (c.has.text) { c.layout += "-text" };
if (c.has.media){ c.layout += "-media" };
if (c.has.text) {
if (timer.skinny) {
VMM.Lib.addClass($slide, c.layout);
is_skinny = true;
} else {
VMM.Lib.addClass($slide, c.layout);
VMM.Lib.addClass($slide, "pad-left");
VMM.Lib.detach($text);
VMM.Lib.append($slide, $text);
}
} else {
VMM.Lib.addClass($slide, c.layout);
}
};
}
};

805
source/js/Core/Slider/VMM.Slider.js

@ -0,0 +1,805 @@
/* Slider
================================================== */
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-append "VMM.Slider.Slide.js";
if(typeof VMM != 'undefined' && typeof VMM.Slider == 'undefined') {
VMM.Slider = function(parent, parent_config) {
var config,
timer,
$slider,
$slider_mask,
$slider_container,
$slides_items,
$dragslide,
$explainer,
events = {},
data = [],
slides = [],
slide_positions = [],
slides_content = "",
current_slide = 0,
current_width = 960,
touch = {
move: false,
x: 10,
y: 0,
off: 0,
dampen: 48
},
content = "",
_active = false,
layout = parent,
navigation = {
nextBtn: "",
prevBtn: "",
nextDate: "",
prevDate: "",
nextTitle: "",
prevTitle: ""
};
// CONFIG
if(typeof parent_config != 'undefined') {
config = parent_config;
} else {
config = {
preload: 4,
current_slide: 0,
interval: 10,
something: 0,
width: 720,
height: 400,
ease: "easeInOutExpo",
duration: 1000,
timeline: false,
spacing: 15,
slider: {
width: 720,
height: 400,
content: {
width: 720,
height: 400,
padding: 120,
padding_default: 120
},
nav: {
width: 100,
height: 200
}
}
};
}
/* PUBLIC VARS
================================================== */
this.ver = "0.6";
config.slider.width = config.width;
config.slider.height = config.height;
/* PUBLIC FUNCTIONS
================================================== */
this.init = function(d) {
slides = [];
slide_positions = [];
if(typeof d != 'undefined') {
this.setData(d);
} else {
trace("WAITING ON DATA");
}
};
this.width = function(w) {
if (w != null && w != "") {
config.slider.width = w;
reSize();
} else {
return config.slider.width;
}
}
this.height = function(h) {
if (h != null && h != "") {
config.slider.height = h;
reSize();
} else {
return config.slider.height;
}
}
/* GETTERS AND SETTERS
================================================== */
this.setData = function(d) {
if(typeof d != 'undefined') {
data = d;
build();
} else{
trace("NO DATA");
}
};
this.getData = function() {
return data;
};
this.setConfig = function(d) {
if(typeof d != 'undefined') {
config = d;
} else{
trace("NO CONFIG DATA");
}
}
this.getConfig = function() {
return config;
};
this.setSize = function(w, h) {
if (w != null) {config.slider.width = w};
if (h != null) {config.slider.height = h};
if (_active) {
reSize();
}
}
this.active = function() {
return _active;
};
this.getCurrentNumber = function() {
return current_slide;
};
this.setSlide = function(n) {
goToSlide(n);
};
/* ON EVENT
================================================== */
function onConfigSet() {
trace("onConfigSet");
};
function reSize(go_to_slide, from_start) {
var _go_to_slide = true,
_from_start = false;
if (go_to_slide != null) {_go_to_slide = go_to_slide};
if (from_start != null) {_from_start = from_start};
current_width = config.slider.width;
config.slider.nav.height = VMM.Lib.height(navigation.prevBtnContainer);
// Handle smaller sizes
if (VMM.Browser.device == "mobile" || current_width <= 640) {
config.slider.content.padding = 10;
} else {
config.slider.content.padding = config.slider.content.padding_default;
}
config.slider.content.width = current_width - (config.slider.content.padding *2);
VMM.Lib.width($slides_items, (slides.length * config.slider.content.width));
if (_from_start) {
VMM.Lib.css($slider_container, "left", slides[current_slide].leftpos());
}
// RESIZE SLIDES
sizeSlides();
// POSITION SLIDES
positionSlides();
// POSITION NAV
VMM.Lib.css(navigation.nextBtn, "left", (current_width - config.slider.nav.width));
VMM.Lib.height(navigation.prevBtn, config.slider.height);
VMM.Lib.height(navigation.nextBtn, config.slider.height);
VMM.Lib.css(navigation.nextBtnContainer, "top", ( (config.slider.height/2) - (config.slider.nav.height/2) ) + 10 );
VMM.Lib.css(navigation.prevBtnContainer, "top", ( (config.slider.height/2) - (config.slider.nav.height/2) ) + 10 );
// Animate Changes
VMM.Lib.height($slider_mask, config.slider.height);
VMM.Lib.width($slider_mask, current_width);
if (_go_to_slide) {
goToSlide(current_slide, "linear", 1);
};
if (current_slide == 0) {
VMM.Lib.visible(navigation.prevBtn, false);
}
}
function onDragFinish(e, d) {
trace("DRAG FINISH");
trace(d.left_adjust);
trace((config.slider.width / 2));
if (d.left_adjust < 0 ) {
if (Math.abs(d.left_adjust) > (config.slider.width / 2) ) {
//onNextClick(e);
if (current_slide == slides.length - 1) {
backToCurrentSlide();
} else {
goToSlide(current_slide+1, "easeOutExpo");
upDate();
}
} else {
backToCurrentSlide();
}
} else if (Math.abs(d.left_adjust) > (config.slider.width / 2) ) {
if (current_slide == 0) {
backToCurrentSlide();
} else {
goToSlide(current_slide-1, "easeOutExpo");
upDate();
}
} else {
backToCurrentSlide();
}
}
/* NAVIGATION
================================================== */
function onNextClick(e) {
if (current_slide == slides.length - 1) {
backToCurrentSlide();
} else {
goToSlide(current_slide+1);
upDate();
}
}
function onPrevClick(e) {
if (current_slide == 0) {
backToCurrentSlide();
} else {
goToSlide(current_slide-1);
upDate();
}
}
function onKeypressNav(e) {
switch(e.keyCode) {
case 39:
// RIGHT ARROW
onNextClick(e);
break;
case 37:
// LEFT ARROW
onPrevClick(e);
break;
}
}
function onTouchUpdate(e, b) {
if (slide_positions.length == 0) {
for(var i = 0; i < slides.length; i++) {
slide_positions.push( slides[i].leftpos() );
}
}
if (typeof b.left == "number") {
var _pos = b.left;
var _slide_pos = -(slides[current_slide].leftpos());
if (_pos < _slide_pos - (config.slider_width/3)) {
onNextClick();
} else if (_pos > _slide_pos + (config.slider_width/3)) {
onPrevClick();
} else {
VMM.Lib.animate($slider_container, config.duration, config.ease, {"left": _slide_pos });
}
} else {
VMM.Lib.animate($slider_container, config.duration, config.ease, {"left": _slide_pos });
}
if (typeof b.top == "number") {
VMM.Lib.animate($slider_container, config.duration, config.ease, {"top": -b.top});
} else {
}
};
function onExplainerClick(e) {
detachMessege();
}
/* UPDATE
================================================== */
function upDate() {
config.current_slide = current_slide;
VMM.fireEvent(layout, "UPDATE");
};
/* GET DATA
================================================== */
function getData(d) {
data = d;
};
/* BUILD SLIDES
================================================== */
function buildSlides(d) {
var i = 0;
VMM.attachElement($slides_items, "");
slides = [];
for(i = 0; i < d.length; i++) {
var _slide = new VMM.Slider.Slide(d[i], $slides_items);
//_slide.show();
slides.push(_slide);
}
}
function preloadSlides(skip) {
var i = 0;
if (skip) {
preloadTimeOutSlides();
} else {
for(i = 0; i < slides.length; i++) {
slides[i].clearTimers();
}
timer = setTimeout(preloadTimeOutSlides, config.duration);
}
}
function preloadTimeOutSlides() {
var i = 0;
for(i = 0; i < slides.length; i++) {
slides[i].enqueue = true;
}
for(i = 0; i < config.preload; i++) {
if ( !((current_slide + i) > slides.length - 1)) {
slides[current_slide + i].show();
slides[current_slide + i].enqueue = false;
}
if ( !( (current_slide - i) < 0 ) ) {
slides[current_slide - i].show();
slides[current_slide - i].enqueue = false;
}
}
if (slides.length > 50) {
for(i = 0; i < slides.length; i++) {
if (slides[i].enqueue) {
slides[i].hide();
}
}
}
sizeSlides();
}
function sizeSlide(slide_id) {
}
/* SIZE SLIDES
================================================== */
function sizeSlides() {
var i = 0,
layout_text_media = ".slider-item .layout-text-media .media .media-container ",
layout_media = ".slider-item .layout-media .media .media-container ",
layout_both = ".slider-item .media .media-container",
layout_caption = ".slider-item .media .media-container .media-shadow .caption",
is_skinny = false,
mediasize = {
text_media: {
width: (config.slider.content.width/100) * 60,
height: config.slider.height - 60,
video: {
width: 0,
height: 0
},
text: {
width: ((config.slider.content.width/100) * 40) - 30,
height: config.slider.height
}
},
media: {
width: config.slider.content.width,
height: config.slider.height - 110,
video: {
width: 0,
height: 0
}
}
};
// Handle smaller sizes
if (VMM.Browser.device == "mobile" || current_width < 641) {
is_skinny = true;
}
VMM.master_config.sizes.api.width = mediasize.media.width;
VMM.master_config.sizes.api.height = mediasize.media.height;
mediasize.text_media.video = VMM.Util.ratio.fit(mediasize.text_media.width, mediasize.text_media.height, 16, 9);
mediasize.media.video = VMM.Util.ratio.fit(mediasize.media.width, mediasize.media.height, 16, 9);
VMM.Lib.css(".slider-item", "width", config.slider.content.width );
VMM.Lib.height(".slider-item", config.slider.height);
if (is_skinny) {
mediasize.text_media.width = config.slider.content.width - (config.slider.content.padding*2);
mediasize.media.width = config.slider.content.width - (config.slider.content.padding*2);
mediasize.text_media.height = ((config.slider.height/100) * 50 ) - 50;
mediasize.media.height = ((config.slider.height/100) * 70 ) - 40;
mediasize.text_media.video = VMM.Util.ratio.fit(mediasize.text_media.width, mediasize.text_media.height, 16, 9);
mediasize.media.video = VMM.Util.ratio.fit(mediasize.media.width, mediasize.media.height, 16, 9);
VMM.Lib.css(".slider-item .layout-text-media .text", "width", "100%" );
VMM.Lib.css(".slider-item .layout-text-media .text", "display", "block" );
VMM.Lib.css(".slider-item .layout-text-media .text .container", "display", "block" );
VMM.Lib.css(".slider-item .layout-text-media .text .container", "width", mediasize.media.width );
VMM.Lib.css(".slider-item .layout-text-media .text .container .start", "width", "auto" );
VMM.Lib.css(".slider-item .layout-text-media .media", "float", "none" );
VMM.Lib.addClass(".slider-item .content-container", "pad-top");
VMM.Lib.css(".slider-item .media blockquote p", "line-height", "18px" );
VMM.Lib.css(".slider-item .media blockquote p", "font-size", "16px" );
VMM.Lib.css(".slider-item", "overflow-y", "auto" );
} else {
VMM.Lib.css(".slider-item .layout-text-media .text", "width", "40%" );
VMM.Lib.css(".slider-item .layout-text-media .text", "display", "table-cell" );
VMM.Lib.css(".slider-item .layout-text-media .text .container", "display", "table-cell" );
VMM.Lib.css(".slider-item .layout-text-media .text .container", "width", "auto" );
VMM.Lib.css(".slider-item .layout-text-media .text .container .start", "width", mediasize.text_media.text.width );
//VMM.Lib.addClass(".slider-item .content-container", "pad-left");
VMM.Lib.removeClass(".slider-item .content-container", "pad-top");
VMM.Lib.css(".slider-item .layout-text-media .media", "float", "left" );
VMM.Lib.css(".slider-item .layout-text-media", "display", "table" );
VMM.Lib.css(".slider-item .media blockquote p", "line-height", "36px" );
VMM.Lib.css(".slider-item .media blockquote p", "font-size", "28px" );
VMM.Lib.css(".slider-item", "display", "table" );
VMM.Lib.css(".slider-item", "overflow-y", "auto" );
}
// MEDIA FRAME
VMM.Lib.css( layout_text_media + ".media-frame", "max-width", mediasize.text_media.width);
VMM.Lib.height( layout_text_media + ".media-frame", mediasize.text_media.height);
VMM.Lib.width( layout_text_media + ".media-frame", mediasize.text_media.width);
// WEBSITES
//VMM.Lib.css( layout_both + ".website", "max-width", 300 );
// IMAGES
VMM.Lib.css( layout_text_media + "img", "max-height", mediasize.text_media.height );
VMM.Lib.css( layout_media + "img", "max-height", mediasize.media.height );
// FIX FOR NON-WEBKIT BROWSERS
VMM.Lib.css( layout_text_media + "img", "max-width", mediasize.text_media.width );
VMM.Lib.css( layout_text_media + ".avatar img", "max-width", 32 );
VMM.Lib.css( layout_text_media + ".avatar img", "max-height", 32 );
VMM.Lib.css( layout_media + ".avatar img", "max-width", 32 );
VMM.Lib.css( layout_media + ".avatar img", "max-height", 32 );
VMM.Lib.css( layout_text_media + ".article-thumb", "max-width", "50%" );
//VMM.Lib.css( layout_text_media + ".article-thumb", "max-height", 100 );
VMM.Lib.css( layout_media + ".article-thumb", "max-width", 200 );
//VMM.Lib.css( layout_media + ".article-thumb", "max-height", 100 );
// IFRAME FULL SIZE VIDEO
VMM.Lib.width( layout_text_media + ".media-frame", mediasize.text_media.video.width);
VMM.Lib.height( layout_text_media + ".media-frame", mediasize.text_media.video.height);
VMM.Lib.width( layout_media + ".media-frame", mediasize.media.video.width);
VMM.Lib.height( layout_media + ".media-frame", mediasize.media.video.height);
VMM.Lib.css( layout_media + ".media-frame", "max-height", mediasize.media.video.height);
VMM.Lib.css( layout_media + ".media-frame", "max-width", mediasize.media.video.width);
// SOUNDCLOUD
VMM.Lib.height( layout_media + ".soundcloud", 168);
VMM.Lib.height( layout_text_media + ".soundcloud", 168);
VMM.Lib.width( layout_media + ".soundcloud", mediasize.media.width);
VMM.Lib.width( layout_text_media + ".soundcloud", mediasize.text_media.width);
VMM.Lib.css( layout_both + ".soundcloud", "max-height", 168 );
// MAPS
VMM.Lib.height( layout_text_media + ".map", mediasize.text_media.height);
VMM.Lib.width( layout_text_media + ".map", mediasize.text_media.width);
VMM.Lib.css( layout_media + ".map", "max-height", mediasize.media.height);
VMM.Lib.width( layout_media + ".map", mediasize.media.width);
// DOCS
VMM.Lib.height( layout_text_media + ".doc", mediasize.text_media.height);
VMM.Lib.width( layout_text_media + ".doc", mediasize.text_media.width);
VMM.Lib.height( layout_media + ".doc", mediasize.media.height);
VMM.Lib.width( layout_media + ".doc", mediasize.media.width);
// IE8 NEEDS THIS
VMM.Lib.width( layout_media + ".wikipedia", mediasize.media.width);
VMM.Lib.width( layout_media + ".twitter", mediasize.media.width);
VMM.Lib.width( layout_media + ".plain-text-quote", mediasize.media.width);
VMM.Lib.width( layout_media + ".plain-text", mediasize.media.width);
VMM.Lib.css( layout_both, "max-width", mediasize.media.width);
// CAPTION WIDTH
VMM.Lib.css( layout_text_media + ".caption", "max-width", mediasize.text_media.video.width);
VMM.Lib.css( layout_media + ".caption", "max-width", mediasize.media.video.width);
//VMM.Lib.css( layout_text_media + ".caption", "max-width", mediasize.text_media.width);
//VMM.Lib.css( layout_media + ".caption", "max-width", mediasize.media.width);
// MAINTAINS VERTICAL CENTER IF IT CAN
for(i = 0; i < slides.length; i++) {
slides[i].layout(is_skinny);
if (slides[i].content_height() > config.slider.height + 20) {
slides[i].css("display", "block");
} else {
slides[i].css("display", "table");
}
}
}
/* POSITION SLIDES
================================================== */
function positionSlides() {
var pos = 0,
i = 0;
for(i = 0; i < slides.length; i++) {
pos = i * (config.slider.width+config.spacing);
slides[i].leftpos(pos);
}
}
/* OPACITY SLIDES
================================================== */
function opacitySlides(n) {
var _ease = "linear",
i = 0;
for(i = 0; i < slides.length; i++) {
if (i == current_slide) {
slides[i].animate(config.duration, _ease, {"opacity": 1});
} else if (i == current_slide - 1 || i == current_slide + 1) {
slides[i].animate(config.duration, _ease, {"opacity": 0.1});
} else {
slides[i].opacity(n);
}
}
}
/* GO TO SLIDE
goToSlide(n, ease, duration);
================================================== */
function goToSlide(n, ease, duration, fast, firstrun) {
var _ease = config.ease,
_duration = config.duration,
is_last = false,
is_first = false,
_title = "",
_pos;
/* STOP ANY VIDEO PLAYERS ACTIVE
================================================== */
VMM.ExternalAPI.youtube.stopPlayers();
// Set current slide
current_slide = n;
_pos = slides[current_slide].leftpos();
if (current_slide == 0) {is_first = true};
if (current_slide +1 >= slides.length) {is_last = true};
if (ease != null && ease != "") {_ease = ease};
if (duration != null && duration != "") {_duration = duration};
/* NAVIGATION
set proper nav titles and dates etc.
================================================== */
// Handle smaller sizes
if (VMM.Browser.device == "mobile") {
//if (VMM.Browser.device == "mobile" || current_width <= 640) {
VMM.Lib.visible(navigation.prevBtn, false);
VMM.Lib.visible(navigation.nextBtn, false);
} else {
if (is_first) {
VMM.Lib.visible(navigation.prevBtn, false);
} else {
VMM.Lib.visible(navigation.prevBtn, true);
_title = VMM.Util.unlinkify(data[current_slide - 1].title)
if (config.type == "timeline") {
if(typeof data[current_slide - 1].date === "undefined") {
VMM.attachElement(navigation.prevDate, _title);
VMM.attachElement(navigation.prevTitle, "");
} else {
VMM.attachElement(navigation.prevDate, VMM.Date.prettyDate(data[current_slide - 1].startdate, false, data[current_slide - 1].precisiondate));
VMM.attachElement(navigation.prevTitle, _title);
}
} else {
VMM.attachElement(navigation.prevTitle, _title);
}
}
if (is_last) {
VMM.Lib.visible(navigation.nextBtn, false);
} else {
VMM.Lib.visible(navigation.nextBtn, true);
_title = VMM.Util.unlinkify(data[current_slide + 1].title);
if (config.type == "timeline") {
if(typeof data[current_slide + 1].date === "undefined") {
VMM.attachElement(navigation.nextDate, _title);
VMM.attachElement(navigation.nextTitle, "");
} else {
VMM.attachElement(navigation.nextDate, VMM.Date.prettyDate(data[current_slide + 1].startdate, false, data[current_slide + 1].precisiondate) );
VMM.attachElement(navigation.nextTitle, _title);
}
} else {
VMM.attachElement(navigation.nextTitle, _title);
}
}
}
/* ANIMATE SLIDE
================================================== */
if (fast) {
VMM.Lib.css($slider_container, "left", -(_pos - config.slider.content.padding));
} else{
VMM.Lib.stop($slider_container);
VMM.Lib.animate($slider_container, _duration, _ease, {"left": -(_pos - config.slider.content.padding)});
}
if (firstrun) {
VMM.fireEvent(layout, "LOADED");
}
/* SET Vertical Scoll
================================================== */
if (slides[current_slide].height() > config.slider_height) {
VMM.Lib.css(".slider", "overflow-y", "scroll" );
} else {
VMM.Lib.css(layout, "overflow-y", "hidden" );
var scroll_height = 0;
try {
scroll_height = VMM.Lib.prop(layout, "scrollHeight");
VMM.Lib.animate(layout, _duration, _ease, {scrollTop: scroll_height - VMM.Lib.height(layout) });
}
catch(err) {
scroll_height = VMM.Lib.height(layout);
}
}
preloadSlides();
VMM.fireEvent($slider, "MESSAGE", "TEST");
}
function backToCurrentSlide() {
VMM.Lib.stop($slider_container);
VMM.Lib.animate($slider_container, config.duration, "easeOutExpo", {"left": -(slides[current_slide].leftpos()) + config.slider.content.padding} );
}
/* MESSEGES
================================================== */
function showMessege(e, msg, other) {
trace("showMessege " + msg);
//VMM.attachElement($timeline, $feedback);
VMM.attachElement($explainer, "<div class='vco-explainer'><div class='vco-explainer-container'><div class='vco-bezel'><div class='vco-gesture-icon'></div>" + "<div class='vco-message'><p>" + msg + "</p></div></div></div></div>");
};
function hideMessege() {
VMM.Lib.animate($explainer, config.duration, config.ease, {"opacity": 0}, detachMessege);
};
function detachMessege() {
VMM.Lib.detach($explainer);
}
/* BUILD NAVIGATION
================================================== */
function buildNavigation() {
var temp_icon = "<div class='icon'>&nbsp;</div>";
navigation.nextBtn = VMM.appendAndGetElement($slider, "<div>", "nav-next");
navigation.prevBtn = VMM.appendAndGetElement($slider, "<div>", "nav-previous");
navigation.nextBtnContainer = VMM.appendAndGetElement(navigation.nextBtn, "<div>", "nav-container", temp_icon);
navigation.prevBtnContainer = VMM.appendAndGetElement(navigation.prevBtn, "<div>", "nav-container", temp_icon);
if (config.type == "timeline") {
navigation.nextDate = VMM.appendAndGetElement(navigation.nextBtnContainer, "<div>", "date", "");
navigation.prevDate = VMM.appendAndGetElement(navigation.prevBtnContainer, "<div>", "date", "");
}
navigation.nextTitle = VMM.appendAndGetElement(navigation.nextBtnContainer, "<div>", "title", "");
navigation.prevTitle = VMM.appendAndGetElement(navigation.prevBtnContainer, "<div>", "title", "");
VMM.bindEvent(".nav-next", onNextClick);
VMM.bindEvent(".nav-previous", onPrevClick);
VMM.bindEvent(window, onKeypressNav, 'keydown');
}
/* BUILD
================================================== */
function build() {
var __duration = 3000;
// Clear out existing content
VMM.attachElement(layout, "");
// Get DOM Objects to local objects
$slider = VMM.getElement(layout);
$slider_mask = VMM.appendAndGetElement($slider, "<div>", "slider-container-mask");
$slider_container = VMM.appendAndGetElement($slider_mask, "<div>", "slider-container");
$slides_items = VMM.appendAndGetElement($slider_container, "<div>", "slider-item-container");
// BUILD NAVIGATION
buildNavigation();
// ATTACH SLIDES
buildSlides(data);
/* MAKE SLIDER DRAGGABLE/TOUCHABLE
================================================== */
if (VMM.Browser.device == "tablet" || VMM.Browser.device == "mobile") {
// Different Animation duration for touch
config.duration = 500;
__duration = 1000;
// Make touchable
$dragslide = new VMM.DragSlider();
$dragslide.createPanel($slider, $slider_container, "", config.touch, true);
VMM.bindEvent($dragslide, onDragFinish, 'DRAGUPDATE');
// EXPLAINER
$explainer = VMM.appendAndGetElement($slider_mask, "<div>", "vco-feedback", "");
showMessege(null, "Swipe to Navigate");
VMM.Lib.height($explainer, config.slider.height);
VMM.bindEvent($explainer, onExplainerClick);
VMM.bindEvent($explainer, onExplainerClick, 'touchend');
}
reSize(false, true);
VMM.Lib.visible(navigation.prevBtn, false);
goToSlide(config.current_slide, "easeOutExpo", __duration, true, true);
_active = true;
};
};
}

30
source/js/Core/VMM.StoryJS.js

@ -0,0 +1,30 @@
/* VeriteCo StoryJS
================================================== */
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "Core/VMM.Core.js";
// @codekit-prepend "Language/VMM.Language.js";
// @codekit-prepend "Media/VMM.Media.js";
// @codekit-prepend "Slider/VMM.DragSlider.js";
// @codekit-prepend "Slider/VMM.Slider.js";
// @codekit-prepend "Library/AES.js";
// @codekit-prepend "Library/bootstrap-tooltip.js";
if(typeof VMM != 'undefined' && typeof VMM.StoryJS == 'undefined') {
VMM.StoryJS = function() {
/* PRIVATE VARS
================================================== */
/* PUBLIC FUNCTIONS
================================================== */
this.init = function(d) {
};
}
}

2
source/less/Core/.gitignore vendored

@ -0,0 +1,2 @@
*.DS_Store
.DS_Store*

37
source/less/Core/Font.Default.less

@ -0,0 +1,37 @@
/*
FONT
Default
------------------------------------------------------------------------------------------- */
@font-sans: "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-serif: "Georgia", Times New Roman, Times, serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container, {
font-family: @font-sans !important;
}
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

40
source/less/Core/Font/AbrilFatface-Average.less

@ -0,0 +1,40 @@
/*
FONT
PT Serif and PT Sans
------------------------------------------------------------------------------------------- */
@font-serif: 'Abril Fatface', cursive;
@font-sans: 'Average', serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/Arvo-PTSans.less

@ -0,0 +1,39 @@
/*
FONT
Arvo and PT Sans
------------------------------------------------------------------------------------------- */
@font-serif: 'Arvo', serif;
@font-sans: 'PT Sans', sans-serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/Bevan-PotanoSans.less

@ -0,0 +1,39 @@
/*
FONT
Bevan and Potano Sans
------------------------------------------------------------------------------------------- */
@font-serif: 'Bevan', serif;
@font-sans: 'Pontano Sans', sans-serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/BreeSerif-OpenSans.less

@ -0,0 +1,39 @@
/*
FONT
Bree Serif, Open Sans
------------------------------------------------------------------------------------------- */
@font-serif: 'Bree Serif', Georgia, serif;
@font-sans: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

45
source/less/Core/Font/DroidSerif-DroidSans.less

@ -0,0 +1,45 @@
/*
FONT
Droid Serif, Droid Sans
http://www.google.com/webfonts#UsePlace:use/Collection:Droid+Sans:400,700|Droid+Serif:400,700,400italic
------------------------------------------------------------------------------------------- */
@font-sans: 'Droid Sans', sans-serif;
@font-serif: 'Droid Serif', serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p {
font-family: @font-sans !important;
}
blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
font-weight: 700;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

37
source/less/Core/Font/Georgia-Helvetica.less

@ -0,0 +1,37 @@
/*
FONT
Default
------------------------------------------------------------------------------------------- */
@font-sans: "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-serif: "Georgia", Times New Roman, Times, serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container, {
font-family: @font-sans !important;
}
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/Lekton-Molengo.less

@ -0,0 +1,39 @@
/*
FONT
Lekton and Molengo
------------------------------------------------------------------------------------------- */
@font-serif: 'Molengo', sans-serif;
@font-sans: 'Lekton', sans-serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

40
source/less/Core/Font/Lora-Istok.less

@ -0,0 +1,40 @@
/*
FONT
Lora and Istok Web
------------------------------------------------------------------------------------------- */
@font-serif: 'Lora', serif;
@font-sans: 'Istok Web', sans-serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
font-weight: 700;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

50
source/less/Core/Font/Merriweather-NewsCycle.less

@ -0,0 +1,50 @@
/*
FONT
Merriweather and NewsCycle
http://www.google.com/webfonts#UsePlace:use/Collection:News+Cycle:400,700|Merriweather:400,700,900
------------------------------------------------------------------------------------------- */
@font-serif: 'Merriweather', serif;
@font-sans: 'News Cycle', sans-serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
p {
font-size:16px;
line-height:22px;
}
.wikipedia p {
font-size: 14px !important;
line-height: 20px !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
font-weight: 900;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

50
source/less/Core/Font/NewsCycle-Merriweather.less

@ -0,0 +1,50 @@
/*
FONT
NewsCycle and Merriweather
http://www.google.com/webfonts#UsePlace:use/Collection:News+Cycle:400,700|Merriweather:400,700,900
------------------------------------------------------------------------------------------- */
@font-serif: 'Merriweather', serif;
@font-sans: 'News Cycle', sans-serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
p {
font-size:16px;
line-height:22px;
}
.wikipedia p {
font-size: 14px !important;
line-height: 20px !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans;
font-weight: 900;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/NixieOne-Ledger.less

@ -0,0 +1,39 @@
/*
FONT
Nixie One and Ledger
------------------------------------------------------------------------------------------- */
@font-serif: 'Nixie One', cursive;
@font-sans: 'Ledger', serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

44
source/less/Core/Font/PT.less

@ -0,0 +1,44 @@
/*
FONT
PT Sans Narrow, PT Serif and PT Sans
------------------------------------------------------------------------------------------- */
@font-serif: 'PT Serif', serif;
@font-sans: 'PT Sans', sans-serif;
@font-headline: 'PT Sans Narrow', sans-serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
blockquote, blockquote p, .twitter blockquote p {
font-style: italic;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-headline;
font-weight: 700;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

40
source/less/Core/Font/PTSerif-PTSans.less

@ -0,0 +1,40 @@
/*
FONT
PT Serif and PT Sans
------------------------------------------------------------------------------------------- */
@font-serif: 'PT Serif', serif;
@font-sans: 'PT Sans', sans-serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans;
font-weight: 700;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/Pacifico-Arimo.less

@ -0,0 +1,39 @@
/*
FONT
Pacifico and Arimo
------------------------------------------------------------------------------------------- */
@font-serif: 'Pacifico', cursive;
@font-sans: 'Arimo', sans-serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/PlayfairDisplay-Muli.less

@ -0,0 +1,39 @@
/*
FONT
Playfair Display and Muli
------------------------------------------------------------------------------------------- */
@font-serif: 'Playfair Display', serif;
@font-sans: 'Muli', sans-serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

49
source/less/Core/Font/PoiretOne-Molengo.less

@ -0,0 +1,49 @@
/*
FONT
Poiret One and Molengo
------------------------------------------------------------------------------------------- */
@font-serif: 'Poiret One', serif;
@font-sans: 'Molengo', sans-serif;
.vco-storyjs {
font-family: @font-serif;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p {
font-family: @font-sans !important;
font-size: 16px !important;
line-height:22px !important;
}
.wikipedia p {
font-size: 14px !important;
line-height: 20px !important;
}
blockquote, blockquote p, .twitter blockquote p {
font-family: @font-serif !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

41
source/less/Core/Font/Rancho-Gudea.less

@ -0,0 +1,41 @@
/*
FONT
Rancho and Gudea
------------------------------------------------------------------------------------------- */
@font-serif: 'Rancho', cursive;
@font-sans: 'Gudea', sans-serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

39
source/less/Core/Font/SansitaOne-Kameron.less

@ -0,0 +1,39 @@
/*
FONT
Sansita One and Kameron
------------------------------------------------------------------------------------------- */
@font-serif: 'Sansita One', cursive;
@font-sans: 'Kameron', serif;
.vco-storyjs {
font-family: @font-sans;
/* HEADERS
------------------------------------------------------------------------------------------- */
.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {
font-family: @font-sans !important;
}
.vco-feature {
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-family: @font-sans !important;
}
}
.timenav, .flag-content, .era {
h1, h2, h3, h4, h5, h6 {
font-family: @font-sans !important;
}
}
/* CONTENT
------------------------------------------------------------------------------------------- */
p, blockquote, blockquote p, .twitter blockquote p {
font-family: @font-sans !important;
}
.vco-feature {
h1, h2, h3, h4, h5, h6 {
font-family: @font-serif;
}
}
}
.timeline-tooltip {
font-family: @font-sans;
}

453
source/less/Core/GFX.less

@ -0,0 +1,453 @@
/*
GFX
Icons etc
----------------------------------------------------------------- */
.thumbnail {
.base-sprite();
}
@media only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and (min-device-pixel-ratio: 2) {
.thumbnail {
/* Reference the @2x Sprite */
.base-sprite2x();
/* Translate the @2x sprite's dimensions back to 1x */
background-size: 352px 260px;
}
}
/* Feature Navigation
----------------------------------------------------------------- */
.icon-previous() {
height:24px;
.base-sprite();
background-repeat:no-repeat;
background-position: -160px 0; width: 24px; height: 24px;
overflow:hidden;
}
.icon-previous2x() {
height:24px;
.base-sprite2x();
background-repeat:no-repeat;
background-position: -160px 0; width: 24px; height: 24px;
overflow:hidden;
}
.icon-next() {
.base-sprite();
background-repeat:no-repeat;
background-position: -184px 0; width: 24px; height: 24px;
height:24px;
overflow:hidden;
}
.icon-next2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -184px 0; width: 24px; height: 24px;
height:24px;
overflow:hidden;
}
.icon-previous-light() {
height:24px;
.base-sprite();
background-repeat:no-repeat;
background-position: -208px 0; width: 24px; height: 24px;
overflow:hidden;
}
.icon-previous-light2x() {
height:24px;
.base-sprite2x();
background-repeat:no-repeat;
background-position: -208px 0; width: 24px; height: 24px;
overflow:hidden;
}
.icon-next-light() {
.base-sprite();
background-repeat:no-repeat;
background-position: -232px 0; width: 24px; height: 24px;
height:24px;
overflow:hidden;
}
.icon-next-light2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -232px 0; width: 24px; height: 24px;
height:24px;
overflow:hidden;
}
/* TimeNav Navigation
----------------------------------------------------------------- */
.icon-zoom-in() {
.base-sprite();
background-repeat:no-repeat;
background-position: -256px 0; width: 24px; height: 24px;
}
.icon-zoom-in2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -256px 0; width: 24px; height: 24px;
}
.icon-zoom-out() {
.base-sprite();
background-repeat:no-repeat;
background-position: -280px 0; width: 24px; height: 24px;
}
.icon-zoom-out2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -280px 0; width: 24px; height: 24px;
}
.icon-back-home() {
.base-sprite();
background-repeat:no-repeat;
background-position: -328px 0; width: 24px; height: 24px;
}
.icon-back-home2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -328px 0; width: 24px; height: 24px;
}
/* TimeNav Navigation Touch
----------------------------------------------------------------- */
.icon-touch-zoom-in() {
.base-sprite();
background-repeat:no-repeat;
background-position: -208px -160px; width: 40px; height: 40px;
}
.icon-touch-zoom-in2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -208px -160px; width: 40px; height: 40px;
}
.icon-touch-zoom-out() {
.base-sprite();
background-repeat:no-repeat;
background-position: -256px -160px; width: 40px; height: 40px;
}
.icon-touch-zoom-out2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -256px -160px; width: 40px; height: 40px;
}
.icon-touch-back-home() {
.base-sprite();
background-repeat:no-repeat;
background-position: -304px -160px; width: 40px; height: 40px;
}
.icon-touch-back-home2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -304px -160px; width: 40px; height: 40px;
}
.icon-touch-gesture() {
.base-sprite();
background-repeat:no-repeat;
background-position: -160px -160px; width: 48px; height: 48px;
}
.icon-touch-gesture2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -160px -160px; width: 48px; height: 48px;
}
/* Time Flag
----------------------------------------------------------------- */
.time-flag() {
.base-sprite();
background-repeat:no-repeat;
background-position: 0 0; width:153px; height: 53px;
}
.time-flag2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: 0 0; width:153px; height: 53px;
}
.time-flag-active() {
.base-sprite();
background-repeat:no-repeat;
background-position: 0 -53px; width:153px; height: 53px;
}
.time-flag-active2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: 0 -53px; width:153px; height: 53px;
}
.time-flag-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: 0 -135px; width:153px; height: 26px;
}
.time-flag-small2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: 0 -135px; width:153px; height: 26px;
}
.time-flag-small-active() {
.base-sprite();
background-repeat:no-repeat;
background-position: 0 -109px; width:153px; height: 26px;
}
.time-flag-small-active2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: 0 -109px; width:153px; height: 26px;
}
/* Thumbnail Icons
----------------------------------------------------------------- */
.icon-map() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -208px -24px;
}
.icon-mappin() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -208px -48px;
}
.icon-website() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -232px -24px;
}
.icon-document() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -256px -48px;
}
.icon-quote() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -232px -48px;
}
.icon-plaintext() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -280px -48px;
}
.icon-twitter() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -256px -24px;
}
.icon-video() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -328px -24px;
}
.icon-audio() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -304px -24px;
}
.icon-photo() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -280px -24px;
}
.icon-link() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -184px -72px;
}
.icon-storify() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -328px -96px;
}
.icon-wikipedia() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -184px -48px;
}
.icon-instagram() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -208px -96px;
}
.icon-vine() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -232px -72px;
}
.icon-googleplus() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -208px -72px;
}
.icon-vimeo() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -328px -48px;
}
.icon-youtube() {
//.base-sprite();
background-repeat:no-repeat;
background-position: -328px -72px;
}
/* Thumbnail Icons Small 10px
----------------------------------------------------------------- */
.icon-map-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -208px -120px;
}
.icon-mappin-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -208px -120px;
}
.icon-website-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -232px -120px;
}
.icon-document-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -256px -130px;
}
.icon-quote-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -232px -130px;
}
.icon-plaintext-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -280px -130px;
}
.icon-twitter-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -256px -120px;
}
.icon-video-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -328px -120px;
}
.icon-audio-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -304px -120px;
}
.icon-photo-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -280px -120px;
}
.icon-link-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -232px -120px;
}
.icon-wikipedia-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -184px -120px;
}
.icon-instagram-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -208px -96px;
}
.icon-googleplus-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -208px -130px;
}
.icon-vine-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -160px -120px;
}
.icon-vimeo-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -328px -130px;
}
.icon-youtube-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -304px -130px;
}
.icon-storify-small() {
.base-sprite();
background-repeat:no-repeat;
background-position: -184px -130px;
}
/* Thumbnail Icons (Extra)
----------------------------------------------------------------- */
.icon-twitter-inline() {
.base-sprite();
background-repeat:no-repeat;
background-position: -160px -96px;
}
.icon-googleplus-inline() {
.base-sprite();
background-repeat:no-repeat;
background-position: -208px -96px;
}
.icon-storify-inline() {
.base-sprite();
background-repeat:no-repeat;
background-position: -184px -96px;
}
.icon-storify-full() {
.base-sprite();
background-repeat:no-repeat;
background-position: -280px -96px;
width:@base-thumb*2;
//height:12px;
}
.icon-instagram-full() {
.base-sprite();
background-repeat:no-repeat;
background-position: -232px -96px;
width:@base-thumb*2;
height:@base-thumb;
}
/* Current Time Indicator
----------------------------------------------------------------- */
.icon-currenttime() {
.base-sprite();
background-repeat:no-repeat;
background-position: -160px -48px;
width:24px;
height:24px;
}
.icon-currenttime2x() {
.base-sprite2x();
background-repeat:no-repeat;
background-position: -160px -48px;
width:24px;
height:24px;
}
/* Time Tics
----------------------------------------------------------------- */
.background-time-tic() {
background: @color-background url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAMAAAA8JaR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBrwkQIABAAHIABkHeR3aAAAAAElFTkSuQmCC);
}
.background-time-interval() {
//background: @color-base url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);
//background-repeat: no-repeat;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);
}
.background-time-interval-major() {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQAQMAAADtUYf0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyOTAzRjI3REIzNDcxMUUxQUQ3QUZCOThEODQ1NDhCNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyOTAzRjI3RUIzNDcxMUUxQUQ3QUZCOThEODQ1NDhCNyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjI5MDNGMjdCQjM0NzExRTFBRDdBRkI5OEQ4NDU0OEI3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjI5MDNGMjdDQjM0NzExRTFBRDdBRkI5OEQ4NDU0OEI3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+DPWNfQAAAANQTFRFzMzMylJEJwAAAAtJREFUCB1jYMAPAAAgAAHDvpOtAAAAAElFTkSuQmCC);
}

361
source/less/Core/LICENSE

@ -0,0 +1,361 @@
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
-------------------------------------------

236
source/less/Core/Mixins.less

@ -0,0 +1,236 @@
/* Mixins.less
* Snippets of reusable CSS to develop faster and keep code readable
* ----------------------------------------------------------------- */
// Text Font
.text-font(@fontsize: 15px) {
font-size: @fontsize;
line-height: round((@fontsize/100) * 130);
}
// Border Radius
.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
// User Select
.user-select(@userselect) {
-webkit-user-select: @userselect;
-moz-user-select: @userselect;
user-select: @userselect;
}
// Box Shadow
.box-shadow(@shadow: 1px 1px 7px rgba(0,0,0,.30)) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
// Media Shadow
.media-shadow(@shadow: 0 1px 3px 0px @color-dark-fourth) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
border: 1px solid;
border-color: @color-line @color-dark-fourth @color-dark-fourth @color-line;
}
// Transform
.transform(@transform) {
-webkit-transform: @transform;
-moz-transform: @transform;
-ms-transform: @transform;
-o-transform: @transform;
transform: @transform;
}
// Transitions
.transition(@transition) {
-webkit-transition: @transition;
-moz-transition: @transition;
-ms-transition: @transition;
-o-transition: @transition;
transition: @transition;
}
// Background clipping
.background-clip(@clip) {
-webkit-background-clip: @clip;
-moz-background-clip: @clip;
background-clip: @clip;
}
// Opacity
.opacity(@opacity: 100) {
filter: e(%("alpha(opacity=%d)", @opacity));
-khtml-opacity: @opacity / 100;
-moz-opacity: @opacity / 100;
opacity: @opacity / 100;
}
// Hyphens
.hyphens(@hyphens: auto) {
-webkit-hyphens:@hyphens;
-moz-hyphens:@hyphens;
-ms-hyphens:@hyphens;
hyphens:@hyphens;
}
// Clear Fix
.clearfix() {
*zoom: 1;
&:before,
&:after {
display: table;
content: "";
}
&:after {
clear: both;
}
}
// Reset filters for IE
.reset-filter() {
filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
}
// Center-align a block level element
.center-block() {
display: block;
margin-left: auto;
margin-right: auto;
}
// Button backgrounds
// ------------------
.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
// gradientBar will set the background to a pleasing blend of these, to support IE<=9
.gradientBar(@startColor, @endColor, @textColor, @textShadow);
*background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */
.reset-filter();
// in these cases the gradient won't cover the background, so we override
&:hover, &:active, &.active, &.disabled, &[disabled] {
color: @textColor;
background-color: @endColor;
*background-color: darken(@endColor, 5%);
}
// IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
&:active,
&.active {
background-color: darken(@endColor, 10%) e("\9");
}
}
// Font Stacks
#font {
.shorthand(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: @font-sansserif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.font-body(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: @fontBody, Helvetica, Arial, sans-serif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.font-header(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: @fontHeader;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: @font-serif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.monospace(@weight: normal, @size: 12px, @lineHeight: 20px) {
font-family: "Monaco", Courier New, monospace;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
.navigation(@weight: normal, @size: 14px, @lineHeight: 20px) {
font-family: @font-sansserif;
font-size: @size;
font-weight: @weight;
line-height: @lineHeight;
}
}
// CSS3 Content Columns
.content-columns(@columnCount, @columnGap: 20px) {
-webkit-column-count: @columnCount;
-moz-column-count: @columnCount;
column-count: @columnCount;
-webkit-column-gap: @columnGap;
-moz-column-gap: @columnGap;
column-gap: @columnGap;
}
// Add an alphatransparency value to any background or border color (via Elyse Holladay)
#translucent {
.background(@color: @white, @alpha: 1) {
background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
}
.border(@color: @white, @alpha: 1) {
border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
background-clip: padding-box;
}
}
// Gradient Bar Colors for buttons and alerts
.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
color: @textColor;
text-shadow: @textShadow;
#gradient > .vertical(@primaryColor, @secondaryColor);
border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
}
// Gradients
#gradient {
.horizontal (@startColor: #555, @endColor: #333) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); // Konqueror
background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
background-image: linear-gradient(left, @startColor, @endColor); // Le standard
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down
}
.vertical (@startColor: #555, @endColor: #333) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror
background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
background-image: linear-gradient(top, @startColor, @endColor); // The standard
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
}
.directional (@startColor: #555, @endColor: #333, @deg: 45deg) {
background-color: @endColor;
background-repeat: repeat-x;
background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10
background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
background-image: linear-gradient(@deg, @startColor, @endColor); // The standard
}
.vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
background-color: @endColor;
background-repeat: no-repeat;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback
}
}

8
source/less/Core/README.md

@ -0,0 +1,8 @@
StoryJS-Core-CSS
================
Core CSS for StoryJS (including TimelineJS)
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.

117
source/less/Core/Reset.less

@ -0,0 +1,117 @@
/* Reset
------------------------------------------------------------------------------------------- */
.vco-storyjs {
/* Reset tags and common classes
Display in IE6-9 and FF3
Based on: http://github.com/necolas/normalize.css
------------------------------------------------------------------------------------------- */
div * {
-webkit-box-sizing:content-box;
-moz-box-sizing:content-box;
box-sizing:content-box;
}
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong,
sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td,
.vco-container, .content-container, .media, .text, .vco-slider, .slider, .date, .title, .messege, .map, .credit, .caption, .vco-feedback, .vco-feature, .toolbar,
.marker, .dot, .line, .flag, .time, .era, .major, .minor, .vco-navigation, .start, .active {
margin: 0;
padding: 0;
border: 0;
font-weight: normal;
font-style: normal;
font-size: 100%;
line-height: 1;
font-family: inherit;
width: auto;
float:none;
}
h1, h2, h3, h4, h5, h6 {
clear:none;
}
table { border-collapse: collapse; border-spacing: 0;}
ol, ul { list-style: none;}
q:before, q:after, blockquote:before, blockquote:after { content: ""; }
a:focus { outline: thin dotted; }
a:hover, a:active { outline: 0;}
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section {
display: block;
}
audio, canvas, video {
display: inline-block;
*display: inline;
*zoom: 1;
}
/* Prevents modern browsers from displaying 'audio' without controls
Based on: http://github.com/necolas/normalize.css
------------------------------------------------------------------------------------------- */
audio:not([controls]) {
display: none;
}
div {
max-width:none;
}
/* Prevents sub and sup affecting line-height in all browsers
Based on: http://github.com/necolas/normalize.css
------------------------------------------------------------------------------------------- */
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Img border in a's and image quality
Based on: http://github.com/necolas/normalize.css
------------------------------------------------------------------------------------------- */
img {
border: 0;
-ms-interpolation-mode: bicubic;
}
/* Forms
Based on: http://github.com/necolas/normalize.css
------------------------------------------------------------------------------------------- */
button, input, select, textarea {
font-size: 100%;
margin: 0;
vertical-align: baseline;
*vertical-align: middle;
}
button, input {
line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
*overflow: visible; // Inner spacing ie IE6/7
}
button::-moz-focus-inner, input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
border: 0;
padding: 0;
}
button, input[type="button"], input[type="reset"], input[type="submit"] {
cursor: pointer; // Cursors on all buttons applied consistently
-webkit-appearance: button; // Style clicable inputs in iOS
}
input[type="search"] { // Appearance in Safari/Chrome
-webkit-appearance: textfield;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
}
textarea {
overflow: auto; // Remove vertical scrollbar in IE6-9
vertical-align: top; // Readability and alignment cross-browser
}
}

195
source/less/Core/Typography.less

@ -0,0 +1,195 @@
/* Typography.less
* Headings, body text, lists, etc
* ---------------------------------------------------------------------------------------- */
.vco-storyjs {
font-size: @base-font;
font-weight: normal;
line-height: @base-line;
-webkit-font-smoothing: antialiased; /* Fix for webkit rendering */
-webkit-text-size-adjust: 100%;
p {
font-size: @base-font;
font-weight: normal;
line-height: @base-line;
margin-bottom: @base-line;
color: @color-feature-description;
small {
font-size: @base-font - 3;
line-height: @base-line - 3;
}
}
p:first-child {
margin-top:@base-line;
}
.vco-navigation {
p {
color: @color-nav-description;
}
}
.vco-feature {
h3, h4, h5, h6 {
margin-bottom: @base-space;
}
p {
color: @color-feature-description;
}
blockquote, blockquote p {
color:@color-feature-title;
}
}
.date, .title {
a {
color: @color-nav-description;
}
}
.hyphenate {
.hyphens(auto);
word-wrap:break-word;
}
h1, h2, h3, h4, h5, h6 {
font-weight: normal;
color: @color-feature-title;
text-transform: none;
a {
color: @color-nav-description;
}
small {
color: @color-nav-title;
}
}
h1.date, h2.date, h3.date, h4.date, h5.date, h6.date {
font-weight: bold;
}
h2.start {
//font-size: 42px;
//line-height: 44px;
font-size: 36px;
line-height: 38px;
margin-bottom: @base-space;
}
h1 {
margin-bottom: @base-space;
font-size: 32px;
line-height: 34px;
small {
font-size: 18px;
}
}
h2 {
margin-bottom: @base-space;
font-size: 28px;
line-height: 30px;
small {
font-size: 14px;
line-height: 16px;
//margin-left:5px;
}
}
h2.date {
font-size: 16px;
line-height:18px;
margin-bottom: @base-space/4;
color:@color-feature-date;
//margin-bottom: @base-space;
}
h3, h4, h5, h6 {
line-height: @base-line * 2;
.active {
color: @color-theme;
}
}
h3 {
font-size: 28px;
line-height: 30px;
//font-size: 24px;
//line-height:26px;
small {
font-size: 14px;
}
}
h4 {
font-size: 20px;
line-height: 22px;
//font-size: 16px;
//line-height:18px;
small {
font-size: 12px;
}
}
h5 {
font-size: 16px;
line-height:18px;
//font-size: 14px;
//line-height:16px;
}
h6 {
font-size: 13px;
line-height:14px;
text-transform: uppercase;
}
strong {
font-weight:bold;
font-style:inherit;
}
em {
font-style: italic;
font-weight: inherit;
}
Q {
quotes: '„' '“';
font-style: italic;
}
/* BLOCKQUOTES
================================================== */
blockquote, blockquote p {
font-size: @base-font-large;
line-height: @base-line-large;
text-align:left;
margin-bottom: 6px;
padding-top: 10px;
background-color:@white;
color:@color-feature-title;
}
/* Caption and Credits
================================================== */
.credit {
color: @color-credit;
text-align: right;
font-size: 10px;
line-height: 10px;
display: block;
margin: 0 auto;
clear:both;
}
.caption {
text-align:left;
margin-top:5px;
color: @color-caption;
font-size: 11px;
line-height: 14px;
clear:both;
}
}
/* Right to Left
* ---------------------------------------------------------------------------------------- */
.vco-storyjs.vco-right-to-left {
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong,
sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, {
direction:rtl;
}
}

404
source/less/Core/VMM.Core.less

@ -0,0 +1,404 @@
/*
* VMM StoryJS Core
* Basic and global styles for generating structural layout
* ------------------------------------------------------------------------------------------- */
/* BASE
----------------------------------------------------- */
// CSS Reset
@import "Reset.less";
// Core variables and mixins
@import "Font.Default.less";
@import "Variables.less";
@import "Mixins.less";
@import "GFX.less";
@import "Typography.less";
@import "VMM.Tooltip.less";
@import "VMM.FancyBox.less";
// Grid system and page structure
@import "VMM.Slider.less";
/* StoryJS Embed
================================================== */
.storyjs-embed {
background-color: @color-base;
margin-bottom:20px;
border: 1px solid @color-line;
padding-top:20px;
padding-bottom:20px;
clear:both;
.border-radius(10px);
.box-shadow(1px 1px 3px rgba(0,0,0,.35));
}
.storyjs-embed.full-embed {
overflow:hidden;
border: 0 !important;
padding: 0 !important;
margin: 0 !important;
clear:both;
.border-radius(0) !important;
.box-shadow(0 0px 0px rgba(0, 0, 0, 0.25)) !important;
}
.storyjs-embed.sized-embed {
overflow:hidden;
border: 1px solid @color-line;
padding-top:7px;
padding-bottom:7px;
margin: 0 !important;
clear:both;
.box-shadow(0 0px 0px rgba(0, 0, 0, 0.25)) !important;
}
/* StoryJS
================================================== */
.vco-storyjs {
width: 100%;
height:100%;
padding:0px;
margin:0px;
background-color:@color-background;
position: absolute;
z-index:100;
clear:both;
overflow:hidden;
.vmm-clear:before,
.vmm-clear:after {
content:"";
display:table;
}
.vmm-clear:after {
clear:both;
}
.vmm-clear {
*zoom:1;
}
/* FEATURE
================================================== */
.vco-feature {
width: 100%;
.slider, .vco-slider {
width: 100%;
float: left;
position: relative;
z-index:10;
padding-top:@base-space;
.box-shadow();
}
}
/* FEEDBACK
================================================== */
.vco-feedback {
position: absolute;
display:table;
overflow:hidden;
top:0px;
left:0px;
z-index:205;
width: 100%;
height:100%;
//background-color: @color-base;
}
div.vco-loading, div.vco-explainer {
display:table;
text-align:center;
min-width: 100px;
margin-top:@base-space;
height:100%;
width:100%;
background-color: @color-background;
.vco-loading-container, .vco-explainer-container {
display:table-cell;
vertical-align:middle;
.vco-loading-icon {
display:block;
background-repeat:no-repeat;
vertical-align:middle;
margin-left:auto;
margin-right:auto;
text-align:center;
.loading-sprite();
width:28px;
height:28px;
}
.vco-gesture-icon {
display:block;
background-repeat:no-repeat;
vertical-align:middle;
margin-left:auto;
margin-right:auto;
text-align:center;
.icon-touch-gesture();
width:48px;
height:48px;
}
.vco-message {
display:block;
}
.vco-message, .vco-message p {
text-align:center;
font-size: @base-font-small;
line-height:@base-font-small + 2;
text-transform: uppercase;
margin-top:@base-space/2;
margin-bottom:@base-space/2;
}
}
.vco-explainer-container {
//background-color:@color-dark-second;
//background-color: fade(@color-dark, 65%);
}
}
div.vco-explainer {
background-color: transparent;
//height:400px;
//margin-top:100px;
}
.vco-bezel {
background-color:@color-dark-second;
background-color: fade(@color-dark, 80%);
//border: 1px solid fade(@color-base, 50%);
width:80px;
height:50px;
padding:50px;
padding-top:25px;
padding: 25px 20px 50px 20px;
margin:auto;
.border-radius(10px);
.vco-message, .vco-message p {
color: @color-base;
font-weight: bold;
}
}
/* Container
================================================== */
.vco-container.vco-main {
position: absolute;
top:0px;
left:0px;
padding-bottom:3px;
//margin-top:@base-space;
width: auto;
height: auto;
margin:0px;
clear:both;
}
img, embed, object, video, iframe {
max-width: 100%;
}
iframe {
//margin-bottom:5px;
}
img {
max-height:100%;
border: 1px solid @color-credit;
}
a {
color:@color-theme;
text-decoration: none;
}
a:hover {
color:@color-theme-dark;
text-decoration: underline;
}
.vcard {
float:right;
margin-bottom:@base-space;
a {
color: @color-dark-second;
}
a:hover {
text-decoration: none;
.fn {
text-decoration: underline;
}
}
.fn, .nickname {
padding-left: 42px;
}
.fn {
display:block;
font-weight: bold;
}
.nickname {
margin-top:1px;
display:block;
color: @color-dark-third;
}
.avatar {
float:left;
display: block;
width: 32px;
height: 32px;
img {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
}
}
.thumbnail {
width:@base-thumb;
height:@base-thumb;
overflow:hidden;
float:left;
margin:0;
margin-right:1px;
margin-top:6px;
//Fixes for bootstrap sites
border:0;
padding:0;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
// fixes for bootstrap sites
a.thumbnail:hover {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.thumbnail.thumb-plaintext {
.icon-plaintext();
}
.thumbnail.thumb-quote {
.icon-quote();
}
.thumbnail.thumb-document {
.icon-document();
}
.thumbnail.thumb-photo {
.icon-photo();
border:0;
img {
border:0px none @color-line !important;
}
}
.thumbnail.thumb-twitter {
.icon-twitter();
}
.thumbnail.thumb-vimeo {
.icon-vimeo();
}
.thumbnail.thumb-vine {
.icon-vine();
}
.thumbnail.thumb-youtube {
.icon-youtube();
}
.thumbnail.thumb-video {
.icon-video();
}
.thumbnail.thumb-audio {
.icon-audio();
}
.thumbnail.thumb-map {
.icon-mappin();
}
.thumbnail.thumb-website {
.icon-website();
}
.thumbnail.thumb-link {
.icon-link();
}
.thumbnail.thumb-wikipedia {
.icon-wikipedia();
}
.thumbnail.thumb-storify {
.icon-storify();
}
.thumbnail.thumb-googleplus {
.icon-googleplus();
}
thumbnail.thumb-instagram {
.icon-instagram();
}
thumbnail.thumb-instagram-full {
.icon-instagram-full();
}
.thumb-storify-full {
//display:inline-block;
height:12px;
.icon-storify-full();
}
.thumbnail-inline {
width:16px;
height:14px;
overflow:hidden;
display:inline-block;
margin-right:1px;
margin-left:3px;
margin-top:2px;
//float:left;
.opacity(50);
}
.twitter {
.thumbnail-inline {
.icon-twitter-inline();
}
}
.storify {
.thumbnail-inline {
.icon-storify-inline();
}
}
.googleplus {
.thumbnail-inline {
.icon-googleplus-inline();
}
}
.zFront {
z-index:204;
}
}
/* RETINA
================================================== */
@media only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and (min-device-pixel-ratio: 2) {
.vco-storyjs {
div.vco-loading, div.vco-explainer {
.vco-loading-container, .vco-explainer-container {
.vco-loading-icon {
.loading-sprite2x();
}
.vco-gesture-icon {
.icon-touch-gesture2x();
}
}
}
}
}

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

Loading…
Cancel
Save