Showing preview only (957K chars total). Download the full file or copy to clipboard to get everything.
Repository: NUKnightLab/TimelineJS
Branch: master
Commit: f1f59d304db1
Files: 195
Total size: 22.0 MB
Directory structure:
gitextract_abbcag5e/
├── .gitignore
├── .gitmodules
├── CHANGELOG
├── DEVELOPER.md
├── LICENSE
├── README.markdown
├── bower.json
├── config.json
├── examples/
│ ├── README.md
│ ├── example_googlespreadsheet.html
│ ├── example_jquery_load.html
│ ├── example_json.html
│ ├── example_json.json
│ ├── example_jsonp.html
│ ├── example_jsonp.jsonp
│ ├── example_storify.html
│ ├── model.json
│ └── model.jsonp
├── fabfile.py
├── requirements.txt
├── source/
│ ├── embed/
│ │ └── index.html
│ ├── gfx/
│ │ ├── timeline-dark.psd
│ │ ├── timeline-dark@2x.psd
│ │ ├── timeline.psd
│ │ └── timeline@2x.psd
│ ├── js/
│ │ ├── Core/
│ │ │ ├── .gitignore
│ │ │ ├── Core/
│ │ │ │ ├── VMM.Browser.js
│ │ │ │ ├── VMM.Core.js
│ │ │ │ ├── VMM.Date.js
│ │ │ │ ├── VMM.FileExtention.js
│ │ │ │ ├── VMM.Library.js
│ │ │ │ ├── VMM.LoadLib.js
│ │ │ │ ├── VMM.Util.js
│ │ │ │ └── VMM.js
│ │ │ ├── Embed/
│ │ │ │ ├── Embed.CDN.Generator.js
│ │ │ │ ├── Embed.CDN.js
│ │ │ │ ├── Embed.LoadLib.js
│ │ │ │ └── Embed.js
│ │ │ ├── LICENSE
│ │ │ ├── Language/
│ │ │ │ ├── VMM.Language.js
│ │ │ │ └── locale/
│ │ │ │ ├── af.js
│ │ │ │ ├── ar.js
│ │ │ │ ├── be.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cz.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de.js
│ │ │ │ ├── el.js
│ │ │ │ ├── en-24hr.js
│ │ │ │ ├── en-week.js
│ │ │ │ ├── en.js
│ │ │ │ ├── eo.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fo.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── fy.js
│ │ │ │ ├── ga.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── hy.js
│ │ │ │ ├── id.js
│ │ │ │ ├── is.js
│ │ │ │ ├── it.js
│ │ │ │ ├── iw.js
│ │ │ │ ├── ja.js
│ │ │ │ ├── ka.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── lb.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── ms.js
│ │ │ │ ├── ne.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── no.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-br.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── rm.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── si.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sl.js
│ │ │ │ ├── sr-cy.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── ta.js
│ │ │ │ ├── te.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tl.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── zh-cn.js
│ │ │ │ └── zh-tw.js
│ │ │ ├── Library/
│ │ │ │ ├── AES.js
│ │ │ │ ├── LazyLoad.js
│ │ │ │ ├── Leaflet.js
│ │ │ │ ├── bootstrap-tooltip.js
│ │ │ │ └── jQuery/
│ │ │ │ └── easing.js
│ │ │ ├── Media/
│ │ │ │ ├── VMM.ExternalAPI.js
│ │ │ │ ├── VMM.Media.js
│ │ │ │ ├── VMM.MediaElement.js
│ │ │ │ ├── VMM.MediaType.js
│ │ │ │ └── VMM.TextElement.js
│ │ │ ├── README.md
│ │ │ ├── Slider/
│ │ │ │ ├── VMM.DragSlider.js
│ │ │ │ ├── VMM.Slider.Slide.js
│ │ │ │ └── VMM.Slider.js
│ │ │ └── VMM.StoryJS.js
│ │ ├── VMM.Timeline.DataObj.js
│ │ ├── VMM.Timeline.Min.js
│ │ ├── VMM.Timeline.TimeNav.js
│ │ └── VMM.Timeline.js
│ └── less/
│ ├── Core/
│ │ ├── .gitignore
│ │ ├── Font/
│ │ │ ├── AbrilFatface-Average.less
│ │ │ ├── Arvo-PTSans.less
│ │ │ ├── Bevan-PotanoSans.less
│ │ │ ├── BreeSerif-OpenSans.less
│ │ │ ├── DroidSerif-DroidSans.less
│ │ │ ├── Georgia-Helvetica.less
│ │ │ ├── Lekton-Molengo.less
│ │ │ ├── Lora-Istok.less
│ │ │ ├── Merriweather-NewsCycle.less
│ │ │ ├── NewsCycle-Merriweather.less
│ │ │ ├── NixieOne-Ledger.less
│ │ │ ├── PT.less
│ │ │ ├── PTSerif-PTSans.less
│ │ │ ├── Pacifico-Arimo.less
│ │ │ ├── PlayfairDisplay-Muli.less
│ │ │ ├── PoiretOne-Molengo.less
│ │ │ ├── Rancho-Gudea.less
│ │ │ └── SansitaOne-Kameron.less
│ │ ├── Font.Default.less
│ │ ├── GFX.less
│ │ ├── LICENSE
│ │ ├── Mixins.less
│ │ ├── README.md
│ │ ├── Reset.less
│ │ ├── Typography.less
│ │ ├── VMM.Core.less
│ │ ├── VMM.Slider.less
│ │ ├── VMM.Tooltip.less
│ │ └── Variables.less
│ ├── Theme/
│ │ └── Dark.less
│ ├── VMM.Timeline.TimeNav.less
│ └── VMM.Timeline.less
├── tests/
│ ├── test_extra_html.html
│ ├── test_extra_html.json
│ ├── test_googlespreadsheet.html
│ ├── test_googlespreadsheet_bc_era_ages_epoch.html
│ ├── test_googlespreadsheet_biblical_ad.html
│ ├── test_googlespreadsheet_minutes.html
│ ├── test_iframe_640.html
│ ├── test_jsonp.html
│ ├── test_utc_firefox.html
│ └── test_utc_firefox.json
└── website/
├── __init__.py
├── app.py
├── core/
│ ├── __init__.py
│ └── settings/
│ ├── __init__.py
│ ├── base.py
│ └── loc.py
├── static/
│ ├── css/
│ │ └── site.css
│ ├── img/
│ │ └── .gitignore
│ ├── js/
│ │ ├── .gitignore
│ │ ├── main.js
│ │ └── story-timeline.js
│ └── welcome/
│ └── welcome.json
└── templates/
├── _about.html
├── _demo.html
├── _description.html
├── _developers.html
├── _examples.html
├── _help.html
├── _make.html
├── _overview.html
├── base.html
├── error.html
├── examples/
│ ├── example.json
│ ├── houston/
│ │ ├── data.json
│ │ └── index.html
│ ├── republican/
│ │ └── index.html
│ ├── shit-people-say/
│ │ ├── data.json
│ │ └── index.html
│ └── user-interface/
│ ├── data.json
│ └── index.html
└── index.html
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.DS_Store
.DS_Store*
dev_examples/
cdn/
compiled
*.tmproj
*.tmproject
tmtags
source/gfx/Sprites/
/node_modules
*.pyc
codekit-config.json
build
================================================
FILE: .gitmodules
================================================
================================================
FILE: CHANGELOG
================================================
2.35.6 (2015-03-25)
------
Restore original animation/easing (revert pull #681)
2.35.5 (2015-02-26)
------
#672,679,681,683 a series of presentation/performance tweaks from @acdha
Fix auto-linking regression
2.35.4 (2015-02-17)
------
Fix Stamen map tile URL bug
2.35.3 (2015-02-17)
------
#673 Update Taiwanese locale
#689 Update Thai locale
#693 Update Polish locale
#705 Frisian localization
#722 Support 'youtubeTheme' config option
#732 Updated German Translations
#733 Move "Swipe to Navigate" to I18N. Now we need translations for 55 languages!
#744 Hindi localization
#745 Update Icelandic date formats
#749 Irish localization
#762 Belarusian localization
2.35.2 (2014-11-24)
------
fix half-width bug on small displays
2.35.1 (2014-11-19)
------
#719 whackamole with JS dates
2.35.0 (2014-11-19)
------
#718 Issue with dates in 1970 in GMT/BST time zones
2.34.1
------
#710 fix regression from #706 re IE https
#709 retina image for loading.gif (even though we don't use it)
2.34.0
------
Remove HTTPS URL rewriting for older IE.
don't do analytics on https
Check to make sure that every slide has a start date, so that people get a clear warning if the spreadsheet header has been changed.
fix jquery version check, again. (should accept jquery 2, although TimelineJS has not been tested with jquery 2) cf. #551
Update ko.js translation file
Update fa.js
2.33.1
------
Fix bug in handling maps.google URLs
Update zh-cn localization file.
2.33.0
------
#638 (WIP) better handle new-format Google Maps URLs
#597 parse new-format Google Spreadsheet URLs correctly
(no ticket) Support "W" as date format token for "week" based on existing getWeek add on to Date.prototype
#632 Accept *.bmp as image URL in media field
#631 Add bower file
#589 remove unused code that refers to non-existent modules
#526 fix jQuery version check so 1.10.x > 1.9.x
#529 fix untagify to remove closing tags as well
#567 be more permissive about iframe markup
#512 fix Dark.css theme even though themes are generally not supported
#520 treat Streetview API urls as images, not maps
#536 fix typo in README.md
#623 set maxheight on soundcloud embeds
#624 'crush' pngs
#625 deal with nutty MSIE user agent strings
2.32.0
------
Stop YouTube players when slide changes
Better method for determining embed path root
Check for iframe and blockquote media before other url tests
Add languages: 'hr' (Croatian), 'uk' (Ukrainian)
minor fixes to language files for 'fi' (Finnish) 'sl' (Slovenian)
2.31.0
------
Add languages: 'ro' (Romanian), 'th' (Thai)
minor fixes to language files for 'es' (Spanish) 'fa' (Farsi), 'hu' (Hungarian), 'no' (Norwegian)
add OpenStreetMap as a map option ('osm')
Support '.svg' as an image media type
support custom thumbnails when no media is specified
clearer warning about "compatibility mode" to IE users.
2.30.0
------
Fix language code for 'zh-cn' (Chinese)
add 'fa' (Farsi)
Move 'remove' function from Array.prototype to a util method to avoid adverse affects on other JS code.
2.26.2
-----
* Start a CHANGELOG
* Change embed HTML to dynamically set the embed path, to support use over https
================================================
FILE: DEVELOPER.md
================================================
## Requirements
python 2.7.x
[virtualenvwrapper](http://virtualenvwrapper.readthedocs.org/)
[Node.js](http://nodejs.org)
[LESS](http://lesscss.org)
# npm install -g less
[UglifyJS](https://github.com/mishoo/UglifyJS)
# npm install -g uglify-js@">=2.4"
## Setup
# Change into the parent directory containing your repositories
cd path_to_repos_root
# Clone the secrets repository (if necessary)
git clone git@github.com:NUKnightLab/secrets.git
# Clone KnightLab support repositories (General public, you can skip this step)
git clone git@github.com:NUKnightLab/cdn.knightlab.com.git
git clone git@github.com:NUKnightLab/fablib.git
# Clone the timeline repository (and the submodules)
git clone --recursive git@github.com:NUKnightLab/TimelineJS.git
# Change into the timeline repository
cd TimelineJS
# Create a virtual environment
mkvirtualenv TimelineJS
# Activate the virtual environment
workon TimelineJS
# Install python requirements
pip install -r requirements.txt
# Run the development server.
fab serve
# Re-compile to preview changes. Of course this will need to be in another terminal, or after the fab serve command was put in the
# background. It would be great to automate this, but we would like to not add another build system and haven't figured out how to
# do it with fabric. Pull requests are welcome!
fab build
## Overview
Files in the `source` directory are resources for deployment to the CDN.
Files in the `website` directory are specific to the website.
`config.json` is used to control building, staging, and deployment
## Updating the documentation site
Documentation site files are in the `website` directory. To review your edits locally, run `fab serve` to start a local server on [http://localhost:5000](http://localhost:5000).
## Deploying updates to the documentation site (timeline.knightlab.com)
To deploy to S3, type `fab deploy`.
## Adding support for a new language
* Add the file with the correct ISO-639 language code name in the `source/js/Core/Language/locale` directory.
* Update website/templates/_make.html to refer to the new file (remember to sort alphabetically by language name, not code)
* create a test timeline using the new language to verify that it basically works
* deploy a new version (don't forget to stage_wp)
* update knightlab-timeline.php in the TimelineJS-Wordpress-Plugin repo and release that too.
## Deploying javascript changes to the CDN
To stage your changes to a versioned directory in your local CDN repository, type `fab stage` You will be prompted for the new version number. After you provide it, this `fab stage` runs a build, copies the files into a versioned directory in your local `cdn.knightlab.com` repository, and tags the last commit with a version number.
To stage your changes to the `latest` directory in your local CDN repository, type `fab stage_latest` You will be prompted for which version number you want to stage as the 'latest' version on the CDN. This copies files from the directory with that version in your local `cdn.knightlab.com` respository into the corresponding `latest` directory -- so you will have to have used `fab stage` before this.
You must push and deploy all CDN changes separately from that repository. Don't forget to edit the index page there until we work out some automated index building system.
================================================
FILE: LICENSE
================================================
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
-------------------------------------------
Map tiles by [Stamen Design](http://stamen.com "Stamen Design"), under
[CC BY 3.0](http://creativecommons.org/licenses/by/3.0 "CC BY 3.0").
Data by [OpenStreetMap](http://openstreetmap.org "OpenStreetMap"),
under [CC BY SA](http://creativecommons.org/licenses/by-sa/3.0 "CC BY SA").
================================================
FILE: README.markdown
================================================
# This Version of Timeline is no longer under development
Therefore, GitHub issues and pull requests have been disabled.
Knight Lab has created a new version at https://github.com/NUKnightLab/TimelineJS3 . The new library should work with existing Google Spreadsheets, but not existing TimelineJS JSON files. The new version of TimelineJS requires a new JSON format, and there is no direct conversion tool, although it should not be too complicated to manually or programatically convert an old JSON file.
Knight Lab will continue to serve this version of Timeline from
* https://cdn.knightlab.com/libs/timeline/latest/js/timeline-min.js
* https://cdn.knightlab.com/libs/timeline/latest/js/timeline.js
* https://cdn.knightlab.com/libs/timeline/latest/css/timeline.css
However, no future development on this line of code is planned.
----
**Table of Contents**
- [TimelineJS](#timelinejs)
- [Document history with TimelineJS](#document-history-with-timelinejs)
- [Add it to your site](#add-it-to-your-site)
- [Using Inline (easiest)](#using-inline-easiest)
- [Using a method (advanced)](#using-a-method-advanced)
- [Loading the files](#loading-the-files)
- [Config Options](#config-options)
- [Language](#language)
- [Start at End](#start-at-end)
- [Start at Slide](#start-at-slide)
- [Start Zoom Adjust](#start-zoom-adjust)
- [Hash Bookmark](#hash-bookmark)
- [Debug](#debug)
- [Map Style Types](#map-style-types)
- [Font Options](#font-options)
- [Font Combination Preview:](#font-combination-preview)
- [File Formats](#file-formats)
- [JSON:](#json)
- [JSONP :](#jsonp-)
- [Google Docs:](#google-docs)
- [Storify:](#storify)
- [Media](#media)
- [Best practices](#best-practices)
- [License](#license)
# TimelineJS
## Document history with TimelineJS
There are lots of timeline tools on the web but they are almost all either
hard on the eyes or hard to use. Create timelines that are at the same time
beautiful and intuitive for users
TimelineJS is great for pulling in media from different sources. Just throw in a
link from Twitter, YouTube, Flickr, Vimeo, Google Maps or SoundCloud and
TimelineJS will format it to fit perfectly. More media types will be supported
in the future.
Creating one is as easy as filling in a Google spreadsheet or as detailed as
JSON.
## Add it to your site
### Using Inline (*easiest*)
Place the embed code where you want the timeline to show in the `<body>` of your site. See [Config Options](#config-options) for a full list of what you can set in the config.
```html
<div id="timeline-embed"></div>
<script type="text/javascript">
var timeline_config = {
width: '100%',
height: '600',
source: 'path_to_json/or_link_to_googlespreadsheet',
embed_id: 'timeline-embed', //OPTIONAL USE A DIFFERENT DIV ID FOR EMBED
start_at_end: false, //OPTIONAL START AT LATEST DATE
start_at_slide: '4', //OPTIONAL START AT SPECIFIC SLIDE
start_zoom_adjust: '3', //OPTIONAL TWEAK THE DEFAULT ZOOM LEVEL
hash_bookmark: true, //OPTIONAL LOCATION BAR HASHES
font: 'Bevan-PotanoSans', //OPTIONAL FONT
debug: true, //OPTIONAL DEBUG TO CONSOLE
lang: 'fr', //OPTIONAL LANGUAGE
maptype: 'watercolor', //OPTIONAL MAP STYLE
css: 'path_to_css/timeline.css', //OPTIONAL PATH TO CSS
js: 'path_to_js/timeline-min.js' //OPTIONAL PATH TO JS
}
</script>
<script type="text/javascript" src="https://cdn.knightlab.com/libs/timeline/latest/js/storyjs-embed.js"></script>
```
### Using a method (*advanced*)
You could also initialize a new timeline using the `createStoryJS` method after `storyjs-embed.js` has been loaded
```javascript
createStoryJS({
type: 'timeline',
width: '800',
height: '600',
source: 'path_to_json/or_link_to_googlespreadsheet',
embed_id: 'my-timeline' // ID of the DIV you want to load the timeline into
});
```
Here's a simple example:
```html
<head>
<!-- jQuery -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- BEGIN TimelineJS -->
<script type="text/javascript" src="https://cdn.knightlab.com/libs/timeline/latest/js/storyjs-embed.js"></script>
<script>
$(document).ready(function() {
createStoryJS({
type: 'timeline',
width: '800',
height: '600',
source: 'path_to_json/or_link_to_googlespreadsheet',
embed_id: 'my-timeline'
});
});
</script>
<!-- END TimelineJS -->
</head>
<body>
<div id="my-timeline"></div>
</body>
```
### Loading the files
If you like, you may load TimelineJS from the KnightLab's CDN. The examples above demonstrate how to do this using `story-embed.js`, which is the simplest way to set up a Timeline of your own.
If for some reason you need more fine-grained control over your timeline, load the javascript and CSS files separately. We recommend that you load them from our CDN.
```html
<!-- always load the CSS -->
<link rel="stylesheet" type="text/css" href="https://cdn.knightlab.com/libs/timeline/latest/css/timeline.css">
<!-- and then one of either -->
<script type="text/javascript" src="https://cdn.knightlab.com/libs/timeline/latest/js/timeline.js"></script>
<!-- or -->
<script type="text/javascript" src="https://cdn.knightlab.com/libs/timeline/latest/js/timeline-min.js"></script>
<!-- but no need for both -->
```
If you need to serve copies of the files from your own server, use the entire contents of the ["/build/" directory](https://github.com/NUKnightLab/TimelineJS/tree/master/build) of our GitHub repository. If you use a local copy of `story-embed.js` it should automatically load the other Timeline resources from your server.
## Config Options
Here are some of the options you can set in the config.
### Source
`source` Should be either the path to the JSON resource to load, or a JavaScript
object corresponding to the Timeline model.
Here is an example using a data object:
```javascript
var dataObject = {timeline: {headline: "Headline", type: ... }}
createStoryJS({
type: 'timeline',
width: '800',
height: '600',
source: dataObject,
embed_id: 'my-timeline'
});
```
If source is a string, we will try to automatically recognize resources that are
Twitter searches, Google Spreadsheets or Storify stories. Failing that, we assume
the source is either JSON or JSONP. If string matches on `.jsonp`, we will treat it
as JSONP, otherwise, we will append `?callback=onJSONP_Data`. See more details below.
### Language
`lang`
Localization
*default is `en` English*
Languages available:
* `af` *Afrikaans*
* `ar` *Arabic*
* `hy` *Armenian*
* `eu` *Basque*
* `be` *Belarusian*
* `bg` *Bulgarian*
* `ca` *Catalan*
* `zh-cn` *Chinese*
* `hr` *Croatian / Hrvatski*
* `cz` *Czech*
* `da` *Danish*
* `nl` *Dutch*
* `en` *English*
* `en-24hr` *English (24-hour time)*
* `eo` *Esperanto*
* `et` *Estonian*
* `fo` *Faroese*
* `fa` *Farsi*
* `fi` *Finnish*
* `fr` *French*
* `fy` *Frisian*
* `gl` *Galician*
* `ka` *Georgian*
* `de` *German / Deutsch*
* `el` *Greek*
* `he` *Hebrew*
* `hi` *Hindi*
* `hu` *Hungarian*
* `is` *Icelandic*
* `id` *Indonesian*
* `ga` *Irish*
* `it` *Italian*
* `ja` *Japanese*
* `ko` *Korean*
* `lv` *Latvian*
* `lt` *Lithuanian*
* `lb` *Luxembourgish*
* `ms` *Malay*
* `ne` *Nepali*
* `no` *Norwegian*
* `pl` *Polish*
* `pt` *Portuguese*
* `pt-br` *Portuguese (Brazilian)*
* `ro` *Romanian*
* `rm` *Romansh*
* `ru` *Russian*
* `sr-cy` *Serbian - Cyrillic*
* `sr` *Serbian - Latin*
* `si` *Sinhalese*
* `sk` *Slovak*
* `sl` *Slovenian*
* `es` *Spanish*
* `sv` *Swedish*
* `tl` *Tagalog*
* `ta` *Tamil*
* `zh-tw` *Taiwanese*
* `te` *Telugu*
* `th` *Thai*
* `tr` *Turkish*
* `uk` *Ukrainian*
Help us add more. Grab a copy of a language file and replace it with your language [Example language file](https://github.com/NUKnightLab/TimelineJS/blob/master/source/js/Core/Language/locale/en.js) and find your language's [two letter code here](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
###Start at End
`start_at_end`
set to true to start the timeline on the last date.
*default is false*
###Start at Slide
`start_at_slide`
You can tell TimelineJS to start at a specific slide number
*default is 0*
###Start Zoom Adjust
`start_zoom_adjust`
This will tweak the default zoom level. Equivalent to pressing the zoom in or zoom out button the specified number of times. Negative numbers zoom out.
*default is 0*
###Hash Bookmark
`hash_bookmark`
set to true to allow bookmarking slides using the hash tag
*default is false*
###Debug
`debug`
Will log events etc to the console.
*default is false*
###Map Style Types
Due to recent changes to the Google Maps API, you need a [API Key](https://developers.google.com/places/documentation/#Authentication) in order to use custom map types.
`gmap_key:`
*required in order to use maptype*
`maptype:`
* [Stamen Maps ](http://maps.stamen.com)
* `toner`
* `toner-lines`
* `toner-labels`
* `watercolor`
* `sterrain`
* Google Maps
* `ROADMAP`
* `TERRAIN`
* `HYBRID`
* `SATELLITE`
* OpenStreetMap
- `osm`
###Font Options
`font:`
* `AbrilFatface-Average` *Abril Fatface & Average*
* `Arvo-PTSans` *Arvo & PT Sans*
* `Bevan-PotanoSans` *Bevan & Potano Sans*
* `BreeSerif-OpenSans` *Bree Serif & Open Sans*
* `DroidSerif-DroidSans` *Droid Serif & Droid Sans*
* `Georgia-Helvetica` *Georgia & Helvetica Neue*
* `Lekton-Molengo` *Lekton & Molengo*
* `Merriweather-NewsCycle` *Merriweather & News Cycle*
* `NewsCycle-Merriweather` *News Cycle & Merriweather*
* `NixieOne-Ledger` *Nixie One & Ledger*
* `Pacifico-Arimo` *Pacifico & Arimo*
* `PlayfairDisplay-Muli` *Playfair Display & Muli*
* `PoiretOne-Molengo` *Poiret One & Molengo*
* `PTSerif-PTSans` *PT Serif & PT Sans*
* `PT` *PT Sans & PT Narrow & PT Serif*
* `Rancho-Gudea` *Rancho & Gudea*
* `SansitaOne-Kameron` *Sansita One & Kameron*
* Or make your own
####Font Combination Preview:

## File Formats
### JSON:
JSON is the native data format for TimelineJS.
Remember, JSON is picky. A misplaced comma or quotation mark can
prevent the timeline from loading properly.
Here is the full model:
```javascript
{
"timeline":
{
"headline":"The Main Timeline Headline Goes here",
"type":"default",
"text":"<p>Intro body text goes here, some HTML is ok</p>",
"asset": {
"media":"http://yourdomain_or_socialmedialink_goes_here.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
},
"date": [
{
"startDate":"2011,12,10,07,02,10",
"endDate":"2011,12,11,08,11",
"headline":"Headline Goes Here",
"text":"<p>Body text goes here, some HTML is OK</p>",
"tag":"This is Optional",
"classname":"optionaluniqueclassnamecanbeaddedhere",
"asset": {
"media":"http://twitter.com/ArjunaSoriano/status/164181156147900416",
"thumbnail":"optional-32x32px.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
}
}
],
"era": [
{
"startDate":"2011,12,10",
"endDate":"2011,12,11",
"headline":"Headline Goes Here",
"text":"<p>Body text goes here, some HTML is OK</p>",
"tag":"This is Optional"
}
]
}
}
```
### JSONP :
Timeline can use a variation of JSONP to allow you to easily load data across different domains.
To allow this to happen, the file must end with the extension `.jsonp`
Here is the full model:
```javascript
storyjs_jsonp_data = {
"timeline":
{
"headline":"The Main Timeline Headline Goes here",
"type":"default",
"text":"<p>Intro body text goes here, some HTML is ok</p>",
"asset": {
"media":"http://yourdomain_or_socialmedialink_goes_here.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
},
"date": [
{
"startDate":"2011,12,10",
"endDate":"2011,12,11",
"headline":"Headline Goes Here",
"text":"<p>Body text goes here, some HTML is OK</p>",
"tag":"This is Optional",
"classname":"optionaluniqueclassnamecanbeaddedhere",
"asset": {
"media":"http://twitter.com/ArjunaSoriano/status/164181156147900416",
"thumbnail":"optional-32x32px.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
}
}
],
"era": [
{
"startDate":"2011,12,10",
"endDate":"2011,12,11",
"headline":"Headline Goes Here",
"tag":"This is Optional"
}
]
}
}
```
### Google Docs:
If you don’t want to mess with JSON, fire up Google Docs and build your
timeline in a spreadsheet. It’s as simple as dropping a date, text, and links
into the appropriate columns in TimelineJS’s template.
You can find the template here: [TimelineJS Google Spreadsheet Template](https://drive.google.com/previewtemplate?id=0AppSVxABhnltdEhzQjQ4MlpOaldjTmZLclQxQWFTOUE&mode=public&pli=1#)
There are only a couple things you need to know in order to create a timeline
using Google Docs:
1. Make the spreadsheet public:
Google Docs are automatically set to private but the spreadsheet must be
public.
Click the blue “Share” button on the top right-hand corner. In the “Share
settings” window, you’ll see the private setting of the spreadsheet: click
“Change...”. In the Visibility options window, choose “Public on the Web” and
save.
2. Publish to the Web
Under the File menu, select “Publish to the Web.”
In the next window, check the box next to “Automatically republish when
changes are made.” Uncheck all other boxes. Click “start publishing.” This
will give you the URL to embed in your HTML file.
3. Copy/paste the Web URL into your TimelineJS HTML file
After you publish the spreadsheet, Google Docs will generate a link to the
file. Copy the link for the Web Page option (as opposed to PDF, HTML, XLS,
etc.), then paste it into the timeline’s HTML file (see [Add it to your site](#add-it-to-your-site) )
### Storify:
Support for Storify is still in its early stages. It works though. Just paste a link to the storify story as the source.
## Media
Included in the zip file is a kitchen sink example. This timeline shows how to
incorporate the different media types from different services like Twitter,
YouTube, Flickr, Instagram, TwitPic, Wikipedia, Dailymotion, SoundCloud and Vimeo.
Just copy and paste the address of the media from the browser bar
into the media parameter. TimelineJS will auto-magically pull in the media via their api and
format it.
## Best practices
Tips and tricks to best utilize TimelineJS
1. Keep it light - don’t get bogged down by text or other elements
2. Pick stories that have a strong chronological narrative. It does not work well for stories that need to jump around in the timeline.
3. Include events that build up to major occurrences, not just the major events.
4. Don't overwhelm the user. A timeline with hundreds of events is probably not the best use of the format.
## License
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
================================================
FILE: bower.json
================================================
{
"name": "TimelineJS",
"version": "2.32.0",
"homepage": "http://timeline.knightlab.com",
"authors": [
"Zach Wise <zach@digitalartwork.net>",
"NUKnightLab"
],
"description": "A Storytelling Timeline built in JavaScript.",
"main": [
"build/js/timeline.js",
"build/css/timeline.css",
"build/embed/index.html",
"build/js/storyjs-embed.js",
"build/js/storyjs-embed-generator.js",
"build/js/storyjs-embed-cdn.js"
],
"keywords": [
"timeline",
"storytelling",
"timelinejs",
"timeline.js",
"history",
"googledocs",
"storify"
],
"repository": {
"type": "git",
"url": "git@github.com:NUKnightLab/TimelineJS.git"
},
"license": "MPL v2.0",
"ignore": [
"**/.*",
"examples",
"tests",
"website"
]
}
================================================
FILE: config.json
================================================
//
// timelinejs configuration
//
// All file/directory paths are relative to the project directory.
//
// Regular expressions must be specified in python regular expression format,
// but backslashes must be escaped for JSON. When used to match files,
// matching will take place against the the file/directory path relative to
// the project directory.
//
{
"name": "timeline",
"author": "Zach Wise",
//
// build
// These commands will be run the exact order in which they appear.
//
"build": {
//
// copy files
// input: list of objects specifying inputs and outputs
// @src: source file/directory
// @dst: destination file/directory
// @regex: regular expression to match files (if @src is directory)
//
"copy": [
{
"src": "source",
"dst": "build",
"regex": "css/.*\\.(png|gif)$"
},
{
"src": "source/embed",
"dst": "build/embed"
}
],
//
// compile less files
// input: list of objects specifying inputs and output
// @src: source file/directory
// @dst: destination file/directory
// @regex: regular expression to match files (if @src is directory)
//
"lessc": [
{
"src": "source/less/VMM.Timeline.less",
"dst": "build/css/timeline.css"
},
{
"src": "source/less/Theme/Dark.less",
"dst": "build/css/themes/dark.css"
},
{
"src": "source/less/Core/Font",
"dst": "build/css/themes/font",
"regex": ".*\\.less"
}
],
//
// process codekit style imports on files
// input: list of objects specifying inputs and output
// @src: source file
// @dst: destination file
//
"process": [
{
"src": "source/js/VMM.Timeline.js",
"dst": "build/js/timeline.js"
},
{
"src": "source/js/VMM.Timeline.Min.js",
"dst": "build/js/timeline-min.js"
},
{
"src": "source/js/Core/Embed/Embed.CDN.Generator.js",
"dst": "build/js/storyjs-embed-generator.js"
},
{
"src": "source/js/Core/Embed/Embed.CDN.js",
"dst": "build/js/storyjs-embed-cdn.js"
},
{
"src": "source/js/Core/Embed/Embed.js",
"dst": "build/js/storyjs-embed.js"
}
],
//
// concatenate files
// input: list of objects specifying inputs and output
// @src: list of source files
// @dst: destination file
//
"concat": [ ],
//
// minify files using uglifyjs
// input list of objects specifying inputs and output
// @src: source file/directory
// @dst: destination file/directory
// @opt: options to pass to uglifyjs
// @ext: extension to prepend to destination file name (optional, default = none)
//
"minify": [
{
"src": "source/js/Core/Language/locale",
"dst": "build/js/locale",
"opt": "--no-seqs"
},
{
"src": "build/js/timeline-min.js",
"dst": "build/js/timeline-min.js",
"opt": "--no-seqs"
},
{
"src": "build/js/storyjs-embed-generator.js",
"dst": "build/js/storyjs-embed-generator.js",
"opt": "--no-seqs"
},
{
"src": "build/js/storyjs-embed-cdn.js",
"dst": "build/js/storyjs-embed-cdn.js",
"opt": "--no-seqs"
},
{
"src": "build/js/storyjs-embed.js",
"dst": "build/js/storyjs-embed.js",
"opt": "--no-seqs"
}
],
//
// process usermin style build blocks on html files
// input: list of files/directorys to process in-place
//
"usemin": [
"build/embed"
],
//
// banner-ize files
// input: list of objects specifying inputs
// @src: source file/directory
// @regex: regular expression to match files (if @src is directory)
// @template: template to use for banner (optional)
//
"banner": [
{
"src": "build",
"regex": "(js|css)/.*\\.(css|js)$",
"template": [
"/*",
" TimelineJS - ver. %(version)s - %(date)s",
" Copyright (c) 2012-2015 Northwestern University",
" a project of the Northwestern University Knight Lab, originally created by Zach Wise",
" https://github.com/NUKnightLab/TimelineJS",
" This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.",
" If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.",
"*/"
]
}
]
},
//
// stage
// copy files a versioned directory in local cdn repository
// input: list of objects specifying inputs and outputs
// @src: source file/directory
// @regex: regular expression to match files (if @src is directory)
"stage": [
{
"src": "build",
"regex": "(css|embed|js|lib)/.*"
}
],
//
// deploy the website to S3
// - render website/templates >> build/website
// - copy website/static >> build/website/static
// - run usemin on all html in build/website
// - sync build/website with bucket
"deploy": {
"stg": {
"bucket": "timeline.knilab.com",
"usemin_context": {
"cdn": "dev"
},
"deploy_context": {
"generator_embed_path": "https://cdn.knightlab.com/libs/timeline/dev/embed/index.html"
}
},
"prd": {
"bucket": "timeline.knightlab.com",
"usemin_context": {
"cdn": "latest"
},
"deploy_context": {
"generator_embed_path": "https://cdn.knightlab.com/libs/timeline/latest/embed/index.html"
}
}
}
}
================================================
FILE: examples/README.md
================================================
NOTE: To use these examples, you must run a simple local webserver. They WILL NOT work if you simply open them in a browser from the file system.
If you have python installed, here are simple steps to do this.
1. Open a terminal shell
1. Make sure you are in the "root" directory that you checked out from GitHub
1. Type `python -m SimpleHTTPServer 8000`
1. in your web browser, open `http://localhost:8000/examples/example_json.html` (or whatever other file you want to see
)
================================================
FILE: examples/example_googlespreadsheet.html
================================================
<!DOCTYPE html>
<html lang="en"><!--
88888888888 d8b 888 d8b 888888 d8888b
888 Y8P 888 Y8P 88b d88P Y88b
888 888 888 Y88b
888 888 88888b d88b d88b 888 888 88888b d88b 888 Y888b
888 888 888 888 88b d8P Y8b 888 888 888 88b d8P Y8b 888 Y88b
888 888 888 888 888 88888888 888 888 888 888 88888888 888 888
888 888 888 888 888 Y8b 888 888 888 888 Y8b 88P Y88b d88P
888 888 888 888 888 Y8888 888 888 888 888 Y8888 888 Y8888P
d88P
d88P
888P
-->
<head>
<title>Timeline JS Example</title>
<meta charset="utf-8">
<meta name="description" content="TimelineJS example">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<!-- Style-->
<style>
html, body {
height:100%;
padding: 0px;
margin: 0px;
}
</style>
<!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
<!-- BEGIN Timeline Embed -->
<div id="timeline-embed"></div>
<script type="text/javascript">
var timeline_config = {
width: "100%",
height: "100%",
source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadHdKcHlHcTB5bzhvbF9iTWwyMmJHdkE&output=html'
}
</script>
<script type="text/javascript" src="../build/js/storyjs-embed.js"></script>
<!-- END Timeline Embed-->
</body>
</html>
================================================
FILE: examples/example_jquery_load.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery Load Example Timeline</title>
<meta name="description" content="TimelineJS example">
<!-- jQuery -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- BEGIN TimelineJS -->
<script type="text/javascript" src="../build/js/storyjs-embed.js"></script>
<script>
$(document).ready(function() {
createStoryJS({
type: 'timeline',
width: '800',
height: '600',
source: 'example_json.json',
embed_id: 'my-timeline',
debug: true
});
});
</script>
<!-- END TimelineJS -->
</head>
<body>
<div id="my-timeline"></div>
</body>
</html>
================================================
FILE: examples/example_json.html
================================================
<!DOCTYPE html>
<html lang="en"><!--
88888888888 d8b 888 d8b 888888 d8888b
888 Y8P 888 Y8P 88b d88P Y88b
888 888 888 Y88b
888 888 88888b d88b d88b 888 888 88888b d88b 888 Y888b
888 888 888 888 88b d8P Y8b 888 888 888 88b d8P Y8b 888 Y88b
888 888 888 888 888 88888888 888 888 888 888 88888888 888 888
888 888 888 888 888 Y8b 888 888 888 888 Y8b 88P Y88b d88P
888 888 888 888 888 Y8888 888 888 888 888 Y8888 888 Y8888P
d88P
d88P
888P
-->
<head>
<title>Timeline JS Example</title>
<meta charset="utf-8">
<meta name="description" content="TimelineJS example">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<!-- Style-->
<style>
html, body {
height:100%;
padding: 0px;
margin: 0px;
}
</style>
<!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
<!-- BEGIN Timeline Embed -->
<div id="timeline-embed"></div>
<script type="text/javascript">
var timeline_config = {
width: "100%",
height: "100%",
source: 'example_json.json'
}
</script>
<script type="text/javascript" src="../build/js/storyjs-embed.js"></script>
<!-- END Timeline Embed-->
</body>
</html>
================================================
FILE: examples/example_json.json
================================================
{
"timeline":
{
"headline":"Sh*t People Say",
"type":"default",
"text":"People say stuff",
"startDate":"2012,1,26",
"date": [
{
"startDate":"2011,12,12",
"endDate":"2012,1,27",
"headline":"Vine",
"text":"<p>Vine Test</p>",
"asset":
{
"media":"https://vine.co/v/b55LOA1dgJU",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,26",
"endDate":"2012,1,27",
"headline":"Sh*t Politicians Say",
"text":"<p>In true political fashion, his character rattles off common jargon heard from people running for office.</p>",
"asset":
{
"media":"http://youtu.be/u4XpeU9erbg",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,10",
"headline":"Sh*t Nobody Says",
"text":"<p>Have you ever heard someone say “can I burn a copy of your Nickelback CD?” or “my Bazooka gum still has flavor!” Nobody says that.</p>",
"asset":
{
"media":"http://youtu.be/f-x8t0JOnVw",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,26",
"headline":"Sh*t Chicagoans Say",
"text":"",
"asset":
{
"media":"http://youtu.be/Ofy5gNkKGOo",
"credit":"",
"caption":""
}
},
{
"startDate":"2011,12,12",
"headline":"Sh*t Girls Say",
"text":"",
"asset":
{
"media":"http://youtu.be/u-yLGIH7W9Y",
"credit":"",
"caption":"Writers & Creators: Kyle Humphrey & Graydon Sheppard"
}
},
{
"startDate":"2012,1,4",
"headline":"Sh*t Broke People Say",
"text":"",
"asset":
{
"media":"http://youtu.be/zyyalkHjSjo",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,4",
"headline":"Sh*t Silicon Valley Says",
"text":"",
"asset":
{
"media":"http://youtu.be/BR8zFANeBGQ",
"credit":"",
"caption":"written, filmed, and edited by Kate Imbach & Tom Conrad"
}
},
{
"startDate":"2011,12,25",
"headline":"Sh*t Vegans Say",
"text":"",
"asset":
{
"media":"http://youtu.be/OmWFnd-p0Lw",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,23",
"headline":"Sh*t Graphic Designers Say",
"text":"",
"asset":
{
"media":"http://youtu.be/KsT3QTmsN5Q",
"credit":"",
"caption":""
}
},
{
"startDate":"2011,12,30",
"headline":"Sh*t Wookiees Say",
"text":"",
"asset":
{
"media":"http://youtu.be/vJpBCzzcSgA",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,17",
"headline":"Sh*t People Say About Sh*t People Say Videos",
"text":"",
"asset":
{
"media":"http://youtu.be/c9ehQ7vO7c0",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,20",
"headline":"Sh*t Social Media Pros Say",
"text":"",
"asset":
{
"media":"http://youtu.be/eRQe-BT9g_U",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,11",
"headline":"Sh*t Old People Say About Computers",
"text":"",
"asset":
{
"media":"http://youtu.be/HRmc5uuoUzA",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,11",
"headline":"Sh*t College Freshmen Say",
"text":"",
"asset":
{
"media":"http://youtu.be/rwozXzo0MZk",
"credit":"",
"caption":""
}
},
{
"startDate":"2011,12,16",
"headline":"Sh*t Girls Say - Episode 2",
"text":"",
"asset":
{
"media":"http://youtu.be/kbovd-e-hRg",
"credit":"",
"caption":"Writers & Creators: Kyle Humphrey & Graydon Sheppard"
}
},
{
"startDate":"2011,12,24",
"headline":"Sh*t Girls Say - Episode 3 Featuring Juliette Lewis",
"text":"",
"asset":
{
"media":"http://youtu.be/bDHUhT71JN8",
"credit":"",
"caption":"Writers & Creators: Kyle Humphrey & Graydon Sheppard"
}
},
{
"startDate":"2012,1,27",
"headline":"Sh*t Web Designers Say",
"text":"",
"asset":
{
"media":"http://youtu.be/MEOb_meSHhQ",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,12",
"headline":"Sh*t Hipsters Say",
"text":"No meme is complete without a bit of hipster-bashing.",
"asset":
{
"media":"http://youtu.be/FUhrSVyu0Kw",
"credit":"",
"caption":"Written, Directed, Conceptualized and Performed by Carrie Valentine and Jessica Katz"
}
},
{
"startDate":"2012,1,6",
"headline":"Sh*t Cats Say",
"text":"No meme is complete without cats. This had to happen, obviously.",
"asset":
{
"media":"http://youtu.be/MUX58Vi-YLg",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,21",
"headline":"Sh*t Cyclists Say",
"text":"",
"asset":
{
"media":"http://youtu.be/GMCkuqL9IcM",
"credit":"",
"caption":"Video script, production, and editing by Allen Krughoff of Hardcastle Photography"
}
},
{
"startDate":"2011,12,30",
"headline":"Sh*t Yogis Say",
"text":"",
"asset":
{
"media":"http://youtu.be/IMC1_RH_b3k",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,18",
"headline":"Sh*t New Yorkers Say",
"text":"",
"asset":
{
"media":"http://youtu.be/yRvJylbSg7o",
"credit":"",
"caption":"Directed and Edited by Matt Mayer, Produced by Seth Keim, Written by Eliot Glazer. Featuring Eliot and Ilana Glazer, who are siblings, not married."
}
}
]
}
}
================================================
FILE: examples/example_jsonp.html
================================================
<!DOCTYPE html>
<html lang="en"><!--
88888888888 d8b 888 d8b 888888 d8888b
888 Y8P 888 Y8P 88b d88P Y88b
888 888 888 Y88b
888 888 88888b d88b d88b 888 888 88888b d88b 888 Y888b
888 888 888 888 88b d8P Y8b 888 888 888 88b d8P Y8b 888 Y88b
888 888 888 888 888 88888888 888 888 888 888 88888888 888 888
888 888 888 888 888 Y8b 888 888 888 888 Y8b 88P Y88b d88P
888 888 888 888 888 Y8888 888 888 888 888 Y8888 888 Y8888P
d88P
d88P
888P
-->
<head>
<title>Timeline JS Example</title>
<meta charset="utf-8">
<meta name="description" content="TimelineJS example">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<!-- Style-->
<style>
html, body {
height:100%;
padding: 0px;
margin: 0px;
}
</style>
<!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
<!-- BEGIN Timeline Embed -->
<div id="timeline-embed"></div>
<script type="text/javascript">
var timeline_config = {
width: "100%",
height: "100%",
source: 'example_jsonp.jsonp'
}
</script>
<script type="text/javascript" src="../build/js/storyjs-embed.js"></script>
<!-- END Timeline Embed-->
</body>
</html>
================================================
FILE: examples/example_jsonp.jsonp
================================================
storyjs_jsonp_data = {
"timeline":
{
"headline":"Sh*t People Say",
"type":"default",
"text":"People say stuff",
"startDate":"2012,1,26",
"date": [
{
"startDate":"2012,1,26",
"endDate":"2012,1,27",
"headline":"Sh*t Politicians Say",
"text":"<p>In true political fashion, his character rattles off common jargon heard from people running for office.</p>",
"asset":
{
"media":"http://youtu.be/u4XpeU9erbg",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,10",
"headline":"Sh*t Nobody Says",
"text":"<p>Have you ever heard someone say “can I burn a copy of your Nickelback CD?” or “my Bazooka gum still has flavor!” Nobody says that.</p>",
"asset":
{
"media":"http://youtu.be/f-x8t0JOnVw",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,26",
"headline":"Sh*t Chicagoans Say",
"text":"",
"asset":
{
"media":"http://youtu.be/Ofy5gNkKGOo",
"credit":"",
"caption":""
}
},
{
"startDate":"2011,12,12",
"headline":"Sh*t Girls Say",
"text":"",
"asset":
{
"media":"http://youtu.be/u-yLGIH7W9Y",
"credit":"",
"caption":"Writers & Creators: Kyle Humphrey & Graydon Sheppard"
}
},
{
"startDate":"2012,1,4",
"headline":"Sh*t Broke People Say",
"text":"",
"asset":
{
"media":"http://youtu.be/zyyalkHjSjo",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,4",
"headline":"Sh*t Silicon Valley Says",
"text":"",
"asset":
{
"media":"http://youtu.be/BR8zFANeBGQ",
"credit":"",
"caption":"written, filmed, and edited by Kate Imbach & Tom Conrad"
}
},
{
"startDate":"2011,12,25",
"headline":"Sh*t Vegans Say",
"text":"",
"asset":
{
"media":"http://youtu.be/OmWFnd-p0Lw",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,23",
"headline":"Sh*t Graphic Designers Say",
"text":"",
"asset":
{
"media":"http://youtu.be/KsT3QTmsN5Q",
"credit":"",
"caption":""
}
},
{
"startDate":"2011,12,30",
"headline":"Sh*t Wookiees Say",
"text":"",
"asset":
{
"media":"http://youtu.be/vJpBCzzcSgA",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,17",
"headline":"Sh*t People Say About Sh*t People Say Videos",
"text":"",
"asset":
{
"media":"http://youtu.be/c9ehQ7vO7c0",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,20",
"headline":"Sh*t Social Media Pros Say",
"text":"",
"asset":
{
"media":"http://youtu.be/eRQe-BT9g_U",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,11",
"headline":"Sh*t Old People Say About Computers",
"text":"",
"asset":
{
"media":"http://youtu.be/HRmc5uuoUzA",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,11",
"headline":"Sh*t College Freshmen Say",
"text":"",
"asset":
{
"media":"http://youtu.be/rwozXzo0MZk",
"credit":"",
"caption":""
}
},
{
"startDate":"2011,12,16",
"headline":"Sh*t Girls Say - Episode 2",
"text":"",
"asset":
{
"media":"http://youtu.be/kbovd-e-hRg",
"credit":"",
"caption":"Writers & Creators: Kyle Humphrey & Graydon Sheppard"
}
},
{
"startDate":"2011,12,24",
"headline":"Sh*t Girls Say - Episode 3 Featuring Juliette Lewis",
"text":"",
"asset":
{
"media":"http://youtu.be/bDHUhT71JN8",
"credit":"",
"caption":"Writers & Creators: Kyle Humphrey & Graydon Sheppard"
}
},
{
"startDate":"2012,1,27",
"headline":"Sh*t Web Designers Say",
"text":"",
"asset":
{
"media":"http://youtu.be/MEOb_meSHhQ",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,12",
"headline":"Sh*t Hipsters Say",
"text":"No meme is complete without a bit of hipster-bashing.",
"asset":
{
"media":"http://youtu.be/FUhrSVyu0Kw",
"credit":"",
"caption":"Written, Directed, Conceptualized and Performed by Carrie Valentine and Jessica Katz"
}
},
{
"startDate":"2012,1,6",
"headline":"Sh*t Cats Say",
"text":"No meme is complete without cats. This had to happen, obviously.",
"asset":
{
"media":"http://youtu.be/MUX58Vi-YLg",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,21",
"headline":"Sh*t Cyclists Say",
"text":"",
"asset":
{
"media":"http://youtu.be/GMCkuqL9IcM",
"credit":"",
"caption":"Video script, production, and editing by Allen Krughoff of Hardcastle Photography"
}
},
{
"startDate":"2011,12,30",
"headline":"Sh*t Yogis Say",
"text":"",
"asset":
{
"media":"http://youtu.be/IMC1_RH_b3k",
"credit":"",
"caption":""
}
},
{
"startDate":"2012,1,18",
"headline":"Sh*t New Yorkers Say",
"text":"",
"asset":
{
"media":"http://youtu.be/yRvJylbSg7o",
"credit":"",
"caption":"Directed and Edited by Matt Mayer, Produced by Seth Keim, Written by Eliot Glazer. Featuring Eliot and Ilana Glazer, who are siblings, not married."
}
}
]
}
}
================================================
FILE: examples/example_storify.html
================================================
<!DOCTYPE html>
<html lang="en"><!--
88888888888 d8b 888 d8b 888888 d8888b
888 Y8P 888 Y8P 88b d88P Y88b
888 888 888 Y88b
888 888 88888b d88b d88b 888 888 88888b d88b 888 Y888b
888 888 888 888 88b d8P Y8b 888 888 888 88b d8P Y8b 888 Y88b
888 888 888 888 888 88888888 888 888 888 888 88888888 888 888
888 888 888 888 888 Y8b 888 888 888 888 Y8b 88P Y88b d88P
888 888 888 888 888 Y8888 888 888 888 888 Y8888 888 Y8888P
d88P
d88P
888P
-->
<head>
<title>Timeline JS Example</title>
<meta charset="utf-8">
<meta name="description" content="TimelineJS example">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<!-- Style-->
<style>
html, body {
height:100%;
padding: 0px;
margin: 0px;
}
</style>
<!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
<!-- BEGIN Timeline Embed -->
<div id="timeline-embed"></div>
<script type="text/javascript">
var timeline_config = {
width: "100%",
height: "100%",
source: 'http://storify.com/zachwise/test'
}
</script>
<script type="text/javascript" src="../build/js/storyjs-embed.js"></script>
<!-- END Timeline Embed-->
</body>
</html>
================================================
FILE: examples/model.json
================================================
{
"timeline":
{
"headline":"The Main Timeline Headline Goes here",
"type":"default",
"text":"<p>Intro body text goes here, some HTML is ok</p>",
"asset": {
"media":"http://yourdomain_or_socialmedialink_goes_here.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
},
"date": [
{
"startDate":"2011,12,10",
"endDate":"2011,12,11",
"headline":"Headline Goes Here",
"text":"<p>Body text goes here, some HTML is OK</p>",
"tag":"This is Optional",
"asset": {
"media":"http://twitter.com/ArjunaSoriano/status/164181156147900416",
"thumbnail":"optional-32x32px.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
}
}
],
"era": [
{
"startDate":"2011,12,10",
"endDate":"2011,12,11",
"headline":"Headline Goes Here",
"tag":"This is Optional"
}
]
}
}
================================================
FILE: examples/model.jsonp
================================================
storyjs_jsonp_data = {
"timeline":
{
"headline":"The Main Timeline Headline Goes here",
"type":"default",
"text":"<p>Intro body text goes here, some HTML is ok</p>",
"asset": {
"media":"http://yourdomain_or_socialmedialink_goes_here.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
},
"date": [
{
"startDate":"2011,12,10",
"endDate":"2011,12,11",
"headline":"Headline Goes Here",
"text":"<p>Body text goes here, some HTML is OK</p>",
"tag":"This is Optional",
"asset": {
"media":"http://twitter.com/ArjunaSoriano/status/164181156147900416",
"thumbnail":"optional-32x32px.jpg",
"credit":"Credit Name Goes Here",
"caption":"Caption text goes here"
}
}
],
"era": [
{
"startDate":"2011,12,10",
"endDate":"2011,12,11",
"headline":"Headline Goes Here",
"tag":"This is Optional"
}
]
}
}
================================================
FILE: fabfile.py
================================================
from os.path import abspath, basename, dirname, join
import sys
from fabric.api import env
from fabric.decorators import roles, runs_once, task
import distutils.core
#
# Project-specific settings, alter as needed
#
# env.project_name = basename(dirname(__file__))
env.project_name = 'TimelineJS'
#
# Add paths
#
def add_paths(*args):
"""Make paths are in sys.path."""
for p in args:
if p not in sys.path:
sys.path.append(p)
project_path = dirname(abspath(__file__))
repos_path = dirname(project_path)
fablib_path = join(repos_path, 'fablib')
add_paths(project_path, repos_path, fablib_path)
#
# Import from fablib
#
from fablib import *
@task
def stage_wp():
"""* Use to copy over CSS/JS files to WP Plugin directory"""
print("This will copy over the css/js folders from within build to the Wordpress Plugin Directory")
if not confirm('Is your TimelineJS-Wordpress-Plugin Directory in the same directory as where TimelineJS is located? (y/n) '):
abort('Cancelling')
# # Copy over CSS files
build_css_dir = "build/css"
wp_css_dir = "../TimelineJS-Wordpress-Plugin/css"
distutils.dir_util.copy_tree(build_css_dir, wp_css_dir)
# # Copy over JS files
build_js_dir = "build/js"
wp_js_dir = "../TimelineJS-Wordpress-Plugin/js"
distutils.dir_util.copy_tree(build_js_dir, wp_js_dir)
print("\nRemember to push the updated files in TimelineJS-Wordpress-Plugin as well....")
================================================
FILE: requirements.txt
================================================
Fabric==1.6.1
Flask==0.10.1
Jinja2==2.7
MarkupSafe==0.18
Werkzeug==0.9.3
boto==2.13.3
itsdangerous==0.22
paramiko==1.10.1
ply==3.4
pycrypto==2.6
wsgiref==0.1.2
python-magic==0.4.6
pyOpenSSL==0.15.1
================================================
FILE: source/embed/index.html
================================================
<!DOCTYPE html>
<html lang="en"><!--
88888888888 d8b 888 d8b 888888 d8888b
888 Y8P 888 Y8P 88b d88P Y88b
888 888 888 Y88b
888 888 88888b d88b d88b 888 888 88888b d88b 888 Y888b
888 888 888 888 88b d8P Y8b 888 888 888 88b d8P Y8b 888 Y88b
888 888 888 888 888 88888888 888 888 888 888 88888888 888 888
888 888 888 888 888 Y8b 888 888 888 888 Y8b 88P Y88b d88P
888 888 888 888 888 Y8888 888 888 888 888 Y8888 888 Y8888P
d88P
d88P
888P
-->
<head>
<title>TimelineJS Embed</title>
<meta charset="utf-8">
<meta name="description" content="TimelineJS Embed">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<link href="http://cdn.knightlab.com/libs/blueline/latest/assets/logos/favicon.png" rel="shortcut icon">
<!-- Style-->
<style>
html, body {
height:100%;
padding: 0px;
margin: 0px;
}
#timeline-embed { height: 100%; }
</style>
<!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
<!-- BEGIN Timeline Embed -->
<div id="timeline-embed"></div>
<!-- Override -->
<script type="text/javascript">
var trim_point = window.location.href.indexOf('embed/index.html');
if (trim_point > 0) {
var embed_path = window.location.href.substring(0,trim_point); // supports https access via https://s3.amazonaws.com/cdn.knightlab.com/libs/timeline/latest/embed/index.html
} else {
var embed_path = "https://cdn.knightlab.com/libs/timeline/latest/";
}
</script>
<!-- build:js ../js/storyjs-embed-cdn.js?v214 -->
<script type="text/javascript">
var embed_path = "/build/";
</script>
<script type="text/javascript" src="/build/js/storyjs-embed-cdn.js?v214"></script>
<!-- endbuild -->
<!-- END Timeline Embed-->
</body>
</html>
================================================
FILE: source/gfx/timeline-dark@2x.psd
================================================
[File too large to display: 11.0 MB]
================================================
FILE: source/gfx/timeline@2x.psd
================================================
[File too large to display: 10.1 MB]
================================================
FILE: source/js/Core/.gitignore
================================================
.buildpath
.project
.settings
*.DS_Store
.DS_Store*
================================================
FILE: source/js/Core/Core/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.tridentVersion = this.searchTridentVersion(navigator.userAgent);
this.OS = this.searchString(this.dataOS) || "an unknown OS";
this.device = this.searchDevice(navigator.userAgent);
this.orientation = this.searchOrientation(window.orientation);
},
searchOrientation: function(orientation) {
var orient = "";
if ( orientation == 0 || orientation == 180) {
orient = "portrait";
} else if ( orientation == 90 || orientation == -90) {
orient = "landscape";
} else {
orient = "normal";
}
return orient;
},
searchDevice: function(d) {
var device = "";
if (d.match(/Android/i) || d.match(/iPhone|iPod/i)) {
device = "mobile";
} else if (d.match(/iPad/i)) {
device = "tablet";
} else if (d.match(/BlackBerry/i) || d.match(/IEMobile/i)) {
device = "other mobile";
} else {
device = "desktop";
}
return device;
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string,
dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1) {
return data[i].identity;
}
} else if (dataProp) {
return data[i].identity;
}
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
searchTridentVersion: function (dataString) {
var index = dataString.indexOf("Trident/");
if (index == -1) return 0;
return parseFloat(dataString.substring(index + 8));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera",
versionSearch: "Version"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.userAgent,
subString: "iPad",
identity: "iPad"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
}
VMM.Browser.init();
}
================================================
FILE: source/js/Core/Core/VMM.Core.js
================================================
/* VeriteCo Core
================================================== */
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "VMM.js";
// @codekit-prepend "VMM.Library.js";
// @codekit-prepend "VMM.Browser.js";
// @codekit-prepend "VMM.FileExtention.js";
// @codekit-prepend "VMM.Date.js";
// @codekit-prepend "VMM.Util.js";
// @codekit-prepend "VMM.LoadLib.js";
// @codekit-prepend "VMM.Language.js";
================================================
FILE: source/js/Core/Core/VMM.Date.js
================================================
/* * Utilities and Useful Functions
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.Date == 'undefined') {
VMM.Date = ({
init: function() {
return this;
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."],
hour: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
hour_suffix: ["am"],
//B.C.
bc_format: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "dddd', 'h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "dddd',' mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>'dddd',' mmm d',' yyyy'</small>'"
},
setLanguage: function(lang) {
trace("SET DATE LANGUAGE");
VMM.Date.dateformats = lang.dateformats;
VMM.Date.month = lang.date.month;
VMM.Date.month_abbr = lang.date.month_abbr;
VMM.Date.day = lang.date.day;
VMM.Date.day_abbr = lang.date.day_abbr;
dateFormat.i18n.dayNames = lang.date.day_abbr.concat(lang.date.day);
dateFormat.i18n.monthNames = lang.date.month_abbr.concat(lang.date.month);
},
parse: function(d, precision) {
"use strict";
var date,
date_array,
time_array,
time_parse,
p = {
year: false,
month: false,
day: false,
hour: false,
minute: false,
second: false,
millisecond: false
};
if (type.of(d) == "date") {
trace("DEBUG THIS, ITs A DATE");
date = d;
} else {
date = new Date(0);
date.setMonth(0); date.setDate(1); date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setMilliseconds(0);
if ( d.match(/,/gi) ) {
date_array = d.split(",");
for(var i = 0; i < date_array.length; i++) {
date_array[i] = parseInt(date_array[i], 10);
}
if (date_array[0]) {
date.setFullYear(date_array[0]);
p.year = true;
}
if (date_array[1]) {
date.setMonth(date_array[1] - 1);
p.month = true;
}
if (date_array[2]) {
date.setDate(date_array[2]);
p.day = true;
}
if (date_array[3]) {
date.setHours(date_array[3]);
p.hour = true;
}
if (date_array[4]) {
date.setMinutes(date_array[4]);
p.minute = true;
}
if (date_array[5]) {
date.setSeconds(date_array[5]);
if (date_array[5] >= 1) {
p.second = true;
}
}
if (date_array[6]) {
date.setMilliseconds(date_array[6]);
if (date_array[6] >= 1) {
p.millisecond = true;
}
}
} else if (d.match("/")) {
if (d.match(" ")) {
time_parse = d.split(" ");
if (d.match(":")) {
time_array = time_parse[1].split(":");
if (time_array[0] >= 0 ) {
date.setHours(time_array[0]);
p.hour = true;
}
if (time_array[1] >= 0) {
date.setMinutes(time_array[1]);
p.minute = true;
}
if (time_array[2] >= 0) {
date.setSeconds(time_array[2]);
p.second = true;
}
if (time_array[3] >= 0) {
date.setMilliseconds(time_array[3]);
p.millisecond = true;
}
}
date_array = time_parse[0].split("/");
} else {
date_array = d.split("/");
}
if (date_array[2]) {
date.setFullYear(date_array[2]);
p.year = true;
}
if (date_array[0] >= 0) {
var month = date_array[0] - 1;
date.setMonth(month);
// if (date.getMonth() != month) {
// date.setMonth(month); // WTF javascript?
// }
p.month = true;
}
if (date_array[1] >= 0) {
if (date_array[1].length > 2) {
date.setFullYear(date_array[1]);
p.year = true;
} else {
date.setDate(date_array[1]);
p.day = true;
}
}
} else if (d.match("now")) {
var now = new Date();
date.setFullYear(now.getFullYear());
p.year = true;
date.setMonth(now.getMonth());
p.month = true;
date.setDate(now.getDate());
p.day = true;
if (d.match("hours")) {
date.setHours(now.getHours());
p.hour = true;
}
if (d.match("minutes")) {
date.setHours(now.getHours());
date.setMinutes(now.getMinutes());
p.hour = true;
p.minute = true;
}
if (d.match("seconds")) {
date.setHours(now.getHours());
date.setMinutes(now.getMinutes());
date.setSeconds(now.getSeconds());
p.hour = true;
p.minute = true;
p.second = true;
}
if (d.match("milliseconds")) {
date.setHours(now.getHours());
date.setMinutes(now.getMinutes());
date.setSeconds(now.getSeconds());
date.setMilliseconds(now.getMilliseconds());
p.hour = true;
p.minute = true;
p.second = true;
p.millisecond = true;
}
} else if (d.length <= 8) {
p.year = true;
date.setFullYear(parseInt(d, 10));
date.setMonth(0);
date.setDate(1);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
} else if (d.match("T")) {
if (navigator.userAgent.match(/MSIE\s(?!9.0)/)) {
// IE 8 < Won't accept dates with a "-" in them.
time_parse = d.split("T");
if (d.match(":")) {
time_array = time_parse[1].split(":");
if (time_array[0] >= 1) {
date.setHours(time_array[0]);
p.hour = true;
}
if (time_array[1] >= 1) {
date.setMinutes(time_array[1]);
p.minute = true;
}
if (time_array[2] >= 1) {
date.setSeconds(time_array[2]);
if (time_array[2] >= 1) {
p.second = true;
}
}
if (time_array[3] >= 1) {
date.setMilliseconds(time_array[3]);
if (time_array[3] >= 1) {
p.millisecond = true;
}
}
}
date_array = time_parse[0].split("-");
if (date_array[0]) {
date.setFullYear(date_array[0]);
p.year = true;
}
if (date_array[1] >= 0) {
date.setMonth(date_array[1] - 1);
p.month = true;
}
if (date_array[2] >= 0) {
date.setDate(date_array[2]);
p.day = true;
}
} else {
date = new Date(Date.parse(d));
p.year = true;
p.month = true;
p.day = true;
p.hour = true;
p.minute = true;
if (date.getSeconds() >= 1) {
p.second = true;
}
if (date.getMilliseconds() >= 1) {
p.millisecond = true;
}
}
} else {
date = new Date(
parseInt(d.slice(0,4), 10),
parseInt(d.slice(4,6), 10) - 1,
parseInt(d.slice(6,8), 10),
parseInt(d.slice(8,10), 10),
parseInt(d.slice(10,12), 10)
);
p.year = true;
p.month = true;
p.day = true;
p.hour = true;
p.minute = true;
if (date.getSeconds() >= 1) {
p.second = true;
}
if (date.getMilliseconds() >= 1) {
p.millisecond = true;
}
}
}
if (precision != null && precision != "") {
return {
date: date,
precision: p
};
} else {
return date;
}
},
prettyDate: function(d, is_abbr, p, d2) {
var _date,
_date2,
format,
bc_check,
is_pair = false,
bc_original,
bc_number,
bc_string;
if (d2 != null && d2 != "" && typeof d2 != 'undefined') {
is_pair = true;
trace("D2 " + d2);
}
if (type.of(d) == "date") {
if (type.of(p) == "object") {
if (p.millisecond || p.second && d.getSeconds() >= 1) {
// YEAR MONTH DAY HOUR MINUTE
if (is_abbr){
format = VMM.Date.dateformats.time_short;
} else {
format = VMM.Date.dateformats.time_short;
}
} else if (p.minute) {
// YEAR MONTH DAY HOUR MINUTE
if (is_abbr){
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.time_no_seconds_small_date;
}
} else if (p.hour) {
// YEAR MONTH DAY HOUR
if (is_abbr) {
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.time_no_seconds_small_date;
}
} else if (p.day) {
// YEAR MONTH DAY
if (is_abbr) {
format = VMM.Date.dateformats.full_short;
} else {
format = VMM.Date.dateformats.full;
}
} else if (p.month) {
// YEAR MONTH
if (is_abbr) {
format = VMM.Date.dateformats.month_short;
} else {
format = VMM.Date.dateformats.month;
}
} else if (p.year) {
format = VMM.Date.dateformats.year;
} else {
format = VMM.Date.dateformats.year;
}
} else {
if (d.getMonth() === 0 && d.getDate() == 1 && d.getHours() === 0 && d.getMinutes() === 0 ) {
// YEAR ONLY
format = VMM.Date.dateformats.year;
} else if (d.getDate() <= 1 && d.getHours() === 0 && d.getMinutes() === 0) {
// YEAR MONTH
if (is_abbr) {
format = VMM.Date.dateformats.month_short;
} else {
format = VMM.Date.dateformats.month;
}
} else if (d.getHours() === 0 && d.getMinutes() === 0) {
// YEAR MONTH DAY
if (is_abbr) {
format = VMM.Date.dateformats.full_short;
} else {
format = VMM.Date.dateformats.full;
}
} else if (d.getMinutes() === 0) {
// YEAR MONTH DAY HOUR
if (is_abbr) {
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.time_no_seconds_small_date;
}
} else {
// YEAR MONTH DAY HOUR MINUTE
if (is_abbr){
format = VMM.Date.dateformats.time_no_seconds_short;
} else {
format = VMM.Date.dateformats.full_long;
}
}
}
_date = dateFormat(d, format, false);
//_date = "Jan"
bc_check = _date.split(" ");
// BC TIME SUPPORT
for(var i = 0; i < bc_check.length; i++) {
if ( parseInt(bc_check[i], 10) < 0 ) {
trace("YEAR IS BC");
bc_original = bc_check[i];
bc_number = Math.abs( parseInt(bc_check[i], 10) );
bc_string = bc_number.toString() + " B.C.";
_date = _date.replace(bc_original, bc_string);
}
}
if (is_pair) {
_date2 = dateFormat(d2, format, false);
bc_check = _date2.split(" ");
// BC TIME SUPPORT
for(var j = 0; j < bc_check.length; j++) {
if ( parseInt(bc_check[j], 10) < 0 ) {
trace("YEAR IS BC");
bc_original = bc_check[j];
bc_number = Math.abs( parseInt(bc_check[j], 10) );
bc_string = bc_number.toString() + " B.C.";
_date2 = _date2.replace(bc_original, bc_string);
}
}
}
} else {
trace("NOT A VALID DATE?");
trace(d);
}
if (is_pair) {
return _date + " — " + _date2;
} else {
return _date;
}
}
}).init();
/*
* Date Format 1.2.3
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
* MIT license
*
* Includes enhancements by Scott Trenda <scott.trenda.net>
* and Kris Kowal <cixar.com/~kris.kowal/>
*
* Accepts a date, a mask, or a date and a mask.
* Returns a formatted version of the given date.
* The date defaults to the current date/time.
* The mask defaults to dateFormat.masks.default.
*/
var dateFormat = function () {
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[WLloSZ]|"[^"]*"|'[^']*'/g,
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
timezoneClip = /[^-+\dA-Z]/g,
pad = function (val, len) {
val = String(val);
len = len || 2;
while (val.length < len) val = "0" + val;
return val;
};
// Regexes and supporting functions are cached through closure
return function (date, mask, utc) {
var dF = dateFormat;
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
mask = date;
date = undefined;
}
// Passing date through Date applies Date.parse, if necessary
// Caused problems in IE
// date = date ? new Date(date) : new Date;
if (isNaN(date)) {
trace("invalid date " + date);
//return "";
}
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
// Allow setting the utc argument via the mask
if (mask.slice(0, 4) == "UTC:") {
mask = mask.slice(4);
utc = true;
}
var _ = utc ? "getUTC" : "get",
d = date[_ + "Date"](),
D = date[_ + "Day"](),
m = date[_ + "Month"](),
y = date[_ + "FullYear"](),
H = date[_ + "Hours"](),
M = date[_ + "Minutes"](),
s = date[_ + "Seconds"](),
L = date[_ + "Milliseconds"](),
W = date.getWeek(),
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],
W: W
};
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);
};
}
================================================
FILE: source/js/Core/Core/VMM.FileExtention.js
================================================
/* * File Extention
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.FileExtention == 'undefined') {
VMM.FileExtention = {
googleDocType: function(url) {
var fileName = url.replace(/\s\s*$/, ''),
fileExtension = "",
validFileExtensions = ["DOC","DOCX","XLS","XLSX","PPT","PPTX","PDF","PAGES","AI","PSD","TIFF","DXF","SVG","EPS","PS","TTF","XPS","ZIP","RAR"],
flag = false;
fileExtension = fileName.substr(fileName.length - 5, 5);
for (var i = 0; i < validFileExtensions.length; i++) {
if (fileExtension.toLowerCase().match(validFileExtensions[i].toString().toLowerCase()) || fileName.match("docs.google.com") ) {
flag = true;
}
}
return flag;
}
}
}
================================================
FILE: source/js/Core/Core/VMM.Library.js
================================================
/* * LIBRARY ABSTRACTION
================================================== */
if(typeof VMM != 'undefined') {
VMM.smoothScrollTo = function(elem, duration, ease) {
if( typeof( jQuery ) != 'undefined' ){
var _ease = "easein",
_duration = 1000;
if (duration != null) {
if (duration < 1) {
_duration = 1;
} else {
_duration = Math.round(duration);
}
}
if (ease != null && ease != "") {
_ease = ease;
}
if (jQuery(window).scrollTop() != VMM.Lib.offset(elem).top) {
VMM.Lib.animate('html,body', _duration, _ease, {scrollTop: VMM.Lib.offset(elem).top})
}
}
};
VMM.attachElement = function(element, content) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).html(content);
}
};
VMM.appendElement = function(element, content) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).append(content);
}
};
VMM.getHTML = function(element) {
var e;
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(element).html();
return e;
}
};
VMM.getElement = function(element, p) {
var e;
if( typeof( jQuery ) != 'undefined' ){
if (p) {
e = jQuery(element).parent().get(0);
} else {
e = jQuery(element).get(0);
}
return e;
}
};
VMM.bindEvent = function(element, the_handler, the_event_type, event_data) {
var e;
var _event_type = "click";
var _event_data = {};
if (the_event_type != null && the_event_type != "") {
_event_type = the_event_type;
}
if (_event_data != null && _event_data != "") {
_event_data = event_data;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).bind(_event_type, _event_data, the_handler);
//return e;
}
};
VMM.unbindEvent = function(element, the_handler, the_event_type) {
var e;
var _event_type = "click";
var _event_data = {};
if (the_event_type != null && the_event_type != "") {
_event_type = the_event_type;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).unbind(_event_type, the_handler);
//return e;
}
};
VMM.fireEvent = function(element, the_event_type, the_data) {
var e;
var _event_type = "click";
var _data = [];
if (the_event_type != null && the_event_type != "") {
_event_type = the_event_type;
}
if (the_data != null && the_data != "") {
_data = the_data;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).trigger(_event_type, _data);
//return e;
}
};
VMM.getJSON = function(url, data, callback) {
if( typeof( jQuery ) != 'undefined' ){
jQuery.ajaxSetup({
timeout: 3000
});
/* CHECK FOR IE
================================================== */
if ( VMM.Browser.browser == "Explorer" &&
parseInt(VMM.Browser.version, 10) >= 7 &&
window.XDomainRequest &&
url.match('^https?://')) {
trace("old IE JSON doesn't like retrieving from different protocol");
var colon = url.indexOf(':');
url = url.substr(colon+1);
}
return jQuery.getJSON(url, data, callback);
}
}
VMM.parseJSON = function(the_json) {
if( typeof( jQuery ) != 'undefined' ){
return jQuery.parseJSON(the_json);
}
}
// ADD ELEMENT AND RETURN IT
VMM.appendAndGetElement = function(append_to_element, tag, cName, content) {
var e,
_tag = "<div>",
_class = "",
_content = "",
_id = "";
if (tag != null && tag != "") {
_tag = tag;
}
if (cName != null && cName != "") {
_class = cName;
}
if (content != null && content != "") {
_content = content;
}
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(tag);
e.addClass(_class);
e.html(_content);
jQuery(append_to_element).append(e);
}
return e;
};
VMM.Lib = {
init: function() {
return this;
},
hide: function(element, duration) {
if (duration != null && duration != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).hide(duration);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).hide();
}
}
},
remove: function(element) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).remove();
}
},
detach: function(element) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).detach();
}
},
append: function(element, value) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).append(value);
}
},
prepend: function(element, value) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).prepend(value);
}
},
show: function(element, duration) {
if (duration != null && duration != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).show(duration);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).show();
}
}
},
load: function(element, callback_function, event_data) {
var _event_data = {elem:element}; // return element by default
if (_event_data != null && _event_data != "") {
_event_data = event_data;
}
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).load(_event_data, callback_function);
}
},
addClass: function(element, cName) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).addClass(cName);
}
},
removeClass: function(element, cName) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).removeClass(cName);
}
},
attr: function(element, aName, value) {
if (value != null && value != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).attr(aName, value);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).attr(aName);
}
}
},
prop: function(element, aName, value) {
if (typeof jQuery == 'undefined' || !/[1-9]\.[3-9].[1-9]/.test(jQuery.fn.jquery)) {
VMM.Lib.attribute(element, aName, value);
} else {
jQuery(element).prop(aName, value);
}
},
attribute: function(element, aName, value) {
if (value != null && value != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).attr(aName, value);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).attr(aName);
}
}
},
visible: function(element, show) {
if (show != null) {
if( typeof( jQuery ) != 'undefined' ){
if (show) {
jQuery(element).show(0);
} else {
jQuery(element).hide(0);
}
}
} else {
if( typeof( jQuery ) != 'undefined' ){
if ( jQuery(element).is(':visible')){
return true;
} else {
return false;
}
}
}
},
css: function(element, prop, value) {
if (value != null && value != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).css(prop, value);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).css(prop);
}
}
},
cssmultiple: function(element, propval) {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).css(propval);
}
},
offset: function(element) {
var p;
if( typeof( jQuery ) != 'undefined' ){
p = jQuery(element).offset();
}
return p;
},
position: function(element) {
var p;
if( typeof( jQuery ) != 'undefined' ){
p = jQuery(element).position();
}
return p;
},
width: function(element, s) {
if (s != null && s != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).width(s);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).width();
}
}
},
height: function(element, s) {
if (s != null && s != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).height(s);
}
} else {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).height();
}
}
},
toggleClass: function(element, cName) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).toggleClass(cName);
}
},
each:function(element, return_function) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).each(return_function);
}
},
html: function(element, str) {
var e;
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(element).html();
return e;
}
if (str != null && str != "") {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).html(str);
}
} else {
var e;
if( typeof( jQuery ) != 'undefined' ){
e = jQuery(element).html();
return e;
}
}
},
find: function(element, selec) {
if( typeof( jQuery ) != 'undefined' ){
return jQuery(element).find(selec);
}
},
stop: function(element) {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).stop();
}
},
delay_animate: function(delay, element, duration, ease, att, callback_function) {
if (VMM.Browser.device == "mobile" || VMM.Browser.device == "tablet") {
var _tdd = Math.round((duration/1500)*10)/10,
__duration = _tdd + 's';
VMM.Lib.css(element, '-webkit-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, '-moz-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, '-o-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, '-ms-transition', 'all '+ __duration + ' ease');
VMM.Lib.css(element, 'transition', 'all '+ __duration + ' ease');
VMM.Lib.cssmultiple(element, _att);
} else {
if( typeof( jQuery ) != 'undefined' ){
jQuery(element).delay(delay).animate(att, {duration:duration, easing:ease} );
}
}
},
animate: function(element, duration, ease, att, que, callback_function) {
var _ease = "easein",
_que = false,
_duration = 1000,
_att = {};
if (duration != null) {
if (duration < 1) {
_duration = 1;
} else {
_duration = Math.round(duration);
}
}
if (ease != null && ease != "") {
_ease = ease;
}
if (que != null && que != "") {
_que = que;
}
if (att != null) {
_att = att
} else {
_att = {opacity: 0}
}
if (VMM.Browser.device == "mobile" || VMM.Browser.device == "tablet") {
var _tdd = Math.round((_duration/1500)*10)/10,
__duration = _tdd + 's';
_ease = " cubic-bezier(0.33, 0.66, 0.66, 1)";
//_ease = " ease-in-out";
for (x in _att) {
if (Object.prototype.hasOwnProperty.call(_att, x)) {
trace(x + " to " + _att[x]);
VMM.Lib.css(element, '-webkit-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, '-moz-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, '-o-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, '-ms-transition', x + ' ' + __duration + _ease);
VMM.Lib.css(element, 'transition', x + ' ' + __duration + _ease);
}
}
VMM.Lib.cssmultiple(element, _att);
} else {
if( typeof( jQuery ) != 'undefined' ){
if (callback_function != null && callback_function != "") {
jQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease, complete:callback_function} );
} else {
jQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease} );
}
}
}
}
}
}
if( typeof( jQuery ) != 'undefined' ){
/* XDR AJAX EXTENTION FOR jQuery
https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js
================================================== */
(function( jQuery ) {
if ( window.XDomainRequest ) {
jQuery.ajaxTransport(function( s ) {
if ( s.crossDomain && s.async ) {
if ( s.timeout ) {
s.xdrTimeout = s.timeout;
delete s.timeout;
}
var xdr;
return {
send: function( _, complete ) {
function callback( status, statusText, responses, responseHeaders ) {
xdr.onload = xdr.onerror = xdr.ontimeout = jQuery.noop;
xdr = undefined;
complete( status, statusText, responses, responseHeaders );
}
xdr = new XDomainRequest();
xdr.open( s.type, s.url );
xdr.onload = function() {
callback( 200, "OK", { text: xdr.responseText }, "Content-Type: " + xdr.contentType );
};
xdr.onerror = function() {
callback( 404, "Not Found" );
};
if ( s.xdrTimeout ) {
xdr.ontimeout = function() {
callback( 0, "timeout" );
};
xdr.timeout = s.xdrTimeout;
}
xdr.send( ( s.hasContent && s.data ) || null );
},
abort: function() {
if ( xdr ) {
xdr.onerror = jQuery.noop();
xdr.abort();
}
}
};
}
});
}
})( jQuery );
/* jQuery Easing v1.3
http://gsgd.co.uk/sandbox/jquery/easing/
================================================== */
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend( jQuery.easing, {
def: 'easeOutQuad',
swing: function (x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInExpo: function (x, t, b, c, d) {
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOutExpo: function (x, t, b, c, d) {
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOutExpo: function (x, t, b, c, d) {
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInQuad: function (x, t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
easeInOutQuad: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
}
});
}
================================================
FILE: source/js/Core/Core/VMM.LoadLib.js
================================================
/*
LoadLib
Designed and built by Zach Wise digitalartwork.net
*/
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "../Library/LazyLoad.js";
LoadLib = (function (doc) {
var loaded = [];
function isLoaded(url) {
var i = 0,
has_loaded = false;
for (i = 0; i < loaded.length; i++) {
if (loaded[i] == url) {
has_loaded = true;
}
}
if (has_loaded) {
return true;
} else {
loaded.push(url);
return false;
}
}
return {
css: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.css(urls, callback, obj, context);
}
},
js: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.js(urls, callback, obj, context);
}
}
};
})(this.document);
================================================
FILE: source/js/Core/Core/VMM.Util.js
================================================
/* * Utilities and Useful Functions
================================================== */
if(typeof VMM != 'undefined' && typeof VMM.Util == 'undefined') {
VMM.Util = ({
init: function() {
return this;
},
removeRange: function(array, from, to) { // rather than change Array.prototype; Thanks Jeff McWhirter for nudge
var rest = array.slice((to || from) + 1 || array.length);
array.length = from < 0 ? array.length + from : from;
return array.push.apply(array, rest);
},
/* * CORRECT PROTOCOL (DOES NOT WORK)
================================================== */
correctProtocol: function(url) {
var loc = (window.parent.location.protocol).toString(),
prefix = "",
the_url = url.split("://", 2);
if (loc.match("http")) {
prefix = loc;
} else {
prefix = "https";
}
return prefix + "://" + the_url[1];
},
/* * MERGE CONFIG
================================================== */
mergeConfig: function(config_main, config_to_merge) {
var x;
for (x in config_to_merge) {
if (Object.prototype.hasOwnProperty.call(config_to_merge, x)) {
config_main[x] = config_to_merge[x];
}
}
return config_main;
},
/* * GET OBJECT ATTRIBUTE BY INDEX
================================================== */
getObjectAttributeByIndex: function(obj, index) {
if(typeof obj != 'undefined') {
var i = 0;
for (var attr in obj){
if (index === i){
return obj[attr];
}
i++;
}
return "";
} else {
return "";
}
},
/* * ORDINAL
================================================== */
ordinal: function(n) {
return ["th","st","nd","rd"][(!( ((n%10) >3) || (Math.floor(n%100/10)==1)) ) * (n%10)];
},
/* * RANDOM BETWEEN
================================================== */
//VMM.Util.randomBetween(1, 3)
randomBetween: function(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
},
/* * AVERAGE
* http://jsfromhell.com/array/average
* var x = VMM.Util.average([2, 3, 4]);
* VMM.Util.average([2, 3, 4]).mean
================================================== */
average: function(a) {
var r = {mean: 0, variance: 0, deviation: 0}, t = a.length;
for(var m, s = 0, l = t; l--; s += a[l]);
for(m = r.mean = s / t, l = t, s = 0; l--; s += Math.pow(a[l] - m, 2));
return r.deviation = Math.sqrt(r.variance = s / t), r;
},
/* * CUSTOM SORT
================================================== */
customSort: function(a, b) {
var a1= a, b1= b;
if(a1== b1) return 0;
return a1> b1? 1: -1;
},
/* * Remove Duplicates from Array
================================================== */
deDupeArray: function(arr) {
var i,
len=arr.length,
out=[],
obj={};
for (i=0;i<len;i++) {
obj[arr[i]]=0;
}
for (i in obj) {
out.push(i);
}
return out;
},
/* * Returns a word count number
================================================== */
wordCount: function(s) {
var fullStr = s + " ";
var initial_whitespace_rExp = /^[^A-Za-z0-9\'\-]+/gi;
var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
var non_alphanumerics_rExp = /[^A-Za-z0-9\'\-]+/gi;
var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
var splitString = cleanedStr.split(" ");
var word_count = splitString.length -1;
if (fullStr.length <2) {
word_count = 0;
}
return word_count;
},
ratio: {
fit: function(w, h, ratio_w, ratio_h) {
//VMM.Util.ratio.fit(w, h, ratio_w, ratio_h).width;
var _fit = {width:0,height:0};
// TRY WIDTH FIRST
_fit.width = w;
//_fit.height = Math.round((h / ratio_h) * ratio_w);
_fit.height = Math.round((w / ratio_w) * ratio_h);
if (_fit.height > h) {
_fit.height = h;
//_fit.width = Math.round((w / ratio_w) * ratio_h);
_fit.width = Math.round((h / ratio_h) * ratio_w);
if (_fit.width > w) {
trace("FIT: DIDN'T FIT!!! ")
}
}
return _fit;
},
r16_9: function(w,h) {
//VMM.Util.ratio.r16_9(w, h) // Returns corresponding number
if (w !== null && w !== "") {
return Math.round((h / 16) * 9);
} else if (h !== null && h !== "") {
return Math.round((w / 9) * 16);
}
},
r4_3: function(w,h) {
if (w !== null && w !== "") {
return Math.round((h / 4) * 3);
} else if (h !== null && h !== "") {
return Math.round((w / 3) * 4);
}
}
},
doubledigit: function(n) {
return (n < 10 ? '0' : '') + n;
},
/* * Returns a truncated segement of a long string of between min and max words. If possible, ends on a period (otherwise goes to max).
================================================== */
truncateWords: function(s, min, max) {
if (!min) min = 30;
if (!max) max = min;
var initial_whitespace_rExp = /^[^A-Za-z0-9\'\-]+/gi;
var left_trimmedStr = s.replace(initial_whitespace_rExp, "");
var words = left_trimmedStr.split(" ");
var result = [];
min = Math.min(words.length, min);
max = Math.min(words.length, max);
for (var i = 0; i<min; i++) {
result.push(words[i]);
}
for (var j = min; i<max; i++) {
var word = words[i];
result.push(word);
if (word.charAt(word.length-1) == '.') {
break;
}
}
return (result.join(' '));
},
/* * Turns plain text links into real links
================================================== */
linkify: function(text,targets,is_touch) {
// http://, https://, ftp://
var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;
// www. sans http:// or https://
var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
// Email addresses
var emailAddressPattern = /(([a-zA-Z0-9_\-\.]+)@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6}))+/gim;
return text
.replace(urlPattern, "<a target='_blank' href='$&' onclick='void(0)'>$&</a>")
.replace(pseudoUrlPattern, "$1<a target='_blank' onclick='void(0)' href='http://$2'>$2</a>")
.replace(emailAddressPattern, "<a target='_blank' onclick='void(0)' href='mailto:$1'>$1</a>");
},
linkify_with_twitter: function(text,targets,is_touch) {
// http://, https://, ftp://
var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;
var url_pattern = /(\()((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\))|(\[)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\])|(\{)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\s'"\]])\s*['"]?|[^=\s]\s+)(\b(?:ht|f)tps?:\/\/[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]|$))&[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]*)*[a-z0-9\-_~$()*+=\/#[\]@%])/img;
var url_replace = '$1$4$7$10$13<a href="$2$5$8$11$14" target="_blank" class="hyphenate">$2$5$8$11$14</a>$3$6$9$12';
// www. sans http:// or https://
var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#%?=~_|!:,.;]*)([-A-Z0-9+&@#%?\/=~_|!:,.;]*)[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp, "<a href='$1' target='_blank'>$3</a>");
}
// Email addresses
var emailAddressPattern = /([a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)/gim;
//var twitterHandlePattern = /(@([\w]+))/g;
var twitterHandlePattern = /\B@([\w-]+)/gm;
var twitterSearchPattern = /(#([\w]+))/g;
return text
//.replace(urlPattern, "<a target='_blank' href='$&' onclick='void(0)'>$&</a>")
.replace(url_pattern, url_replace)
.replace(pseudoUrlPattern, "$1<a target='_blank' class='hyphenate' onclick='void(0)' href='http://$2'>$2</a>")
.replace(emailAddressPattern, "<a target='_blank' onclick='void(0)' href='mailto:$1'>$1</a>")
.replace(twitterHandlePattern, "<a href='http://twitter.com/$1' target='_blank' onclick='void(0)'>@$1</a>");
// TURN THIS BACK ON TO AUTOMAGICALLY LINK HASHTAGS TO TWITTER SEARCH
//.replace(twitterSearchPattern, "<a href='http://twitter.com/search?q=%23$2' target='_blank' 'void(0)'>$1</a>");
},
linkify_wikipedia: function(text) {
var urlPattern = /<i[^>]*>(.*?)<\/i>/gim;
return text
.replace(urlPattern, "<a target='_blank' href='http://en.wikipedia.org/wiki/$&' onclick='void(0)'>$&</a>")
.replace(/<i\b[^>]*>/gim, "")
.replace(/<\/i>/gim, "")
.replace(/<b\b[^>]*>/gim, "")
.replace(/<\/b>/gim, "");
},
/* * Turns plain text links into real links
================================================== */
// VMM.Util.unlinkify();
unlinkify: function(text) {
if(!text) return text;
text = text.replace(/<a\b[^>]*>/i,"");
text = text.replace(/<\/a>/i, "");
return text;
},
untagify: function(text) {
if (!text) {
return text;
}
text = text.replace(/<\/?\s*\w.*?>/g,"");
return text;
},
/* * TK
================================================== */
nl2br: function(text) {
return text.replace(/(\r\n|[\r\n]|\\n|\\r)/g,"<br/>");
},
/* * Generate a Unique ID
================================================== */
// VMM.Util.unique_ID(size);
unique_ID: function(size) {
var getRandomNumber = function(range) {
return Math.floor(Math.random() * range);
};
var getRandomChar = function() {
var chars = "abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
return chars.substr( getRandomNumber(62), 1 );
};
var randomID = function(size) {
var str = "";
for(var i = 0; i < size; i++) {
str += getRandomChar();
}
return str;
};
return randomID(size);
},
/* * Tells you if a number is even or not
================================================== */
// VMM.Util.isEven(n)
isEven: function(n){
return (n%2 === 0) ? true : false;
},
/* * Get URL Variables
================================================== */
// var somestring = VMM.Util.getUrlVars(str_url)["varname"];
getUrlVars: function(string) {
var str = string.toString();
if (str.match('&')) {
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<sps.length; i++) {
sps[i] = sps[i].substr(0,1).toUpperCase() + sps[i].substr(1);
}
return sps.join(" ");
},
/* * Replaces dumb quote marks with smart ones
================================================== */
properQuotes: function(str) {
return str.replace(/\"([^\"]*)\"/gi,"“$1”");
},
/* * Add Commas to numbers
================================================== */
niceNumber: function(nStr){
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
},
/* * Transform text to Title Case
================================================== */
toTitleCase: function(t){
if ( VMM.Browser.browser == "Explorer" && parseInt(VMM.Browser.version, 10) >= 7) {
return t.replace("_", "%20");
} else {
var __TitleCase = {
__smallWords: ['a', 'an', 'and', 'as', 'at', 'but','by', 'en', 'for', 'if', 'in', 'of', 'on', 'or','the', 'to', 'v[.]?', 'via', 'vs[.]?'],
init: function() {
this.__smallRE = this.__smallWords.join('|');
this.__lowerCaseWordsRE = new RegExp('\\b(' + this.__smallRE + ')\\b', 'gi');
this.__firstWordRE = new RegExp('^([^a-zA-Z0-9 \\r\\n\\t]*)(' + this.__smallRE + ')\\b', 'gi');
this.__lastWordRE = new RegExp('\\b(' + this.__smallRE + ')([^a-zA-Z0-9 \\r\\n\\t]*)$', 'gi');
},
toTitleCase: function(string) {
var line = '';
var split = string.split(/([:.;?!][ ]|(?:[ ]|^)["“])/);
for (var i = 0; i < split.length; ++i) {
var s = split[i];
s = s.replace(/\b([a-zA-Z][a-z.'’]*)\b/g,this.__titleCaseDottedWordReplacer);
// lowercase the list of small words
s = s.replace(this.__lowerCaseWordsRE, this.__lowerReplacer);
// if the first word in the title is a small word then capitalize it
s = s.replace(this.__firstWordRE, this.__firstToUpperCase);
// if the last word in the title is a small word, then capitalize it
s = s.replace(this.__lastWordRE, this.__firstToUpperCase);
line += s;
}
// special cases
line = line.replace(/ V(s?)\. /g, ' v$1. ');
line = line.replace(/(['’])S\b/g, '$1s');
line = line.replace(/\b(AT&T|Q&A)\b/ig, this.__upperReplacer);
return line;
},
__titleCaseDottedWordReplacer: function (w) {
return (w.match(/[a-zA-Z][.][a-zA-Z]/)) ? w : __TitleCase.__firstToUpperCase(w);
},
__lowerReplacer: function (w) { return w.toLowerCase() },
__upperReplacer: function (w) { return w.toUpperCase() },
__firstToUpperCase: function (w) {
var split = w.split(/(^[^a-zA-Z0-9]*[a-zA-Z0-9])(.*)$/);
if (split[1]) {
split[1] = split[1].toUpperCase();
}
return split.join('');
}
};
__TitleCase.init();
t = t.replace(/_/g," ");
t = __TitleCase.toTitleCase(t);
return t;
}
}
}).init();
}
================================================
FILE: source/js/Core/Core/VMM.js
================================================
/**
* VéritéCo JS Core
* Designed and built by Zach Wise at VéritéCo zach@verite.co
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* Simple JavaScript Inheritance
By John Resig http://ejohn.org/
MIT Licensed.
================================================== */
(function() {
var initializing = false,
fnTest = /xyz/.test(function() {
xyz;
}) ? /\b_super\b/: /.*/;
// The base Class implementation (does nothing)
this.Class = function() {};
// Create a new Class that inherits from this class
Class.extend = function(prop) {
var _super = this.prototype;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
initializing = false;
// Copy the properties over onto the new prototype
for (var name in prop) {
// Check if we're overwriting an existing function
prototype[name] = typeof prop[name] == "function" &&
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
(function(name, fn) {
return function() {
var tmp = this._super;
// Add a new ._super() method that is the same method
// but on the super-class
this._super = _super[name];
// The method only need to be bound temporarily, so we
// remove it when we're done executing
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
};
})(name, prop[name]) :
prop[name];
}
// The dummy class constructor
function Class() {
// All construction is actually done in the init method
if (!initializing && this.init)
this.init.apply(this, arguments);
}
// Populate our constructed prototype object
Class.prototype = prototype;
// Enforce the constructor to be what we expect
Class.prototype.constructor = Class;
// And make this class extendable
Class.extend = arguments.callee;
return Class;
};
})();
/* Access to the Global Object
access the global object without hard-coding the identifier window
================================================== */
var global = (function () {
return this || (1,eval)('this');
}());
/* VMM
================================================== */
if (typeof VMM == 'undefined') {
/* Main Scope Container
================================================== */
//var VMM = {};
var VMM = Class.extend({});
/* Debug
================================================== */
VMM.debug = true;
/* Master Config
================================================== */
VMM.master_config = ({
init: function() {
return this;
},
sizes: {
api: {
width: 0,
height: 0
}
},
vp: "Pellentesque nibh felis, eleifend id, commodo in, interdum vitae, leo",
api_keys_master: {
flickr: "RAIvxHY4hE/Elm5cieh4X5ptMyDpj7MYIxziGxi0WGCcy1s+yr7rKQ==",
//google: "jwNGnYw4hE9lmAez4ll0QD+jo6SKBJFknkopLS4FrSAuGfIwyj57AusuR0s8dAo=",
google: "uQKadH1VMlCsp560gN2aOiMz4evWkl1s34yryl3F/9FJOsn+/948CbBUvKLN46U=",
twitter: ""
},
timers: {
api: 7000
},
api: {
pushques: []
},
twitter: {
active: false,
array: [],
api_loaded: false,
que: []
},
flickr: {
active: false,
array: [],
api_loaded: false,
que: []
},
youtube: {
active: false,
array: [],
api_loaded: false,
que: []
},
vimeo: {
active: false,
array: [],
api_loaded: false,
que: []
},
vine: {
active: false,
array: [],
api_loaded: false,
que: []
},
webthumb: {
active: false,
array: [],
api_loaded: false,
que: []
},
googlemaps: {
active: false,
map_active: false,
places_active: false,
array: [],
api_loaded: false,
que: []
},
googledocs: {
active: false,
array: [],
api_loaded: false,
que: []
},
googleplus: {
active: false,
array: [],
api_loaded: false,
que: []
},
wikipedia: {
active: false,
array: [],
api_loaded: false,
que: [],
tries: 0
},
soundcloud: {
active: false,
array: [],
api_loaded: false,
que: []
}
}).init();
//VMM.createElement(tag, value, cName, attrs, styles);
VMM.createElement = function(tag, value, cName, attrs, styles) {
var ce = "";
if (tag != null && tag != "") {
// TAG
ce += "<" + tag;
if (cName != null && cName != "") {
ce += " class='" + cName + "'";
};
if (attrs != null && attrs != "") {
ce += " " + attrs;
};
if (styles != null && styles != "") {
ce += " style='" + styles + "'";
};
ce += ">";
if (value != null && value != "") {
ce += value;
}
// CLOSE TAG
ce = ce + "</" + tag + ">";
}
return ce;
};
VMM.createMediaElement = function(media, caption, credit) {
var ce = "";
var _valid = false;
ce += "<div class='media'>";
if (media != null && media != "") {
valid = true;
ce += "<img src='" + media + "'>";
// CREDIT
if (credit != null && credit != "") {
ce += VMM.createElement("div", credit, "credit");
}
// CAPTION
if (caption != null && caption != "") {
ce += VMM.createElement("div", caption, "caption");
}
}
ce += "</div>";
return ce;
};
// Hide URL Bar for iOS and Android by Scott Jehl
// https://gist.github.com/1183357
VMM.hideUrlBar = function () {
var win = window,
doc = win.document;
// If there's a hash, or addEventListener is undefined, stop here
if( !location.hash || !win.addEventListener ){
//scroll to 1
window.scrollTo( 0, 1 );
var scrollTop = 1,
//reset to 0 on bodyready, if needed
bodycheck = setInterval(function(){
if( doc.body ){
clearInterval( bodycheck );
scrollTop = "scrollTop" in doc.body ? doc.body.scrollTop : 1;
win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
}
}, 15 );
win.addEventListener( "load", function(){
setTimeout(function(){
//reset to hide addr bar at onload
win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
}, 0);
}, false );
}
};
}
/* Trace (console.log)
================================================== */
function trace( msg ) {
if (VMM.debug) {
if (window.console) {
console.log(msg);
} else if ( typeof( jsTrace ) != 'undefined' ) {
jsTrace.send( msg );
} else {
//alert(msg);
}
}
}
/* 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();
}
}
}
};
================================================
FILE: source/js/Core/Embed/Embed.CDN.Generator.js
================================================
/* Support Timeline Embed Generator web form (becomes storyjs-embed-generator.js) */
if(typeof generator_embed_path == 'undefined' || typeof generator_embed_path == 'undefined') {
// REPLACE WITH YOUR BASEPATH IF YOU WANT OTHERWISE IT WILL TRY AND FIGURE IT OUT
// TODO Issue #618 better splitting
var generator_embed_path = getScriptPath("storyjs-embed-generator.js").split("js/")[0];
if (generator_embed_path.match("http")) {
generator_embed_path = generator_embed_path;
} else if (generator_embed_path == "/") {
generator_embed_path = "index.html";
} else {
generator_embed_path = generator_embed_path + "index.html";
}
}
function getScriptPath(scriptname) {
var scriptTags = document.getElementsByTagName('script'),
script_path = "";
for(var i = 0; i < scriptTags.length; i++) {
if (scriptTags[i].src.match(scriptname)) {
script_path = scriptTags[i].src;
}
}
return script_path.split('?')[0].split('/').slice(0, -1).join('/') + '/';
}
/* EXTRA
================================================== */
function getUrlVars(string) {
var vars = [],
hash,
hashes,
str = string.toString();
if (str.match('&')) {
str = str.replace("&", "&");
} else if (str.match('&')) {
str = str.replace("&", "&");
} else if (str.match('&')) {
str = str.replace("&", "&");
}
if (str.match('#')) {
str = str.split('#')[0];
}
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;
};
function getLinkAndIframe() {
var theobj = {},
e_source = document.getElementById('embed-source-url'),
e_width = document.getElementById('embed-width'),
e_height = document.getElementById('embed-height'),
e_maptype = document.getElementById('embed-maptype'),
e_language = document.getElementById('embed-language'),
e_embed = document.getElementById('embed_code'),
e_font = document.getElementById('embed-font'),
e_wordpress = document.getElementById('embed-wordpressplugin'),
e_startatend = document.getElementById('embed-startatend'),
e_hashbookmark = document.getElementById('embed-hashbookmark'),
e_startzoomadjust = document.getElementById('embed-startzoomadjust'),
e_startatslide = document.getElementById('embed-startatslide'),
e_debug = document.getElementById('embed-debug'),
e_googlemapkey = document.getElementById('embed-googlemapkey'),
start_at_end = false,
hash_bookmark = false,
is_debug = false,
iframe,
link,
vars,
wp,
source_key;
/* SOURCE KEY
================================================== */
if (e_source.value.match("docs.google.com")) {
source_key = VMM.Timeline.DataObj.model.googlespreadsheet.extractSpreadsheetKey(e_source.value);
} else {
if (e_source.value == "") {
source_key = "0Agl_Dv6iEbDadHdKcHlHcTB5bzhvbF9iTWwyMmJHdkE"
} else {
source_key = e_source.value;
}
}
/* START AT END
================================================== */
if (e_startatend.checked) {
start_at_end = true;
}
/* HASH BOOKMARK
================================================== */
if (e_hashbookmark.checked) {
hash_bookmark = true;
}
/* DEBUG
================================================== */
if (e_debug.checked) {
is_debug = true;
}
/* WORDPRESS
================================================== */
wp = "[timeline ";
if (e_width.value > 0) {
wp += "width='" + e_width.value + "' ";
}
if (e_height.value > 0) {
wp += "height='" + e_width.value + "' ";
}
wp += "font='" + e_font.value + "' ";
wp += "maptype='" + e_maptype.value + "' ";
wp += "lang='" + e_language.value + "' ";
wp += "src='" + e_source.value + "' ";
if (start_at_end) {
wp += "start_at_end='" + start_at_end + "' ";
}
if (hash_bookmark) {
wp += "hash_bookmark='" + hash_bookmark + "' ";
}
if (is_debug) {
wp += "debug='" + is_debug + "' ";
}
if (e_googlemapkey.value != "") {
wp += "gmap_key='" + e_googlemapkey.value + "' ";
}
if (parseInt(e_startatslide.value, 10) > 0) {
wp += "start_at_slide='" + parseInt(e_startatslide.value, 10) + "' ";
}
if (parseInt(e_startzoomadjust.value, 10) > 0) {
wp += "start_zoom_adjust='" + parseInt(e_startzoomadjust.value, 10) + "' ";
}
wp += "]";
theobj.wordpress = wp;
/* IFRAME AND LINK
================================================== */
vars = generator_embed_path + "?source=" + source_key;
vars += "&font=" + e_font.value;
vars += "&maptype=" + e_maptype.value;
vars += "&lang=" + e_language.value;
if (start_at_end) {
vars += "&start_at_end=" + start_at_end;
}
if (hash_bookmark) {
vars += "&hash_bookmark=" + hash_bookmark;
}
if (is_debug) {
vars += "&debug=" + is_debug;
}
if (parseInt(e_startatslide.value, 10) > 0) {
vars += "&start_at_slide=" + parseInt(e_startatslide.value, 10);
}
if (parseInt(e_startzoomadjust.value, 10) > 0) {
vars += "&start_zoom_adjust=" + parseInt(e_startzoomadjust.value, 10);
}
if (e_googlemapkey.value != "") {
vars += "&gmap_key=" + e_googlemapkey.value;
}
if (e_width.value > 0) {
vars += "&width=" + e_width.value;
}
if (e_height.value > 0) {
vars += "&height=" + e_height.value;
}
iframe = "<iframe src='" + vars + "'";
if (e_width.value > 0 || e_width.value.match("%")) {
iframe += " width='" + e_width.value + "'";
}
if (e_height.value > 0 || e_height.value.match("%")) {
iframe += " height='" + e_height.value + "'";
}
iframe += " frameborder='0'></iframe>";
theobj.iframe = iframe;
theobj.link = vars;
if (e_wordpress.checked) {
theobj.copybox = wp;
} else {
theobj.copybox = iframe;
}
return theobj;
};
/* EMBED GENERATOR
================================================== */
function updateEmbedCode(element, options) {
var e_embed = document.getElementById('embed_code'),
el = getLinkAndIframe();
e_embed.value = el.copybox;
jQuery("#preview-embed-link").attr('href', el.link);
jQuery("#preview-embed-iframe").html(el.iframe);
jQuery("#preview-embed").css("display","block");
}
================================================
FILE: source/js/Core/Embed/Embed.CDN.js
================================================
/* Embed.CDN
Extend the basic 'embed' functionality with Google Analytics tracking and url parsing to support URLs created with the Timeline generator form.
*/
/* CodeKit Import
http://incident57.com/codekit/
================================================== */
// @codekit-append "Embed.js";
/* REPLACE THIS WITH YOUR GOOGLE ANALYTICS ACCOUNT
================================================== */
var embed_analytics = "UA-537357-20";
/* REPLACE THIS WITH YOUR BASE PATH FOR TIMELINE
================================================== */
//var embed_path = "http://embed.verite.co/timeline/";
/* LOAD TIMER
================================================== */
var load_time_start = new Date().getTime(), the_load_time = 0;
/* GOOGLE ANALYTICS
================================================== */
var _gaq = _gaq || [];
(function() {
var ga = document.createElement('script'), s = document.getElementsByTagName('script')[0];
ga.type = 'text/javascript';
ga.async = true;
if ('https:' != document.location.protocol) { // analytics in https embeds problematic for IE 9/10/some Android
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
s.parentNode.insertBefore(ga, s);
_gaq.push(['_setAccount', embed_analytics]);
_gaq.push(['_trackPageview']);
}
})();
/* TIMELINE CDN SPECIFIC
================================================== */
var getUrlVars = function() {
var varobj = {}, url_vars = [], uv ;
//url_vars = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
url_vars = window.location.href.slice(window.location.href.indexOf('?') + 1);
if (url_vars.match('#')) {
url_vars = url_vars.split('#')[0];
}
url_vars = url_vars.split('&');
for(var i = 0; i < url_vars.length; i++) {
uv = url_vars[i].split('=');
varobj[uv[0]] = uv[1];
}
return varobj;
};
var onHeadline = function(e, headline) {
var the_page_title = "/" + headline,
the_page_url = location.href;
document.title = headline;
the_load_time = Math.floor((new Date().getTime() - load_time_start)/100)/10;
_gaq.push(['_trackEvent', 'Timeline', headline, the_page_url, the_load_time]);
};
var url_config = getUrlVars();
================================================
FILE: source/js/Core/Embed/Embed.LoadLib.js
================================================
/*
LoadLib
Designed and built by Zach Wise http://zachwise.com/
Extends LazyLoad
*/
/* * CodeKit Import
* http://incident57.com/codekit/
================================================== */
// @codekit-prepend "../Library/LazyLoad.js";
LoadLib = (function (doc) {
var loaded = [];
function isLoaded(url) {
var i = 0,
has_loaded = false;
for (i = 0; i < loaded.length; i++) {
if (loaded[i] == url) {
has_loaded = true;
}
}
if (has_loaded) {
return true;
} else {
loaded.push(url);
return false;
}
}
return {
css: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.css(urls, callback, obj, context);
}
},
js: function (urls, callback, obj, context) {
if (!isLoaded(urls)) {
LazyLoad.js(urls, callback, obj, context);
}
}
};
})(this.document);
================================================
FILE: source/js/Core/Embed/Embed.js
================================================
//StoryJS Embed Loader
// Provide a bootstrap method for instantiating a timeline. On page load, check the definition of these window scoped variables in this order: [url_config, timeline_config, storyjs_config, config]. As soon as one of these is found to be defined with type 'object,' it will be used to automatically instantiate a timeline.
/* CodeKit Import
http://incident57.com/codekit/
================================================== */
// @codekit-prepend "Embed.LoadLib.js";
var WebFontConfig;
if(typeof embed_path == 'undefined') {
// REPLACE WITH YOUR BASEPATH IF YOU WANT OTHERWISE IT WILL TRY AND FIGURE IT OUT
var _tmp_script_path = getEmbedScriptPath("storyjs-embed.js");
var embed_path = _tmp_script_path.substr(0,_tmp_script_path.lastIndexOf('js/'))
}
function getEmbedScriptPath(scriptname) {
var scriptTags = document.getElementsByTagName('script'),
script_path = "",
script_path_end = "";
for(var i = 0; i < scriptTags.length; i++) {
if (scriptTags[i].src.match(scriptname)) {
script_path = scriptTags[i].src;
}
}
if (script_path != "") {
script_path_end = "/"
}
return script_path.split('?')[0].split('/').slice(0, -1).join('/') + script_path_end;
}
/* CHECK TO SEE IF A CONFIG IS ALREADY DEFINED (FOR EASY EMBED)
================================================== */
(function() {
if (typeof url_config == 'object') {
createStoryJS(url_config);
} else if (typeof timeline_config == 'object') {
createStoryJS(timeline_config);
} else if (typeof storyjs_config == 'object') {
createStoryJS(storyjs_config);
} else if (typeof config == 'object') {
createStoryJS(config);
} else {
// No existing config. Call createStoryJS(your_config) manually with a config
}
})();
/* CREATE StoryJS Embed
================================================== */
function createStoryJS(c, src) {
/* VARS
================================================== */
var storyjs_embedjs, t, te, x,
isCDN = false,
js_version = "2.24",
jquery_version_required = "1.7.1",
jquery_version = "",
ready = {
timeout: "",
checks: 0,
finished: false,
js: false,
css: false,
jquery: false,
has_jquery: false,
language: false,
font: {
css: false,
js: false
}
},
path = {
base: embed_path,
css: embed_path + "css/",
js: embed_path + "js/",
locale: embed_path + "js/locale/",
jquery: "//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js",
font: {
google: false,
css: embed_path + "css/themes/font/",
js: "//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"
}
},
storyjs_e_config = {
version: js_version,
debug: false,
type: 'timeline',
id: 'storyjs',
embed_id: 'timeline-embed',
embed: true,
width: '100%',
height: '100%',
source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadFYzRjJPUGktY0NkWXFUWkVIZDNGRHc&output=html',
lang: 'en',
font: 'default',
css: path.css + 'timeline.css?'+js_version,
js: '',
api_keys: {
google: "",
flickr: "",
twitter: ""
},
gmap_key: ""
},
font_presets = [
{ name: "Merriweather-NewsCycle", google: [ 'News+Cycle:400,700:latin', 'Merriweather:400,700,900:latin' ] },
{ name: "NewsCycle-Merriweather", google: [ 'News+Cycle:400,700:latin', 'Merriweather:300,400,700:latin' ] },
{ name: "PoiretOne-Molengo", google: [ 'Poiret+One::latin', 'Molengo::latin' ] },
{ name: "Arvo-PTSans", google: [ 'Arvo:400,700,400italic:latin', 'PT+Sans:400,700,400italic:latin' ] },
{ name: "PTSerif-PTSans", google: [ 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },
{ name: "PT", google: [ 'PT+Sans+Narrow:400,700:latin', 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },
{ name: "DroidSerif-DroidSans", google: [ 'Droid+Sans:400,700:latin', 'Droid+Serif:400,700,400italic:latin' ] },
{ name: "Lekton-Molengo", google: [ 'Lekton:400,700,400italic:latin', 'Molengo::latin' ] },
{ name: "NixieOne-Ledger", google: [ 'Nixie+One::latin', 'Ledger::latin' ] },
{ name: "AbrilFatface-Average", google: [ 'Average::latin', 'Abril+Fatface::latin' ] },
{ name: "PlayfairDisplay-Muli", google: [ 'Playfair+Display:400,400italic:latin', 'Muli:300,400,300italic,400italic:latin' ] },
{ name: "Rancho-Gudea", google: [ 'Rancho::latin', 'Gudea:400,700,400italic:latin' ] },
{ name: "Bevan-PotanoSans", google: [ 'Bevan::latin', 'Pontano+Sans::latin' ] },
{ name: "BreeSerif-OpenSans", google: [ 'Bree+Serif::latin', 'Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800:latin' ] },
{ name: "SansitaOne-Kameron", google: [ 'Sansita+One::latin', 'Kameron:400,700:latin' ] },
{ name: "Lora-Istok", google: [ 'Lora:400,700,400italic,700italic:latin', 'Istok+Web:400,700,400italic,700italic:latin' ] },
{ name: "Pacifico-Arimo", google: [ 'Pacifico::latin', 'Arimo:400,700,400italic,700italic:latin' ] }
];
/* BUILD CONFIG
================================================== */
if (typeof c == 'object') {
for (x in c) {
if (Object.prototype.hasOwnProperty.call(c, x)) {
storyjs_e_config[x] = c[x];
}
}
}
if (typeof src != 'undefined') {
storyjs_e_config.source = src;
}
/* CDN VERSION?
================================================== */
if (typeof url_config == 'object') {
isCDN = true;
/* IS THE SOURCE GOOGLE SPREADSHEET WITH JUST THE KEY?
================================================== */
if (storyjs_e_config.source.match("docs.google.com") || storyjs_e_config.source.match("json") || storyjs_e_config.source.match("storify") ) {
} else {
storyjs_e_config.source = "https://docs.google.com/spreadsheet/pub?key=" + storyjs_e_config.source + "&output=html";
}
}
/* DETERMINE TYPE
================================================== */
// Check for old installs still using the old method of language
if (storyjs_e_config.js.match("locale")) {
// TODO Issue #618 better splitting
storyjs_e_config.lang = storyjs_e_config.js.split("locale/")[1].replace(".js", "");
storyjs_e_config.js = path.js + 'timeline-min.js?' + js_version;
}
if (storyjs_e_config.js.match("/")) {
} else {
storyjs_e_config.css = path.css + storyjs_e_config.type + ".css?" + js_version;
// Use unminified js file if in debug mode
storyjs_e_config.js = path.js + storyjs_e_config.type;
if (storyjs_e_config.debug) {
storyjs_e_config.js += ".js?" + js_version;
} else {
storyjs_e_config.js += "-min.js?" + js_version;
}
storyjs_e_config.id = "storyjs-" + storyjs_e_config.type;
}
/* PREPARE LANGUAGE
================================================== */
if (storyjs_e_config.lang.match("/")) {
path.locale = storyjs_e_config.lang;
} else {
path.locale = path.locale + storyjs_e_config.lang + ".js?" + js_version;
}
/* PREPARE
================================================== */
createEmbedDiv();
/* Load CSS
================================================== */
LoadLib.css(storyjs_e_config.css, onloaded_css);
/* Load FONT
================================================== */
if (storyjs_e_config.font == "default") {
ready.font.js = true;
ready.font.css = true;
} else {
// FONT CSS
var fn;
if (storyjs_e_config.font.match("/")) {
// TODO Issue #618 better splitting
fn = storyjs_e_config.font.split(".css")[0].split("/");
path.font.name = fn[fn.length -1];
path.font.css = storyjs_e_config.font;
} else {
path.font.name = storyjs_e_config.font;
path.font.css = path.font.css + storyjs_e_config.font + ".css?" + js_version;
}
LoadLib.css(path.font.css, onloaded_font_css);
// FONT GOOGLE JS
for(var i = 0; i < font_presets.length; i++) {
if (path.font.name == font_presets[i].name) {
path.font.google = true;
WebFontConfig = {google: { families: font_presets[i].google }};
}
}
if (path.font.google) {
LoadLib.js(path.font.js, onloaded_font_js);
} else {
ready.font.js = true;
}
}
/* Load jQuery
================================================== */
try {
ready.has_jquery = jQuery;
ready.has_jquery = true;
if (ready.has_jquery) {
var jquery_version_array = jQuery.fn.jquery.split(".");
var jquery_version_required_array = jquery_version_required.split(".");
ready.jquery = true;
for (i = 0; i < 2; i++) {
var have = jquery_version_array[i], need = parseFloat(jquery_version_required_array[i]);
if (have != need) {
ready.jquery = have > need;
break;
}
}
}
} catch(err) {
ready.jquery = false;
}
if (!ready.jquery) {
LoadLib.js(path.jquery, onloaded_jquery);
} else {
onloaded_jquery();
}
/* On Loaded
================================================== */
function onloaded_jquery() {
LoadLib.js(storyjs_e_config.js, onloaded_js);
}
function onloaded_js() {
ready.js = true;
if (storyjs_e_config.lang != "en") {
LazyLoad.js(path.locale, onloaded_language);
} else {
ready.language = true;
}
onloaded_check();
}
function onloaded_language() {
ready.language = true;
onloaded_check();
}
function onloaded_css() {
ready.css = true;
onloaded_check();
}
function onloaded_font_css() {
ready.font.css = true;
onloaded_check();
}
function onloaded_font_js() {
ready.font.js = true;
onloaded_check();
}
function onloaded_check() {
if (ready.checks > 40) {
return;
alert("Error Loading Files");
} else {
ready.checks++;
if (ready.js && ready.css && ready.font.css && ready.font.js && ready.language) {
if (!ready.finished) {
ready.finished = true;
buildEmbed();
}
} else {
ready.timeout = setTimeout('onloaded_check_again();', 250);
}
}
};
this.onloaded_check_again = function() {
onloaded_check();
};
/* Build Timeline
================================================== */
function createEmbedDiv() {
var embed_classname = "storyjs-embed";
t = document.createElement('div');
if (storyjs_e_config.embed_id != "") {
te = document.getElementById(storyjs_e_config.embed_id);
} else {
te = document.getElementById("timeline-embed");
}
te.appendChild(t);
t.setAttribute("id", storyjs_e_config.id);
if (storyjs_e_config.width.toString().match("%") ) {
te.style.width = storyjs_e_config.width.split("%")[0] + "%";
} else {
storyjs_e_config.width = storyjs_e_config.width - 2;
te.style.width = (storyjs_e_config.width) + 'px';
}
if (storyjs_e_config.height.toString().match("%")) {
te.style.height = storyjs_e_config.height;
embed_classname += " full-embed";
te.style.height = storyjs_e_config.height.split("%")[0] + "%";
} else if (storyjs_e_config.width.toString().match("%")) {
embed_classname += " full-embed";
storyjs_e_config.height = storyjs_e_config.height - 16;
te.style.height = (storyjs_e_config.height) + 'px';
}else {
embed_classname += " sized-embed";
storyjs_e_config.height = storyjs_e_config.height - 16;
te.style.height = (storyjs_e_config.height) + 'px';
}
te.setAttribute("class", embed_classname);
te.setAttribute("className", embed_classname);
t.style.position = 'relative';
}
function buildEmbed() {
VMM.debug = storyjs_e_config.debug;
storyjs_embedjs = new VMM.Timeline(storyjs_e_config.id);
storyjs_embedjs.init(storyjs_e_config);
if (isCDN) {
VMM.bindEvent(global, onHeadline, "HEADLINE");
}
}
}
================================================
FILE: source/js/Core/LICENSE
================================================
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
-------------------------------------------
================================================
FILE: source/js/Core/Language/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_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Loading Content",
loading: "Loading",
swipe_nav: "Swipe to Navigate"
}
}
};
================================================
FILE: source/js/Core/Language/locale/af.js
================================================
/* Afrikaans LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "af",
api: {
wikipedia: "af"
},
date: {
month: ["Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September", "Oktober", "November", "Desember"],
month_abbr: ["Jan.", "Feb.", "Maart", "April", "Mei", "Junei", "Julie", "Aug.", "Sept.", "Okt.", "Nov.", "Des."],
day: ["Sondag","Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"],
day_abbr: ["Son.","Maan.", "Dins.", "Woen.", "Don.", "Vry.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "d mmm',' yyyy 'om' HH:MM",
full_long_small_date: "HH:MM'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Die tydlyn laai... ",
return_to_title: "Begin voor",
expand_timeline: "Rek die tydlyn",
contract_timeline: "Krimp die tydlyn",
wikipedia: "Van Wikipedia, die gratis ensiklopedie",
loading_content: "Die inhoud laai",
loading: "Aan't laai",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/ar.js
================================================
/* Arabic LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ar",
right_to_left: true,
api: {
wikipedia: "ar"
},
date: {
month: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"],
month_abbr: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"],
day: ["الأحد","الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"],
day_abbr: ["الأحد","الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' hh:MM TT",
full_long_small_date: "hh:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "جاري التحميل... ",
return_to_title: "العودة",
expand_timeline: "تكبير العرض",
contract_timeline: "الاتفاقية",
wikipedia: "من ويكيبيديا, الموسوعة الحرة",
loading_content: "تحميل المحتوى",
loading: "تحميل",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/be.js
================================================
/* Belarusian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "be",
api: {
wikipedia: "be"
},
date: {
month: ["студзень", "люты", "сакавік", "красавік", "май", "чэрвень", "ліпень", "жнівень", "верасень", "кастрычнік", "лістапад", "снежань"],
month_abbr: ["стд", "лют", "скв", "крс", "май", "чрв", "лпн", "жнв", "врс", "кст", "лст", "снж"],
day: ["нядзеля","панядзелак", "аўторак", "серада", "чацвер", "пятніца", "субота"],
day_abbr: ["Нд.","Пн.", "Аўт.", "Ср.", "Чц.", "Пт.", "Сб."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'d mmmm yyyy'</small>'",
full_long: "d mmm yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Загрузка лініі часу... ",
return_to_title: "Вярнуцца ў пачатак",
expand_timeline: "Наблізіць лінію часу",
contract_timeline: "Аддаліць лінію часу",
wikipedia: "З Вікіпедыі, свабоднай энцыклапедыі",
loading_content: "Загрузка зместу",
loading: "Загрузка"
}
}
}
================================================
FILE: source/js/Core/Language/locale/bg.js
================================================
/* Bulgarian LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "bg",
api: {
wikipedia: "bg"
},
date: {
month: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
month_abbr: ["Ян.", "Фев.", "Март", "Апр.", "Май", "Юни", "Юли", "Авг.", "Септ.", "Окт.", "Ноем.", "Дек."],
day: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"],
day_abbr: ["Нед.", "Пон.", "Вт.", "Ср.", "Четв.", "Пет.", "Съб."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'d mmmm yyyy'</small>'",
full_long: "d mmm yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Зареждане... ",
return_to_title: "В началото",
expand_timeline: "Разширяване",
contract_timeline: "Свиване",
wikipedia: "От Уикипедия, свободната енциклопедия",
loading_content: "Съдържанието се зарежда",
loading: "Зарежда се",
swipe_nav: "Сменяйте с плъзгане настрани" }
}
}
================================================
FILE: source/js/Core/Language/locale/ca.js
================================================
/* Catalan LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "ca",
api: {
wikipedia: "ca"
},
date: {
month: ['Gener','Febrer','Març','Abril','Maig','Juny','Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
month_abbr: ['Gen','Feb','Mar','Abr','Mai','Jun','Jul','Ago','Set','Oct','Nov','Des'],
day: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
day_abbr: ['Dg.','Dl.','Dt.','Dc.','Dj.','Dv.','Ds.']
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "'<small>'d mmmm yyyy'</small>' HH:MM",
full_long: "dddd',' d mmm yyyy HH:MM",
full_long_small_date: "HH:MM'<br/><small>d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Carregant cronologia...",
return_to_title: "Tornar al títol",
expand_timeline: "Ampliar la cronologia",
contract_timeline: "Reduir la cronologia",
wikipedia: "Des de Wikipedia, l'enciclopèdia lliure",
loading_content: "Carregant contingut",
loading: "Carregant",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/cz.js
================================================
/* Czech LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "cz",
api: {
wikipedia: "cs"
},
date: {
month: ["ledna", "února", "března", "dubna", "května", "června", "července", "srpna", "září", "října", "listopadu", "prosince"],
month_abbr: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čen", "Čec", "Srp", "Zář", "Říj", "Lis", "Pro"],
day: ["neděle","pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota"],
day_abbr: ["Ne","Po", "Út", "St", "Čt", "Pá", "So"]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm ",
full: "d. mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm yyyy'</small>'",
full_long: "dddd d. mmm yyyy 'v' HH:MM",
full_long_small_date: "HH:MM'<br/><small>dddd d. mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Načítám časovou osu... ",
return_to_title: "Zpět na začátek",
expand_timeline: "Rozbalit časovou osu",
contract_timeline: "Sbalit časovou osu",
wikipedia: "Zdroj: otevřená encyklopedie Wikipedia",
loading_content: "Nahrávám obsah",
loading: "Nahrávám",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/da.js
================================================
/* Danish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "da",
api: {
wikipedia: "da"
},
date: {
month: ["januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december"],
month_abbr: ["jan.", "feb.", "mar.", "apr.", "maj.", "jun.", "jul.", "aug.", "sep.", "okt.", "nov.", "dec."],
day: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"],
day_abbr: ["sø.", "ma.", "ti.", "on.", "to.", "fr.", "lø."],
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm",
full: "d. mmmm',' yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm',' yyyy'</small>'",
full_long: "dddd',' d. mmm',' yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d. mmm yyyy'</small>'",
},
messages: {
loading_timeline: "Henter tidslinie...",
return_to_title: "Tilbage til titel",
expand_timeline: "Udvid tidslinien",
contract_timeline: "Træk tidslinien sammen",
wikipedia: "Fra Wikipedia",
loading_content: "Henter indhold",
loading: "Henter",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/de.js
================================================
/* German / Deutsch LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "de",
api: {
wikipedia: "de"
},
date: {
month: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
month_abbr: ["Jan.", "Feb.", "März", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."],
day: ["Sonntag","Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
day_abbr: ["So.","Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d. mmm",
full: "d. mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d. mmmm yyyy'</small>'",
full_long: "dddd',' d. mmm yyyy 'um' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d. mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Chronologie wird geladen...",
return_to_title: "Zurück zum Anfang",
expand_timeline: "Chronologie vergrößern",
contract_timeline: "Chronologie verkleinern",
wikipedia: "aus Wikipedia, der freien Enzyklopädie",
loading_content: "Inhalte werden geladen...",
loading: "Lädt...",
swipe_nav: "Wischen zum navigieren" }
}
}
================================================
FILE: source/js/Core/Language/locale/el.js
================================================
/* Greek LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
month_abbr: ["Ιαν.", "Φεβ.", "Μαρ.", "Απρ.", "Μαη", "Ιουν.", "Ιουλ.", "Αύγ.", "Σεπτ.", "Οκτ.", "Νοεμ.", "Δεκ."],
day: ["Κυριακή","Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"],
day_abbr: ["Κυρ.","Δευ.", "Τρίτη.", "Τετ.", "Πεμπ.", "Παρ.", "Σαβ."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Φόρτωση Timeline... ",
return_to_title: "Επιστροφή στον Τίτλο",
expand_timeline: "Μεγέθυνση",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Φόρτωση Περιεχομένου",
loading: "Γίνεται Φόρτωση",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/en-24hr.js
================================================
/* English LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.","Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM TT",
time_no_seconds_small_date: "HH:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' HH:MM TT",
full_long_small_date: "HH:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Loading Content",
loading: "Loading",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/en-week.js
================================================
/* English LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.","Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "'Week' W",
full: "'Week' W",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM TT",
time_no_seconds_small_date: "HH:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' HH:MM TT",
full_long_small_date: "HH:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Loading Content",
loading: "Loading",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/en.js
================================================
/* English LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "en",
api: {
wikipedia: "en"
},
date: {
month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
day_abbr: ["Sun.","Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "mmm d",
full: "mmmm d',' yyyy",
time_short: "h:MM:ss TT",
time_no_seconds_short: "h:MM TT",
time_no_seconds_small_date: "h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'",
full_long: "mmm d',' yyyy 'at' h:MM TT",
full_long_small_date: "h:MM TT'<br/><small>mmm d',' yyyy'</small>'"
},
messages: {
loading_timeline: "Loading Timeline... ",
return_to_title: "Return to Title",
expand_timeline: "Expand Timeline",
contract_timeline: "Contract Timeline",
wikipedia: "From Wikipedia, the free encyclopedia",
loading_content: "Loading Content",
loading: "Loading",
swipe_nav: "Swipe to Navigate"
}
}
}
================================================
FILE: source/js/Core/Language/locale/eo.js
================================================
/* Esperanto LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "eo",
api: {
wikipedia: "eo"
},
date: {
month: ["januaro", "februaro", "marto", "aprilo", "majo", "junio", "julio", "aŭgusto", "septembro", "oktobro", "novembro", "decembro"],
month_abbr: ["jan.", "feb.", "mar.", "apr.", "maj.", "jun.", "jul.", "aŭg.", "sep.", "okt.", "nov.", "dec."],
day: ["dimanĉo","lundo", "mardo", "merkredo", "ĵaŭdo", "vendredo", "sabato"],
day_abbr: ["dim.","lun.", "mar.", "mer.", "ĵaŭ.", "ven.", "sab."]
},
dateformats: {
year: "yyyy",
month_short: "mmm",
month: "mmmm yyyy",
full_short: "d mmm",
full: "d mmmm yyyy",
time_short: "HH:MM:ss",
time_no_seconds_short: "HH:MM",
time_no_seconds_small_date: "HH:MM'<br/><small>'d mmmm yyyy'</small>'",
full_long: "dddd',' d mmm yyyy 'ĉe' HH:MM",
full_long_small_date: "HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'"
},
messages: {
loading_timeline: "Ŝarĝante Kronologio... ",
return_to_title: "Reveno al Titolo",
expand_timeline: "Pliampleksigu Kronologio",
contract_timeline: "Malpliampleksigu Kronologio",
wikipedia: "El Vikipedio, la libera enciklopedio",
loading_content: "Ŝarĝante enhavo",
loading: "Ŝarĝante",
swipe_nav: "Swipe to Navigate" }
}
}
================================================
FILE: source/js/Core/Language/locale/es.js
================================================
/* Spanish LANGUAGE
================================================== */
if(typeof VMM != 'undefined') {
VMM.Language = {
lang: "es",
api: {
wikipedia: "es"
},
date: {
month: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
month_abbr: ["Ene.", "Feb.", "Mar.", "Abr.", "May.", "Jun.", "Jul.", "Ago.", "Sep.", "Oct.", "Nov.", "Dic."],
day: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábad
gitextract_abbcag5e/
├── .gitignore
├── .gitmodules
├── CHANGELOG
├── DEVELOPER.md
├── LICENSE
├── README.markdown
├── bower.json
├── config.json
├── examples/
│ ├── README.md
│ ├── example_googlespreadsheet.html
│ ├── example_jquery_load.html
│ ├── example_json.html
│ ├── example_json.json
│ ├── example_jsonp.html
│ ├── example_jsonp.jsonp
│ ├── example_storify.html
│ ├── model.json
│ └── model.jsonp
├── fabfile.py
├── requirements.txt
├── source/
│ ├── embed/
│ │ └── index.html
│ ├── gfx/
│ │ ├── timeline-dark.psd
│ │ ├── timeline-dark@2x.psd
│ │ ├── timeline.psd
│ │ └── timeline@2x.psd
│ ├── js/
│ │ ├── Core/
│ │ │ ├── .gitignore
│ │ │ ├── Core/
│ │ │ │ ├── VMM.Browser.js
│ │ │ │ ├── VMM.Core.js
│ │ │ │ ├── VMM.Date.js
│ │ │ │ ├── VMM.FileExtention.js
│ │ │ │ ├── VMM.Library.js
│ │ │ │ ├── VMM.LoadLib.js
│ │ │ │ ├── VMM.Util.js
│ │ │ │ └── VMM.js
│ │ │ ├── Embed/
│ │ │ │ ├── Embed.CDN.Generator.js
│ │ │ │ ├── Embed.CDN.js
│ │ │ │ ├── Embed.LoadLib.js
│ │ │ │ └── Embed.js
│ │ │ ├── LICENSE
│ │ │ ├── Language/
│ │ │ │ ├── VMM.Language.js
│ │ │ │ └── locale/
│ │ │ │ ├── af.js
│ │ │ │ ├── ar.js
│ │ │ │ ├── be.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cz.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de.js
│ │ │ │ ├── el.js
│ │ │ │ ├── en-24hr.js
│ │ │ │ ├── en-week.js
│ │ │ │ ├── en.js
│ │ │ │ ├── eo.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fo.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── fy.js
│ │ │ │ ├── ga.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── hy.js
│ │ │ │ ├── id.js
│ │ │ │ ├── is.js
│ │ │ │ ├── it.js
│ │ │ │ ├── iw.js
│ │ │ │ ├── ja.js
│ │ │ │ ├── ka.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── lb.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── ms.js
│ │ │ │ ├── ne.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── no.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-br.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── rm.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── si.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sl.js
│ │ │ │ ├── sr-cy.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── ta.js
│ │ │ │ ├── te.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tl.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── zh-cn.js
│ │ │ │ └── zh-tw.js
│ │ │ ├── Library/
│ │ │ │ ├── AES.js
│ │ │ │ ├── LazyLoad.js
│ │ │ │ ├── Leaflet.js
│ │ │ │ ├── bootstrap-tooltip.js
│ │ │ │ └── jQuery/
│ │ │ │ └── easing.js
│ │ │ ├── Media/
│ │ │ │ ├── VMM.ExternalAPI.js
│ │ │ │ ├── VMM.Media.js
│ │ │ │ ├── VMM.MediaElement.js
│ │ │ │ ├── VMM.MediaType.js
│ │ │ │ └── VMM.TextElement.js
│ │ │ ├── README.md
│ │ │ ├── Slider/
│ │ │ │ ├── VMM.DragSlider.js
│ │ │ │ ├── VMM.Slider.Slide.js
│ │ │ │ └── VMM.Slider.js
│ │ │ └── VMM.StoryJS.js
│ │ ├── VMM.Timeline.DataObj.js
│ │ ├── VMM.Timeline.Min.js
│ │ ├── VMM.Timeline.TimeNav.js
│ │ └── VMM.Timeline.js
│ └── less/
│ ├── Core/
│ │ ├── .gitignore
│ │ ├── Font/
│ │ │ ├── AbrilFatface-Average.less
│ │ │ ├── Arvo-PTSans.less
│ │ │ ├── Bevan-PotanoSans.less
│ │ │ ├── BreeSerif-OpenSans.less
│ │ │ ├── DroidSerif-DroidSans.less
│ │ │ ├── Georgia-Helvetica.less
│ │ │ ├── Lekton-Molengo.less
│ │ │ ├── Lora-Istok.less
│ │ │ ├── Merriweather-NewsCycle.less
│ │ │ ├── NewsCycle-Merriweather.less
│ │ │ ├── NixieOne-Ledger.less
│ │ │ ├── PT.less
│ │ │ ├── PTSerif-PTSans.less
│ │ │ ├── Pacifico-Arimo.less
│ │ │ ├── PlayfairDisplay-Muli.less
│ │ │ ├── PoiretOne-Molengo.less
│ │ │ ├── Rancho-Gudea.less
│ │ │ └── SansitaOne-Kameron.less
│ │ ├── Font.Default.less
│ │ ├── GFX.less
│ │ ├── LICENSE
│ │ ├── Mixins.less
│ │ ├── README.md
│ │ ├── Reset.less
│ │ ├── Typography.less
│ │ ├── VMM.Core.less
│ │ ├── VMM.Slider.less
│ │ ├── VMM.Tooltip.less
│ │ └── Variables.less
│ ├── Theme/
│ │ └── Dark.less
│ ├── VMM.Timeline.TimeNav.less
│ └── VMM.Timeline.less
├── tests/
│ ├── test_extra_html.html
│ ├── test_extra_html.json
│ ├── test_googlespreadsheet.html
│ ├── test_googlespreadsheet_bc_era_ages_epoch.html
│ ├── test_googlespreadsheet_biblical_ad.html
│ ├── test_googlespreadsheet_minutes.html
│ ├── test_iframe_640.html
│ ├── test_jsonp.html
│ ├── test_utc_firefox.html
│ └── test_utc_firefox.json
└── website/
├── __init__.py
├── app.py
├── core/
│ ├── __init__.py
│ └── settings/
│ ├── __init__.py
│ ├── base.py
│ └── loc.py
├── static/
│ ├── css/
│ │ └── site.css
│ ├── img/
│ │ └── .gitignore
│ ├── js/
│ │ ├── .gitignore
│ │ ├── main.js
│ │ └── story-timeline.js
│ └── welcome/
│ └── welcome.json
└── templates/
├── _about.html
├── _demo.html
├── _description.html
├── _developers.html
├── _examples.html
├── _help.html
├── _make.html
├── _overview.html
├── base.html
├── error.html
├── examples/
│ ├── example.json
│ ├── houston/
│ │ ├── data.json
│ │ └── index.html
│ ├── republican/
│ │ └── index.html
│ ├── shit-people-say/
│ │ ├── data.json
│ │ └── index.html
│ └── user-interface/
│ ├── data.json
│ └── index.html
└── index.html
SYMBOL INDEX (125 symbols across 19 files)
FILE: fabfile.py
function add_paths (line 16) | def add_paths(*args):
function stage_wp (line 34) | def stage_wp():
FILE: source/js/Core/Core/VMM.Library.js
function callback (line 527) | function callback( status, statusText, responses, responseHeaders ) {
FILE: source/js/Core/Core/VMM.LoadLib.js
function isLoaded (line 14) | function isLoaded(url) {
FILE: source/js/Core/Core/VMM.Util.js
function replaceURLWithHTMLLinks (line 234) | function replaceURLWithHTMLLinks(text) {
FILE: source/js/Core/Core/VMM.js
function Class (line 59) | function Class() {
function trace (line 318) | function trace( msg ) {
FILE: source/js/Core/Embed/Embed.CDN.Generator.js
function getScriptPath (line 14) | function getScriptPath(scriptname) {
function getUrlVars (line 28) | function getUrlVars(string) {
function getLinkAndIframe (line 55) | function getLinkAndIframe() {
function updateEmbedCode (line 209) | function updateEmbedCode(element, options) {
FILE: source/js/Core/Embed/Embed.LoadLib.js
function isLoaded (line 15) | function isLoaded(url) {
FILE: source/js/Core/Embed/Embed.js
function getEmbedScriptPath (line 17) | function getEmbedScriptPath(scriptname) {
function createStoryJS (line 50) | function createStoryJS(c, src) {
FILE: source/js/Core/Library/LazyLoad.js
function createNode (line 73) | function createNode(name, attrs) {
function finish (line 94) | function finish(type) {
function getEnv (line 123) | function getEnv() {
function load (line 162) | function load(type, urls, callback, obj, context) {
function pollGecko (line 279) | function pollGecko(node) {
function pollWebKit (line 315) | function pollWebKit() {
FILE: source/js/Core/Library/Leaflet.js
function timeoutDefer (line 74) | function timeoutDefer(callback) {
function exec (line 97) | function exec() {
function createMulti (line 3670) | function createMulti(Klass) {
function onTouchStart (line 4496) | function onTouchStart(e) {
function onTouchEnd (line 4508) | function onTouchEnd(e) {
function replaceFn (line 5216) | function replaceFn(w) {
FILE: source/js/Core/Library/bootstrap-tooltip.js
function removeWithAnimation (line 167) | function removeWithAnimation() {
FILE: source/js/Core/Media/VMM.ExternalAPI.js
function mapProvider (line 460) | function mapProvider(name) {
function geocodePlace (line 584) | function geocodePlace() {
function loadPlaces (line 641) | function loadPlaces() {
function loadPlacesAlt (line 735) | function loadPlacesAlt() {
function loadKML (line 831) | function loadKML() {
function onYouTubePlayerAPIReady (line 1631) | function onYouTubePlayerAPIReady() {
FILE: source/js/Core/Slider/VMM.DragSlider.js
function makeDraggable (line 92) | function makeDraggable(drag_object, move_object) {
function onDragLeave (line 100) | function onDragLeave(e) {
function onDragStart (line 115) | function onDragStart(e) {
function onDragEnd (line 124) | function onDragEnd(e) {
function onDragMove (line 138) | function onDragMove(e) {
function dragStart (line 143) | function dragStart(elem, delem, e) {
function dragEnd (line 161) | function dragEnd(elem, delem, e) {
function dragMove (line 166) | function dragMove(elem, e) {
function dragMomentum (line 192) | function dragMomentum(elem, e) {
function getLeft (line 242) | function getLeft(elem) {
FILE: source/js/Core/Slider/VMM.Slider.js
function onConfigSet (line 166) | function onConfigSet() {
function reSize (line 170) | function reSize(go_to_slide, from_start) {
function onDragFinish (line 223) | function onDragFinish(e, d) {
function onNextClick (line 257) | function onNextClick(e) {
function onPrevClick (line 266) | function onPrevClick(e) {
function onKeypressNav (line 275) | function onKeypressNav(e) {
function onTouchUpdate (line 288) | function onTouchUpdate(e, b) {
function onExplainerClick (line 315) | function onExplainerClick(e) {
function upDate (line 321) | function upDate() {
function getData (line 328) | function getData(d) {
function buildSlides (line 334) | function buildSlides(d) {
function preloadSlides (line 347) | function preloadSlides(skip) {
function preloadTimeOutSlides (line 361) | function preloadTimeOutSlides() {
function sizeSlide (line 390) | function sizeSlide(slide_id) {
function sizeSlides (line 396) | function sizeSlides() {
function positionSlides (line 572) | function positionSlides() {
function opacitySlides (line 584) | function opacitySlides(n) {
function goToSlide (line 602) | function goToSlide(n, ease, duration, fast, firstrun) {
function backToCurrentSlide (line 705) | function backToCurrentSlide() {
function showMessege (line 712) | function showMessege(e, msg, other) {
function hideMessege (line 718) | function hideMessege() {
function detachMessege (line 722) | function detachMessege() {
function buildNavigation (line 728) | function buildNavigation() {
function build (line 751) | function build() {
FILE: source/js/VMM.Timeline.DataObj.js
function requestJsonData (line 210) | function requestJsonData() {
function getGVar (line 238) | function getGVar(v) {
function requestJsonData (line 338) | function requestJsonData() {
function getGVar (line 366) | function getGVar(v) {
FILE: source/js/VMM.Timeline.TimeNav.js
function onConfigSet (line 185) | function onConfigSet() {
function reSize (line 189) | function reSize(firstrun) {
function upDate (line 199) | function upDate() {
function onZoomIn (line 203) | function onZoomIn() {
function onZoomOut (line 228) | function onZoomOut() {
function onBackHome (line 248) | function onBackHome(e) {
function onMouseScroll (line 254) | function onMouseScroll(e) {
function refreshTimeline (line 303) | function refreshTimeline() {
function onMarkerClick (line 316) | function onMarkerClick(e) {
function onMarkerHover (line 322) | function onMarkerHover(e) {
function goToMarker (line 326) | function goToMarker(n, ease, duration, fast, firstrun) {
function onTouchUpdate (line 368) | function onTouchUpdate(e, b) {
function averageMarkerPositionDistance (line 374) | function averageMarkerPositionDistance() {
function averageDateDistance (line 395) | function averageDateDistance() {
function calculateMultiplier (line 419) | function calculateMultiplier() {
function calculateInterval (line 433) | function calculateInterval() {
function getDateFractions (line 566) | function getDateFractions(the_date, is_utc) {
function positionRelative (line 605) | function positionRelative(_interval, first, last) {
function positionOnTimeline (line 692) | function positionOnTimeline(the_interval, timerelative) {
function positionMarkers (line 699) | function positionMarkers(is_animated) {
function positionEras (line 860) | function positionEras(is_animated) {
function positionInterval (line 908) | function positionInterval(the_main_element, the_intervals, is_animated, ...
function createIntervalElements (line 1043) | function createIntervalElements(_interval, _array, _element_parent) {
function build (line 1249) | function build() {
function buildInterval (line 1344) | function buildInterval() {
function buildMarkers (line 1433) | function buildMarkers() {
function buildEras (line 1581) | function buildEras() {
FILE: source/js/VMM.Timeline.js
function createConfig (line 178) | function createConfig(conf) {
function createStructure (line 214) | function createStructure() {
function onDataReady (line 258) | function onDataReady(e, d) {
function reSize (line 270) | function reSize() {
function onSliderLoaded (line 282) | function onSliderLoaded(e) {
function onComponentLoaded (line 287) | function onComponentLoaded(e) {
function onTimeNavLoaded (line 295) | function onTimeNavLoaded(e) {
function onSlideUpdate (line 300) | function onSlideUpdate(e) {
function onMarkerUpdate (line 307) | function onMarkerUpdate(e) {
function goToEvent (line 314) | function goToEvent(n) {
function setHash (line 322) | function setHash(n) {
function getViewport (line 328) | function getViewport() {
function setViewport (line 332) | function setViewport() {
function searchOrientation (line 359) | function searchOrientation(orientation) {
function orientationChange (line 373) | function orientationChange() {
function getData (line 446) | function getData(url) {
function showMessege (line 455) | function showMessege(e, msg, other) {
function hideMessege (line 465) | function hideMessege() {
function detachMessege (line 469) | function detachMessege() {
function build (line 475) | function build() {
function updateSize (line 515) | function updateSize() {
function buildDates (line 549) | function buildDates() {
FILE: website/app.py
function inject_static_url (line 47) | def inject_static_url():
function catch_build (line 60) | def catch_build(path):
function catch_source (line 67) | def catch_source(path):
function catch_all (line 77) | def catch_all(path='index.html', context=None):
FILE: website/static/js/main.js
function navSmartScroll (line 5) | function navSmartScroll($destination) {
Condensed preview — 195 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,052K chars).
[
{
"path": ".gitignore",
"chars": 145,
"preview": "*.DS_Store\n.DS_Store*\ndev_examples/\ncdn/\ncompiled\n*.tmproj\n*.tmproject\ntmtags\nsource/gfx/Sprites/\n/node_modules\n*.pyc\nco"
},
{
"path": ".gitmodules",
"chars": 0,
"preview": ""
},
{
"path": "CHANGELOG",
"chars": 3126,
"preview": "2.35.6 (2015-03-25)\n------\nRestore original animation/easing (revert pull #681)\n\n2.35.5 (2015-02-26)\n------\n#672,679,681"
},
{
"path": "DEVELOPER.md",
"chars": 3475,
"preview": "## Requirements\n\n python 2.7.x\n \n [virtualenvwrapper](http://virtualenvwrapper.readthedocs.org/)\n \n [Node.js](http://nod"
},
{
"path": "LICENSE",
"chars": 16430,
"preview": "This Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distri"
},
{
"path": "README.markdown",
"chars": 15182,
"preview": "# This Version of Timeline is no longer under development\n\nTherefore, GitHub issues and pull requests have been disabled"
},
{
"path": "bower.json",
"chars": 794,
"preview": "{\n \"name\": \"TimelineJS\",\n \"version\": \"2.32.0\",\n \"homepage\": \"http://timeline.knightlab.com\",\n \"authors\": [\n \"Zach"
},
{
"path": "config.json",
"chars": 6891,
"preview": "//\n// timelinejs configuration \n// \n// All file/directory paths are relative to the project directory.\n//\n// Regular exp"
},
{
"path": "examples/README.md",
"chars": 480,
"preview": "NOTE: To use these examples, you must run a simple local webserver. They WILL NOT work if you simply open them in a brow"
},
{
"path": "examples/example_googlespreadsheet.html",
"chars": 2090,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "examples/example_jquery_load.html",
"chars": 753,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>jQuery Load Example Timeline</title>\n\t\t<meta "
},
{
"path": "examples/example_json.html",
"chars": 2003,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "examples/example_json.json",
"chars": 8371,
"preview": "\n{\n \"timeline\":\n {\n \"headline\":\"Sh*t People Say\",\n \"type\":\"default\",\n\t\t\"text\":\"People say stuff\",\n\t\t"
},
{
"path": "examples/example_jsonp.html",
"chars": 2005,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "examples/example_jsonp.jsonp",
"chars": 8027,
"preview": "storyjs_jsonp_data = {\n \"timeline\":\n {\n \"headline\":\"Sh*t People Say\",\n \"type\":\"default\",\n\t\t\"text\":\"P"
},
{
"path": "examples/example_storify.html",
"chars": 2018,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "examples/model.json",
"chars": 898,
"preview": "\n{\n\t\"timeline\":\n\t{\n\t\t\"headline\":\"The Main Timeline Headline Goes here\",\n\t\t\"type\":\"default\",\n\t\t\"text\":\"<p>Intro body text"
},
{
"path": "examples/model.jsonp",
"chars": 918,
"preview": "storyjs_jsonp_data = {\n\t\"timeline\":\n\t{\n\t\t\"headline\":\"The Main Timeline Headline Goes here\",\n\t\t\"type\":\"default\",\n\t\t\"text\""
},
{
"path": "fabfile.py",
"chars": 1464,
"preview": "from os.path import abspath, basename, dirname, join\nimport sys\nfrom fabric.api import env\nfrom fabric.decorators import"
},
{
"path": "requirements.txt",
"chars": 199,
"preview": "Fabric==1.6.1\nFlask==0.10.1\nJinja2==2.7\nMarkupSafe==0.18\nWerkzeug==0.9.3\nboto==2.13.3\nitsdangerous==0.22\nparamiko==1.10."
},
{
"path": "source/embed/index.html",
"chars": 2547,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \n 88888888888 d8b 888 d8b 888888 d8"
},
{
"path": "source/js/Core/.gitignore",
"chars": 51,
"preview": ".buildpath\n.project\n.settings\n*.DS_Store\n.DS_Store*"
},
{
"path": "source/js/Core/Core/VMM.Browser.js",
"chars": 3948,
"preview": "/*\t* DEVICE AND BROWSER DETECTION\n================================================== */\nif(typeof VMM != 'undefined' && "
},
{
"path": "source/js/Core/Core/VMM.Core.js",
"chars": 478,
"preview": "/* VeriteCo Core\n================================================== */\n\n/*\t* CodeKit Import\n\t* http://incident57.com/cod"
},
{
"path": "source/js/Core/Core/VMM.Date.js",
"chars": 15921,
"preview": "/*\t* Utilities and Useful Functions\n================================================== */\nif(typeof VMM != 'undefined' &"
},
{
"path": "source/js/Core/Core/VMM.FileExtention.js",
"chars": 757,
"preview": "/*\t* File Extention\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.Fil"
},
{
"path": "source/js/Core/Core/VMM.Library.js",
"chars": 13823,
"preview": "/*\t* LIBRARY ABSTRACTION\n================================================== */\nif(typeof VMM != 'undefined') {\n\t\n\tVMM.sm"
},
{
"path": "source/js/Core/Core/VMM.LoadLib.js",
"chars": 845,
"preview": "/*\n\tLoadLib\n\tDesigned and built by Zach Wise digitalartwork.net\n*/\n\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit"
},
{
"path": "source/js/Core/Core/VMM.Util.js",
"chars": 14486,
"preview": "/*\t* Utilities and Useful Functions\n================================================== */\nif(typeof VMM != 'undefined' &"
},
{
"path": "source/js/Core/Core/VMM.js",
"chars": 8650,
"preview": "/**\n\t* VéritéCo JS Core\n\t* Designed and built by Zach Wise at VéritéCo zach@verite.co\n\n\t* This Source Code Form is subje"
},
{
"path": "source/js/Core/Embed/Embed.CDN.Generator.js",
"chars": 6140,
"preview": "/* Support Timeline Embed Generator web form (becomes storyjs-embed-generator.js) */ \nif(typeof generator_embed_path =="
},
{
"path": "source/js/Core/Embed/Embed.CDN.js",
"chars": 2243,
"preview": "/* Embed.CDN\n\tExtend the basic 'embed' functionality with Google Analytics tracking and url parsing to support URLs crea"
},
{
"path": "source/js/Core/Embed/Embed.LoadLib.js",
"chars": 866,
"preview": "/*\n\tLoadLib\n\tDesigned and built by Zach Wise http://zachwise.com/\n\tExtends LazyLoad\n*/\n\n/*\t* CodeKit Import\n\t* http://in"
},
{
"path": "source/js/Core/Embed/Embed.js",
"chars": 11536,
"preview": "//StoryJS Embed Loader\n// Provide a bootstrap method for instantiating a timeline. On page load, check the definition of"
},
{
"path": "source/js/Core/LICENSE",
"chars": 16144,
"preview": "This Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distri"
},
{
"path": "source/js/Core/Language/VMM.Language.js",
"chars": 1371,
"preview": "/* DEFAULT LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.La"
},
{
"path": "source/js/Core/Language/locale/af.js",
"chars": 1321,
"preview": "/* Afrikaans LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Language/locale/ar.js",
"chars": 1400,
"preview": "/* Arabic LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n\tVMM.Langu"
},
{
"path": "source/js/Core/Language/locale/be.js",
"chars": 1322,
"preview": "/* Belarusian LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n\tVMM.L"
},
{
"path": "source/js/Core/Language/locale/bg.js",
"chars": 1304,
"preview": "/* Bulgarian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Language/locale/ca.js",
"chars": 1271,
"preview": "/* Catalan LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/cz.js",
"chars": 1292,
"preview": "/* Czech LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language ="
},
{
"path": "source/js/Core/Language/locale/da.js",
"chars": 1305,
"preview": "/* Danish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language "
},
{
"path": "source/js/Core/Language/locale/de.js",
"chars": 1367,
"preview": "/* German / Deutsch LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM"
},
{
"path": "source/js/Core/Language/locale/el.js",
"chars": 1369,
"preview": "/* Greek LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language ="
},
{
"path": "source/js/Core/Language/locale/en-24hr.js",
"chars": 1334,
"preview": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/en-week.js",
"chars": 1331,
"preview": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/en.js",
"chars": 1333,
"preview": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/eo.js",
"chars": 1372,
"preview": "/* Esperanto LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Language/locale/es.js",
"chars": 1317,
"preview": "/* Spanish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/et.js",
"chars": 1306,
"preview": "/* Estonian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Languag"
},
{
"path": "source/js/Core/Language/locale/eu.js",
"chars": 1394,
"preview": "/* Basque/ Euskara LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM."
},
{
"path": "source/js/Core/Language/locale/fa.js",
"chars": 1232,
"preview": "if(typeof VMM != 'undefined') {\r\n\tVMM.Language = {\r\n\t\tlang: \"fa\",\r\n\t\tright_to_left:!0,\r\n\t\tapi: {\r\n\t\t\twikipedia: \"fa\"\r\n\t"
},
{
"path": "source/js/Core/Language/locale/fi.js",
"chars": 1343,
"preview": "/* Finnish LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language "
},
{
"path": "source/js/Core/Language/locale/fo.js",
"chars": 1406,
"preview": "/* Faroese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/fr.js",
"chars": 1382,
"preview": "/* French LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language "
},
{
"path": "source/js/Core/Language/locale/fy.js",
"chars": 1317,
"preview": "/* Frisian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/ga.js",
"chars": 1399,
"preview": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/gl.js",
"chars": 1325,
"preview": "/* Galician LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Languag"
},
{
"path": "source/js/Core/Language/locale/he.js",
"chars": 1372,
"preview": "/* Hebrew (beta) LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n\tVM"
},
{
"path": "source/js/Core/Language/locale/hi.js",
"chars": 1525,
"preview": "/*\n TimelineJS - ver. 2014-12-09-18-51-25 - 2014-12-09\n Copyright (c) 2012-2013 Northwestern University\n a proj"
},
{
"path": "source/js/Core/Language/locale/hr.js",
"chars": 1288,
"preview": "/* Croatian (Latin) LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM"
},
{
"path": "source/js/Core/Language/locale/hu.js",
"chars": 1330,
"preview": "/* Hungarian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Language/locale/hy.js",
"chars": 1363,
"preview": "/* Armenian LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/id.js",
"chars": 1312,
"preview": "/* Indonesian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langu"
},
{
"path": "source/js/Core/Language/locale/is.js",
"chars": 1372,
"preview": "/* Icelandic LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Language/locale/it.js",
"chars": 1309,
"preview": "/* Italian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/iw.js",
"chars": 1445,
"preview": "/* Hebrew (beta) LANGUAGE \r\n================================================== */\r\ntrace(\"Language code 'iw' for Hebrew"
},
{
"path": "source/js/Core/Language/locale/ja.js",
"chars": 1179,
"preview": "/* Japanese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Languag"
},
{
"path": "source/js/Core/Language/locale/ka.js",
"chars": 1356,
"preview": "/* Georgian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Languag"
},
{
"path": "source/js/Core/Language/locale/ko.js",
"chars": 1140,
"preview": "/* Korean LANGUAGE \n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/lb.js",
"chars": 1218,
"preview": "/* Luxembourgish LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\nVMM.Lang"
},
{
"path": "source/js/Core/Language/locale/lt.js",
"chars": 2024,
"preview": "/* Lithuanian LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n "
},
{
"path": "source/js/Core/Language/locale/lv.js",
"chars": 1375,
"preview": "/* Latvian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/ms.js",
"chars": 1302,
"preview": "/* Malay LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language ="
},
{
"path": "source/js/Core/Language/locale/ne.js",
"chars": 1970,
"preview": "/* Nepali LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n VM"
},
{
"path": "source/js/Core/Language/locale/nl.js",
"chars": 1308,
"preview": "/* Dutch LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language ="
},
{
"path": "source/js/Core/Language/locale/no.js",
"chars": 1330,
"preview": "/* Norwegian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Language/locale/pl.js",
"chars": 1344,
"preview": "/* Polish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language "
},
{
"path": "source/js/Core/Language/locale/pt-br.js",
"chars": 1404,
"preview": "/* Brazilian Portuguese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n"
},
{
"path": "source/js/Core/Language/locale/pt.js",
"chars": 1321,
"preview": "/* Portuguese LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Language/locale/rm.js",
"chars": 1575,
"preview": "/* Romansh / Rumantsch LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n "
},
{
"path": "source/js/Core/Language/locale/ro.js",
"chars": 1573,
"preview": "/* Romanian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n VMM.Lang"
},
{
"path": "source/js/Core/Language/locale/ru.js",
"chars": 1639,
"preview": "/*\n TimelineJS - ver. 2.30.0 - 2014-02-20\n Copyright (c) 2012-2013 Northwestern University\n a project of the No"
},
{
"path": "source/js/Core/Language/locale/si.js",
"chars": 1428,
"preview": "/* Sinhalese LANGUAGE \n================================================== */\ntypeof VMM != \"undefined\" && (VMM.Language "
},
{
"path": "source/js/Core/Language/locale/sk.js",
"chars": 1614,
"preview": "/* Slovak LANGUAGE \r\n================================================== */\r\ntypeof VMM != \"undefined\" && (VMM.Language ="
},
{
"path": "source/js/Core/Language/locale/sl.js",
"chars": 1267,
"preview": "/* Slovenian LANGUAGE SLOVENIAN\n================================================== */\nif (typeof VMM != 'undefined') {\n\t"
},
{
"path": "source/js/Core/Language/locale/sr-cy.js",
"chars": 1285,
"preview": "/* Serbian (Cyrillic) LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tV"
},
{
"path": "source/js/Core/Language/locale/sr.js",
"chars": 1286,
"preview": "/* Serbian (Latin) LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM."
},
{
"path": "source/js/Core/Language/locale/sv.js",
"chars": 1304,
"preview": "/* Swedish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/ta.js",
"chars": 1364,
"preview": "/* Tamil LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language "
},
{
"path": "source/js/Core/Language/locale/te.js",
"chars": 1349,
"preview": "/* Telugu LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language "
},
{
"path": "source/js/Core/Language/locale/th.js",
"chars": 1514,
"preview": "/* Thai LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n VMM.Language"
},
{
"path": "source/js/Core/Language/locale/tl.js",
"chars": 1323,
"preview": "/* Tagalog LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/tr.js",
"chars": 1323,
"preview": "/* Turkish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language"
},
{
"path": "source/js/Core/Language/locale/uk.js",
"chars": 1834,
"preview": "/*\n TimelineJS - ver. 2.30.0 - 2014-02-20\n Copyright (c) 2012-2013 Northwestern University\n a project of the No"
},
{
"path": "source/js/Core/Language/locale/zh-cn.js",
"chars": 1328,
"preview": "if (typeof VMM != \"undefined\") {\n VMM.Language = {\n lang: \"zh-cn\",\n api: {\n wikipedia: \"zh\"\n"
},
{
"path": "source/js/Core/Language/locale/zh-tw.js",
"chars": 1148,
"preview": "/* Taiwanese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Langua"
},
{
"path": "source/js/Core/Library/AES.js",
"chars": 19841,
"preview": "/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n/* AES implementat"
},
{
"path": "source/js/Core/Library/LazyLoad.js",
"chars": 13132,
"preview": "/*jslint browser: true, eqeqeq: true, bitwise: true, newcap: true, immed: true, regexp: false */\n\n/*\nLazyLoad makes it e"
},
{
"path": "source/js/Core/Library/Leaflet.js",
"chars": 133300,
"preview": "/*\n Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin\n Leaflet is a modern open-source JavaScript library for inter"
},
{
"path": "source/js/Core/Library/bootstrap-tooltip.js",
"chars": 7410,
"preview": "/* ===========================================================\n * bootstrap-tooltip.js v2.0.1\n * http://twitter.github.c"
},
{
"path": "source/js/Core/Library/jQuery/easing.js",
"chars": 8097,
"preview": "/*\n * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/\n *\n * Uses the built in easing capabilities added In"
},
{
"path": "source/js/Core/Media/VMM.ExternalAPI.js",
"chars": 53737,
"preview": "/* External API\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.Externa"
},
{
"path": "source/js/Core/Media/VMM.Media.js",
"chars": 339,
"preview": "/* Media\n================================================== */\n\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n=="
},
{
"path": "source/js/Core/Media/VMM.MediaElement.js",
"chars": 9643,
"preview": "/* MediaElement\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.MediaEl"
},
{
"path": "source/js/Core/Media/VMM.MediaType.js",
"chars": 5018,
"preview": "/*\tMediaType\n\tDetermines the type of media the url string is.\n\treturns an object with .type and .id\n\tthe id is a key pie"
},
{
"path": "source/js/Core/Media/VMM.TextElement.js",
"chars": 277,
"preview": "/* TextElement\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.TextElem"
},
{
"path": "source/js/Core/README.md",
"chars": 286,
"preview": "StoryJS-Core\n============\n\nCore javascript functionality for StoryJS (including TimelineJS)\n\nThis Source Code Form is su"
},
{
"path": "source/js/Core/Slider/VMM.DragSlider.js",
"chars": 5995,
"preview": "/* DRAG SLIDER\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.DragSlid"
},
{
"path": "source/js/Core/Slider/VMM.Slider.Slide.js",
"chars": 7119,
"preview": "/* Slider Slide \n================================================== */\n\nif (typeof VMM.Slider != 'undefined') {\n\tVMM.Sli"
},
{
"path": "source/js/Core/Slider/VMM.Slider.js",
"chars": 24863,
"preview": "/* Slider\n================================================== */\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n=="
},
{
"path": "source/js/Core/VMM.StoryJS.js",
"chars": 801,
"preview": "/* VeriteCo StoryJS\n================================================== */\n\n/*\t* CodeKit Import\n\t* http://incident57.com/"
},
{
"path": "source/js/VMM.Timeline.DataObj.js",
"chars": 28837,
"preview": "/*\tVMM.Timeline.DataObj.js\n TIMELINE SOURCE DATA PROCESSOR\n================================================== */\n\nif "
},
{
"path": "source/js/VMM.Timeline.Min.js",
"chars": 187,
"preview": "// VMM.Timeline.Min.js\n\n/* \tCodeKit Import\n\thttp://incident57.com/codekit/\n============================================="
},
{
"path": "source/js/VMM.Timeline.TimeNav.js",
"chars": 50987,
"preview": "/* \tVMM.Timeline.TimeNav.js\n TimeNav\n\tThis class handles the bottom timeline navigation.\n\tIt requires the VMM.Util cl"
},
{
"path": "source/js/VMM.Timeline.js",
"chars": 18281,
"preview": "// VMM.Timeline.js\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n==============================================="
},
{
"path": "source/less/Core/.gitignore",
"chars": 21,
"preview": "*.DS_Store\n.DS_Store*"
},
{
"path": "source/less/Core/Font/AbrilFatface-Average.less",
"chars": 1091,
"preview": "/*\n\tFONT\n\tPT Serif and PT Sans \n----------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/Arvo-PTSans.less",
"chars": 1081,
"preview": "/*\n\tFONT\n\tArvo and PT Sans \n------------------------------------------------------------------------------------------- "
},
{
"path": "source/less/Core/Font/Bevan-PotanoSans.less",
"chars": 1090,
"preview": "/*\n\tFONT\n\tBevan and Potano Sans \n---------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/BreeSerif-OpenSans.less",
"chars": 1137,
"preview": "/*\n\tFONT\n\tBree Serif, Open Sans \n---------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/DroidSerif-DroidSans.less",
"chars": 1269,
"preview": "/*\n\tFONT\n\tDroid Serif, Droid Sans \n\thttp://www.google.com/webfonts#UsePlace:use/Collection:Droid+Sans:400,700|Droid+Seri"
},
{
"path": "source/less/Core/Font/Georgia-Helvetica.less",
"chars": 1106,
"preview": "/*\n\tFONT\n\tDefault \n------------------------------------------------------------------------------------------- */\n\n@font"
},
{
"path": "source/less/Core/Font/Lekton-Molengo.less",
"chars": 1088,
"preview": "/*\n\tFONT \n\tLekton and Molengo\n------------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/Lora-Istok.less",
"chars": 1105,
"preview": "/*\n\tFONT \n\tLora and Istok Web\n------------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/Merriweather-NewsCycle.less",
"chars": 1351,
"preview": "/*\n\tFONT\n\tMerriweather and NewsCycle \n\thttp://www.google.com/webfonts#UsePlace:use/Collection:News+Cycle:400,700|Merriwe"
},
{
"path": "source/less/Core/Font/NewsCycle-Merriweather.less",
"chars": 1350,
"preview": "/*\n\tFONT\n\tNewsCycle and Merriweather \n\thttp://www.google.com/webfonts#UsePlace:use/Collection:News+Cycle:400,700|Merriwe"
},
{
"path": "source/less/Core/Font/NixieOne-Ledger.less",
"chars": 1084,
"preview": "/*\n\tFONT \n\tNixie One and Ledger\n----------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/PT.less",
"chars": 1251,
"preview": "/*\n\tFONT \n\tPT Sans Narrow, PT Serif and PT Sans\n------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/PTSerif-PTSans.less",
"chars": 1109,
"preview": "/*\n\tFONT \n\tPT Serif and PT Sans\n----------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/Pacifico-Arimo.less",
"chars": 1085,
"preview": "/*\n\tFONT \n\tPacifico and Arimo\n------------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/PlayfairDisplay-Muli.less",
"chars": 1097,
"preview": "/*\n\tFONT \n\tPlayfair Display and Muli\n-----------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/PoiretOne-Molengo.less",
"chars": 1280,
"preview": "/*\n\tFONT \n\tPoiret One and Molengo\n--------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font/Rancho-Gudea.less",
"chars": 1085,
"preview": "/*\n\tFONT \n\tRancho and Gudea\n------------------------------------------------------------------------------------------- "
},
{
"path": "source/less/Core/Font/SansitaOne-Kameron.less",
"chars": 1090,
"preview": "/*\n\tFONT \n\tSansita One and Kameron\n-------------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Font.Default.less",
"chars": 1105,
"preview": "/*\n\tFONT\n\tDefault \n------------------------------------------------------------------------------------------- */\n\n@font"
},
{
"path": "source/less/Core/GFX.less",
"chars": 12095,
"preview": "/*\n\tGFX\n\tIcons etc\n----------------------------------------------------------------- */\n\n/*\tFeature Navigation\n---------"
},
{
"path": "source/less/Core/LICENSE",
"chars": 16144,
"preview": "This Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distri"
},
{
"path": "source/less/Core/Mixins.less",
"chars": 8982,
"preview": "/* Mixins.less\n * Snippets of reusable CSS to develop faster and keep code readable\n * ---------------------------------"
},
{
"path": "source/less/Core/README.md",
"chars": 273,
"preview": "StoryJS-Core-CSS\n================\n\nCore CSS for StoryJS (including TimelineJS)\n\nThis Source Code Form is subject to the "
},
{
"path": "source/less/Core/Reset.less",
"chars": 3772,
"preview": "/*\tReset\n------------------------------------------------------------------------------------------- */\n\n.vco-storyjs {\n"
},
{
"path": "source/less/Core/Typography.less",
"chars": 3643,
"preview": "/* Typography.less\n * Headings, body text, lists, etc\n * ---------------------------------------------------------------"
},
{
"path": "source/less/Core/VMM.Core.less",
"chars": 7317,
"preview": "/*\n * VMM StoryJS Core\n * Basic and global styles for generating structural layout\n * ----------------------------------"
},
{
"path": "source/less/Core/VMM.Slider.less",
"chars": 16589,
"preview": "/*\tSlider\n================================================== */\n\n/* MEDIA QUERIES\n======================================"
},
{
"path": "source/less/Core/VMM.Tooltip.less",
"chars": 1782,
"preview": "/*\n * TOOLTIP\n * Styles for tooltip\n * ---------------------------------------------------------------------------------"
},
{
"path": "source/less/Core/Variables.less",
"chars": 2649,
"preview": "/*\tVARIABLES\n----------------------------------------------------- */\n\n/* COLOR SCHEME\n================================="
},
{
"path": "source/less/Theme/Dark.less",
"chars": 1139,
"preview": "/*!\n\tTIMELINE CSS\n\t\n\tDesigned and built by Zach Wise at VeriteCo\n\t\n\tThis Source Code Form is subject to the terms of the"
},
{
"path": "source/less/VMM.Timeline.TimeNav.less",
"chars": 19227,
"preview": "/*\n\tNavigation\n\tUI for Navigation\n--------------------------------------------------------------------------------------"
},
{
"path": "source/less/VMM.Timeline.less",
"chars": 2632,
"preview": "/*!\n\tTIMELINE CSS\n\t\n\tDesigned and built by Zach Wise at VeriteCo\n\t\n\tThis Source Code Form is subject to the terms of the"
},
{
"path": "tests/test_extra_html.html",
"chars": 2028,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_extra_html.json",
"chars": 2751,
"preview": "{\r\n \"timeline\":\r\n {\r\n \"headline\":\"The Amazon effect\",\r\n \"type\":\"default\",\r\n\t\t\"startDate\":\"2000\",\r\n\t\t"
},
{
"path": "tests/test_googlespreadsheet.html",
"chars": 2112,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_googlespreadsheet_bc_era_ages_epoch.html",
"chars": 2112,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_googlespreadsheet_biblical_ad.html",
"chars": 2112,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_googlespreadsheet_minutes.html",
"chars": 2112,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_iframe_640.html",
"chars": 1872,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_jsonp.html",
"chars": 2027,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_utc_firefox.html",
"chars": 2029,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "tests/test_utc_firefox.json",
"chars": 4531,
"preview": "{\n \"timeline\": {\n \"date\": [\n {\n \"asset\": {\n \"caption\": \"\", \n "
},
{
"path": "website/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "website/app.py",
"chars": 2913,
"preview": "'''\nMain entrypoint file. To run:\n\n $ python serve.py\n\n'''\nfrom flask import Flask\nfrom flask import request\nfrom flas"
},
{
"path": "website/core/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "website/core/settings/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "website/core/settings/base.py",
"chars": 200,
"preview": "\"\"\"Common settings and globals.\"\"\"\nimport os\nfrom os.path import abspath, basename, dirname, join, normpath\n\nCORE_ROOT ="
},
{
"path": "website/core/settings/loc.py",
"chars": 279,
"preview": "\"\"\"Local settings and globals.\"\"\"\nimport sys\nfrom os.path import normpath, join\nfrom .base import *\n\n# Import secrets --"
},
{
"path": "website/static/css/site.css",
"chars": 2484,
"preview": "/* General styles */\n\n/* Layout */\nsection {\n padding: 20px 0;\n}\nfooter {\n margin-top: 30px;\n}\n\n/* Navbar */\n.navbar {"
},
{
"path": "website/static/img/.gitignore",
"chars": 0,
"preview": ""
},
{
"path": "website/static/js/.gitignore",
"chars": 0,
"preview": ""
},
{
"path": "website/static/js/main.js",
"chars": 2356,
"preview": "// overcome Timeline's stupid jQuery loading\nvar $blueline = $.noConflict();\n$blueline(document).ready(function() {\n va"
},
{
"path": "website/static/js/story-timeline.js",
"chars": 0,
"preview": ""
},
{
"path": "website/static/welcome/welcome.json",
"chars": 7891,
"preview": "\n{ \n\t\"timeline\":\n\t{\n\t\t\"headline\":\"Welcome to TimelineJS\",\n\t\t\"type\":\"default\",\n\t\t\"startDate\":\"1888\",\n\t\t\"text\": \"<p>Timeli"
},
{
"path": "website/templates/_about.html",
"chars": 1138,
"preview": "<section id=\"about\">\n <h2>About</h2>\n <div class=\"row\">\n <!-- Column 1-->\n <div class=\"span6\">\n <h4>Documen"
},
{
"path": "website/templates/_demo.html",
"chars": 579,
"preview": "<!-- Demo -->\n<section id=\"demo\" >\n <div id=\"timeline-embed\" >\n <div id=\"timeline\"></div>\n </div>\n</section>\n\n<scri"
},
{
"path": "website/templates/_description.html",
"chars": 2512,
"preview": "<!-- Description -->\n<section id=\"description\" class=\"container\">\n <h2>How it Works</h2>\n <div class=\"row\">\n <div c"
},
{
"path": "website/templates/_developers.html",
"chars": 1254,
"preview": "<!-- Developers -->\n<section id=\"developers\" class=\"container\">\n <h2>About the Project</h2>\n <div class=\"row\">\n <di"
},
{
"path": "website/templates/_examples.html",
"chars": 7129,
"preview": "<section id=\"examples\" class=\"container\">\n <h2>Examples</h2>\n <p>Have you made a timeline? <span><a href=\"https://docs"
},
{
"path": "website/templates/_help.html",
"chars": 15425,
"preview": "<section id=\"help\" class=\"container\">\n <h2>Help</h2>\n <p>Have a question? Look for it in the FAQ below. No luck there?"
},
{
"path": "website/templates/_make.html",
"chars": 14081,
"preview": "<!-- Make a Timeline -->\n<section id=\"make\" class=\"container\">\n\n <div class=\"row\">\n <div class=\"span12\">\n <h2>M"
},
{
"path": "website/templates/_overview.html",
"chars": 562,
"preview": "<!-- Overview-->\n<header id=\"overview\" class=\"hero-unit\">\n <div class=\"row-fluid\">\n <hgroup class=\"span12\">\n <h"
},
{
"path": "website/templates/base.html",
"chars": 10097,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<!--\n\t88888888888 d8b 888 d8b 888888 d8888b \n\t"
},
{
"path": "website/templates/error.html",
"chars": 808,
"preview": "{% extends \"base.html\" %}\n{% block content %}\n<script type=\"text/javascript\" charset=\"utf-8\" src=\"https://ajax.googleapi"
},
{
"path": "website/templates/examples/example.json",
"chars": 15895,
"preview": "\n{\n \"timeline\":\n {\n \"headline\":\"Elizabeth Taylor<br/> 1932-2011\",\n\t\t\"startDate\":\"1932\",\n \"text\":\"<p>"
},
{
"path": "website/templates/examples/houston/data.json",
"chars": 12064,
"preview": "\n{\n \"timeline\": \n \t{\n \"headline\":\"Whitney Houston<br/> 1963 - 2012\",\n\t\t\"startDate\":\"1963\",\n \"text\":\"<"
},
{
"path": "website/templates/examples/houston/index.html",
"chars": 2794,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "website/templates/examples/republican/index.html",
"chars": 2862,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "website/templates/examples/shit-people-say/data.json",
"chars": 8301,
"preview": "{\n \"timeline\":\n {\n \"headline\":\"Sh*t People Say\",\n \"type\":\"default\",\n\t\t\"text\":\"When "Shit Girls "
},
{
"path": "website/templates/examples/shit-people-say/index.html",
"chars": 2641,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "website/templates/examples/user-interface/data.json",
"chars": 15058,
"preview": "\n{\n \"timeline\": \n \t{\n \"headline\":\"Revolutionary User Interfaces\",\n\t\t\"startDate\":\"1600\",\n \"text\":\"<p>T"
},
{
"path": "website/templates/examples/user-interface/index.html",
"chars": 2706,
"preview": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n \t \n \t88888888888 d8b 888 d8b 888888 d888"
},
{
"path": "website/templates/index.html",
"chars": 285,
"preview": "{% extends \"base.html\" %}\n\n{% block content %}\n {% include \"_overview.html\" %}\n {% include \"_demo.html\" %}\n {% includ"
}
]
// ... and 4 more files (download for full content)
About this extraction
This page contains the full source code of the NUKnightLab/TimelineJS GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 195 files (22.0 MB), approximately 268.6k tokens, and a symbol index with 125 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.