diff --git a/README.md b/README.md index f4f582b0..aea8464b 100755 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Possible breaking changes * Backend.Memory.Store attribute for holding 'records' renamed to `records` from `data` * Require new underscore.deferred vendor library for all use (jQuery no longer required if just using recline.dataset.js) * View.el is now the raw DOM element. If you want a jQuery-wrapped version, use view.$el. #350 +* Upgraded timelinejs lib - #316 ### v0.5 - July 5th 2012 (first public release) diff --git a/_includes/recline-deps.html b/_includes/recline-deps.html index 6055809a..ca6de2ce 100644 --- a/_includes/recline-deps.html +++ b/_includes/recline-deps.html @@ -8,7 +8,7 @@ - + @@ -36,7 +36,7 @@ - + diff --git a/dist/recline.js b/dist/recline.js index 41168e0c..da4b6b53 100644 --- a/dist/recline.js +++ b/dist/recline.js @@ -1294,7 +1294,8 @@ this.recline.View = this.recline.View || {}; // { // group: {column name for x-axis}, // series: [{column name for series A}, {column name series B}, ... ], -// graphType: 'line', +// // options are: lines, points, lines-and-points, bars, columns +// graphType: 'lines', // graphOptions: {custom [flot options]} // } // @@ -3668,7 +3669,7 @@ my.Timeline = Backbone.View.extend({ initialize: function(options) { var self = this; - this.timeline = new VMM.Timeline(); + this.timeline = new VMM.Timeline(this.elementId); this._timelineIsInitialized = false; this.listenTo(this.model.fields, 'reset', function() { self._setupTemporalField(); @@ -3679,6 +3680,9 @@ my.Timeline = Backbone.View.extend({ var stateData = _.extend({ startField: null, endField: null, + // by default timelinejs (and browsers) will parse ambiguous dates in US format (mm/dd/yyyy) + // set to true to interpret dd/dd/dddd as dd/mm/yyyy + nonUSDates: false, timelineJSOptions: {} }, options.state @@ -3706,9 +3710,10 @@ my.Timeline = Backbone.View.extend({ }, _initTimeline: function() { - var $timeline = this.$el.find(this.elementId); var data = this._timelineJSON(); - this.timeline.init(data, this.elementId, this.state.get("timelineJSOptions")); + var config = this.state.get("timelineJSOptions"); + config.id = this.elementId; + this.timeline.init(config, data); this._timelineIsInitialized = true }, @@ -3770,6 +3775,12 @@ my.Timeline = Backbone.View.extend({ return out; }, + // convert dates into a format TimelineJS will handle + // TimelineJS does not document this at all so combo of read the code + + // trial and error + // Summary (AFAICt): + // Preferred: [-]yyyy[,mm,dd,hh,mm,ss] + // Supported: mm/dd/yyyy _parseDate: function(date) { if (!date) { return null; @@ -3777,12 +3788,20 @@ my.Timeline = Backbone.View.extend({ var out = $.trim(date); out = out.replace(/(\d)th/g, '$1'); out = out.replace(/(\d)st/g, '$1'); - out = $.trim(out) ? moment(out) : null; - if (out && out.isValid()) { - return out.toDate(); - } else { - return null; + out = $.trim(out); + if (out.match(/\d\d\d\d-\d\d-\d\d(T.*)?/)) { + out = out.replace(/-/g, ',').replace('T', ',').replace(':',','); } + if (out.match(/\d\d-\d\d-\d\d.*/)) { + out = out.replace(/-/g, '/'); + } + if (this.state.get('nonUSDates')) { + var parts = out.match(/(\d\d)\/(\d\d)\/(\d\d.*)/); + if (parts) { + out = [parts[2], parts[1], parts[3]].join('/'); + } + } + return out; }, _setupTemporalField: function() { diff --git a/src/view.timeline.js b/src/view.timeline.js index af0b3909..cd4a1084 100644 --- a/src/view.timeline.js +++ b/src/view.timeline.js @@ -28,7 +28,7 @@ my.Timeline = Backbone.View.extend({ initialize: function(options) { var self = this; - this.timeline = new VMM.Timeline(); + this.timeline = new VMM.Timeline(this.elementId); this._timelineIsInitialized = false; this.listenTo(this.model.fields, 'reset', function() { self._setupTemporalField(); @@ -39,6 +39,9 @@ my.Timeline = Backbone.View.extend({ var stateData = _.extend({ startField: null, endField: null, + // by default timelinejs (and browsers) will parse ambiguous dates in US format (mm/dd/yyyy) + // set to true to interpret dd/dd/dddd as dd/mm/yyyy + nonUSDates: false, timelineJSOptions: {} }, options.state @@ -66,9 +69,10 @@ my.Timeline = Backbone.View.extend({ }, _initTimeline: function() { - var $timeline = this.$el.find(this.elementId); var data = this._timelineJSON(); - this.timeline.init(data, this.elementId, this.state.get("timelineJSOptions")); + var config = this.state.get("timelineJSOptions"); + config.id = this.elementId; + this.timeline.init(config, data); this._timelineIsInitialized = true }, @@ -130,6 +134,12 @@ my.Timeline = Backbone.View.extend({ return out; }, + // convert dates into a format TimelineJS will handle + // TimelineJS does not document this at all so combo of read the code + + // trial and error + // Summary (AFAICt): + // Preferred: [-]yyyy[,mm,dd,hh,mm,ss] + // Supported: mm/dd/yyyy _parseDate: function(date) { if (!date) { return null; @@ -137,12 +147,20 @@ my.Timeline = Backbone.View.extend({ var out = $.trim(date); out = out.replace(/(\d)th/g, '$1'); out = out.replace(/(\d)st/g, '$1'); - out = $.trim(out) ? moment(out) : null; - if (out && out.isValid()) { - return out.toDate(); - } else { - return null; + out = $.trim(out); + if (out.match(/\d\d\d\d-\d\d-\d\d(T.*)?/)) { + out = out.replace(/-/g, ',').replace('T', ',').replace(':',','); } + if (out.match(/\d\d-\d\d-\d\d.*/)) { + out = out.replace(/-/g, '/'); + } + if (this.state.get('nonUSDates')) { + var parts = out.match(/(\d\d)\/(\d\d)\/(\d\d.*)/); + if (parts) { + out = [parts[2], parts[1], parts[3]].join('/'); + } + } + return out; }, _setupTemporalField: function() { diff --git a/test/index.html b/test/index.html index eb0cf8d8..905a07ed 100644 --- a/test/index.html +++ b/test/index.html @@ -4,7 +4,7 @@ Qunit Tests - + @@ -24,7 +24,7 @@ - + diff --git a/test/view.timeline.test.js b/test/view.timeline.test.js index 5e3bf148..d76d52e8 100644 --- a/test/view.timeline.test.js +++ b/test/view.timeline.test.js @@ -19,13 +19,13 @@ test('extract dates and timelineJSON', function () { 'headline': '', 'date': [ { - 'startDate': moment('2012-03-20').toDate(), + 'startDate': '2012,03,20', 'endDate': null, 'headline': '1', 'text': '
Date: 2012-03-20
title: 1
' }, { - 'startDate': moment('2012-03-25').toDate(), + 'startDate': '2012,03,25', 'endDate': null, 'headline': '2', 'text': '
Date: 2012-03-25
title: 2
' @@ -41,13 +41,13 @@ test('render etc', function () { var view = new recline.View.Timeline({ model: dataset }); - view.render(); $('.fixtures').append(view.el); + view.render(); view._initTimeline(); - assertPresent('.vmm-timeline', view.el); + assertPresent('.vco-timeline', view.el); assertPresent('.timenav', view.el); assertPresent('.timenav', view.el); - equal(view.$el.find('.marker.active h4').text(), '2011'); + equal(view.$el.find('.marker.active h3').text(), 'firstfirst'); view.remove(); }); @@ -57,18 +57,21 @@ test('_parseDate', function () { model: dataset }); var testData = [ - [ '1st August 1914', '1914-08-01T00:00:00.000Z' ], - [ '1 August 1914', '1914-08-01T00:00:00.000Z' ], - [ 'August 1st 1914', '1914-08-01T00:00:00.000Z' ], - [ '1914-08-01', '1914-08-01T00:00:00.000Z' ], - [ '1914-08-01T08:00', '1914-08-01T08:00:00.000Z' ], - [ 'afdaf afdaf', null ], + // [ '1st August 1914', '1914-08-01T00:00:00.000Z' ], + // [ '1 August 1914', '1914-08-01T00:00:00.000Z' ], + // [ 'August 1st 1914', '1914-08-01T00:00:00.000Z' ], + [ '1914-08-01', '1914,08,01' ], + [ '1914-08-01T08:00', '1914,08,01,08,00' ], + [ '03-20-1914', '03/20/1914' ], + [ '20/03/1914', '20/03/1914' ], [ null, null ] ]; _.each(testData, function(item) { var out = view._parseDate(item[0]); - if (out) out = moment(out).toJSON(); equal(out, item[1]); }); + view.state.set({'nonUSDates': true}); + var out = view._parseDate('20/03/1914'); + equal(out, '03/20/1914'); }); diff --git a/vendor/timeline/2.24/js/timeline.js b/vendor/timeline/2.24/js/timeline.js index d7c726bc..4ac28981 100644 --- a/vendor/timeline/2.24/js/timeline.js +++ b/vendor/timeline/2.24/js/timeline.js @@ -7281,7 +7281,10 @@ if(typeof VMM != 'undefined' && typeof VMM.Timeline == 'undefined') { createConfig(c); createStructure(); - if (type.of(_data) == "string") { + // surely this should just be type.of(_data) !== null + // if (type.of(_data) == "string") { + // OR - should not use _data as an argument + if (type.of(_data) != null) { config.source = _data; } @@ -9987,4 +9990,4 @@ if (typeof VMM.Timeline !== 'undefined' && typeof VMM.Timeline.DataObj == 'undef }; -} \ No newline at end of file +} diff --git a/vendor/timeline/20120520/css/timeline.css b/vendor/timeline/20120520/css/timeline.css deleted file mode 100644 index de0e7329..00000000 --- a/vendor/timeline/20120520/css/timeline.css +++ /dev/null @@ -1,180 +0,0 @@ -.vmm-timeline{}.vmm-timeline div *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -.vmm-timeline h1,.vmm-timeline h2,.vmm-timeline h3,.vmm-timeline h4,.vmm-timeline h5,.vmm-timeline h6,.vmm-timeline p,.vmm-timeline blockquote,.vmm-timeline pre,.vmm-timeline a,.vmm-timeline abbr,.vmm-timeline acronym,.vmm-timeline address,.vmm-timeline cite,.vmm-timeline code,.vmm-timeline del,.vmm-timeline dfn,.vmm-timeline em,.vmm-timeline img,.vmm-timeline q,.vmm-timeline s,.vmm-timeline samp,.vmm-timeline small,.vmm-timeline strike,.vmm-timeline strong,.vmm-timeline sub,.vmm-timeline sup,.vmm-timeline tt,.vmm-timeline var,.vmm-timeline dd,.vmm-timeline dl,.vmm-timeline dt,.vmm-timeline li,.vmm-timeline ol,.vmm-timeline ul,.vmm-timeline fieldset,.vmm-timeline form,.vmm-timeline label,.vmm-timeline legend,.vmm-timeline button,.vmm-timeline table,.vmm-timeline caption,.vmm-timeline tbody,.vmm-timeline tfoot,.vmm-timeline thead,.vmm-timeline tr,.vmm-timeline th,.vmm-timeline td,.vmm-timeline .container,.vmm-timeline .content-container,.vmm-timeline .media,.vmm-timeline .text,.vmm-timeline .slider,.vmm-timeline .date,.vmm-timeline .title,.vmm-timeline .messege,.vmm-timeline .map,.vmm-timeline .credit,.vmm-timeline .caption,.vmm-timeline .feedback,.vmm-timeline .feature,.vmm-timeline .toolbar,.vmm-timeline .marker,.vmm-timeline .dot,.vmm-timeline .line,.vmm-timeline .flag,.vmm-timeline .time,.vmm-timeline .era,.vmm-timeline .major,.vmm-timeline .minor,.vmm-timeline .navigation,.vmm-timeline .start,.vmm-timeline .active{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;} -.vmm-timeline table{border-collapse:collapse;border-spacing:0;} -.vmm-timeline ol,.vmm-timeline ul{list-style:none;} -.vmm-timeline q:before,.vmm-timeline q:after,.vmm-timeline blockquote:before,.vmm-timeline blockquote:after{content:"";} -.vmm-timeline a:focus{outline:thin dotted;} -.vmm-timeline a:hover,.vmm-timeline a:active{outline:0;} -.vmm-timeline article,.vmm-timeline aside,.vmm-timeline details,.vmm-timeline figcaption,.vmm-timeline figure,.vmm-timeline footer,.vmm-timeline header,.vmm-timeline hgroup,.vmm-timeline nav,.vmm-timeline section{display:block;} -.vmm-timeline audio,.vmm-timeline canvas,.vmm-timeline video{display:inline-block;*display:inline;*zoom:1;} -.vmm-timeline audio:not([controls]){display:none;} -.vmm-timeline div{max-width:none;} -.vmm-timeline sub,.vmm-timeline sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;} -.vmm-timeline sup{top:-0.5em;} -.vmm-timeline sub{bottom:-0.25em;} -.vmm-timeline img{border:0;-ms-interpolation-mode:bicubic;} -.vmm-timeline button,.vmm-timeline input,.vmm-timeline select,.vmm-timeline textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;} -.vmm-timeline button,.vmm-timeline input{line-height:normal;*overflow:visible;} -.vmm-timeline button::-moz-focus-inner,.vmm-timeline input::-moz-focus-inner{border:0;padding:0;} -.vmm-timeline button,.vmm-timeline input[type="button"],.vmm-timeline input[type="reset"],.vmm-timeline input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -.vmm-timeline input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -.vmm-timeline input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;} -.vmm-timeline textarea{overflow:auto;vertical-align:top;} -.vmm-timeline{font-family:"Georgia",Times New Roman,Times,serif;}.vmm-timeline .twitter,.vmm-timeline .messege,.vmm-timeline .credit,.vmm-timeline .caption,.vmm-timeline .zoom-in,.vmm-timeline .zoom-out,.vmm-timeline .back-home,.vmm-timeline .time-interval div,.vmm-timeline .time-interval-major div,.vmm-timeline .nav-container{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif !important;} -.vmm-timeline h1.date,.vmm-timeline h2.date,.vmm-timeline h3.date,.vmm-timeline h4.date,.vmm-timeline h5.date,.vmm-timeline h6.date{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif !important;} -.vmm-timeline .timenav h1,.vmm-timeline .flag-content h1,.vmm-timeline .era h1,.vmm-timeline .timenav h2,.vmm-timeline .flag-content h2,.vmm-timeline .era h2,.vmm-timeline .timenav h3,.vmm-timeline .flag-content h3,.vmm-timeline .era h3,.vmm-timeline .timenav h4,.vmm-timeline .flag-content h4,.vmm-timeline .era h4,.vmm-timeline .timenav h5,.vmm-timeline .flag-content h5,.vmm-timeline .era h5,.vmm-timeline .timenav h6,.vmm-timeline .flag-content h6,.vmm-timeline .era h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif !important;} -.vmm-timeline p,.vmm-timeline blockquote,.vmm-timeline blockquote p,.vmm-timeline .twitter blockquote p{font-family:"Georgia",Times New Roman,Times,serif !important;} -.vmm-timeline .feature h1,.vmm-timeline .feature h2,.vmm-timeline .feature h3,.vmm-timeline .feature h4,.vmm-timeline .feature h5,.vmm-timeline .feature h6{font-family:"Georgia",Times New Roman,Times,serif;} -.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} -#timeline-embed{background-color:#ffffff;margin-bottom:20px;border:1px solid #cccccc;padding-top:20px;padding-bottom:20px;clear:both;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-box-shadow:1px 1px 3px rgba(0, 0, 0, 0.35);-moz-box-shadow:1px 1px 3px rgba(0, 0, 0, 0.35);box-shadow:1px 1px 3px rgba(0, 0, 0, 0.35);} -#timeline-embed.full-embed{overflow:hidden;border:0 !important;padding:0 !important;margin:0 !important;clear:both;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;-webkit-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;-moz-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;box-shadow:0px 0px 0px rgba(0, 0, 0, 0.25) !important;} -#timeline-embed.sized-embed{overflow:hidden;border:1px solid #cccccc;padding-top:7px;padding-bottom:7px;margin:0 !important;clear:both;-webkit-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;-moz-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;box-shadow:0px 0px 0px rgba(0, 0, 0, 0.25) !important;} -.vmm-timeline{width:100%;height:100%;padding:0px;margin:0px;background-color:#ffffff;position:absolute;z-index:100;clear:both;overflow:hidden;}.vmm-timeline .feature{width:100%;}.vmm-timeline .feature .slider{width:100%;float:left;position:relative;z-index:10;padding-top:15px;-webkit-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);} -.vmm-timeline .feedback{position:absolute;display:table;overflow:hidden;top:0px;left:0px;z-index:205;width:100%;height:100%;background-color:#ffffff;}.vmm-timeline .feedback .messege{display:table-cell;vertical-align:middle;font-size:15px;font-weight:normal;line-height:20px;width:75%;margin-left:auto;margin-right:auto;margin-top:auto;margin-bottom:auto;text-align:center;} -.vmm-timeline .container.main{position:absolute;top:0px: left:0px;padding-bottom:3px;width:auto;height:auto;margin:0px;clear:both;} -.vmm-timeline img,.vmm-timeline embed,.vmm-timeline object,.vmm-timeline video,.vmm-timeline iframe{max-width:100%;} -.vmm-timeline img{max-height:100%;border:1px solid #999999;} -.vmm-timeline a{color:#0088cc;text-decoration:none;} -.vmm-timeline a:hover{color:#005580;text-decoration:underline;} -.vmm-timeline .thumbnail{width:24px;height:24px;overflow:hidden;float:left;margin-right:1px;margin-top:6px;} -.vmm-timeline .thumbnail.thumb-plaintext{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-280px -48px;} -.vmm-timeline .thumbnail.thumb-quote{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-232px -48px;} -.vmm-timeline .thumbnail.thumb-document{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-256px -48px;} -.vmm-timeline .thumbnail.thumb-photo{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-280px -24px;border:0;}.vmm-timeline .thumbnail.thumb-photo img{border:0px none #cccccc !important;} -.vmm-timeline .thumbnail.thumb-twitter{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-256px -24px;} -.vmm-timeline .thumbnail.thumb-vimeo{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-328px -48px;} -.vmm-timeline .thumbnail.thumb-youtube{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-328px -72px;} -.vmm-timeline .thumbnail.thumb-video{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-328px -24px;} -.vmm-timeline .thumbnail.thumb-audio{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-304px -24px;} -.vmm-timeline .thumbnail.thumb-map{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-208px -48px;} -.vmm-timeline .thumbnail.thumb-website{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-232px -24px;} -.vmm-timeline .thumbnail.thumb-wikipedia{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-184px -48px;} -.vmm-timeline .zFront{z-index:204;} -.slider{width:100%;height:100%;overflow:hidden;}.slider .slider-container-mask{text-align:center;width:100%;height:100%;overflow:hidden;}.slider .slider-container-mask .slider-container{position:absolute;top:0px;left:-2160px;width:100%;height:100%;text-align:center;display:block;background-color:#ffffff;}.slider .slider-container-mask .slider-container .slider-item-container{display:table-cell;vertical-align:middle;} -.slider img,.slider embed,.slider object,.slider video,.slider iframe{max-width:100%;} -.slider .nav-previous,.slider .nav-next{position:absolute;top:0px;width:100px;color:#DBDBDB;font-size:11px;}.slider .nav-previous .nav-container,.slider .nav-next .nav-container{height:100px;width:100px;position:absolute;} -.slider .nav-previous .icon,.slider .nav-next .icon{margin-top:12px;margin-bottom:15px;} -.slider .nav-previous .date,.slider .nav-next .date,.slider .nav-previous .title,.slider .nav-next .title{line-height:14px;}.slider .nav-previous .date a,.slider .nav-next .date a,.slider .nav-previous .title a,.slider .nav-next .title a{color:#999999;} -.slider .nav-previous .date small,.slider .nav-next .date small,.slider .nav-previous .title small,.slider .nav-next .title small{display:none;} -.slider .nav-previous .date,.slider .nav-next .date{font-size:13px;line-height:13px;font-weight:bold;text-transform:uppercase;margin-bottom:5px;} -.slider .nav-previous .title,.slider .nav-next .title{font-size:11px;line-height:13px;} -.slider .nav-previous:hover,.slider .nav-next:hover{color:#333333;cursor:pointer;} -.slider .nav-previous{float:left;text-align:left;}.slider .nav-previous .icon{margin-left:15px;height:24px;background-image:url(timeline.png);background-repeat:no-repeat;background-position:-160px 0;width:24px;height:24px;overflow:hidden;} -.slider .nav-previous .date,.slider .nav-previous .title{text-align:left;padding-left:15px;} -.slider .nav-previous:hover .icon{margin-left:10px;} -.slider .nav-next{float:right;text-align:right;}.slider .nav-next .icon{margin-left:61px;background-image:url(timeline.png);background-repeat:no-repeat;background-position:-184px 0;width:24px;height:24px;height:24px;overflow:hidden;} -.slider .nav-next .date,.slider .nav-next .title{text-align:right;padding-right:15px;} -.slider .nav-next:hover .icon{margin-left:66px;} -.slider .slider-item{position:absolute;width:700px;height:100%;padding:0px;margin:0px;display:table;overflow-y:auto;}.slider .slider-item .content{display:table-cell;vertical-align:middle;}.slider .slider-item .content .pad-top .text .container{padding-top:15px;} -.slider .slider-item .content .pad-right .text .container{padding-right:15px;} -.slider .slider-item .content .pad-left .text .container{padding-left:30px;} -.slider .slider-item .content .pad-left .media.text-media .media-wrapper .media-container{border:none;background-color:#ffffff;} -.slider .slider-item .content .content-container{display:table;vertical-align:middle;}.slider .slider-item .content .content-container .text{width:40%;max-width:50%;min-width:120px;display:table-cell;vertical-align:middle;}.slider .slider-item .content .content-container .text .container{display:table-cell;vertical-align:middle;text-align:left;}.slider .slider-item .content .content-container .text .container p{-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word;} -.slider .slider-item .content .content-container .media{width:100%;min-width:50%;float:left;}.slider .slider-item .content .content-container .media .media-wrapper{margin-left:auto;margin-right:auto;}.slider .slider-item .content .content-container .media .media-wrapper .media-container{display:inline-block;line-height:0px;padding:0px;max-height:100%;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .media-frame,.slider .slider-item .content .content-container .media .media-wrapper .media-container .media-image img{border:1px solid;border-color:#cccccc #999999 #999999 #cccccc;background:#ffffff;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .soundcloud{border:0;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .media-image{display:inline-block;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow{position:relative;z-index:1;background:#ffffff;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow:before,.slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow:after{z-index:-1;position:absolute;content:"";bottom:15px;left:10px;width:50%;top:80%;max-width:300px;background:#999999;-webkit-box-shadow:0 15px 10px #999999;-moz-box-shadow:0 15px 10px #999999;box-shadow:0 15px 10px #999999;-webkit-transform:rotate(-2deg);-moz-transform:rotate(-2deg);-o-transform:rotate(-2deg);-ms-transform:rotate(-2deg);transform:rotate(-2deg);} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow::after{-webkit-transform:rotate(2deg);-moz-transform:rotate(2deg);-o-transform:rotate(2deg);-ms-transform:rotate(2deg);transform:rotate(2deg);right:10px;left:auto;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container span.messege{display:block;vertical-align:middle;margin-left:auto;margin-right:auto;text-align:center;background:#ffffff;font-size:28px;font-weight:bold;text-transform:uppercase;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .plain-text{display:table;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .plain-text .container{display:table-cell;vertical-align:middle;font-size:15px;line-height:20px;color:#666666;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .plain-text .container p{margin-bottom:20px;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter{text-align:left;margin-left:auto;margin-right:auto;margin-bottom:15px;clear:both;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter blockquote{font-size:15px;line-height:20px;color:#666666;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter blockquote p{font-size:28px;line-height:36px;margin-bottom:6px;padding-top:10px;background-color:#ffffff;color:#000000;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter blockquote .quote-mark{color:#666666;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .created-at{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-256px -24px;width:24px;height:24px;overflow:hidden;margin-left:15px;display:inline-block;float:right;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .created-at:hover{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard{float:right;margin-bottom:15px;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard a{color:#333333;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard a:hover{text-decoration:none;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard a:hover .fn{text-decoration:underline;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard .fn,.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard .nickname{padding-left:42px;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard .fn{display:block;font-weight:bold;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard .nickname{margin-top:3px;display:block;color:#666666;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard .avatar{float:left;display:block;width:32px;height:32px;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .twitter .vcard .avatar img{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia{font-size:15px;line-height:20px;text-align:left;margin-left:auto;margin-right:auto;margin-bottom:15px;clear:both;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia .wiki-source{margin-bottom:15px;font-size:13px;line-height:19px;font-style:italic;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia h4{border-bottom:1px solid #cccccc;margin-bottom:5px;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia h4 a{color:#000000;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia h4 a:hover{color:#0088cc;text-decoration:none;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia p{font-size:13px;line-height:19px;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .map{line-height:normal;z-index:200;text-align:left;background-color:#ffffff;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .map img{max-height:none !important;max-width:none !important;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .map .google-map{height:100%;width:100%;} -.slider .slider-item .content .content-container .media .media-wrapper .media-container .map .map-attribution{position:absolute;z-index:201;bottom:0px;width:100%;overflow:hidden;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .map .map-attribution .attribution-text{height:19px;overflow:hidden;-webkit-user-select:none;line-height:19px;margin-right:60px;padding-left:65px;font-family:Arial,sans-serif;font-size:10px;color:#444;white-space:nowrap;color:#ffffff;text-shadow:1px 1px 1px #333333;text-align:center;}.slider .slider-item .content .content-container .media .media-wrapper .media-container .map .map-attribution .attribution-text a{color:#ffffff !important;} -.slider .slider-item .content .content-container .media .media-wrapper .credit{color:#999999;text-align:right;display:block;margin:0 auto;margin-top:6px;font-size:10px;line-height:13px;} -.slider .slider-item .content .content-container .media .media-wrapper .caption{text-align:left;margin-top:10px;color:#666666;font-size:11px;line-height:14px;text-rendering:optimizeLegibility;} -.slider .slider-item .content .media.text-media .media-wrapper .media-container{border:none;background-color:#ffffff;} -.slider .slider-item .content-container.layout-text-media .text-media{border-top:1px solid #e3e3e3;padding-top:15px;padding-right:0;} -.slider .slider-item .content-container.layout-text-media.pad-left .text-media{padding-right:15px;padding-top:0;border-right:1px solid #e3e3e3;border-top:0px solid #e3e3e3;} -.slider .slider-item .content-container.layout-text{width:100%;}.slider .slider-item .content-container.layout-text .text{width:100%;max-width:100%;}.slider .slider-item .content-container.layout-text .text .container{display:block;vertical-align:middle;text-align:left;padding:0px;width:90%;text-align:left;margin-left:auto;margin-right:auto;} -.slider .slider-item .content-container.layout-media{width:100%;}.slider .slider-item .content-container.layout-media .text{width:100%;height:100%;max-width:100%;display:block;text-align:center;}.slider .slider-item .content-container.layout-media .text .container{display:block;text-align:center;width:100%;margin-left:none;margin-right:none;} -.slider .slider-item .content-container.layout-media .media{width:100%;min-width:50%;float:none;}.slider .slider-item .content-container.layout-media .media .media-wrapper{display:block;}.slider .slider-item .content-container.layout-media .media .media-wrapper .media-container{margin-left:auto;margin-right:auto;line-height:0px;padding:0px;} -.slider .slider-item .content-container.layout-media .twitter,.slider .slider-item .content-container.layout-media .wikipedia{max-width:70%;} -.vmm-timeline .navigation{clear:both;cursor:move;width:100%;height:200px;border-top:1px solid #e3e3e3;position:relative;}.vmm-timeline .navigation .toolbar{position:absolute;top:45px;left:0px;z-index:202;background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);-moz-box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);}.vmm-timeline .navigation .toolbar .zoom-in,.vmm-timeline .navigation .toolbar .zoom-out,.vmm-timeline .navigation .toolbar .back-home{font-weight:normal;font-size:10px;line-height:20px;top:0px;z-index:202;width:18px;height:18px;color:#333333;text-align:center;font-weight:bold;border:1px solid #ffffff;padding:5px;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;} -.vmm-timeline .navigation .toolbar .zoom-in:hover,.vmm-timeline .navigation .toolbar .zoom-out:hover,.vmm-timeline .navigation .toolbar .back-home:hover{color:#0088cc;cursor:pointer;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;} -.vmm-timeline .navigation .toolbar .zoom-in .icon{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-256px 0;width:24px;height:24px;} -.vmm-timeline .navigation .toolbar .zoom-out .icon{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-280px 0;width:24px;height:24px;} -.vmm-timeline .navigation .toolbar .back-home .icon{background-image:url(timeline.png);background-repeat:no-repeat;background-position:-328px 0;width:24px;height:24px;} -.vmm-timeline .navigation .timenav-background{position:absolute;cursor:move;top:0px;left:0px;height:150px;width:100%;background-color:#e9e9e9;}.vmm-timeline .navigation .timenav-background .timenav-interval-background{position:absolute;top:151px;left:0px;background:#ffffff;width:100%;height:49px;-webkit-box-shadow:-1px -1px 7px rgba(0, 0, 0, 0.1);-moz-box-shadow:-1px -1px 7px rgba(0, 0, 0, 0.1);box-shadow:-1px -1px 7px rgba(0, 0, 0, 0.1);}.vmm-timeline .navigation .timenav-background .timenav-interval-background .top-highlight{position:absolute;top:-1px;left:0px;z-index:30;width:100%;height:1px;background:#ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;-webkit-box-shadow:1px 1px 5px rgba(0, 0, 0, 0.2);-moz-box-shadow:1px 1px 5px rgba(0, 0, 0, 0.2);box-shadow:1px 1px 5px rgba(0, 0, 0, 0.2);} -.vmm-timeline .navigation .timenav-background .timenav-line{position:absolute;top:0px;left:50%;width:3px;height:150px;background:#0088cc;z-index:201;-webkit-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);} -.vmm-timeline .navigation .timenav-background .timenav-indicator{position:absolute;top:-1px;left:50%;z-index:202;background-image:url(timeline.png);background-repeat:no-repeat;background-position:-160px -48px;width:24px;height:24px;} -.vmm-timeline .navigation .timenav-background .timenav-tag{height:50px;}.vmm-timeline .navigation .timenav-background .timenav-tag div{height:50px;display:table;}.vmm-timeline .navigation .timenav-background .timenav-tag div h3{display:table-cell;vertical-align:middle;padding-left:65px;font-size:15px;color:#9d9d9d;} -.vmm-timeline .navigation .timenav-background .timenav-tag-row-2{background:#f1f1f1;} -.vmm-timeline .navigation .timenav-background .timenav-tag-row-3{background:#e9e9e9;} -.vmm-timeline .navigation .timenav{position:absolute;top:0px;left:-250px;z-index:1;}.vmm-timeline .navigation .timenav .content{position:relative;}.vmm-timeline .navigation .timenav .content .marker.start{display:none;} -.vmm-timeline .navigation .timenav .content .marker.active .dot{background:#0088cc;z-index:200;} -.vmm-timeline .navigation .timenav .content .marker.active .line{z-index:199;background:#0088cc;width:1px;}.vmm-timeline .navigation .timenav .content .marker.active .line .event-line{background:#0088cc;filter:alpha(opacity=75);-khtml-opacity:0.75;-moz-opacity:0.75;opacity:0.75;} -.vmm-timeline .navigation .timenav .content .marker.active .flag{z-index:200;background-image:url(timeline.png);background-repeat:no-repeat;background-position:0 -53px;width:153px;height:53px;}.vmm-timeline .navigation .timenav .content .marker.active .flag .flag-content h3{color:#0088cc;} -.vmm-timeline .navigation .timenav .content .marker.active .flag .flag-content .thumbnail{opacity:1;-moz-opacity:1;filter:alpha(opacity=100);} -.vmm-timeline .navigation .timenav .content .marker.active .flag.row1,.vmm-timeline .navigation .timenav .content .marker.active .flag.row2,.vmm-timeline .navigation .timenav .content .marker.active .flag.row3{z-index:200;} -.vmm-timeline .navigation .timenav .content .marker.active:hover{cursor:default;}.vmm-timeline .navigation .timenav .content .marker.active:hover .flag .flag-content h3{color:#0088cc;} -.vmm-timeline .navigation .timenav .content .marker.active:hover .flag .flag-content h4{color:#999999;} -.vmm-timeline .navigation .timenav .content .marker:hover .line{z-index:24;background:#999999;} -.vmm-timeline .navigation .timenav .content .marker{position:absolute;top:0px;left:150px;display:block;}.vmm-timeline .navigation .timenav .content .marker .dot{position:absolute;top:150px;left:0px;display:block;width:6px;height:6px;background:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;z-index:21;} -.vmm-timeline .navigation .timenav .content .marker .line{position:absolute;top:0px;left:3px;width:1px;height:150px;background:#cccccc;-moz-box-shadow:1px 0 0 #ffffff;-webkit-box-shadow:1px 0 0 #ffffff;box-shadow:1px 0 0 #ffffff;z-index:22;}.vmm-timeline .navigation .timenav .content .marker .line .event-line{position:absolute;z-index:22;left:0px;height:1px;width:1px;background:#0088cc;filter:alpha(opacity=15);-khtml-opacity:0.15;-moz-opacity:0.15;opacity:0.15;} -.vmm-timeline .navigation .timenav .content .marker .flag{position:absolute;top:15px;left:3px;padding:0px;display:block;z-index:23;width:153px;height:56px;background-image:url(timeline.png);background-repeat:no-repeat;background-position:0 0;width:153px;height:53px;}.vmm-timeline .navigation .timenav .content .marker .flag .flag-content{padding:0px 7px 2px 6px;overflow:hidden;height:36px;}.vmm-timeline .navigation .timenav .content .marker .flag .flag-content h3{font-weight:bold;font-size:15px;line-height:20px;font-size:11px;line-height:11px;color:#999999;margin-top:5px;margin-bottom:2px;}.vmm-timeline .navigation .timenav .content .marker .flag .flag-content h3 small{display:none;} -.vmm-timeline .navigation .timenav .content .marker .flag .flag-content h4{display:none;font-weight:normal;font-size:15px;line-height:20px;margin-top:5px;font-size:10px;line-height:10px;color:#aaaaaa;}.vmm-timeline .navigation .timenav .content .marker .flag .flag-content h4 small{display:none;} -.vmm-timeline .navigation .timenav .content .marker .flag .flag-content .thumbnail{margin-bottom:15px;margin-right:3px;opacity:0.5;-moz-opacity:0.5;filter:alpha(opacity=50);}.vmm-timeline .navigation .timenav .content .marker .flag .flag-content .thumbnail img{width:22px;height:22px;max-height:none;max-width:none;border:0;border:1px solid #999999;padding:0;margin:0;} -.vmm-timeline .navigation .timenav .content .marker .flag:hover{cursor:pointer;background-image:url(timeline.png);background-repeat:no-repeat;background-position:0 -53px;width:153px;height:53px;}.vmm-timeline .navigation .timenav .content .marker .flag:hover .flag-content h3{color:#333333;} -.vmm-timeline .navigation .timenav .content .marker .flag:hover .flag-content h4{color:#aaaaaa;} -.vmm-timeline .navigation .timenav .content .marker .flag:hover .flag-content .thumbnail{opacity:1;-moz-opacity:1;filter:alpha(opacity=100);} -.vmm-timeline .navigation .timenav .content .marker .flag.row1{z-index:25;top:48px;} -.vmm-timeline .navigation .timenav .content .marker .flag.row2{z-index:24;top:96px;} -.vmm-timeline .navigation .timenav .content .marker .flag.row3{z-index:23;top:1px;} -.vmm-timeline .navigation .timenav .content .marker .flag.zFront{z-index:201;} -.vmm-timeline .navigation .timenav .content .era{position:absolute;top:138px;left:150px;height:12px;display:block;background:#0088cc;overflow:hidden;border-left:1px solid #cccccc;border-right:1px solid #cccccc;border-top:1px solid #cccccc;filter:alpha(opacity=75);-khtml-opacity:0.75;-moz-opacity:0.75;opacity:0.75;-moz-border-radius-topleft:7px;-webkit-border-top-left-radius:7px;border-top-left-radius:7px;-moz-border-radius-topright:7px;-webkit-border-top-right-radius:7px;border-top-right-radius:7px;z-index:-10;}.vmm-timeline .navigation .timenav .content .era h3{font-weight:bold;font-size:10px;line-height:10px;color:#ffffff;position:absolute;top:-1px;left:9px;} -.vmm-timeline .navigation .timenav .time{position:absolute;left:0px;top:150px;height:50px;background-color:#ffffff;}.vmm-timeline .navigation .timenav .time .time-interval-minor{max-width:none;height:6px;white-space:nowrap;position:absolute;top:-9px;left:8px;z-index:10;}.vmm-timeline .navigation .timenav .time .time-interval-minor .minor{position:relative;top:2px;display:inline-block;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);width:100px;height:6px;background-position:center top;white-space:nowrap;color:#666666;margin-top:0px;padding-top:0px;} -.vmm-timeline .navigation .timenav .time .time-interval{white-space:nowrap;position:absolute;top:5px;left:0px;}.vmm-timeline .navigation .timenav .time .time-interval div{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);background-position:left top;background-repeat:no-repeat;padding-top:3px;position:absolute;height:3px;left:0px;display:block;font-weight:normal;font-size:10px;line-height:20px;text-transform:uppercase;text-align:left;text-indent:0px;white-space:nowrap;color:#666666;margin-left:0px;margin-right:0px;margin-top:1px;z-index:2;}.vmm-timeline .navigation .timenav .time .time-interval div strong{font-weight:bold;color:#000000;} -.vmm-timeline .navigation .timenav .time .time-interval-major{white-space:nowrap;position:absolute;top:5px;left:0px;}.vmm-timeline .navigation .timenav .time .time-interval-major div{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);background-position:left top;background-repeat:no-repeat;padding-top:15px;position:absolute;height:15px;left:0px;display:block;font-weight:bold;font-size:12px;line-height:20px;text-transform:uppercase;text-align:left;text-indent:0px;white-space:nowrap;color:#333333;margin-left:0px;margin-right:0px;margin-top:1px;z-index:5;}.vmm-timeline .navigation .timenav .time .time-interval-major div strong{font-weight:bold;color:#000000;} -.vmm-timeline{font-size:15px;font-weight:normal;line-height:20px;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;}.vmm-timeline p{font-size:15px;font-weight:normal;line-height:20px;margin-bottom:20px;color:#666666;}.vmm-timeline p small{font-size:12px;line-height:17px;} -.vmm-timeline p:first-child{margin-top:20px;} -.vmm-timeline .navigation p{color:#999999;} -.vmm-timeline .feature h3,.vmm-timeline .feature h4,.vmm-timeline .feature h5,.vmm-timeline .feature h6{margin-bottom:15px;} -.vmm-timeline .feature p{color:#666666;} -.vmm-timeline .date a,.vmm-timeline .title a{color:#999999;} -.vmm-timeline .hyphenate{-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word;} -.vmm-timeline h1,.vmm-timeline h2,.vmm-timeline h3,.vmm-timeline h4,.vmm-timeline h5,.vmm-timeline h6{font-weight:normal;color:#000000;text-transform:none;}.vmm-timeline h1 a,.vmm-timeline h2 a,.vmm-timeline h3 a,.vmm-timeline h4 a,.vmm-timeline h5 a,.vmm-timeline h6 a{color:#999999;} -.vmm-timeline h1 small,.vmm-timeline h2 small,.vmm-timeline h3 small,.vmm-timeline h4 small,.vmm-timeline h5 small,.vmm-timeline h6 small{color:#999999;} -.vmm-timeline h1.date,.vmm-timeline h2.date,.vmm-timeline h3.date,.vmm-timeline h4.date,.vmm-timeline h5.date,.vmm-timeline h6.date{font-weight:bold;} -.vmm-timeline h2.start{font-size:36px;line-height:38px;margin-bottom:15px;} -.vmm-timeline h1{margin-bottom:15px;font-size:32px;line-height:34px;}.vmm-timeline h1 small{font-size:18px;} -.vmm-timeline h2{margin-bottom:15px;font-size:28px;line-height:30px;}.vmm-timeline h2 small{font-size:14px;line-height:16px;} -.vmm-timeline h2.date{font-size:16px;line-height:18px;margin-bottom:3.75px;color:#999999;} -.vmm-timeline h3,.vmm-timeline h4,.vmm-timeline h5,.vmm-timeline h6{line-height:40px;}.vmm-timeline h3 .active,.vmm-timeline h4 .active,.vmm-timeline h5 .active,.vmm-timeline h6 .active{color:#0088cc;} -.vmm-timeline h3{font-size:28px;line-height:30px;}.vmm-timeline h3 small{font-size:14px;} -.vmm-timeline h4{font-size:16px;line-height:18px;}.vmm-timeline h4 small{font-size:12px;} -.vmm-timeline h5{font-size:14px;line-height:16px;} -.vmm-timeline h6{font-size:13px;line-height:14px;text-transform:uppercase;} -.vmm-timeline strong{font-weight:bold;} -.vmm-timeline Q{quotes:'„' '“';font-style:italic;} -.vmm-timeline blockquote{font-size:28px;text-align:left;line-height:36px;margin-bottom:6px;padding-top:10px;background-color:#ffffff;color:#000000;} -.vmm-timeline .credit{color:#999999;text-align:right;font-size:10px;line-height:10px;display:block;margin:0 auto;clear:both;} -.vmm-timeline .caption{text-align:left;margin-top:5px;color:#666666;font-size:11px;line-height:14px;clear:both;} -.tooltip{position:absolute;z-index:205;display:block;visibility:visible;padding:5px;opacity:0;filter:alpha(opacity=0);font-size:15px;font-weight:bold;line-height:20px;font-size:12px;line-height:12px;} -.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-2px;} -.tooltip.right{margin-left:2px;} -.tooltip.bottom{margin-top:2px;} -.tooltip.left{margin-left:-2px;} -.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.tooltip-arrow{position:absolute;width:0;height:0;} -@media only screen and (max-width:480px),only screen and (max-device-width:480px){}@media (max-width:600px){.slider .slider-item .content .content-container{display:block;}.slider .slider-item .content .content-container .text{width:100%;max-width:100%;min-width:120px;display:block;}.slider .slider-item .content .content-container .text .container{display:block;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word;} .slider .slider-item .content .content-container .media{width:100%;min-width:50%;float:none;}.slider .slider-item .content .content-container .media .media-wrapper{margin-left:0px;margin-right:0px;width:100%;display:block;} .slider .slider-item .content .content-container .media.text-media .media-wrapper .media-container{border:none;background-color:#ffffff;}} diff --git a/vendor/timeline/20120520/css/timeline.png b/vendor/timeline/20120520/css/timeline.png deleted file mode 100644 index c9e3c489..00000000 Binary files a/vendor/timeline/20120520/css/timeline.png and /dev/null differ diff --git a/vendor/timeline/20120520/js/timeline.js b/vendor/timeline/20120520/js/timeline.js deleted file mode 100644 index 91a8e86f..00000000 --- a/vendor/timeline/20120520/js/timeline.js +++ /dev/null @@ -1,7637 +0,0 @@ -/*! - TimelineJS - Designed and built by Zach Wise at VéritéCo - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - http://www.gnu.org/licenses/ - -*/ - -/*********************************************** - Begin VMM.js -***********************************************/ - -/* Verite - * Verite JS Master - * Version: 0.6 - * Date: April 26, 2012 - * Copyright 2012 Verite unless part of Verite Timeline, - * if part of Timeline then it inherits Timeline's license. - * Designed and built by Zach Wise digitalartwork.net - * ----------------------------------------------------- */ - - -/* 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=", - twitter: "" - }, - - flickr: { - active: false, - array: [], - api_loaded: false, - que: [] - }, - - youtube: { - active: false, - array: [], - api_loaded: false, - que: [] - }, - - vimeo: { - 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: [] - }, - - wikipedia: { - active: false, - array: [], - api_loaded: false, - que: [] - }, - - 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 + ""; - } - - return ce; - - }; - - VMM.createMediaElement = function(media, caption, credit) { - - var ce = ""; - - var _valid = false; - - ce += "
"; - - if (media != null && media != "") { - - valid = true; - - ce += ""; - - // CREDIT - if (credit != null && credit != "") { - ce += VMM.createElement("div", credit, "credit"); - } - - // CAPTION - if (caption != null && caption != "") { - ce += VMM.createElement("div", caption, "caption"); - } - - } - - ce += "
"; - - 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); - } - } -} - -/* 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(); - } - } - } -}; - - - - - -/*********************************************** - Begin VMM.Library.js -***********************************************/ - -/* LIBRARY ABSTRACTION -================================================== */ -if(typeof VMM != 'undefined') { - - 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' ){ - - /* 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; - var _tag = "
"; - var _class = ""; - var _content = ""; - - - 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(); - } - }, - - animate: function(element, duration, ease, att, callback_function) { - - var _ease = "easein"; - var _duration = 1000; - var _att = {}; - - if (duration != null) { - if (duration < 1) { - _duration = 1; - } else { - _duration = Math.round(duration); - } - - } - - if (ease != null && ease != "") { - _ease = ease; - } - - 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 - var __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); - - //callback_function(); - /* - if( typeof( jQuery ) != 'undefined' ){ - if (callback_function != null && callback_function != "") { - jQuery(element).animate(_att, {queue:false, duration:_duration, easing:_ease, complete:callback_function} ); - } else { - jQuery(element).animate(_att, {queue:false, duration:_duration, easing:_ease} ); - } - } - */ - - } else { - if( typeof( jQuery ) != 'undefined' ){ - if (callback_function != null && callback_function != "") { - jQuery(element).animate(_att, {queue:false, duration:_duration, easing:_ease, complete:callback_function} ); - } else { - jQuery(element).animate(_att, {queue:false, 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; - }, - }); -} - - -/*********************************************** - Begin VMM.Browser.js -***********************************************/ - -/* 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) { - if ( orientation == 0 || orientation == 180) { - return "portrait"; - } else if ( orientation == 90 || orientation == -90) { - return "landscape"; - } else { - return "normal"; - } - }, - searchDevice: function(d) { - if (d.match(/Android/i) || d.match(/iPhone|iPod/i)) { - return "mobile"; - } else if (d.match(/iPad/i)) { - return "tablet"; - } else if (d.match(/BlackBerry/i) || d.match(/IEMobile/i)) { - return "other mobile"; - } else { - return "desktop"; - } - }, - searchString: function (data) { - for (var i=0;i
"; - mediaElem = "
"; - return mediaElem; - } else if (m.type == "flickr") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "youtube") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "googledoc") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "vimeo") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "dailymotion") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "twitter"){ - mediaElem = "
"; - return mediaElem; - } else if (m.type == "twitter-ready") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "soundcloud") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "google-map") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "wikipedia") { - mediaElem = "
"; - return mediaElem; - } else if (m.type == "unknown") { - if (m.id.match("blockquote")) { - mediaElem = "
"; - } else { - mediaElem = "
"; - } - return mediaElem; - } else if (m.type == "website") { - mediaElem = "
"; - //mediaElem = "
"; - return mediaElem; - } else { - mediaElem = "
"; - return mediaElem; - } - } - }, - - create: function(data) { - //$mediacontainer = element; - var _valid = false; - - if (data.media != null && data.media != "") { - var mediaElem = ""; - var captionElem = ""; - var creditElem = ""; - var m = VMM.MediaType(data.media); //returns an object with .type and .id - var isTextMedia = false; - var _id = ""; - _valid = true; - - // CREDIT - if (data.credit != null && data.credit != "") { - creditElem = "
" + VMM.Util.linkify_with_twitter(data.credit, "_blank") + "
"; - } - // CAPTION - if (data.caption != null && data.caption != "") { - captionElem = "
" + VMM.Util.linkify_with_twitter(data.caption, "_blank") + "
"; - } - // IMAGE - if (m.type == "image") { - mediaElem = "
"; - // FLICKR - } else if (m.type == "flickr") { - _id = "flickr_" + m.id; - mediaElem = "
"; - VMM.ExternalAPI.flickr.get(m.id, "#" + _id); - // GOOGLE DOCS - } else if (m.type == "googledoc") { - _id = "googledoc_" + VMM.Util.unique_ID(5); - mediaElem = "

Loading Document

"; - VMM.ExternalAPI.googledocs.get(m.id, _id); - // YOUTUBE - } else if (m.type == "youtube") { - mediaElem = "

Loading YouTube video

"; - VMM.ExternalAPI.youtube.get(m.id); - // VIMEO - } else if (m.type == "vimeo") { - mediaElem = "
"; - VMM.ExternalAPI.vimeo.get(m.id); - // DAILYMOTION - } else if (m.type == "dailymotion") { - mediaElem = "
"; - // TWITTER - } else if (m.type == "twitter"){ - mediaElem = "

Loading Tweet

"; - isTextMedia = true; - VMM.ExternalAPI.twitter.prettyHTML(m.id); - // TWITTER - } else if (m.type == "twitter-ready") { - isTextMedia = true; - mediaElem = m.id; - // SOUNDCLOUD - } else if (m.type == "soundcloud") { - _id = "soundcloud_" + VMM.Util.unique_ID(5); - mediaElem = "

Loading Sound

"; - VMM.ExternalAPI.soundcloud.get(m.id, _id); - // GOOGLE MAPS - } else if (m.type == "google-map") { - _id = "googlemap_" + VMM.Util.unique_ID(7); - mediaElem = "

Loading Map

"; - VMM.ExternalAPI.googlemaps.get(m.id, _id); - // WIKIPEDIA - } else if (m.type == "wikipedia") { - _id = "wikipedia_" + VMM.Util.unique_ID(7); - mediaElem = "

Loading Wikipedia

"; - isTextMedia = true; - VMM.ExternalAPI.wikipedia.get(m.id, _id); - // UNKNOWN - } else if (m.type == "unknown") { - trace("NO KNOWN MEDIA TYPE FOUND TRYING TO JUST PLACE THE HTML"); - isTextMedia = true; - mediaElem = "
" + VMM.Util.properQuotes(m.id) + "
"; - // WEBSITE - } else if (m.type == "website") { - mediaElem = "
"; - //mediaElem = "" + ""; - // NO MATCH - } else { - trace("NO KNOWN MEDIA TYPE FOUND"); - trace(m.type); - } - - // WRAP THE MEDIA ELEMENT - mediaElem = "
" + mediaElem + creditElem + captionElem + "
"; - // RETURN - if (isTextMedia) { - return "
" + mediaElem + "
"; - } else { - return "
" + mediaElem + "
"; - } - - /* - if (_return) { - if (isTextMedia) { - return "
" + mediaElem + "
"; - } else { - return "
" + mediaElem + "
"; - } - } else { - VMM.appendElement($mediacontainer, mediaElem); - VMM.appendElement($mediacontainer, creditElem); - VMM.appendElement($mediacontainer, captionElem); - } - */ - }; - - }, - - }).init(); -} - -/*********************************************** - Begin VMM.MediaType.js -***********************************************/ - -/* MediaType -================================================== */ -if(typeof VMM != 'undefined' && typeof VMM.MediaType == 'undefined') { - - //VMM.mediaType.youtube(d); //should return a true or false - // VMM.MediaType(url); //returns an object with .type and .id - - VMM.MediaType = function(d) { - var success = false; - var media = {}; - - 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 { - media.id = d.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0]; - } - 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('(player.)?soundcloud\.com')) { - media.type = "soundcloud"; - media.id = d; - success = true; - } else if (d.match('(www.)?twitter\.com')) { - 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("flickr.com/photos")) { - media.type = "flickr"; - media.id = d.split("photos\/")[1].split("/")[1]; - media.link = d; - success = true; - } else if (d.match(/jpg|jpeg|png|gif/i) || d.match("staticmap")) { - 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 = VMM.Util.toTitleCase(wiki_id).replace(" ", "%20"); - success = true; - } else if (d.indexOf('http://') == 0) { - media.type = "website"; - media.id = d; - 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; - } -} - -/*********************************************** - Begin VMM.Media.js -***********************************************/ - -/* Media -================================================== */ -if(typeof VMM != 'undefined' && typeof VMM.Media == 'undefined') { - - // something = new VMM.Media(parent, w, h, {thedata}); - VMM.Media = function(parent, w, h, thedata) { - - /* PRIVATE VARS - ================================================== */ - var data = {}; // HOLDS DATA - - var _valid = false; - - var config = { - width: 720, - height: 400, - content_width: 720, - content_height: 400, - ease: "easeInOutExpo", - duration: 1000, - spacing: 15 - }; - /* ELEMENTS - ================================================== */ - var $media = ""; - var $container = ""; - var $mediacontainer = ""; - var $mediaelement = ""; - var layout = parent; // expecting media div - - if (w != null && w != "") {config.width = w}; - if (h != null && h != "") {config.height = h}; - /* - if (typeof thedata != "undefined") { - data = thedata; - this.init(data); - } - */ - /* PUBLIC FUNCTIONS - ================================================== */ - this.init = function(d) { - if(typeof d != 'undefined') { - this.setData(d); - } else { - trace("WAITING ON DATA"); - } - }; - - var build = function(media, caption, credit) { - - $media = VMM.appendAndGetElement(layout, "
", "media"); - $container = VMM.appendAndGetElement($media, "
", "container"); - $mediacontainer = VMM.appendAndGetElement($container, "
", "media-container"); - - - if (data.media != null && data.media != "") { - - _valid = true; - var m = {}; - - m = VMM.MediaType(data.media); //returns an object with .type and .id - - if (m.type == "image") { - VMM.appendElement($mediacontainer, ""); - } else if (m.type == "youtube") { - VMM.appendElement($mediacontainer, ""; - } else { - mediaElem = ""; - } - VMM.attachElement("#"+doc.id, mediaElem); - }, - - pushQue: function() { - for(var i = 0; i < VMM.master_config.googledocs.que.length; i++) { - VMM.ExternalAPI.googledocs.create(VMM.master_config.googledocs.que[i]); - } - VMM.master_config.googledocs.que = []; - } - - }, - - flickr: { - - get: function(mid, id) { - var api_key; - if (VMM.master_config.Timeline.api_keys.flickr != "") { - api_key = VMM.master_config.Timeline.api_keys.flickr; - } else { - api_key = Aes.Ctr.decrypt(VMM.master_config.api_keys_master.flickr, VMM.master_config.vp, 256) - } - var the_url = "http://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key=" + api_key + "&photo_id=" + mid + "&format=json&jsoncallback=?"; - VMM.getJSON(the_url, VMM.ExternalAPI.flickr.create); - }, - - create: function(d) { - var flickr_id = d.sizes.size[0].url.split("photos\/")[1].split("/")[1]; - var id = "flickr_" + flickr_id; - var flickr_large_id = id + "_large"; - var flickr_thumb_id = id + "_thumb"; - var flickr_img_size, flickr_img_thumb, flickr_size_found = false; - var flickr_best_size = "Large"; - - flickr_best_size = VMM.ExternalAPI.flickr.sizes(VMM.master_config.sizes.api.height); - - for(var i = 0; i < d.sizes.size.length; i++) { - if (d.sizes.size[i].label == flickr_best_size) { - flickr_size_found = true; - flickr_img_size = d.sizes.size[i].source; - } - } - if (!flickr_size_found) { - flickr_img_size = d.sizes.size[d.sizes.size.length - 1].source; - } - - flickr_img_thumb = d.sizes.size[0].source; - VMM.Lib.attr("#"+flickr_large_id, "src", flickr_img_size); - VMM.attachElement("#"+flickr_thumb_id, ""); - }, - - sizes: function(s) { - var _size = ""; - if (s <= 75) { - _size = "Thumbnail"; - } else if (s <= 180) { - _size = "Small"; - } else if (s <= 240) { - _size = "Small 320"; - } else if (s <= 375) { - _size = "Medium"; - } else if (s <= 480) { - _size = "Medium 640"; - } else if (s <= 600) { - _size = "Medium 800"; - } else { - _size = "Large"; - } - - return _size; - } - - }, - - soundcloud: { - - get: function(url, id) { - var sound = {url: url, id: id}; - VMM.master_config.soundcloud.que.push(sound); - VMM.master_config.soundcloud.active = true; - }, - - create: function(sound) { - var the_url = "http://soundcloud.com/oembed?url=" + sound.url + "&format=js&callback=?"; - VMM.getJSON(the_url, function(d) { - VMM.attachElement("#"+sound.id, d.html); - }); - }, - - pushQue: function() { - for(var i = 0; i < VMM.master_config.soundcloud.que.length; i++) { - VMM.ExternalAPI.soundcloud.create(VMM.master_config.soundcloud.que[i]); - } - VMM.master_config.soundcloud.que = []; - }, - - }, - - wikipedia: { - - get: function(url, id) { - var api_obj = {url: url, id: id}; - VMM.master_config.wikipedia.que.push(api_obj); - VMM.master_config.wikipedia.active = true; - }, - - create: function(api_obj) { - var the_url = "http://en.wikipedia.org/w/api.php?action=query&prop=extracts&redirects=&titles=" + api_obj.url + "&exintro=1&format=json&callback=?"; - - if ( VMM.Browser.browser == "Explorer" && parseInt(VMM.Browser.version, 10) >= 7 && window.XDomainRequest) { - var temp_text = "

" + api_obj.url + "

"; - temp_text += "
From Wikipedia, the free encyclopedia"; - temp_text += "

Wikipedia entry unable to load using Internet Explorer 8 or below.

"; - VMM.attachElement("#"+api_obj.id, temp_text ); - } - - VMM.getJSON(the_url, function(d) { - if (d.query) { - var wiki_extract = VMM.Util.getObjectAttributeByIndex(d.query.pages, 0).extract; - var wiki_title = VMM.Util.getObjectAttributeByIndex(d.query.pages, 0).title; - var _wiki = ""; - var wiki_text = ""; - var wiki_text_array = wiki_extract.split("

"); - var wiki_number_of_paragraphs = 1; - - for(var i = 0; i < wiki_text_array.length; i++) { - if (i+1 <= wiki_number_of_paragraphs && i+1 < wiki_text_array.length) { - wiki_text += "

" + wiki_text_array[i+1]; - } - } - - _wiki = "

" + wiki_title + "

"; - _wiki += "
" + VMM.master_config.language.messages.wikipedia + ""; - _wiki += VMM.Util.linkify_wikipedia(wiki_text); - - if (wiki_extract.match("REDIRECT")) { - - } else { - VMM.attachElement("#"+api_obj.id, _wiki ); - } - } - - }); - - }, - - pushQue: function() { - trace("WIKIPEDIA PUSH QUE"); - for(var i = 0; i < VMM.master_config.wikipedia.que.length; i++) { - VMM.ExternalAPI.wikipedia.create(VMM.master_config.wikipedia.que[i]); - } - VMM.master_config.wikipedia.que = []; - }, - - }, - - youtube: { - - get: function(id) { - var url = "http://gdata.youtube.com/feeds/api/videos/" + id + "?v=2&alt=jsonc&callback=?"; - - if (VMM.master_config.youtube.active) { - VMM.master_config.youtube.que.push(id); - } else { - VMM.master_config.youtube.que.push(id); - if (!VMM.master_config.youtube.api_loaded) { - VMM.LoadLib.js('http://www.youtube.com/player_api', function() { - trace("YouTube API Library Loaded"); - }); - } - } - - // THUMBNAIL - VMM.getJSON(url, VMM.ExternalAPI.youtube.createThumb); - }, - - create: function(id) { - - var p = { - active: false, - player: {}, - name: 'youtube_'+id, - playing: false - }; - - p.player['youtube_'+id] = new YT.Player('youtube_'+id, { - height: '390', - width: '640', - playerVars: { - enablejsapi: 1, - color: 'white', - showinfo: 0, - theme: 'light', - rel: 0 - }, - videoId: id, - events: { - 'onReady': VMM.ExternalAPI.youtube.onPlayerReady, - 'onStateChange': VMM.ExternalAPI.youtube.onStateChange - } - }); - - VMM.master_config.youtube.array.push(p); - }, - - createThumb: function(d) { - trace(d.data.id); - trace(d.data.thumbnail.sqDefault); - var thumb_id = "youtube_" + d.data.id + "_thumb"; - VMM.attachElement("#" + thumb_id, ""); - }, - - pushQue: function() { - for(var i = 0; i < VMM.master_config.youtube.que.length; i++) { - VMM.ExternalAPI.youtube.create(VMM.master_config.youtube.que[i]); - } - VMM.master_config.youtube.que = []; - }, - - onAPIReady: function() { - VMM.master_config.youtube.active = true; - VMM.ExternalAPI.youtube.pushQue(); - }, - - stopPlayers: function() { - for(var i = 0; i < VMM.master_config.youtube.array.length; i++) { - if (VMM.master_config.youtube.array[i].playing) { - var the_name = VMM.master_config.youtube.array[i].name; - VMM.master_config.youtube.array[i].player[the_name].stopVideo(); - } - } - }, - - onStateChange: function(e) { - for(var i = 0; i < VMM.master_config.youtube.array.length; i++) { - var the_name = VMM.master_config.youtube.array[i].name; - if (VMM.master_config.youtube.array[i].player[the_name] == e.target) { - if (e.data == YT.PlayerState.PLAYING) { - VMM.master_config.youtube.array[i].playing = true; - } - } - } - }, - - onPlayerReady: function(e) { - - } - - - }, - - vimeo: { - - get: function(id) { - VMM.master_config.vimeo.que.push(id); - VMM.master_config.vimeo.active = true; - }, - - create: function(d) { - trace("VIMEO CREATE"); - // THUMBNAIL - var url = "http://vimeo.com/api/v2/video/" + d + ".json"; - VMM.getJSON(url, VMM.ExternalAPI.vimeo.createThumb); - }, - - createThumb: function(d) { - trace("VIMEO CREATE THUMB"); - var thumb_id = "vimeo_" + d[0].id + "_thumb"; - VMM.attachElement("#" + thumb_id, ""); - }, - - pushQue: function() { - for(var i = 0; i < VMM.master_config.vimeo.que.length; i++) { - VMM.ExternalAPI.vimeo.create(VMM.master_config.vimeo.que[i]); - } - VMM.master_config.vimeo.que = []; - } - - } - - } - -} - -/* YOUTUBE API READY - Can't find a way to customize this callback and keep it in the VMM namespace - Youtube wants it to be this function. -================================================== */ -function onYouTubePlayerAPIReady() { - trace("GLOBAL YOUTUBE API CALLED") - VMM.ExternalAPI.youtube.onAPIReady(); -} - -/*********************************************** - Begin VMM.TouchSlider.js -***********************************************/ - -/* TOUCH SLIDER -================================================== */ -if(typeof VMM != 'undefined' && typeof VMM.TouchSlider == 'undefined') { - - // VMM.TouchSlider.createSlidePanel(touch_object, move_object, w, padding, vertical, h) ; - VMM.TouchSlider = { - createPanel: function(touch_object, move_object, w, padding, vertical, h) { - VMM.TouchSlider.vertical = false; - VMM.TouchSlider.vertical = vertical; - - var x = padding; - VMM.TouchSlider.width = w; - VMM.TouchSlider.height = h; - VMM.TouchSlider.makeTouchable(touch_object, move_object); - /* - if (sticky != null && sticky != "") { - VMM.TouchSlider.sticky = sticky; - } else { - VMM.TouchSlider.sticky = false; - } - */ - // VMM.TouchSlider.sticky = sticky; - - }, - - removePanel: function(touch_object) { - VMM.unbindEvent(touch_object, VMM.TouchSlider.onTouchStart, "touchstart"); - VMM.unbindEvent(touch_object, VMM.TouchSlider.onTouchMove, "touchmove"); - VMM.unbindEvent(touch_object, VMM.TouchSlider.onTouchEnd, "touchend"); - }, - - makeTouchable: function(touch_object, move_object) { - VMM.bindEvent(touch_object, VMM.TouchSlider.onTouchStart, "touchstart", {element: move_object}); - VMM.bindEvent(touch_object, VMM.TouchSlider.onTouchMove, "touchmove", {element: move_object}); - VMM.bindEvent(touch_object, VMM.TouchSlider.onTouchEnd, "touchend", {element: move_object}); - }, - onTouchStart: function(e) { - VMM.TouchSlider.touchStart(e.data.element, e); - e.stopPropagation(); - return true; - }, - onTouchEnd: function(e) { - e.stopPropagation(); - - if (VMM.TouchSlider.sliding) { - VMM.TouchSlider.sliding = false; - VMM.TouchSlider.touchEnd(e.data.element, e); - return false; - } else { - return true; - } - - }, - onTouchMove: function(e) { - VMM.TouchSlider.touchMove(e.data.element, e); - e.preventDefault(); - e.stopPropagation(); - return false; - }, - getLeft: function(elem) { - return parseInt(VMM.Lib.css(elem, 'left').substring(0, VMM.Lib.css(elem, 'left').length - 2), 10); - }, - getTop: function(elem) { - return parseInt(VMM.Lib.css(elem, 'top').substring(0, VMM.Lib.css(elem, 'top').length - 2), 10); - }, - touchStart: function(elem, e) { - - VMM.Lib.css(elem, '-webkit-transition-duration', '0'); - - VMM.TouchSlider.startX = e.originalEvent.touches[0].screenX; - VMM.TouchSlider.startY = e.originalEvent.touches[0].screenY; - - VMM.TouchSlider.startLeft = VMM.TouchSlider.getLeft(elem); - VMM.TouchSlider.startTop = VMM.TouchSlider.getTop(elem); - - VMM.TouchSlider.touchStartTime = new Date().getTime(); - - }, - touchEnd: function(elem, e) { - if (VMM.TouchSlider.getLeft(elem) > 0) { - - //This means they dragged to the right past the first item - - if (VMM.TouchSlider.vertical) { - VMM.Lib.animate(elem, 1000, "", {"top": 0}); - } else { - VMM.Lib.animate(elem, 1000, "", {"left": 0}); - } - - VMM.TouchSlider.startX = null; - VMM.TouchSlider.startY = null; - - VMM.fireEvent(elem, "TOUCHUPDATE", [0]); - - } else { - //This means they were just dragging within the bounds of the grid and we just need to handle the momentum and snap to the grid. - VMM.TouchSlider.slideMomentum(elem, e); - } - }, - slideMomentum: function(elem, e) { - var slideAdjust = (new Date().getTime() - VMM.TouchSlider.touchStartTime) * 10; - var timeAdjust = slideAdjust; - - var left = VMM.TouchSlider.getLeft(elem); - var top = VMM.TouchSlider.getTop(elem); - - var changeX = 6000 * (Math.abs(VMM.TouchSlider.startLeft) - Math.abs(left)); - var changeY = 6000 * (Math.abs(VMM.TouchSlider.startTop) - Math.abs(top)); - - slideAdjust = Math.round(changeX / slideAdjust); - slideAdjustY = Math.round(changeY / slideAdjust); - - var newLeft = slideAdjust + left; - var newTop = slideAdjustY + top; - - var y = newTop % VMM.TouchSlider.height; - var t = newLeft % VMM.TouchSlider.width; - - - var _r_object = { - top: Math.min(0, newTop), - left: Math.min(0, newLeft), - time: timeAdjust - } - VMM.fireEvent(elem, "TOUCHUPDATE", [_r_object]); - /* - if (VMM.TouchSlider.sticky) { - trace("sticky"); - if ((Math.abs(t)) > ((VMM.TouchSlider.width / 2))) { - //Show the next cell - newLeft -= (VMM.TouchSlider.width - Math.abs(t)); - } else { - //Stay on the current cell - newLeft -= t; - } - - VMM.fireEvent(elem, "TOUCHUPDATE", [Math.min(0, newLeft)]); - - } else { - trace("not sticky"); - //VMM.TouchSlider.doSlide(elem, Math.min(0, newLeft), '0.5s'); - VMM.Lib.animate(elem, 500, "", {"left": Math.min(0, newLeft)}); - } - */ - - VMM.TouchSlider.startX = null; - VMM.TouchSlider.startY = null; - - }, - doSlide: function(elem, x, duration) { - VMM.Lib.css(elem, '-webkit-transition-property', 'left'); - VMM.Lib.css(elem, '-webkit-transition-duration', duration); - VMM.Lib.css(elem, 'left', x); - }, - touchMove: function(elem, e) { - - if (!VMM.TouchSlider.sliding) { - //elem.parent().addClass('sliding'); - } - - VMM.TouchSlider.sliding = true; - - if (VMM.TouchSlider.vertical) { - - if (VMM.TouchSlider.startY > e.originalEvent.touches[0].screenY) { - VMM.Lib.css(elem, 'top', -(VMM.TouchSlider.startY - e.originalEvent.touches[0].screenY - VMM.TouchSlider.startTop)); - VMM.TouchSlider.slidingTop = true; - } else { - var top = (e.originalEvent.touches[0].screenY - VMM.TouchSlider.startY + VMM.TouchSlider.startTop); - VMM.Lib.css(elem, 'top', -(VMM.TouchSlider.startY - e.originalEvent.touches[0].screenY - VMM.TouchSlider.startTop)); - VMM.TouchSlider.slidingTop = false; - } - - } else { - - if (VMM.TouchSlider.startX > e.originalEvent.touches[0].screenX) { - VMM.Lib.css(elem, 'left', -(VMM.TouchSlider.startX - e.originalEvent.touches[0].screenX - VMM.TouchSlider.startLeft)); - VMM.TouchSlider.slidingLeft = true; - } else { - var left = (e.originalEvent.touches[0].screenX - VMM.TouchSlider.startX + VMM.TouchSlider.startLeft); - VMM.Lib.css(elem, 'left', -(VMM.TouchSlider.startX - e.originalEvent.touches[0].screenX - VMM.TouchSlider.startLeft)); - VMM.TouchSlider.slidingLeft = false; - } - - } - - - } - } -} - -/*********************************************** - Begin VMM.DragSlider.js -***********************************************/ - -/* DRAG SLIDER -================================================== */ -if(typeof VMM != 'undefined' && typeof VMM.DragSlider == 'undefined') { - // VMM.DragSlider.createSlidePanel(drag_object, move_object, w, padding, sticky); - // VMM.DragSlider.cancelSlide(); - VMM.DragSlider = { - createPanel: function(drag_object, move_object, w, padding, sticky) { - - - - var x = padding; - VMM.DragSlider.width = w; - VMM.DragSlider.makeDraggable(drag_object, move_object); - VMM.DragSlider.drag_elem = drag_object; - /* - if (sticky != null && sticky != "") { - VMM.TouchSlider.sticky = sticky; - } else { - VMM.TouchSlider.sticky = false; - } - */ - VMM.DragSlider.sticky = sticky; - }, - makeDraggable: function(drag_object, move_object) { - VMM.bindEvent(drag_object, VMM.DragSlider.onDragStart, "mousedown", {element: move_object, delement: drag_object}); - //VMM.bindEvent(drag_object, VMM.DragSlider.onDragMove, "mousemove", {element: move_object}); - VMM.bindEvent(drag_object, VMM.DragSlider.onDragEnd, "mouseup", {element: move_object, delement: drag_object}); - VMM.bindEvent(drag_object, VMM.DragSlider.onDragLeave, "mouseleave", {element: move_object, delement: drag_object}); - }, - cancelSlide: function(e) { - VMM.unbindEvent(VMM.DragSlider.drag_elem, VMM.DragSlider.onDragMove, "mousemove"); - //VMM.DragSlider.drag_elem.preventDefault(); - //VMM.DragSlider.drag_elem.stopPropagation(); - return true; - }, - onDragLeave: function(e) { - - VMM.unbindEvent(e.data.delement, VMM.DragSlider.onDragMove, "mousemove"); - e.preventDefault(); - e.stopPropagation(); - return true; - }, - onDragStart: function(e) { - VMM.DragSlider.dragStart(e.data.element, e.data.delement, e); - - e.preventDefault(); - e.stopPropagation(); - return true; - }, - onDragEnd: function(e) { - e.preventDefault(); - e.stopPropagation(); - - if (VMM.DragSlider.sliding) { - VMM.DragSlider.sliding = false; - VMM.DragSlider.dragEnd(e.data.element, e.data.delement, e); - return false; - } else { - return true; - } - - }, - onDragMove: function(e) { - VMM.DragSlider.dragMove(e.data.element, e); - e.preventDefault(); - e.stopPropagation(); - return false; - }, - dragStart: function(elem, delem, e) { - - VMM.DragSlider.startX = e.pageX; - - VMM.DragSlider.startLeft = VMM.DragSlider.getLeft(elem); - VMM.DragSlider.dragStartTime = new Date().getTime(); - VMM.DragSlider.dragWidth = VMM.Lib.width(delem); - - // CANCEL CURRENT ANIMATION IF ANIMATING - var _newx = Math.round(VMM.DragSlider.startX - e.pageX - VMM.DragSlider.startLeft); - - VMM.Lib.stop(elem); - VMM.bindEvent(delem, VMM.DragSlider.onDragMove, "mousemove", {element: elem}); - - }, - dragEnd: function(elem, delem, e) { - VMM.unbindEvent(delem, VMM.DragSlider.onDragMove, "mousemove"); - //VMM.DragSlider.dragMomentum(elem, e); - if (VMM.DragSlider.getLeft(elem) > 0) { - //(VMM.DragSlider.dragWidth/2) - //This means they dragged to the right past the first item - //VMM.Lib.animate(elem, 1000, "linear", {"left": 0}); - - //VMM.fireEvent(elem, "DRAGUPDATE", [0]); - } else { - //This means they were just dragging within the bounds of the grid and we just need to handle the momentum and snap to the grid. - VMM.DragSlider.dragMomentum(elem, e); - } - }, - dragMove: function(elem, e) { - if (!VMM.DragSlider.sliding) { - //elem.parent().addClass('sliding'); - } - - VMM.DragSlider.sliding = true; - if (VMM.DragSlider.startX > e.pageX) { - //Sliding to the left - VMM.Lib.css(elem, 'left', -(VMM.DragSlider.startX - e.pageX - VMM.DragSlider.startLeft)); - VMM.DragSlider.slidingLeft = true; - } else { - //Sliding to the right - var left = (e.pageX - VMM.DragSlider.startX + VMM.DragSlider.startLeft); - VMM.Lib.css(elem, 'left', -(VMM.DragSlider.startX - e.pageX - VMM.DragSlider.startLeft)); - VMM.DragSlider.slidingLeft = false; - } - }, - dragMomentum: function(elem, e) { - var slideAdjust = (new Date().getTime() - VMM.DragSlider.dragStartTime) * 10; - var timeAdjust = slideAdjust; - var left = VMM.DragSlider.getLeft(elem); - - var changeX = 6000 * (Math.abs(VMM.DragSlider.startLeft) - Math.abs(left)); - //var changeX = 6000 * (VMM.DragSlider.startLeft - left); - slideAdjust = Math.round(changeX / slideAdjust); - - var newLeft = left + slideAdjust; - - var t = newLeft % VMM.DragSlider.width; - //left: Math.min(0, newLeft), - var _r_object = { - left: Math.min(newLeft), - time: timeAdjust - } - - VMM.fireEvent(elem, "DRAGUPDATE", [_r_object]); - var _ease = "easeOutExpo"; - if (_r_object.time > 0) { - VMM.Lib.animate(elem, _r_object.time, _ease, {"left": _r_object.left}); - }; - - - //VMM.DragSlider.startX = null; - }, - getLeft: function(elem) { - return parseInt(VMM.Lib.css(elem, 'left').substring(0, VMM.Lib.css(elem, 'left').length - 2), 10); - } - - } -} - -/*********************************************** - Begin VMM.Slider.js -***********************************************/ - -/* Slider -================================================== */ -if(typeof VMM != 'undefined' && typeof VMM.Slider == 'undefined') { - - VMM.Slider = function(parent, parent_config) { - - var events = {}, config; - var $slider, $slider_mask, $slider_container, $slides_items; - var data = [], slides = [], slide_positions = []; - - var slides_content = ""; - var current_slide = 0; - var current_width = 960; - var touch = {move: false, x: 10, y:0, off: 0, dampen: 48}; - var content = ""; - var _active = false; - var layout = parent; - var navigation = {nextBtn:"", prevBtn:"", nextDate:"", prevDate:"", nextTitle:"", prevTitle:""}; - var timer; - - // CONFIG - if(typeof VMM.Timeline != 'undefined') { - config = VMM.Timeline.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: 130 - }, - 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; - var _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); - - 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) { - var _pos = slides[current_slide].leftpos(); - VMM.Lib.css($slider_container, "left", _pos); - } - - // 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); - } - - } - - /* NAVIGATION - ================================================== */ - function onNextClick(e) { - if (current_slide == slides.length - 1) { - VMM.Lib.animate($slider_container, config.duration, config.ease, {"left": -(slides[current_slide].leftpos()) } ); - } else { - goToSlide(current_slide+1); - upDate(); - } - } - - function onPrevClick(e) { - if (current_slide == 0) { - goToSlide(current_slide); - } 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 { - - } - }; - - /* UPDATE - ================================================== */ - function upDate() { - config.current_slide = current_slide; - VMM.fireEvent(layout, "UPDATE"); - }; - - /* GET DATA - ================================================== */ - var getData = function(d) { - data = d; - }; - - /* BUILD SLIDES - ================================================== */ - var buildSlides = function(d) { - VMM.attachElement($slides_items, ""); - slides = []; - - for(var i = 0; i < d.length; i++) { - var _slide = new VMM.Slider.Slide(d[i], $slides_items); - //_slide.show(); - slides.push(_slide); - } - } - - var preloadSlides = function(skip) { - if (skip) { - preloadTimeOutSlides(); - } else { - timer = setTimeout(preloadTimeOutSlides, config.duration); - } - } - - var preloadTimeOutSlides = function() { - for(var j = 0; j < config.preload; j++) { - if ( !((current_slide + j) > slides.length - 1)) { - slides[current_slide + j].show(); - } - if ( !( (current_slide - j) < 0 ) ) { - slides[current_slide - j].show(); - } - } - - sizeSlides(); - } - - /* SIZE SLIDES - ================================================== */ - var sizeSlides = function() { - var layout_text_media = ".slider-item .layout-text-media .media .media-container "; - var layout_media = ".slider-item .layout-media .media .media-container "; - var layout_both = ".slider-item .media .media-container"; - var 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 - } - } - } - - 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); - - // HANDLE SMALLER SIZES - var is_skinny = false; - - if (current_width <= 640) { - is_skinny = true; - } else if (VMM.Browser.device == "mobile" && VMM.Browser.orientation == "portrait") { - is_skinny = true; - } else if (VMM.Browser.device == "tablet" && VMM.Browser.orientation == "portrait") { - //is_skinny = true; - } - - if (is_skinny) { - - mediasize.text_media.width = config.slider.content.width; - 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", config.slider.content.width ); - - 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); - - // 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 + ".twitter .avatar img", "max-width", 32 ); - VMM.Lib.css( layout_text_media + ".twitter .avatar img", "max-height", 32 ); - VMM.Lib.css( layout_media + ".twitter .avatar img", "max-width", 32 ); - VMM.Lib.css( layout_media + ".twitter .avatar img", "max-height", 32 ); - - // 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.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.height( layout_media + ".doc", mediasize.media.height); - - // MAINTAINS VERTICAL CENTER IF IT CAN - for(var 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 - ================================================== */ - var positionSlides = function() { - var pos = 0; - for(var i = 0; i < slides.length; i++) { - pos = i * (config.slider.width+config.spacing); - slides[i].leftpos(pos); - } - } - - /* OPACITY SLIDES - ================================================== */ - var opacitySlides = function(n) { - var _ease = "linear"; - for(var 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); - ================================================== */ - var goToSlide = function(n, ease, duration, fast, firstrun) { - - /* STOP ANY VIDEO PLAYERS ACTIVE - ================================================== */ - VMM.ExternalAPI.youtube.stopPlayers(); - - // Set current slide - current_slide = n; - - var _ease = config.ease; - var _duration = config.duration; - var is_last = false; - var is_first = false; - var _pos = slides[current_slide].leftpos(); - var _title = ""; - - 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}; - - /* set proper nav titles and dates etc. - ================================================== */ - 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, data[current_slide - 1].startdate_str); - 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, data[current_slide + 1].startdate_str); - 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" ); - VMM.Lib.animate(layout, _duration, _ease, {scrollTop: VMM.Lib.prop(layout, "scrollHeight") - VMM.Lib.height(layout) }); - } - - preloadSlides(); - } - - /* BUILD NAVIGATION - ================================================== */ - var buildNavigation = function() { - - var temp_icon = "
 
"; - - navigation.nextBtn = VMM.appendAndGetElement($slider, "
", "nav-next"); - navigation.prevBtn = VMM.appendAndGetElement($slider, "
", "nav-previous"); - navigation.nextBtnContainer = VMM.appendAndGetElement(navigation.nextBtn, "
", "nav-container", temp_icon); - navigation.prevBtnContainer = VMM.appendAndGetElement(navigation.prevBtn, "
", "nav-container", temp_icon); - if (config.type == "timeline") { - navigation.nextDate = VMM.appendAndGetElement(navigation.nextBtnContainer, "
", "date", ""); - navigation.prevDate = VMM.appendAndGetElement(navigation.prevBtnContainer, "
", "date", ""); - } - navigation.nextTitle = VMM.appendAndGetElement(navigation.nextBtnContainer, "
", "title", "Title Goes Here"); - navigation.prevTitle = VMM.appendAndGetElement(navigation.prevBtnContainer, "
", "title", "Title Goes Here"); - - VMM.bindEvent(".nav-next", onNextClick); - VMM.bindEvent(".nav-previous", onPrevClick); - VMM.bindEvent(window, onKeypressNav, 'keydown'); - } - - /* BUILD - ================================================== */ - var build = function() { - - // Clear out existing content - VMM.attachElement(layout, ""); - - // Get DOM Objects to local objects - $slider = VMM.getElement("div.slider"); - $slider_mask = VMM.appendAndGetElement($slider, "
", "slider-container-mask"); - $slider_container = VMM.appendAndGetElement($slider_mask, "
", "slider-container"); - $slides_items = VMM.appendAndGetElement($slider_container, "
", "slider-item-container"); - - // BUILD NAVIGATION - buildNavigation(); - - // ATTACH SLIDES - buildSlides(data); - - /* MAKE SLIDER TOUCHABLE - ================================================== */ - - var __duration = 3000; - - if (VMM.Browser.device == "tablet" || VMM.Browser.device == "mobile") { - config.duration = 500; - __duration = 1000; - //VMM.TouchSlider.createPanel($slider_container, $slider_container, VMM.Lib.width(slides[0]), config.spacing, true); - //VMM.TouchSlider.createPanel($slider_container, $slider_container, slides[0].width(), config.spacing, true); - //VMM.bindEvent($slider_container, onTouchUpdate, "TOUCHUPDATE"); - } else if (VMM.Browser.device == "mobile") { - - } else { - //VMM.DragSlider.createPanel($slider_container, $slider_container, VMM.Lib.width(slides[0]), config.spacing, true); - } - - reSize(false, true); - VMM.Lib.visible(navigation.prevBtn, false); - goToSlide(config.current_slide, "easeOutExpo", __duration, true, true); - - _active = true; - }; - - }; - -} - - - - - - -/*********************************************** - Begin VMM.Slider.Slide.js -***********************************************/ - -/* Slider Slide -================================================== */ -if (typeof VMM.Slider != 'undefined') { - // VMM.Slider.Slide(element, data) - VMM.Slider.Slide = function(d, _parent) { - - var data = d; - var slide = {}; - var media = ""; - var loaded = false; - var preloaded = false; - var is_skinny = false; - var element = VMM.appendAndGetElement(_parent, "
", "slider-item"); - var c = {slide:"", text: "", media: "", media_element: "", layout: "content-container layout", has: { headline: false, text: false, media: false }}; - var $media, $text, $slide, $wrap; - /* PUBLIC - ================================================== */ - this.show = function(skinny) { - if (!loaded) { - if (preloaded) { - reLayout(skinny); - } else { - render(skinny); - } - } - }; - - this.hide = function() { - if (loaded) { - removeSlide(); - } - }; - - 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) { - buildSlide(skinny); - loaded = true; - preloaded = true; - var timer = setTimeout(VMM.ExternalAPI.pushQues, 500); - }; - - var removeSlide = function() { - //VMM.attachElement(element, ""); - loaded = false; - } - - var reLayout = function(skinny) { - - if (c.has.text) { - if (skinny) { - if (!is_skinny) { - VMM.Lib.removeClass($slide, "pad-left"); - VMM.Lib.detach($text); - VMM.Lib.prepend($slide, $text); - is_skinny = true; - } - } else { - if (is_skinny) { - VMM.Lib.addClass($slide, "pad-left"); - VMM.Lib.detach($text); - VMM.Lib.append($slide, $text); - is_skinny = false - } - } - } - } - - var buildSlide = function(skinny) { - $wrap = VMM.appendAndGetElement(element, "
", "content"); - $slide = VMM.appendAndGetElement($wrap, "
"); - - /* DATE - ================================================== */ - if (data.startdate != null && data.startdate != "") { - if (type.of(data.startdate) == "date") { - if (data.type != "start") { - var st = data.startdate_str; - var en = data.enddate_str; - if (st != en) { - c.text += VMM.createElement("h2", st + " — " + en + "", "date"); - } else { - c.text += VMM.createElement("h2", st, "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, "
", "text", c.text); - } - - /* MEDIA - ================================================== */ - if (data.asset != null && data.asset != "") { - if (data.asset.media != null && data.asset.media != "") { - c.has.media = true; - $media = VMM.appendAndGetElement($slide, "
", "media", VMM.MediaElement.create(data.asset)); - } - } - - /* COMBINE - ================================================== */ - if (c.has.text) { c.layout += "-text" }; - if (c.has.media){ c.layout += "-media" }; - - if (c.has.text) { - if (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); - } - - - }; - - } - -}; - - -/*********************************************** - Begin VMM.Util.js -***********************************************/ - -/* 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(); - var prefix = ""; - var _url = url.split("://", 2); - - if (loc.match("http")) { - prefix = loc; - } else { - prefix = "https"; - } - - return prefix + "://" + _url[1]; - - }, - - /* 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 ""; - } - - }, - /* 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 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); - } - } - }, - - date: { - - 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'
'mmmm d',' yyyy''", - full_long: "mmm d',' yyyy 'at' hh:MM TT", - full_long_small_date: "hh:MM TT'
mmm d',' yyyy''", - }, - - 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'
'mmmm d',' yyyy''", - full_long: "dddd',' mmm d',' yyyy 'at' hh:MM TT", - full_long_small_date: "hh:MM TT'
'dddd',' mmm d',' yyyy''", - }, - - setLanguage: function(lang) { - trace("SET DATE LANGUAGE"); - VMM.Util.date.dateformats = lang.dateformats; - VMM.Util.date.month = lang.date.month; - VMM.Util.date.month_abbr = lang.date.month_abbr; - VMM.Util.date.day = lang.date.day; - VMM.Util.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) { - if (type.of(d) == "date") { - return d; - } else { - try { - var out = new Date(d); - if (isNaN(out) === false) { - return out; - } - } catch (e) { - } - var _date = new Date(0, 0, 1, 0, 0, 0, 0); - var _d_array; // DATE ARRAY - var _t_array; // TIME ARRAY - if ( d.match(/,/gi) ) { - _d_array = d.split(","); - for(var i = 0; i < _d_array.length; i++) { - _d_array[i] = parseInt(_d_array[i]); - } - if ( _d_array[0] ) { _date.setFullYear( _d_array[0]); } - if ( _d_array[1] > 1 ) { _date.setMonth( _d_array[1] - 1); } - if ( _d_array[2] > 1 ) { _date.setDate( _d_array[2]); } - if ( _d_array[3] > 1 ) { _date.setHours( _d_array[3]); } - if ( _d_array[4] > 1 ) { _date.setMinutes( _d_array[4]); } - if ( _d_array[5] > 1 ) { _date.setSeconds( _d_array[5]); } - if ( _d_array[6] > 1 ) { _date.setMilliseconds( _d_array[6]); } - } else if (d.match("/")) { - var _time_parse; - var _times; - if (d.match(" ")) { - _time_parse = d.split(" "); - if (d.match(":")) { - _t_array = _time_parse[1].split(":"); - if ( _t_array[0] >= 1 ) { _date.setHours( _t_array[0]); } - if ( _t_array[1] >= 1 ) { _date.setMinutes( _t_array[1]); } - if ( _t_array[2] >= 1 ) { _date.setSeconds( _t_array[2]); } - if ( _t_array[3] >= 1 ) { _date.setMilliseconds( _t_array[3]); } - } - _d_array = _time_parse[0].split("/"); - } else { - _d_array = d.split("/"); - } - if ( _d_array[2] ) { _date.setFullYear( _d_array[2]); } - if ( _d_array[0] > 1 ) { _date.setMonth( _d_array[0] - 1); } - if ( _d_array[1] > 1 ) { _date.setDate( _d_array[1]); } - } else if (d.length < 5) { - _date.setFullYear(parseInt(d)); - _date.setMonth(0); - _date.setDate(1); - _date.setHours(0); - _date.setMinutes(0); - _date.setSeconds(0); - _date.setMilliseconds(0); - } else { - _date = new Date( - parseInt(d.slice(0,4)), - parseInt(d.slice(4,6)) - 1, - parseInt(d.slice(6,8)), - parseInt(d.slice(8,10)), - parseInt(d.slice(10,12)) - ); - } - return _date; - } - }, - - prettyDate: function(d, is_abbr, d2) { - var _date; - var _date2; - var format; - var bc_check; - var is_pair = false; - - if (d2 != null) { - is_pair = true; - } - - if (type.of(d) == "date") { - if (d.getMonth() === 0 && d.getDate() == 1 && d.getHours() === 0 && d.getMinutes() === 0 ) { - // YEAR ONLY - format = VMM.Util.date.dateformats.year; - } else if (d.getDate() <= 1 && d.getHours() === 0 && d.getMinutes() === 0) { - // YEAR MONTH - if (is_abbr) { - format = VMM.Util.date.dateformats.month_short; - } else { - format = VMM.Util.date.dateformats.month; - } - } else if (d.getHours() === 0 && d.getMinutes() === 0) { - // YEAR MONTH DAY - if (is_abbr) { - format = VMM.Util.date.dateformats.full_short; - } else { - format = VMM.Util.date.dateformats.full; - } - } else if (d.getMinutes() === 0) { - // YEAR MONTH DAY HOUR - if (is_abbr) { - format = VMM.Util.date.dateformats.time_no_seconds_short; - } else { - format = VMM.Util.date.dateformats.time_no_seconds_small_date; - } - } else { - // YEAR MONTH DAY HOUR MINUTE - if (is_abbr){ - format = VMM.Util.date.dateformats.time_no_seconds_short; - } else { - format = VMM.Util.date.dateformats.full_long; - } - } - - _date = dateFormat(d, format); - bc_check = _date.split(" "); - - // BC TIME SUPPORT - for(var i = 0; i < bc_check.length; i++) { - if ( parseInt(bc_check[i]) < 0 ) { - trace("YEAR IS BC"); - var bc_original = bc_check[i]; - var bc_number = Math.abs( parseInt(bc_check[i]) ); - var bc_string = bc_number.toString() + " B.C."; - _date = _date.replace(bc_original, bc_string); - } - } - - - if (is_pair) { - _date2 = dateFormat(d2, format); - bc_check = _date2.split(" "); - // BC TIME SUPPORT - for(var i = 0; i < bc_check.length; i++) { - if ( parseInt(bc_check[i]) < 0 ) { - trace("YEAR IS BC"); - var bc_original = bc_check[i]; - var bc_number = Math.abs( parseInt(bc_check[i]) ); - var 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 + " — " + _date2; - } else { - return _date; - } - } - - }, - - // VMM.Util.doubledigit(number). - 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$&") - .replace(pseudoUrlPattern, "$1$2") - .replace(emailAddressPattern, "$1"); - }, - - 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$2$5$8$11$14$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, "$3"); - } - // Email addresses - var emailAddressPattern = /(([a-zA-Z0-9_\-\.]+)@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6}))+/gim; - - var twitterHandlePattern = /(@([\w]+))/g; - - var twitterSearchPattern = /(#([\w]+))/g; - - return text - //.replace(urlPattern, "$&") - .replace(url_pattern, url_replace) - .replace(pseudoUrlPattern, "$1$2") - .replace(emailAddressPattern, "$1") - .replace(twitterHandlePattern, "$1") - .replace(twitterSearchPattern, "$1"); - }, - - linkify_wikipedia: function(text) { - - var urlPattern = /]*>(.*?)<\/i>/gim; - return text - .replace(urlPattern, "$&") - .replace(/]*>/gim, "") - .replace(/<\/i>/gim, "") - .replace(/]*>/gim, "") - .replace(/<\/b>/gim, ""); - }, - /* Turns plain text links into real links - ================================================== */ - // VMM.Util.unlinkify(); - unlinkify: function(text) { - if(!text) return text; - text = text.replace(/]*>/i,""); - text = text.replace(/<\/a>/i, ""); - return text; - }, - - /* TK - ================================================== */ - nl2br: function(text) { - return text.replace(/(\r\n|[\r\n]|\\n|\\r)/g,"
"); - }, - - /* 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('&')) { - str = str.replace("&", "&"); - } else if (str.match('&')) { - str = str.replace("&", "&"); - } else if (str.match('&')) { - str = str.replace("&", "&"); - } - - 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,"  "); - }, - - /* 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= 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(); - - //'string'.linkify(); - if(!String.linkify) { - String.prototype.linkify = function() { - - // 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; - - var twitterHandlePattern = /(@([\w]+))/g; - - var twitterSearchPattern = /(#([\w]+))/g; - - return this - .replace(urlPattern, '$&') - .replace(pseudoUrlPattern, '$1$2') - .replace(emailAddressPattern, '$1') - .replace(twitterHandlePattern, "$1") - .replace(twitterSearchPattern, "$1"); - }; - }; - //str.substr(3,4) - /* - * Date Format 1.2.3 - * (c) 2007-2009 Steven Levithan - * MIT license - * - * Includes enhancements by Scott Trenda - * and Kris Kowal - * - * Accepts a date, a mask, or a date and a mask. - * Returns a formatted version of the given date. - * The date defaults to the current date/time. - * The mask defaults to dateFormat.masks.default. - */ - - var dateFormat = function () { - var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, - timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, - timezoneClip = /[^-+\dA-Z]/g, - pad = function (val, len) { - val = String(val); - len = len || 2; - while (val.length < len) val = "0" + val; - return val; - }; - - // Regexes and supporting functions are cached through closure - return function (date, mask, utc) { - var dF = dateFormat; - - // You can't provide utc if you skip other args (use the "UTC:" mask prefix) - if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) { - mask = date; - date = undefined; - } - - // Passing date through Date applies Date.parse, if necessary - date = date ? new Date(date) : new Date; - if (isNaN(date)) throw SyntaxError("invalid date"); - - mask = String(dF.masks[mask] || mask || dF.masks["default"]); - - // Allow setting the utc argument via the mask - if (mask.slice(0, 4) == "UTC:") { - mask = mask.slice(4); - utc = true; - } - - var _ = utc ? "getUTC" : "get", - d = date[_ + "Date"](), - D = date[_ + "Day"](), - m = date[_ + "Month"](), - y = date[_ + "FullYear"](), - H = date[_ + "Hours"](), - M = date[_ + "Minutes"](), - s = date[_ + "Seconds"](), - L = date[_ + "Milliseconds"](), - o = utc ? 0 : date.getTimezoneOffset(), - flags = { - d: d, - dd: pad(d), - ddd: dF.i18n.dayNames[D], - dddd: dF.i18n.dayNames[D + 7], - m: m + 1, - mm: pad(m + 1), - mmm: dF.i18n.monthNames[m], - mmmm: dF.i18n.monthNames[m + 12], - yy: String(y).slice(2), - yyyy: y, - h: H % 12 || 12, - hh: pad(H % 12 || 12), - H: H, - HH: pad(H), - M: M, - MM: pad(M), - s: s, - ss: pad(s), - l: pad(L, 3), - L: pad(L > 99 ? Math.round(L / 10) : L), - t: H < 12 ? "a" : "p", - tt: H < 12 ? "am" : "pm", - T: H < 12 ? "A" : "P", - TT: H < 12 ? "AM" : "PM", - Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""), - o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), - S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] - }; - - return mask.replace(token, function ($0) { - return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); - }); - }; - }(); - - // Some common format strings - dateFormat.masks = { - "default": "ddd mmm dd yyyy HH:MM:ss", - shortDate: "m/d/yy", - mediumDate: "mmm d, yyyy", - longDate: "mmmm d, yyyy", - fullDate: "dddd, mmmm d, yyyy", - shortTime: "h:MM TT", - mediumTime: "h:MM:ss TT", - longTime: "h:MM:ss TT Z", - isoDate: "yyyy-mm-dd", - isoTime: "HH:MM:ss", - isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", - isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" - }; - - // Internationalization strings - dateFormat.i18n = { - dayNames: [ - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", - "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" - ], - monthNames: [ - "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", - "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" - ] - }; - - // For convenience... - Date.prototype.format = function (mask, utc) { - return dateFormat(this, mask, utc); - }; - -} - -/*********************************************** - Begin VMM.LoadLib.js -***********************************************/ - -/* - LoadLib - Based on LazyLoad by Ryan Grove - https://github.com/rgrove/lazyload/ - Copyright (c) 2011 Ryan Grove - 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. - -================================================== */ -window.loadedJS = []; - - -if(typeof VMM != 'undefined' && typeof VMM.LoadLib == 'undefined') { - //VMM.LoadLib.js('http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', onJQueryLoaded); - //VMM.LoadLib.css('http://someurl.css', onCSSLoaded); - - - - VMM.LoadLib = (function (doc) { - var env, - head, - pending = {}, - pollCount = 0, - queue = {css: [], js: []}, - styleSheets = doc.styleSheets; - - var loaded_Array = []; - - function isLoaded(url) { - var has_been_loaded = false; - for(var i=0; i= 0) { - if (styleSheets[i].href === css.urls[0]) { - finish('css'); - break; - } - } - - pollCount += 1; - - if (css) { - if (pollCount < 200) { - setTimeout(pollWebKit, 50); - } else { - - finish('css'); - } - } - } - } - - return { - - css: function (urls, callback, obj, context) { - if (isLoaded(urls)) { - return callback; - } else { - load('css', urls, callback, obj, context); - } - }, - - js: function (urls, callback, obj, context) { - if (isLoaded(urls)) { - return callback; - } else { - load('js', urls, callback, obj, context); - } - } - - }; - })(this.document); -} - - - -/*********************************************** - Begin VMM.Language.js -***********************************************/ - -/* 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_no_seconds_short: "h:MM TT", - time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", - full_long: "mmm d',' yyyy 'at' hh:MM TT", - full_long_small_date: "hh:MM TT'
mmm d',' yyyy''", - }, - 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" - } - } -}; - -/*********************************************** - Begin AES.js -***********************************************/ - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -/* 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 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>> 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>> 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>> 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 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>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>>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; -} - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - -/*********************************************** - Begin bootstrap-tooltip.js -***********************************************/ - -/* =========================================================== - * 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('.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: '
' - } - -}( window.jQuery ); - -/*********************************************** - Begin bootstrap-tooltip.js -***********************************************/ - -/* =========================================================== - * 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('.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: '
' - } - -}( window.jQuery ); - -/*********************************************** - Begin VMM.Timeline.js -***********************************************/ - -/*! - Timeline - Designed and built by Zach Wise at VéritéCo - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - http://www.gnu.org/licenses/ - -*/ - -/* CodeKit Import - http://incident57.com/codekit/ -================================================== */ -// @codekit-prepend "VMM.Timeline.License.js"; -// @codekit-prepend "VMM.js"; -// @codekit-prepend "VMM.Library.js"; -// @codekit-prepend "VMM.Browser.js"; -// @codekit-prepend "VMM.MediaElement.js"; -// @codekit-prepend "VMM.MediaType.js"; -// @codekit-prepend "VMM.Media.js"; -// @codekit-prepend "VMM.FileExtention.js"; -// @codekit-prepend "VMM.ExternalAPI.js"; -// @codekit-prepend "VMM.TouchSlider.js"; -// @codekit-prepend "VMM.DragSlider.js"; -// @codekit-prepend "VMM.Slider.js"; -// @codekit-prepend "VMM.Slider.Slide.js"; -// @codekit-prepend "VMM.Util.js"; -// @codekit-prepend "VMM.LoadLib.js"; -// @codekit-prepend "VMM.Language.js"; - -// @codekit-append "VMM.Timeline.TimeNav.js"; -// @codekit-append "VMM.Timeline.DataObj.js"; - -// @codekit-prepend "lib/AES.js"; -// @codekit-prepend "lib/bootstrap-tooltip.js"; - - - - -/* Timeline -================================================== */ - -if(typeof VMM != 'undefined' && typeof VMM.Timeline == 'undefined') { - - VMM.Timeline = function(w, h, conf, _timeline_id) { - - var $timeline, $feedback, $messege, slider, timenav, version, timeline_id; - var events = {}, data = {}, _dates = [], config = {}; - var has_width = false, has_height = false, ie7 = false, is_moving = false; - - if (type.of(_timeline_id) == "string") { - timeline_id = _timeline_id; - } else { - timeline_id = "#timeline"; - } - - version = "1.35"; - - trace("TIMELINE VERSION " + version); - - /* CONFIG - ================================================== */ - config = { - embed: false, - events: { - data_ready: "DATAREADY", - messege: "MESSEGE", - headline: "TIMELINE_HEADLINE", - slide_change: "SLIDE_CHANGE", - resize: "resize" - }, - id: timeline_id, - type: "timeline", - maptype: "toner", - preload: 4, - current_slide: 0, - hash_bookmark: false, - start_at_end: false, - start_page: false, - api_keys: { - google: "", - flickr: "", - twitter: "" - }, - interval: 10, - something: 0, - width: 960, - height: 540, - spacing: 15, - loaded: { - slider: false, - timenav: false, - percentloaded: 0 - }, - nav: { - start_page: false, - interval_width: 200, - density: 4, - minor_width: 0, - multiplier: { - current: 6, - min: .1, - max: 50 - }, - rows: [1, 1, 1], - width: 960, - height: 200, - marker: { - width: 150, - height: 48 - } - }, - feature: { - width: 960, - height: 540 - }, - slider: { - width: 720, - height: 400, - content: { - width: 720, - height: 400, - padding: 130, - }, - nav: { - width: 100, - height: 200 - } - }, - ease: "easeInOutExpo", - duration: 1000, - language: VMM.Language - }; - - if ( w != null && w != "") { - config.width = w; - has_width = true; - } - - if ( h != null && h != "") { - config.height = h; - has_height = true; - } - - if(window.location.hash) { - var hash = window.location.hash.substring(1); - if (!isNaN(hash)) { - config.current_slide = parseInt(hash); - } - } - - window.onhashchange = function () { - if (config.hash_bookmark) { - if (is_moving) { - var hash = window.location.hash.substring(1); - goToEvent(parseInt(hash)); - } else { - is_moving = false; - } - } - } - - /* CREATE CONFIG - ================================================== */ - var createConfig = function(conf) { - - // APPLY SUPPLIED CONFIG TO TIMELINE CONFIG - if (typeof timeline_config == 'object') { - trace("HAS TIMELINE CONFIG"); - var x; - for (x in timeline_config) { - if (Object.prototype.hasOwnProperty.call(timeline_config, x)) { - config[x] = timeline_config[x]; - } - } - } else if (typeof conf == 'object') { - var x; - for (x in conf) { - if (Object.prototype.hasOwnProperty.call(conf, x)) { - config[x] = conf[x]; - } - } - } - - config.nav.width = config.width; - config.nav.height = 200; - config.feature.width = config.width; - config.feature.height = config.height - config.nav.height; - VMM.Timeline.Config = config; - VMM.master_config.Timeline = VMM.Timeline.Config; - this.events = config.events; - } - - /* CREATE TIMELINE STRUCTURE - ================================================== */ - var createStructure = function(w, h) { - $timeline = VMM.getElement(timeline_id); - - VMM.Lib.addClass(timeline_id, "vmm-timeline"); - - $feedback = VMM.appendAndGetElement($timeline, "
", "feedback", ""); - $messege = VMM.appendAndGetElement($feedback, "
", "messege", "Timeline"); - slider = new VMM.Slider(timeline_id + " div.slider", config); - timenav = new VMM.Timeline.TimeNav(timeline_id + " div.navigation"); - - if (!has_width) { - config.width = VMM.Lib.width($timeline); - } else { - VMM.Lib.width($timeline, config.width); - } - - if (!has_height) { - config.height = VMM.Lib.height($timeline); - } else { - VMM.Lib.height($timeline, config.height); - } - - } - - /* ON EVENT - ================================================== */ - - function onDataReady(e, d) { - trace("onDataReady"); - trace(d); - data = d.timeline; - - if (type.of(data.era) == "array") { - - } else { - data.era = []; - } - - buildDates(); - - }; - - function onDatesProcessed() { - build(); - } - - function reSize() { - updateSize(); - slider.setSize(config.feature.width, config.feature.height); - timenav.setSize(config.width, config.height); - }; - - function onSliderLoaded(e) { - config.loaded.slider = true; - onComponentLoaded(); - }; - - function onComponentLoaded(e) { - config.loaded.percentloaded = config.loaded.percentloaded + 25; - - if (config.loaded.slider && config.loaded.timenav) { - hideMessege(); - } - } - - function onTimeNavLoaded(e) { - config.loaded.timenav = true; - onComponentLoaded(); - } - - function onSlideUpdate(e) { - is_moving = true; - config.current_slide = slider.getCurrentNumber(); - setHash(config.current_slide); - timenav.setMarker(config.current_slide, config.ease,config.duration); - }; - - function onMarkerUpdate(e) { - is_moving = true; - config.current_slide = timenav.getCurrentNumber(); - setHash(config.current_slide); - slider.setSlide(config.current_slide); - }; - - var goToEvent = function(n) { - if (n <= _dates.length - 1 && n >= 0) { - config.current_slide = n; - slider.setSlide(config.current_slide); - timenav.setMarker(config.current_slide, config.ease,config.duration); - } - } - - function setHash(n) { - if (config.hash_bookmark) { - window.location.hash = "#" + n.toString(); - } - } - - /* PUBLIC FUNCTIONS - ================================================== */ - this.init = function(_data, _timeline_id, conf) { - - if (type.of(_timeline_id) == "string") { - if (_timeline_id.match("#")) { - timeline_id = _timeline_id; - } else { - timeline_id = "#" + _timeline_id; - } - } - - createConfig(conf); - createStructure(w,h); - - trace('TIMELINE INIT'); - VMM.Util.date.setLanguage(VMM.Timeline.Config.language); - VMM.master_config.language = VMM.Timeline.Config.language; - - $feedback = VMM.appendAndGetElement($timeline, "
", "feedback", ""); - $messege = VMM.appendAndGetElement($feedback, "
", "messege", VMM.master_config.language.messages.loading_timeline); - - VMM.bindEvent(global, onDataReady, config.events.data_ready); - VMM.bindEvent(global, showMessege, config.events.messege); - - /* GET DATA - ================================================== */ - - if (VMM.Browser.browser == "MSIE" && parseInt(VMM.Browser.version, 10) == 7) { - ie7 = true; - VMM.fireEvent(global, config.events.messege, "Internet Explorer 7 is not supported by #Timeline."); - } else { - if (type.of(_data) == "string" || type.of(_data) == "object") { - VMM.Timeline.DataObj.getData(_data); - } else { - VMM.Timeline.DataObj.getData(VMM.getElement(timeline_id)); - } - } - - }; - - this.iframeLoaded = function() { - trace("iframeLoaded"); - }; - - this.reload = function(_d) { - trace("loadNewDates" + _d); - $messege = VMM.appendAndGetElement($feedback, "
", "messege", VMM.master_config.language.messages.loading_timeline); - data = {}; - VMM.Timeline.DataObj.getData(_d); - }; - - /* DATA - ================================================== */ - var getData = function(url) { - VMM.getJSON(url, function(d) { - data = VMM.Timeline.DataObj.getData(d); - VMM.fireEvent(global, config.events.data_ready); - }); - }; - - /* MESSEGES - ================================================== */ - - var showMessege = function(e, msg) { - trace("showMessege " + msg); - VMM.attachElement($messege, msg); - }; - - var hideMessege = function() { - VMM.Lib.animate($feedback, config.duration, config.ease*4, {"opacity": 0}, detachMessege); - }; - - var detachMessege = function() { - VMM.Lib.detach($feedback); - } - - /* BUILD DISPLAY - ================================================== */ - var build = function() { - - // START AT END? - if (config.start_at_end) { - config.current_slide = _dates.length - 1; - } - // CREATE DOM STRUCTURE - VMM.attachElement($timeline, ""); - VMM.appendElement($timeline, "
"); - - reSize(); - - VMM.bindEvent("div.slider", onSliderLoaded, "LOADED"); - VMM.bindEvent("div.navigation", onTimeNavLoaded, "LOADED"); - VMM.bindEvent("div.slider", onSlideUpdate, "UPDATE"); - VMM.bindEvent("div.navigation", onMarkerUpdate, "UPDATE"); - - slider.init(_dates); - timenav.init(_dates, data.era); - - // RESIZE EVENT LISTENERS - VMM.bindEvent(global, reSize, config.events.resize); - //VMM.bindEvent(global, function(e) {e.preventDefault()}, "touchmove"); - - }; - - var updateSize = function() { - trace("UPDATE SIZE"); - config.width = VMM.Lib.width($timeline); - config.height = VMM.Lib.height($timeline); - - config.nav.width = config.width; - config.feature.width = config.width; - - if (VMM.Browser.device == "mobile") { - //config.feature.height = config.height; - } else { - //config.feature.height = config.height - config.nav.height - 3; - } - config.feature.height = config.height - config.nav.height - 3; - }; - - // BUILD DATE OBJECTS - var buildDates = function() { - - updateSize(); - _dates = []; - VMM.fireEvent(global, config.events.messege, "Building Dates"); - for(var i = 0; i < data.date.length; i++) { - - if (data.date[i].startDate != null && data.date[i].startDate != "") { - - var _date = {}; - - // START DATE - if (data.date[i].type == "tweets") { - _date.startdate = VMM.ExternalAPI.twitter.parseTwitterDate(data.date[i].startDate); - } else { - _date.startdate = VMM.Util.date.parse(data.date[i].startDate); - } - - _date.uniqueid = (data.date[i].startDate).toString() + "-" + i.toString(); - - // END DATE - if (data.date[i].endDate != null && data.date[i].endDate != "") { - if (data.date[i].type == "tweets") { - _date.enddate = VMM.ExternalAPI.twitter.parseTwitterDate(data.date[i].endDate); - } else { - _date.enddate = VMM.Util.date.parse(data.date[i].endDate); - } - } else { - _date.enddate = _date.startdate; - } - - _date.title = data.date[i].headline; - _date.headline = data.date[i].headline; - _date.type = data.date[i].type; - _date.date = VMM.Util.date.prettyDate(_date.startdate); - _date.startdate_str = VMM.Util.date.prettyDate(_date.startdate); - _date.enddate_str = VMM.Util.date.prettyDate(_date.enddate); - _date.asset = data.date[i].asset; - _date.fulldate = _date.startdate.getTime(); - _date.text = data.date[i].text; - _date.content = ""; - _date.tag = data.date[i].tag; - - - _dates.push(_date); - - } - - }; - - /* CUSTOM SORT - ================================================== */ - _dates.sort(function(a, b){ - return a.fulldate - b.fulldate - }); - - /* CREATE START PAGE IF AVAILABLE - ================================================== */ - if (data.headline != null && data.headline != "" && data.text != null && data.text != "") { - trace("HAS STARTPAGE"); - var _date = {}; - var td_num = 0; - var td = _dates[0].startdate; - _date.startdate = new Date(_dates[0].startdate); - - if (td.getMonth() === 0 && td.getDate() == 1 && td.getHours() === 0 && td.getMinutes() === 0 ) { - // trace("YEAR ONLY"); - _date.startdate.setFullYear(td.getFullYear() - 1); - } else if (td.getDate() <= 1 && td.getHours() === 0 && td.getMinutes() === 0) { - // trace("YEAR MONTH"); - _date.startdate.setMonth(td.getMonth() - 1); - } else if (td.getHours() === 0 && td.getMinutes() === 0) { - // trace("YEAR MONTH DAY"); - _date.startdate.setDate(td.getDate() - 1); - } else if (td.getMinutes() === 0) { - // trace("YEAR MONTH DAY HOUR"); - _date.startdate.setHours(td.getHours() - 1); - } else { - // trace("YEAR MONTH DAY HOUR MINUTE"); - _date.startdate.setMinutes(td.getMinutes() - 1); - } - - _date.uniqueid = VMM.Util.unique_ID(5); - _date.enddate = _date.startdate; - _date.title = data.headline; - _date.headline = data.headline; - _date.text = data.text; - _date.type = "start"; - _date.date = VMM.Util.date.prettyDate(data.startDate); - _date.asset = data.asset; - _date.fulldate = _date.startdate.getTime(); - - if (config.embed) { - VMM.fireEvent(global, config.events.headline, _date.headline); - } - - _dates.push(_date); - } - - /* CUSTOM SORT - ================================================== */ - _dates.sort(function(a, b){ - return a.fulldate - b.fulldate - }); - - onDatesProcessed(); - } - - }; - - VMM.Timeline.Config = {}; - -}; - -/*********************************************** - Begin VMM.Timeline.TimeNav.js -***********************************************/ - -/* TIMELINE NAVIGATION -================================================== */ - -if(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.TimeNav == 'undefined') { - - VMM.Timeline.TimeNav = function(parent, content_width, content_height) { - trace("VMM.Timeline.TimeNav"); - - var events = {}, timespan = {}, layout = parent; - var data = [], era_markers = [], markers = [], interval_array = [], interval_major_array = [], eras, content, tags = []; - - var current_marker = 0; - var _active = false; - var timelookup = {day: 24, month: 12, year: 10, hour: 60, minute: 60, second: 1000, decade: 10, century: 100, millenium: 1000, age: 1000000, epoch: 10000000, era: 100000000, eon: 500000000, week: 4.34812141, days_in_month: 30.4368499, days_in_week: 7, weeks_in_month:4.34812141, weeks_in_year:52.177457, days_in_year: 365.242199, hours_in_day: 24 }; - var dateFractionBrowser = {day: 86400000, week: 7, month: 30.4166666667, year: 12, hour: 24, minute: 1440, second: 86400, decade: 10, century: 100, millenium: 1000, age: 1000000, epoch: 10000000, era: 100000000, eon: 500000000 }; - - var interval = {type: "year", number: 10, first: 1970, last: 2011, multiplier: 100, classname:"_idd", interval_type:"interval"}; - var interval_major = {type: "year", number: 10, first: 1970, last: 2011, multiplier: 100, classname:"major", interval_type:"interval major"}; - var interval_macro = {type: "year", number: 10, first: 1970, last: 2011, multiplier: 100, classname:"_dd_minor", interval_type:"interval minor"}; - var interval_calc = {day: {},month: {},year: {},hour: {},minute: {}, second: {},decade: {},century: {},millenium: {},week: {}, age: {}, epoch: {}, era: {}, eon: {} }; - - /* ELEMENTS - ================================================== */ - var $timenav, $content, $time, $timeintervalminor, $timeinterval, $timeintervalmajor, $timebackground, - $timeintervalbackground, $timenavline, $timenavindicator, $timeintervalminor_minor, $toolbar, $zoomin, $zoomout; - - /* ADD to Config - ================================================== */ - var config = VMM.Timeline.Config; - config.nav.rows = [config.nav.marker.height, config.nav.marker.height*2, 1]; - - if (content_width != null && content_width != "") { - config.nav.width = content_width; - } - if (content_height != null && content_height != "") { - config.nav.height = content_height; - } - - /* - config.nav.density = 2; - config.nav.multiplier = { - current: 6, - min: .1, - max: 50 - }; - */ - - /* INIT - ================================================== */ - this.init = function(d,e) { - trace('VMM.Timeline.TimeNav init'); - // need to evaluate d - // some function to determine type of data and prepare it - if(typeof d != 'undefined') { - this.setData(d, e); - } else { - trace("WAITING ON DATA"); - } - }; - - /* GETTERS AND SETTERS - ================================================== */ - this.setData = function(d,e) { - if(typeof d != 'undefined') { - data = {}; - data = d; - eras = e; - build(); - } else{ - trace("NO DATA"); - } - }; - - this.setSize = function(w, h) { - if (w != null) {config.width = w}; - if (h != null) {config.height = h}; - if (_active) { - reSize(); - } - - - } - - this.setMarker = function(n, ease, duration, fast) { - goToMarker(n, ease, duration); - } - - this.getCurrentNumber = function() { - return current_marker; - } - - /* ON EVENT - ================================================== */ - - function onConfigSet() { - trace("onConfigSet"); - }; - - function reSize(firstrun) { - VMM.Lib.css($timenavline, "left", Math.round(config.width/2)+2); - VMM.Lib.css($timenavindicator, "left", Math.round(config.width/2)-8); - goToMarker(config.current_slide, config.ease, config.duration, true, firstrun); - }; - - function upDate() { - VMM.fireEvent(layout, "UPDATE"); - } - - function onZoomIn() { - VMM.DragSlider.cancelSlide(); - if (config.nav.multiplier.current > config.nav.multiplier.min) { - if (config.nav.multiplier.current <= 1) { - config.nav.multiplier.current = config.nav.multiplier.current - .25; - } else { - if (config.nav.multiplier.current > 5) { - if (config.nav.multiplier.current > 16) { - config.nav.multiplier.current = Math.round(config.nav.multiplier.current - 10); - } else { - config.nav.multiplier.current = Math.round(config.nav.multiplier.current - 4); - } - } else { - config.nav.multiplier.current = Math.round(config.nav.multiplier.current - 1); - } - - } - if (config.nav.multiplier.current <= 0) { - config.nav.multiplier.current = config.nav.multiplier.min; - } - refreshTimeline(); - } - } - - function onZoomOut() { - VMM.DragSlider.cancelSlide(); - if (config.nav.multiplier.current < config.nav.multiplier.max) { - if (config.nav.multiplier.current > 4) { - if (config.nav.multiplier.current > 16) { - config.nav.multiplier.current = Math.round(config.nav.multiplier.current + 10); - } else { - config.nav.multiplier.current = Math.round(config.nav.multiplier.current + 4); - } - } else { - config.nav.multiplier.current = Math.round(config.nav.multiplier.current + 1); - } - - if (config.nav.multiplier.current >= config.nav.multiplier.max) { - config.nav.multiplier.current = config.nav.multiplier.max; - } - refreshTimeline(); - } - } - - function onBackHome(e) { - VMM.DragSlider.cancelSlide(); - goToMarker(0); - upDate(); - } - - var refreshTimeline = function() { - trace("config.nav.multiplier " + config.nav.multiplier.current); - positionMarkers(true); - positionInterval(interval_array, true, true); - positionInterval(interval_major_array, true); - }; - - /* MARKER EVENTS - ================================================== */ - function onMarkerClick(e) { - VMM.DragSlider.cancelSlide(); - goToMarker(e.data.number); - upDate(); - }; - - function onMarkerHover(e) { - VMM.Lib.toggleClass(e.data.elem, "zFront"); - }; - - var goToMarker = function(n, ease, duration, fast, firstrun) { - - current_marker = n; - var _ease = config.ease; - var _duration = config.duration; - var is_last = false; - var is_first = false; - var _pos = VMM.Lib.position(markers[current_marker].marker); - - if (current_marker == 0) { - is_first = true; - } - if (current_marker +1 == markers.length) { - is_last = true - } - if (ease != null && ease != "") {_ease = ease}; - if (duration != null && duration != "") {_duration = duration}; - - // set marker style - for(var i = 0; i < markers.length; i++) { - VMM.Lib.removeClass(markers[i].marker, "active"); - } - - if (config.start_page && markers[0].type == "start") { - VMM.Lib.visible(markers[0].marker, false); - VMM.Lib.addClass(markers[0].marker, "start"); - } - - VMM.Lib.addClass(markers[current_marker].marker, "active"); - - // ANIMATE MARKER - VMM.Lib.stop($timenav); - VMM.Lib.animate($timenav, _duration, _ease, {"left": (config.width/2) - (_pos.left)}); - - } - - /* TOUCH EVENTS - ================================================== */ - function onTouchUpdate(e, b) { - VMM.Lib.animate($timenav, b.time/2, config.ease, {"left": b.left}); - }; - - /* CALCULATIONS - ================================================== */ - var averageMarkerPositionDistance = function() { - var last_pos = 0; - var pos = 0; - var pos_dif = 0; - var mp_diff = []; - - for(var i = 0; i < markers.length; i++) { - if (data[i].type == "start") { - - } else { - var _pos = positionOnTimeline(interval, data[i].startdate, data[i].enddate); - last_pos = pos; - pos = _pos.begin; - pos_dif = pos - last_pos; - mp_diff.push(pos_dif); - } - } - return VMM.Util.average(mp_diff).mean; - } - - var averageDateDistance = function() { - var last_dd = 0; - var dd = 0; - var date_dif = 0; - var date_diffs = []; - var is_first_date = true; - - for(var i = 0; i < data.length; i++) { - if (data[i].type == "start") { - trace("DATA DATE IS START") - } else { - var _dd = data[i].startdate; - last_dd = dd; - dd = _dd; - date_dif = dd - last_dd; - - date_diffs.push(date_dif); - } - } - return VMM.Util.average(date_diffs); - } - - var calculateMultiplier = function() { - var temp_multiplier = config.nav.multiplier.current; - for(var i = 0; i < temp_multiplier; i++) { - if (averageMarkerPositionDistance() < 75) { - if (config.nav.multiplier.current > 1) { - config.nav.multiplier.current = config.nav.multiplier.current - 1; - } - } - } - } - - var calculateInterval = function() { - // NEED TO REWRITE ALL OF THIS - var _first = getDateFractions(data[0].startdate); - var _last = getDateFractions(data[data.length - 1].enddate); - - // EON - interval_calc.eon.type = "eon"; - interval_calc.eon.first = _first.eons; - interval_calc.eon.base = Math.floor(_first.eons); - interval_calc.eon.last = _last.eons; - interval_calc.eon.number = timespan.eons; - interval_calc.eon.multiplier = timelookup.eons; - interval_calc.eon.minor = timelookup.eons; - - // ERA - interval_calc.era.type = "era"; - interval_calc.era.first = _first.eras; - interval_calc.era.base = Math.floor(_first.eras); - interval_calc.era.last = _last.eras; - interval_calc.era.number = timespan.eras; - interval_calc.era.multiplier = timelookup.eras; - interval_calc.era.minor = timelookup.eras; - - // EPOCH - interval_calc.epoch.type = "epoch"; - interval_calc.epoch.first = _first.epochs; - interval_calc.epoch.base = Math.floor(_first.epochs); - interval_calc.epoch.last = _last.epochs; - interval_calc.epoch.number = timespan.epochs; - interval_calc.epoch.multiplier = timelookup.epochs; - interval_calc.epoch.minor = timelookup.epochs; - - // AGE - interval_calc.age.type = "age"; - interval_calc.age.first = _first.ages; - interval_calc.age.base = Math.floor(_first.ages); - interval_calc.age.last = _last.ages; - interval_calc.age.number = timespan.ages; - interval_calc.age.multiplier = timelookup.ages; - interval_calc.age.minor = timelookup.ages; - - // MILLENIUM - interval_calc.millenium.type = "millenium"; - interval_calc.millenium.first = _first.milleniums; - interval_calc.millenium.base = Math.floor(_first.milleniums); - interval_calc.millenium.last = _last.milleniums; - interval_calc.millenium.number = timespan.milleniums; - interval_calc.millenium.multiplier = timelookup.millenium; - interval_calc.millenium.minor = timelookup.millenium; - - // CENTURY - interval_calc.century.type = "century"; - interval_calc.century.first = _first.centuries; - interval_calc.century.base = Math.floor(_first.centuries); - interval_calc.century.last = _last.centuries; - interval_calc.century.number = timespan.centuries; - interval_calc.century.multiplier = timelookup.century; - interval_calc.century.minor = timelookup.century; - - // DECADE - interval_calc.decade.type = "decade"; - interval_calc.decade.first = _first.decades; - interval_calc.decade.base = Math.floor(_first.decades); - interval_calc.decade.last = _last.decades; - interval_calc.decade.number = timespan.decades; - interval_calc.decade.multiplier = timelookup.decade; - interval_calc.decade.minor = timelookup.decade; - - // YEAR - interval_calc.year.type = "year"; - interval_calc.year.first = _first.years; - interval_calc.year.base = Math.floor(_first.years); - interval_calc.year.last = _last.years; - interval_calc.year.number = timespan.years; - interval_calc.year.multiplier = 1; - interval_calc.year.minor = timelookup.month; - - // MONTH - interval_calc.month.type = "month"; - interval_calc.month.first = _first.months; - interval_calc.month.base = Math.floor(_first.months); - interval_calc.month.last = _last.months; - interval_calc.month.number = timespan.months; - interval_calc.month.multiplier = 1; - interval_calc.month.minor = Math.round(timelookup.week); - - // WEEK - // NOT DONE - interval_calc.week.type = "week"; - interval_calc.week.first = _first.weeks; - interval_calc.week.base = Math.floor(_first.weeks); - interval_calc.week.last = _last.weeks; - interval_calc.week.number = timespan.weeks; - interval_calc.week.multiplier = 1; - interval_calc.week.minor = 7; - - // DAY - interval_calc.day.type = "day"; - interval_calc.day.first = _first.days; - interval_calc.day.base = Math.floor(_first.days); - interval_calc.day.last = _last.days; - interval_calc.day.number = timespan.days; - interval_calc.day.multiplier = 1; - interval_calc.day.minor = 24; - - // HOUR - interval_calc.hour.type = "hour"; - interval_calc.hour.first = _first.hours; - interval_calc.hour.base = Math.floor(_first.hours); - interval_calc.hour.last = _last.hours; - interval_calc.hour.number = timespan.hours; - interval_calc.hour.multiplier = 1; - interval_calc.hour.minor = 60; - - // MINUTE - interval_calc.minute.type = "minute"; - interval_calc.minute.first = _first.minutes; - interval_calc.minute.base = Math.floor(_first.minutes); - interval_calc.minute.last = _last.minutes; - interval_calc.minute.number = timespan.minutes; - interval_calc.minute.multiplier = 1; - interval_calc.minute.minor = 60; - - // SECOND - interval_calc.second.type = "decade"; - interval_calc.second.first = _first.seconds; - interval_calc.second.base = Math.floor(_first.seconds); - interval_calc.second.last = _last.seconds; - interval_calc.second.number = timespan.seconds; - interval_calc.second.multiplier = 1; - interval_calc.second.minor = 10; - } - - var getDateFractions = function(the_date, is_utc) { - - var _time = {}; - _time.days = the_date / dateFractionBrowser.day; - _time.weeks = _time.days / dateFractionBrowser.week; - _time.months = _time.days / dateFractionBrowser.month; - _time.years = _time.months / dateFractionBrowser.year; - _time.hours = _time.days * dateFractionBrowser.hour; - _time.minutes = _time.days * dateFractionBrowser.minute; - _time.seconds = _time.days * dateFractionBrowser.second; - _time.decades = _time.years / dateFractionBrowser.decade; - _time.centuries = _time.years / dateFractionBrowser.century; - _time.milleniums = _time.years / dateFractionBrowser.millenium; - _time.ages = _time.years / dateFractionBrowser.age; - _time.epochs = _time.years / dateFractionBrowser.epoch; - _time.eras = _time.years / dateFractionBrowser.era; - _time.eons = _time.years / dateFractionBrowser.eon; - - /* - trace("AGES " + _time.ages); - trace("EPOCHS " + _time.epochs); - trace("MILLENIUMS " + _time.milleniums); - trace("CENTURIES " + _time.centuries); - trace("DECADES " + _time.decades); - trace("YEARS " + _time.years); - trace("MONTHS " + _time.months); - trace("WEEKS " + _time.weeks); - trace("DAYS " + _time.days); - trace("HOURS " + _time.hours); - trace("MINUTES " + _time.minutes); - trace("SECONDS " + _time.seconds); - */ - return _time; - } - - /* POSITION - ================================================== */ - var positionOnTimeline = function(the_interval, first, last) { - - var _type = the_interval.type; - var _multiplier = the_interval.multiplier; - - var _first = getDateFractions(first); - var _last; - - var tsd; - var ted; - /* CALCULATE POSITION ON TIMELINE - ================================================== */ - tsd = first.months; - - if (type.of(last) == "date") { - - /* LAST - ================================================== */ - _last = getDateFractions(last); - ted = last.months; - - if (_type == "eon") { - tsd = _first.eons; - ted = _last.eons; - } else if (_type == "era") { - tsd = _first.eras; - ted = _last.eras; - } else if (_type == "epoch") { - tsd = _first.epochs; - ted = _last.epochs; - } else if (_type == "age") { - tsd = _first.ages; - ted = _last.ages; - } else if (_type == "millenium") { - tsd = first.milleniums; - ted = last.milleniums; - } else if (_type == "century") { - tsd = _first.centuries; - ted = _last.centuries; - } else if (_type == "decade") { - tsd = _first.decades; - ted = _last.decades; - } else if (_type == "year") { - tsd = _first.years; - ted = _last.years; - } else if (_type == "month") { - tsd = _first.months; - ted = _last.months; - } else if (_type == "week") { - tsd = _first.weeks; - ted = _last.weeks; - } else if (_type == "day") { - tsd = _first.days; - ted = _last.days; - } else if (_type == "hour") { - tsd = _first.hours; - ted = _last.hours; - } else if (_type == "minute") { - tsd = _first.minutes; - ted = _last.minutes; - } - - _pos = ( tsd - interval.base ) * (config.nav.interval_width / config.nav.multiplier.current); - _pos_end = ( ted - interval.base ) * (config.nav.interval_width / config.nav.multiplier.current); - - } else { - if (_type == "eon") { - tsd = _first.eons; - ted = _first.eons; - } else if (_type == "era") { - tsd = _first.eras; - ted = _first.eras; - } else if (_type == "epoch") { - tsd = _first.epochs; - ted = _first.epochs; - } else if (_type == "age") { - tsd = _first.ages; - ted = _first.ages; - } else if (_type == "millenium") { - tsd = first.milleniums; - ted = first.milleniums; - } else if (_type == "century") { - tsd = _first.centuries; - ted = _first.centuries; - } else if (_type == "decade") { - tsd = _first.decades; - ted = _first.decades; - } else if (_type == "year") { - tsd = _first.years; - ted = _first.years; - } else if (_type == "month") { - tsd = _first.months; - ted = _first.months; - } else if (_type == "week") { - tsd = _first.weeks; - ted = _first.weeks; - } else if (_type == "day") { - tsd = _first.days; - ted = _first.days; - } else if (_type == "hour") { - tsd = _first.hours; - ted = _first.hours; - } else if (_type == "minute") { - tsd = _first.minutes; - ted = _first.minutes; - } - - _pos = ( tsd - interval.base ) * (config.nav.interval_width / config.nav.multiplier.current); - _pos_end = _pos; - - } - - return pos = {begin:_pos ,end:_pos_end}; - - } - - var positionMarkers = function(is_animated) { - - var _type = interval.type; - var _multiplier = interval.multiplier; - - // ROWS - var row = 2; //row - var lpos = 0; // last marker pos; - var row_depth = 0; - var _line_last_height_pos = 150; - var _line_height = 6; - var cur_mark = 0; - - VMM.Lib.removeClass(".flag", "row1"); - VMM.Lib.removeClass(".flag", "row2"); - VMM.Lib.removeClass(".flag", "row3"); - - for(var i = 0; i < markers.length; i++) { - - var _line; // EVENT LENGTH - var _marker = markers[i].marker; - var _marker_flag = markers[i].flag; - var _marker_line_event = markers[i].lineevent; - var _pos = positionOnTimeline(interval, data[i].startdate, data[i].enddate); - var _pos_offset = -2; - - pos = _pos.begin; - _pos_end = _pos.end; - - // COMPENSATE FOR DATES BEING POITIONED IN THE MIDDLE - pos = Math.round(pos + _pos_offset); - _pos_end = Math.round(_pos_end + _pos_offset); - _line = Math.round(_pos_end - pos); - - // APPLY POSITION TO MARKER - if (is_animated) { - VMM.Lib.stop(_marker); - VMM.Lib.animate(_marker, config.duration/2, config.ease, {"left": pos}); - } else { - VMM.Lib.css(_marker, "left", pos); - } - - if (i == current_marker) { - cur_mark = pos; - } - - // EVENT LENGTH LINE - if (_line > 5) { - VMM.Lib.css(_marker_line_event, "height", _line_height); - VMM.Lib.css(_marker_line_event, "width", _line); - VMM.Lib.css(_marker_line_event, "top", _line_last_height_pos); - } - - // CONTROL ROW POSITION - if (tags.length > 0) { - - for (var k = 0; k < tags.length; k++) { - trace("TAGS: " + tags[k]) - if (k < config.nav.rows.length) { - if (markers[i].tag == tags[k]) { - trace("tag match " + k); - row = k; - } - } - } - - } else { - if (pos - lpos < (config.nav.marker.width + config.spacing)) { - if (row < config.nav.rows.length - 1) { - row ++; - - } else { - row = 0; - row_depth ++; - } - } else { - row_depth = 0; - row = 0; - } - } - - - // SET LAST MARKER POSITION - lpos = pos; - - if (is_animated) { - VMM.Lib.stop(_marker_flag); - VMM.Lib.animate(_marker_flag, config.duration, config.ease, {"top": config.nav.rows[row]}); - } else { - VMM.Lib.css(_marker_flag, "top", config.nav.rows[row]); - } - - // IS THE MARKER A REPRESENTATION OF A START SCREEN? - if (config.start_page && markers[i].type == "start") { - VMM.Lib.visible(_marker, false); - } - - } - - for(var j = 0; j < era_markers.length; j++) { - var _line; - var era = era_markers[j]; - var era_elem = era.content; - var pos = positionOnTimeline(interval, era.startdate, era.enddate); - var era_length = pos.end - pos.begin; - var era_height = 25; - - // APPLY POSITION TO MARKER - VMM.Lib.css(era_elem, "left", pos.begin); - VMM.Lib.css(era_elem, "width", era_length); - } - - - // ANIMATE THE TIMELINE TO ADJUST TO CHANGES - VMM.Lib.stop($timenav); - VMM.Lib.animate($timenav, config.duration/2, config.ease, {"left": (config.width/2) - (cur_mark)}); - - - } - - var positionInterval = function(the_intervals, is_animated, is_minor) { - - var _type = interval.type; - var _multiplier = interval.multiplier; - var last_position = 0; - var last_position_major = 0; - - for(var i = 0; i < the_intervals.length; i++) { - var _interval = the_intervals[i].interval_element; - var _interval_date = the_intervals[i].interval_date; - var _interval_visible = the_intervals[i].interval_visible; - var _pos = positionOnTimeline(interval, _interval_date); - var pos = _pos.begin; - var is_visible = true; - var pos_offset = 50; - - // APPLY POSITION TO MARKER - if (is_animated) { - VMM.Lib.animate(_interval, config.duration/2, config.ease, {"left": pos}); - } else { - VMM.Lib.css(_interval, "left", pos); - } - - // CONDENSE WHAT IS DISPLAYED - if (config.nav.multiplier.current > 16 && is_minor) { - is_visible = false; - } else { - if ((pos - last_position) < 65 ) { - if ((pos - last_position) < 35 ) { - if (i%4 == 0) { - if (pos == 0) { - is_visible = false; - } - } else { - is_visible = false; - } - } else { - if (!VMM.Util.isEven(i)) { - is_visible = false; - } - } - } - } - - if (_interval_visible) { - if (!is_visible) { - if (is_animated) { - VMM.Lib.animate(_interval, config.duration*2, config.ease, {"opacity": 0}); - } else { - VMM.Lib.css(_interval, "opacity", 0); - } - the_intervals[i].interval_visible = false; - } - } else { - if (is_visible) { - if (is_animated) { - VMM.Lib.animate(_interval, config.duration*2, config.ease, {"opacity": 100}); - } else { - VMM.Lib.css(_interval, "opacity", 100); - } - the_intervals[i].interval_visible = true; - } - } - - last_position = pos; - - if (pos > config.nav.minor_width) { - config.nav.minor_width = pos; - } - - } - - VMM.Lib.css($timeintervalminor_minor, "left", -(config.width/2)); - VMM.Lib.width($timeintervalminor_minor, (config.nav.minor_width)+(config.width) ); - } - - var createIntervalElements = function(_interval, _array, _element_parent) { - - var inc_time = 0; - var _first_run = true; - var _last_pos = 0; - var _largest_pos = 0; - - VMM.attachElement(_element_parent, ""); - _interval.date = new Date(data[0].startdate.getFullYear(), 0, 1, 0,0,0); - - for(var i = 0; i < Math.ceil(_interval.number) + 1; i++) { - var _idd; - var _pos; - var pos; - var _element = VMM.appendAndGetElement(_element_parent, "
", _interval.classname); - var _date; - var _visible = false; - - if (_interval.type == "eon") { - if (_first_run) { - _interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 500000000) * 500000000 ); - } - _interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 500000000)); - } else if (_interval.type == "era") { - if (_first_run) { - _interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 100000000) * 100000000 ); - } - _interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 100000000)); - } else if (_interval.type == "epoch") { - if (_first_run) { - _interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 10000000) * 10000000 ); - } - _interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 10000000)); - } else if (_interval.type == "age") { - if (_first_run) { - _interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 1000000) * 1000000 ); - } - _interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 1000000)); - } else if (_interval.type == "millenium") { - if (_first_run) { - _interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 1000) * 1000 ); - } - _interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 1000)); - } else if (_interval.type == "century") { - if (_first_run) { - _interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 100) * 100 ); - } - _interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 100)); - } else if (_interval.type == "decade") { - if (_first_run) { - _interval.date.setFullYear( Math.floor(data[0].startdate.getFullYear() / 10) * 10 ); - } - _interval.date.setFullYear(_interval.date.getFullYear() + (inc_time * 10)); - } else if (interval.type == "year") { - if (_first_run) { - - } - _interval.date.setFullYear(_interval.date.getFullYear() + inc_time); - } else if (_interval.type == "month") { - if (_first_run) { - _interval.date.setMonth(data[0].startdate.getMonth()); - } - _interval.date.setMonth(_interval.date.getMonth() + inc_time); - } else if (_interval.type == "week") { - if (_first_run) { - _interval.date.setMonth( data[0].startdate.getMonth() ); - _interval.date.setDate( Math.floor(data[0].startdate.getDate() *7) ); - } - _interval.date.setDate(_interval.date.getDate() + (inc_time * 7) ); - } else if (_interval.type == "day") { - if (_first_run) { - _interval.date.setMonth( data[0].startdate.getMonth() ); - _interval.date.setDate( data[0].startdate.getDate() ); - } - _interval.date.setDate(_interval.date.getDate() + inc_time); - } else if (_interval.type == "hour") { - if (_first_run) { - _interval.date.setMonth( data[0].startdate.getMonth() ); - _interval.date.setDate( data[0].startdate.getDate() ); - _interval.date.setHours( data[0].startdate.getHours() ); - } - _interval.date.setHours(_interval.date.getHours() + inc_time); - } else if (_interval.type == "minute") { - if (_first_run) { - _interval.date.setMonth( data[0].startdate.getMonth() ); - _interval.date.setDate( data[0].startdate.getDate() ); - _interval.date.setHours( data[0].startdate.getHours() ); - _interval.date.setMinutes( data[0].startdate.getMinutes() ); - } - _interval.date.setMinutes(_interval.date.getMinutes() + inc_time); - } else if (_interval.type == "second") { - if (_first_run) { - _interval.date.setMonth( data[0].startdate.getMonth() ); - _interval.date.setDate( data[0].startdate.getDate() ); - _interval.date.setHours( data[0].startdate.getHours() ); - _interval.date.setMinutes( data[0].startdate.getMinutes() ); - _interval.date.setSeconds( data[0].startdate.getSeconds() ); - } - _interval.date.setSeconds(_interval.date.getSeconds() + inc_time); - } - - _idd = VMM.Util.date.prettyDate(_interval.date, true); - - inc_time = 1; - - _first_run = false; - - _pos = positionOnTimeline(_interval, _interval.date); - pos = _pos.begin; - - VMM.appendElement(_element, _idd); - - VMM.Lib.css(_element, "text-indent", -(VMM.Lib.width(_element)/2)); - VMM.Lib.css(_element, "opacity", "0"); - - _last_pos = pos; - - if (pos > _largest_pos) { - _largest_pos = pos; - } - - _date = new Date(_interval.date); - - var _obj = { - interval_element: _element, - interval_date: _date, - interval_visible: _visible, - type: _interval.interval_type - }; - - _array.push(_obj); - } - - VMM.Lib.width($timeintervalminor_minor, _largest_pos); - - positionInterval(_array); - - - } - - /* BUILD - ================================================== */ - var build = function() { - - VMM.attachElement(layout, ""); - - $timenav = VMM.appendAndGetElement(layout, "
", "timenav"); - $content = VMM.appendAndGetElement($timenav, "
", "content"); - $time = VMM.appendAndGetElement($timenav, "
", "time"); - $timeintervalminor = VMM.appendAndGetElement($time, "
", "time-interval-minor"); - $timeintervalminor_minor = VMM.appendAndGetElement($timeintervalminor, "
", "minor"); - $timeintervalmajor = VMM.appendAndGetElement($time, "
", "time-interval-major"); - $timeinterval = VMM.appendAndGetElement($time, "
", "time-interval"); - $timebackground = VMM.appendAndGetElement(layout, "
", "timenav-background"); - $timenavline = VMM.appendAndGetElement($timebackground, "
", "timenav-line"); - $timenavindicator = VMM.appendAndGetElement($timebackground, "
", "timenav-indicator"); - $timeintervalbackground = VMM.appendAndGetElement($timebackground, "
", "timenav-interval-background", "
"); - $toolbar = VMM.appendAndGetElement(layout, "
", "toolbar"); - - buildInterval(); - buildMarkers(); - calculateMultiplier(); - positionMarkers(); - positionInterval(interval_array, false, true); - positionInterval(interval_major_array); - //reSize(true); - - if (config.start_page) { - $backhome = VMM.appendAndGetElement($toolbar, "
", "back-home", "
"); - VMM.bindEvent(".back-home", onBackHome, "click"); - VMM.Lib.css($toolbar, "top", 27); - VMM.Lib.attribute($backhome, "title", VMM.master_config.language.messages.return_to_title); - VMM.Lib.attribute($backhome, "rel", "tooltip"); - - } - - $zoomin = VMM.appendAndGetElement($toolbar, "
", "zoom-in", "
"); - $zoomout = VMM.appendAndGetElement($toolbar, "
", "zoom-out", "
"); - - VMM.Lib.attribute($zoomin, "title", VMM.master_config.language.messages.expand_timeline); - VMM.Lib.attribute($zoomin, "rel", "tooltip"); - VMM.Lib.attribute($zoomout, "title", VMM.master_config.language.messages.contract_timeline); - VMM.Lib.attribute($zoomout, "rel", "tooltip"); - - $toolbar.tooltip({selector: "div[rel=tooltip]", placement: "right"}) - - // MAKE TIMELINE TOUCHABLE - if (VMM.Browser.device == "mobile" || VMM.Browser.device == "tablet") { - VMM.TouchSlider.createPanel($timebackground, $timenav, config.width, config.spacing, false); - VMM.bindEvent($timenav, onTouchUpdate, "TOUCHUPDATE"); - } else { - VMM.DragSlider.createPanel(layout, $timenav, config.width, config.spacing, false); - } - - - VMM.bindEvent(".zoom-in", onZoomIn, "click"); - VMM.bindEvent(".zoom-out", onZoomOut, "click"); - VMM.fireEvent(layout, "LOADED"); - _active = true; - - reSize(true); - - }; - - var buildInterval = function() { - - // CALCULATE INTERVAL - timespan = getDateFractions((data[data.length - 1].enddate) - (data[0].startdate), true); - trace(timespan); - calculateInterval(); - - /* DETERMINE DEFAULT INTERVAL TYPE - millenium, ages, epoch, era and eon are not working yet - ================================================== */ - /* - if (timespan.eons > data.length / config.nav.density) { - interval = interval_calc.eon; - interval_major = interval_calc.eon; - interval_macro = interval_calc.era; - } else if (timespan.eras > data.length / config.nav.density) { - interval = interval_calc.era; - interval_major = interval_calc.eon; - interval_macro = interval_calc.epoch; - } else if (timespan.epochs > data.length / config.nav.density) { - interval = interval_calc.epoch; - interval_major = interval_calc.era; - interval_macro = interval_calc.age; - } else if (timespan.ages > data.length / config.nav.density) { - interval = interval_calc.ages; - interval_major = interval_calc.epoch; - interval_macro = interval_calc.millenium; - } else if (timespan.milleniums > data.length / config.nav.density) { - interval = interval_calc.millenium; - interval_major = interval_calc.age; - interval_macro = interval_calc.century; - } else - */ - if (timespan.centuries > data.length / config.nav.density) { - interval = interval_calc.century; - interval_major = interval_calc.millenium; - interval_macro = interval_calc.decade; - } else if (timespan.decades > data.length / config.nav.density) { - interval = interval_calc.decade; - interval_major = interval_calc.century; - interval_macro = interval_calc.year; - } else if (timespan.years > data.length / config.nav.density) { - interval = interval_calc.year; - interval_major = interval_calc.decade; - interval_macro = interval_calc.month; - } else if (timespan.months > data.length / config.nav.density) { - interval = interval_calc.month; - interval_major = interval_calc.year; - interval_macro = interval_calc.day; - } else if (timespan.days > data.length / config.nav.density) { - interval = interval_calc.day; - interval_major = interval_calc.month; - interval_macro = interval_calc.hour; - } else if (timespan.hours > data.length / config.nav.density) { - interval = interval_calc.hour; - interval_major = interval_calc.day; - interval_macro = interval_calc.minute; - } else if (timespan.minutes > data.length / config.nav.density) { - interval = interval_calc.minute; - interval_major = interval_calc.hour; - interval_macro = interval_calc.second; - } else if (timespan.seconds > data.length / config.nav.density) { - interval = interval_calc.second; - interval_major = interval_calc.minute; - interval_macro = interval_calc.second; - } else { - trace("NO IDEA WHAT THE TYPE SHOULD BE"); - interval = interval_calc.day; - interval_major = interval_calc.month; - interval_macro = interval_calc.hour; - } - - trace("INTERVAL TYPE: " + interval.type); - trace("INTERVAL MAJOR TYPE: " + interval_major.type); - - createIntervalElements(interval, interval_array, $timeinterval); - createIntervalElements(interval_major, interval_major_array, $timeintervalmajor); - - } - - var buildMarkers = function() { - - var row = 2; //row - var lpos = 0; // last marker pos; - var row_depth = 0; - markers = []; - era_markers = []; - - for(var i = 0; i < data.length; i++) { - - var _marker, _marker_flag, _marker_content, _marker_dot, _marker_line, _marker_line_event; - - _marker = VMM.appendAndGetElement($content, "
", "marker"); - _marker_flag = VMM.appendAndGetElement(_marker, "
", "flag"); - _marker_content = VMM.appendAndGetElement(_marker_flag, "
", "flag-content"); - _marker_dot = VMM.appendAndGetElement(_marker, "
", "dot"); - _marker_line = VMM.appendAndGetElement(_marker, "
", "line"); - _marker_line_event = VMM.appendAndGetElement(_marker_line, "
", "event-line"); - - - // THUMBNAIL - if (data[i].asset != null && data[i].asset != "") { - VMM.appendElement(_marker_content, VMM.MediaElement.thumbnail(data[i].asset, 24, 24)); - } else { - //VMM.appendElement(_marker_content, "
"); - VMM.appendElement(_marker_content, "
"); - } - - // ADD DATE AND TITLE - VMM.appendElement(_marker_content, "

" + VMM.Util.unlinkify(data[i].title) + "

" + data[i].date + "

"); - - // ADD ID - VMM.Lib.attr(_marker, "id", (data[i].uniqueid).toString()); - - // MARKER CLICK - VMM.bindEvent(_marker_flag, onMarkerClick, "", {number: i}); - VMM.bindEvent(_marker_flag, onMarkerHover, "mouseenter mouseleave", {number: i, elem:_marker_flag}); - - var _marker_obj = { - marker: _marker, - flag: _marker_flag, - lineevent: _marker_line_event, - type: "marker", - tag: data[i].tag - }; - - - if (data[i].type == "start") { - trace("BUILD MARKER HAS START PAGE") - config.start_page = true; - _marker_obj.type = "start"; - } - - if (data[i].tag) { - tags.push(data[i].tag); - } - - markers.push(_marker_obj); - - - - } - - // CREATE TAGS - tags = VMM.Util.deDupeArray(tags); - - for(var k = 0; k < tags.length; k++) { - if (k < config.nav.rows.length) { - var tag_element = VMM.appendAndGetElement($timebackground, "
", "timenav-tag"); - VMM.Lib.addClass(tag_element, "timenav-tag-row-" + (k+1)); - VMM.appendElement(tag_element, "

" + tags[k] + "

"); - } - - } - - - - // CREATE ERAS - for(var j = 0; j < eras.length; j++) { - - var era = { - content: VMM.appendAndGetElement($content, "
", "era"), - startdate: VMM.Util.parseDate(eras[j].startDate), - enddate: VMM.Util.parseDate(eras[j].endDate), - title: eras[j].headline, - uniqueid: VMM.Util.unique_ID(4), - color: eras[j].color - }; - - VMM.Lib.attr(era.content, "id", era.uniqueid); - VMM.Lib.css(era.content, "background", era.color); - VMM.appendElement(era.content, "

" + VMM.Util.unlinkify(era.title) + "

"); - - era_markers.push(era); - - } - - } - - }; - -} - -/*********************************************** - Begin VMM.Timeline.DataObj.js -***********************************************/ - -/* TIMELINE SOURCE DATA PROCESSOR -================================================== */ - -if(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.DataObj == 'undefined') { - - VMM.Timeline.DataObj = { - - data_obj: {}, - - model_array: [], - - getData: function(raw_data) { - VMM.Timeline.DataObj.data_obj = {}; - data = VMM.Timeline.DataObj.data_obj; - - if (type.of(raw_data) == "object") { - trace("DATA SOURCE: JSON OBJECT"); - VMM.Timeline.DataObj.parseJSON(raw_data); - } else if (type.of(raw_data) == "string") { - if (raw_data.match("%23")) { - trace("DATA SOURCE: TWITTER SEARCH"); - VMM.Timeline.DataObj.model_Tweets.getData("%23medill"); - - } else if ( raw_data.match("spreadsheet") ) { - VMM.fireEvent(global, VMM.Timeline.Config.events.messege, VMM.Timeline.Config.language.messages.loading_timeline); - trace("DATA SOURCE: GOOGLE SPREADSHEET"); - VMM.Timeline.DataObj.model_GoogleSpreadsheet.getData(raw_data); - - } else { - VMM.fireEvent(global, VMM.Timeline.Config.events.messege, VMM.Timeline.Config.language.messages.loading_timeline); - trace("DATA SOURCE: JSON"); - trace("raw data" + raw_data); - VMM.getJSON(raw_data, VMM.Timeline.DataObj.parseJSON); - } - } else if (type.of(raw_data) == "html") { - trace("DATA SOURCE: HTML"); - VMM.Timeline.DataObj.parseHTML(raw_data); - } else { - trace("DATA SOURCE: UNKNOWN"); - } - - }, - - parseHTML: function(d) { - trace("parseHTML"); - trace("WARNING: THIS IS STILL ALPHA AND WILL NOT WORK WITH ID's other than #timeline"); - var _data_obj = VMM.Timeline.DataObj.data_template_obj; - - /* Timeline start slide - ================================================== */ - if (VMM.Lib.find("#timeline section", "time")[0]) { - _data_obj.timeline.startDate = VMM.Lib.html(VMM.Lib.find("#timeline section", "time")[0]); - _data_obj.timeline.headline = VMM.Lib.html(VMM.Lib.find("#timeline section", "h2")); - _data_obj.timeline.text = VMM.Lib.html(VMM.Lib.find("#timeline section", "article")); - - var found_main_media = false; - - if (VMM.Lib.find("#timeline section", "figure img").length != 0) { - found_main_media = true; - _data_obj.timeline.asset.media = VMM.Lib.attr(VMM.Lib.find("#timeline section", "figure img"), "src"); - } else if (VMM.Lib.find("#timeline section", "figure a").length != 0) { - found_main_media = true; - _data_obj.timeline.asset.media = VMM.Lib.attr(VMM.Lib.find("#timeline section", "figure a"), "href"); - } else { - //trace("NOT FOUND"); - } - - if (found_main_media) { - if (VMM.Lib.find("#timeline section", "cite").length != 0) { - _data_obj.timeline.asset.credit = VMM.Lib.html(VMM.Lib.find("#timeline section", "cite")); - } - if (VMM.Lib.find(this, "figcaption").length != 0) { - _data_obj.timeline.asset.caption = VMM.Lib.html(VMM.Lib.find("#timeline section", "figcaption")); - } - } - } - - /* Timeline Date Slides - ================================================== */ - VMM.Lib.each("#timeline li", function(i, elem){ - - var valid_date = false; - - var _date = { - "type":"default", - "startDate":"", - "headline":"", - "text":"", - "asset": - { - "media":"", - "credit":"", - "caption":"" - }, - "tags":"Optional" - }; - - if (VMM.Lib.find(this, "time") != 0) { - - valid_date = true; - - _date.startDate = VMM.Lib.html(VMM.Lib.find(this, "time")[0]); - - if (VMM.Lib.find(this, "time")[1]) { - _date.endDate = VMM.Lib.html(VMM.Lib.find(this, "time")[1]); - } - - _date.headline = VMM.Lib.html(VMM.Lib.find(this, "h3")); - - _date.text = VMM.Lib.html(VMM.Lib.find(this, "article")); - - var found_media = false; - if (VMM.Lib.find(this, "figure img").length != 0) { - found_media = true; - _date.asset.media = VMM.Lib.attr(VMM.Lib.find(this, "figure img"), "src"); - } else if (VMM.Lib.find(this, "figure a").length != 0) { - found_media = true; - _date.asset.media = VMM.Lib.attr(VMM.Lib.find(this, "figure a"), "href"); - } else { - //trace("NOT FOUND"); - } - - if (found_media) { - if (VMM.Lib.find(this, "cite").length != 0) { - _date.asset.credit = VMM.Lib.html(VMM.Lib.find(this, "cite")); - } - if (VMM.Lib.find(this, "figcaption").length != 0) { - _date.asset.caption = VMM.Lib.html(VMM.Lib.find(this, "figcaption")); - } - } - - trace(_date); - _data_obj.timeline.date.push(_date); - - } - - }); - - VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj); - - }, - - parseJSON: function(d) { - if (d.timeline.type == "default") { - - trace("DATA SOURCE: JSON STANDARD TIMELINE"); - VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, d); - - } else if (d.timeline.type == "twitter") { - - trace("DATA SOURCE: JSON TWEETS"); - VMM.Timeline.DataObj.model_Tweets.buildData(d); - - } else { - - trace("DATA SOURCE: UNKNOWN JSON"); - trace(type.of(d.timeline)); - - }; - }, - - /* MODEL OBJECTS - New Types of Data can be formatted for the timeline here - ================================================== */ - - model_Tweets: { - - type: "twitter", - - buildData: function(raw_data) { - VMM.bindEvent(global, VMM.Timeline.DataObj.model_Tweets.onTwitterDataReady, "TWEETSLOADED"); - VMM.ExternalAPI.twitter.getTweets(raw_data.timeline.tweets); - }, - - getData: function(raw_data) { - VMM.bindEvent(global, VMM.Timeline.DataObj.model_Tweets.onTwitterDataReady, "TWEETSLOADED"); - VMM.ExternalAPI.twitter.getTweetSearch(raw_data); - }, - - onTwitterDataReady: function(e, d) { - var _data_obj = VMM.Timeline.DataObj.data_template_obj; - - for(var i = 0; i < d.tweetdata.length; i++) { - - var _date = { - "type":"tweets", - "startDate":"", - "headline":"", - "text":"", - "asset": - { - "media":"", - "credit":"", - "caption":"" - }, - "tags":"Optional" - }; - // pass in the 'created_at' string returned from twitter // - // stamp arrives formatted as Tue Apr 07 22:52:51 +0000 2009 // - - //var twit_date = VMM.ExternalAPI.twitter.parseTwitterDate(d.tweetdata[i].raw.created_at); - //trace(twit_date); - - _date.startDate = d.tweetdata[i].raw.created_at; - - if (type.of(d.tweetdata[i].raw.from_user_name)) { - _date.headline = d.tweetdata[i].raw.from_user_name + " (" + "@" + d.tweetdata[i].raw.from_user + ")" ; - } else { - _date.headline = d.tweetdata[i].raw.user.name + " (" + "@" + d.tweetdata[i].raw.user.screen_name + ")" ; - } - - _date.asset.media = d.tweetdata[i].content; - _data_obj.timeline.date.push(_date); - - }; - - VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj); - } - }, - - model_GoogleSpreadsheet: { - // TEMPLATE CAN BE FOUND HERE - // https://docs.google.com/previewtemplate?id=0AppSVxABhnltdEhzQjQ4MlpOaldjTmZLclQxQWFTOUE&mode=public - type: "google spreadsheet", - - - getData: function(raw_data) { - - var _key = VMM.Util.getUrlVars(raw_data)["key"]; - var _url = "https://spreadsheets.google.com/feeds/list/" + _key + "/od6/public/values?alt=json"; - - VMM.getJSON(_url, VMM.Timeline.DataObj.model_GoogleSpreadsheet.buildData); - }, - - buildData: function(d) { - VMM.fireEvent(global, VMM.Timeline.Config.events.messege, "Parsing Data"); - var _data_obj = VMM.Timeline.DataObj.data_template_obj; - - for(var i = 0; i < d.feed.entry.length; i++) { - var dd = d.feed.entry[i]; - - if (dd.gsx$titleslide.$t.match("start")) { - _data_obj.timeline.startDate = dd.gsx$startdate.$t; - _data_obj.timeline.headline = dd.gsx$headline.$t; - _data_obj.timeline.asset.media = dd.gsx$media.$t; - _data_obj.timeline.asset.caption = dd.gsx$mediacaption.$t; - _data_obj.timeline.asset.credit = dd.gsx$mediacredit.$t; - _data_obj.timeline.text = dd.gsx$text.$t; - _data_obj.timeline.type = "google spreadsheet"; - } else { - var _date = { - "type": "google spreadsheet", - "startDate": dd.gsx$startdate.$t, - "endDate": dd.gsx$enddate.$t, - "headline": dd.gsx$headline.$t, - "text": dd.gsx$text.$t, - "asset": { - "media": dd.gsx$media.$t, - "credit": dd.gsx$mediacredit.$t, - "caption": dd.gsx$mediacaption.$t - }, - "tags": "Optional" - }; - if (dd.gsx$tag.$t) { - _date.tag = dd.gsx$tag.$t; - trace("TAG " + _date.tag); - } - _data_obj.timeline.date.push(_date); - } - }; - - VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj); - - } - - }, - - /* TEMPLATE OBJECTS - ================================================== */ - data_template_obj: { "timeline": { "headline":"", "description":"", "asset": { "media":"", "credit":"", "caption":"" }, "date": [] } }, - date_obj: {"startDate":"2012,2,2,11,30", "headline":"", "text":"", "asset": {"media":"http://youtu.be/vjVfu8-Wp6s", "credit":"", "caption":"" }, "tags":"Optional"} - - }; - -}