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 `` of your site. See [Config Options](#config-options) for a full list of what you can set in the config. ```html
``` ### 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
``` ### 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 ``` 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: ![Font Combination Preview](http://timeline.knightlab.com/static/img/make/font-options.png) ## 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":"

Intro body text goes here, some HTML is ok

", "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":"

Body text goes here, some HTML is OK

", "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":"

Body text goes here, some HTML is OK

", "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":"

Intro body text goes here, some HTML is ok

", "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":"

Body text goes here, some HTML is OK

", "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 ", "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 ================================================ Timeline JS Example
================================================ FILE: examples/example_jquery_load.html ================================================ jQuery Load Example Timeline
================================================ FILE: examples/example_json.html ================================================ Timeline JS Example
================================================ 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":"

Vine Test

", "asset": { "media":"https://vine.co/v/b55LOA1dgJU", "credit":"", "caption":"" } }, { "startDate":"2012,1,26", "endDate":"2012,1,27", "headline":"Sh*t Politicians Say", "text":"

In true political fashion, his character rattles off common jargon heard from people running for office.

", "asset": { "media":"http://youtu.be/u4XpeU9erbg", "credit":"", "caption":"" } }, { "startDate":"2012,1,10", "headline":"Sh*t Nobody Says", "text":"

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.

", "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 ================================================ Timeline JS Example
================================================ 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":"

In true political fashion, his character rattles off common jargon heard from people running for office.

", "asset": { "media":"http://youtu.be/u4XpeU9erbg", "credit":"", "caption":"" } }, { "startDate":"2012,1,10", "headline":"Sh*t Nobody Says", "text":"

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.

", "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 ================================================ Timeline JS Example
================================================ FILE: examples/model.json ================================================ { "timeline": { "headline":"The Main Timeline Headline Goes here", "type":"default", "text":"

Intro body text goes here, some HTML is ok

", "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":"

Body text goes here, some HTML is OK

", "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":"

Intro body text goes here, some HTML is ok

", "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":"

Body text goes here, some HTML is OK

", "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 ================================================ TimelineJS Embed
================================================ 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'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' hh:MM TT", full_long_small_date: "hh:MM TT'
mmm d',' yyyy''" }, month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."], day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], day_abbr: ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."], hour: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], hour_suffix: ["am"], //B.C. bc_format: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "dddd', 'h:MM TT'
'mmmm d',' yyyy''", full_long: "dddd',' mmm d',' yyyy 'at' hh:MM TT", full_long_small_date: "hh:MM TT'
'dddd',' mmm d',' yyyy''" }, setLanguage: function(lang) { trace("SET DATE LANGUAGE"); VMM.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 * MIT license * * Includes enhancements by Scott Trenda * and Kris Kowal * * Accepts a date, a mask, or a date and a mask. * Returns a formatted version of the given date. * The date defaults to the current date/time. * The mask defaults to dateFormat.masks.default. */ var dateFormat = function () { var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[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 = "
", _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 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$&") .replace(pseudoUrlPattern, "$1$2") .replace(emailAddressPattern, "$1"); }, linkify_with_twitter: function(text,targets,is_touch) { // http://, https://, ftp:// var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim; var url_pattern = /(\()((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\))|(\[)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\])|(\{)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\s'"\]])\s*['"]?|[^=\s]\s+)(\b(?:ht|f)tps?:\/\/[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]|$))&[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]*)*[a-z0-9\-_~$()*+=\/#[\]@%])/img; var url_replace = '$1$4$7$10$13$2$5$8$11$14$3$6$9$12'; // www. sans http:// or https:// var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim; function replaceURLWithHTMLLinks(text) { var exp = /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#%?=~_|!:,.;]*)([-A-Z0-9+&@#%?\/=~_|!:,.;]*)[-A-Z0-9+&@#\/%=~_|])/ig; return text.replace(exp, "$3"); } // Email addresses var emailAddressPattern = /([a-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, "$&") .replace(url_pattern, url_replace) .replace(pseudoUrlPattern, "$1$2") .replace(emailAddressPattern, "$1") .replace(twitterHandlePattern, "@$1"); // TURN THIS BACK ON TO AUTOMAGICALLY LINK HASHTAGS TO TWITTER SEARCH //.replace(twitterSearchPattern, "$1"); }, linkify_wikipedia: function(text) { var urlPattern = /]*>(.*?)<\/i>/gim; return text .replace(urlPattern, "$&") .replace(/]*>/gim, "") .replace(/<\/i>/gim, "") .replace(/]*>/gim, "") .replace(/<\/b>/gim, ""); }, /* * Turns plain text links into real links ================================================== */ // VMM.Util.unlinkify(); unlinkify: function(text) { if(!text) return text; text = text.replace(/]*>/i,""); text = text.replace(/<\/a>/i, ""); return text; }, 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,"
"); }, /* * 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 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 + ""; } return ce; }; VMM.createMediaElement = function(media, caption, credit) { var ce = ""; var _valid = false; ce += "
"; if (media != null && media != "") { valid = true; ce += ""; // CREDIT if (credit != null && credit != "") { ce += VMM.createElement("div", credit, "credit"); } // CAPTION if (caption != null && caption != "") { ce += VMM.createElement("div", caption, "caption"); } } ce += "
"; return ce; }; // Hide URL Bar for iOS and Android by Scott Jehl // https://gist.github.com/1183357 VMM.hideUrlBar = function () { var win = window, doc = win.document; // If there's a hash, or addEventListener is undefined, stop here if( !location.hash || !win.addEventListener ){ //scroll to 1 window.scrollTo( 0, 1 ); var scrollTop = 1, //reset to 0 on bodyready, if needed bodycheck = setInterval(function(){ if( doc.body ){ clearInterval( bodycheck ); scrollTop = "scrollTop" in doc.body ? doc.body.scrollTop : 1; win.scrollTo( 0, scrollTop === 1 ? 0 : 1 ); } }, 15 ); win.addEventListener( "load", function(){ setTimeout(function(){ //reset to hide addr bar at onload win.scrollTo( 0, scrollTop === 1 ? 0 : 1 ); }, 0); }, false ); } }; } /* Trace (console.log) ================================================== */ function trace( msg ) { if (VMM.debug) { if (window.console) { console.log(msg); } else if ( typeof( jsTrace ) != 'undefined' ) { jsTrace.send( msg ); } else { //alert(msg); } } } /* Extending Date to include Week ================================================== */ Date.prototype.getWeek = function() { var onejan = new Date(this.getFullYear(),0,1); return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7); } /* Extending Date to include Day of Year ================================================== */ Date.prototype.getDayOfYear = function() { var onejan = new Date(this.getFullYear(),0,1); return Math.ceil((this - onejan) / 86400000); } /* A MORE SPECIFIC TYPEOF(); // http://rolandog.com/archives/2007/01/18/typeof-a-more-specific-typeof/ ================================================== */ // type.of() var is={ Null:function(a){return a===null;}, Undefined:function(a){return a===undefined;}, nt:function(a){return(a===null||a===undefined);}, Function:function(a){return(typeof(a)==="function")?a.constructor.toString().match(/Function/)!==null:false;}, String:function(a){return(typeof(a)==="string")?true:(typeof(a)==="object")?a.constructor.toString().match(/string/i)!==null:false;}, Array:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/array/i)!==null||a.length!==undefined:false;}, Boolean:function(a){return(typeof(a)==="boolean")?true:(typeof(a)==="object")?a.constructor.toString().match(/boolean/i)!==null:false;}, Date:function(a){return(typeof(a)==="date")?true:(typeof(a)==="object")?a.constructor.toString().match(/date/i)!==null:false;}, HTML:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/html/i)!==null:false;}, Number:function(a){return(typeof(a)==="number")?true:(typeof(a)==="object")?a.constructor.toString().match(/Number/)!==null:false;}, Object:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/object/i)!==null:false;}, RegExp:function(a){return(typeof(a)==="function")?a.constructor.toString().match(/regexp/i)!==null:false;} }; var type={ of:function(a){ for(var i in is){ if(is[i](a)){ return i.toLowerCase(); } } } }; ================================================ 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 = ""; 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Loading Timeline... ", return_to_title: "Return to Title", expand_timeline: "Expand Timeline", contract_timeline: "Contract Timeline", wikipedia: "From Wikipedia, the free encyclopedia", loading_content: "Loading Content", 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'
'd mmmm yyyy''", full_long: "d mmm',' yyyy 'om' HH:MM", full_long_small_date: "HH:MM'
d mmm yyyy''" }, 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' hh:MM TT", full_long_small_date: "hh:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "جاري التحميل... ", 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'
'd mmmm yyyy''", full_long: "d mmm yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
d mmm yyyy''" }, 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'
'd mmmm yyyy''", full_long: "d mmm yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
d mmm yyyy''" }, 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: "''d mmmm yyyy'' HH:MM", full_long: "dddd',' d mmm yyyy HH:MM", full_long_small_date: "HH:MM'
d mmm yyyy''" }, 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'
'd. mmmm yyyy''", full_long: "dddd d. mmm yyyy 'v' HH:MM", full_long_small_date: "HH:MM'
dddd d. mmm yyyy''" }, 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'
'd. mmmm',' yyyy''", full_long: "dddd',' d. mmm',' yyyy 'um' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d. mmm yyyy''", }, 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'
'd. mmmm yyyy''", full_long: "dddd',' d. mmm yyyy 'um' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d. mmm yyyy''" }, 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' HH:MM TT", full_long_small_date: "HH:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Loading Timeline... ", return_to_title: "Return to Title", expand_timeline: "Expand Timeline", contract_timeline: "Contract Timeline", wikipedia: "From Wikipedia, the free encyclopedia", loading_content: "Loading Content", 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' HH:MM TT", full_long_small_date: "HH:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Loading Timeline... ", return_to_title: "Return to Title", expand_timeline: "Expand Timeline", contract_timeline: "Contract Timeline", wikipedia: "From Wikipedia, the free encyclopedia", loading_content: "Loading Content", 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Loading Timeline... ", return_to_title: "Return to Title", expand_timeline: "Expand Timeline", contract_timeline: "Contract Timeline", wikipedia: "From Wikipedia, the free encyclopedia", loading_content: "Loading Content", 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'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'ĉe' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, 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ábado"], day_abbr: ["Dom.", "Lun.", "Mar.", "Mié.", "Jue.", "Vie.", "Sáb."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "''d mmmm yyyy'' HH:MM", full_long: "dddd',' d mmm yyyy HH:MM", full_long_small_date: "HH:MM'
d mmm yyyy''" }, messages: { loading_timeline: "La cronología esta cargando", return_to_title: "Volver al título", expand_timeline: "Expandir la cronología", contract_timeline: "Reducir la cronología", wikipedia: "Desde Wikipedia, la enciclopedia libre", loading_content: "cargando", loading: "cargando", swipe_nav: "Desliza para ver" } } } ================================================ FILE: source/js/Core/Language/locale/et.js ================================================ /* Estonian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "et", api: { wikipedia: "et" }, date: { month: ["jaanuar", "veebruar", "märts", "aprill", "mai", "juuni", "juuli", "august", "september", "oktoober", "november", "detsember"], month_abbr: ["jaan.", "veebr.", "märts", "apr.", "mai", "juuni", "juuli", "aug.", "sept.", "okt.", "nov.", "dets."], day: ["pühapäev","esmaspäev", "teisipäev", "kolmapäev", "neljapäev", "reede", "laupäev"], day_abbr: ["P","E", "T", "K", "N", "R", "L"] }, 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Laadib ajajoont… ", return_to_title: "Tagasi algusse", expand_timeline: "Vaata lähemalt", contract_timeline: "Vaata kaugemalt", wikipedia: "Wikipedia, vaba entsüklopeedia", loading_content: "Laadib sisu", loading: "Laadib", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/eu.js ================================================ /* Basque/ Euskara LANGUAGE ================================================== */ if (typeof VMM != 'undefined') { VMM.Language = { lang: "eu", api: { wikipedia: "eu" }, date: { month: ["Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"], month_abbr: ["Urt.", "Ots.", "Mar.", "Api.", "Mai.", "Eka.", "Uzt.", "Abu.", "Ira.", "Urr.", "Aza.", "Abe."], day: ["Igandea", "Astelehena", "Asteartea", "Asteazkena", "Osteguna", "Ostirala", "Larunbata"], day_abbr: ["Iga.", "Asl.", "Asr.", "Asz.", "Osg.", "Osr.", "Lar."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "yyyy'(e)ko' mmmm", full_short: "mmm'-'d", full: "yyyy'(e)ko' mmmm'k' d", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'yyyy'-'mmm'-'d'", full_long: "yyyy'(e)ko' mmmm'ren' d'(e)an,' hh:MM TT'(r)etan'", full_long_small_date: "hh:MM TT'
'yyyy'-'mmm'-'d'" }, messages: { loading_timeline: "Kronologia kargatzen...", return_to_title: "Titulura itzuli", expand_timeline: "Handiago ikusi", contract_timeline: "Txikiago ikusi", wikipedia: "Wikipedia entziklopedia libretik", loading_content: "Edukia kargatzen", loading: "Kargatzen", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/fa.js ================================================ if(typeof VMM != 'undefined') { VMM.Language = { lang: "fa", right_to_left:!0, api: { wikipedia: "fa" }, date: { month: ["فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"], month_abbr: ["فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"], day: ["یکشنبه","دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"], day_abbr: ["یکشنبه","دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", full: "mmmm d',' yyyy", time_no_seconds_short: "h:MM TT", time_no_seconds_short: "h:MM TT", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, 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/fi.js ================================================ /* Finnish LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "fi", api: { wikipedia: "fi" }, date: { month: ["tammikuuta", "helmikuuta", "maaliskuuta", "huhtikuuta", "toukokuuta", "kesäkuuta", "heinäkuuta", "elokuuta", "syyskuuta", "lokakuuta", "marraskuuta", "joulukuuta"], month_abbr: ["tammi", "helmi", "maalis", "huhti", "touko", "kesä", "heinä", "elo", "syys", "loka", "marras", "joulu"], day: ["sunnuntai","maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauauntai"], day_abbr: ["su","ma", "ti", "ke", "to", "pe", "la"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d. mmm", full: "d. mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd. mmmm yyyy''", full_long: "mmm d yyyy 'klo' HH:MM", full_long_small_date: "HH:MM'
d. mmm yyyy''" }, messages: { loading_timeline: "Ladataan aikajanaa… ", return_to_title: "Takaisin etusivulle", expand_timeline: "Laajenna aikajanaa", contract_timeline: "Tiivistä aikajanaa", wikipedia: "Wikipediasta", loading_content: "Ladataan sisältöä", loading: "Ladataan", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/fo.js ================================================ /* Faroese LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "fo", api: { wikipedia: "fo" }, date: { month: ["januar", "februar", "mars", "aprÌl", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"], month_abbr: ["jan.", "febr.", "mars", "aprÌl", "mai", "juni", "juli", "aug.", "sept.", "okt.", "nov.", "des."], day: ["sunnudagur","m·nadagur", "t˝sdagur", "mikudagur", "hÛsdagur", "frÌggjadagur", "leygardagur"], day_abbr: ["sun.","m·n.", "t˝s.", "mik.", "hÛs.", "frÌ.", "ley."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d'.' mmm", full: "d'.' mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd'.' mmmm yyyy''", full_long: "d'.' mmmm yyyy 'klokkan' HH:MM", full_long_small_date: "HH:MM'
'd'.' mmm yyyy''" }, messages: { loading_timeline: "Lesur inn tíðarrás...", return_to_title: "Víðka tíðarrás...", expand_timeline: "Minka tíðarrás...", contract_timeline: "Minka tíðarrás", wikipedia: "Fr· Wikipedia", loading_content: "Lesur inn tilfar", loading: "Lesur inn", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/fr.js ================================================ /* French LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "fr", api: { wikipedia: "fr" }, date: { month: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], month_abbr: ["janv.", "févr.", "mars", "avril", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "dec."], day: ["Dimanche","Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"], day_abbr: ["Dim.","Lu.", "Ma.", "Me.", "Jeu.", "Vend.", "Sam."], }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'à' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, messages: { loading_timeline: "Chargement de la frise en cours... ", return_to_title: "Retour à la page d'accueil", expand_timeline: "Elargir la frise", contract_timeline: "Réduire la frise", wikipedia: "Extrait de Wikipedia, l'encyclopédie libre", loading_content: "Chargement", loading: "Chargement", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/fy.js ================================================ /* Frisian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "fy", api: { wikipedia: "fy" }, date: { month: ["Jannewaris", "Febrewaris", "Maart", "April", "Maaie", "Juny", "July", "Augustus", "Septimber", "Oktober", "Novimber", "Desimber"], month_abbr: ["Jan.", "Feb.", "Mar", "Apr", "Maaie", "July", "July", "Aug.", "Sept.", "Okt.", "Nov.", "Des."], day: ["Snein","Moandei", "Tiisdei", "Woansdei", "Tongersdei", "Freed", "Sneon"], day_abbr: ["Snein","Moandei", "Tiisdei", "Woansdei", "Tongersdei", "Freed", "Sneon"] }, 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'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'om' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, messages: { loading_timeline: "Tiidline ynlade ... ", return_to_title: "Wer werom nei it begjin", expand_timeline: "Tiidline útzoomen", contract_timeline: "Tiidline ynzoomen", wikipedia: "Fan Wikipedia, de frije ensyklopedy", loading_content: "Ynhâld ynlade", loading: "Ynlade" } } } ================================================ FILE: source/js/Core/Language/locale/ga.js ================================================ /* English LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "ga", api: { wikipedia: "ga" }, date: { month: ["Eanair", "Feabhra", "Márta", "Aibhreán", "Bealtaine", "Meitheamh", "Iúil", "Lúnasa", "Meán Fómhair", "Deireadh Fómhair", "Samhain", "Mí Na Nollag"], month_abbr: ["Ean.", "Fea.", "Már.", "Aibh.", "Beal.", "Meith.", "Iúil", "Lún.", "MF.", "DF.", "Samh.", "Noll."], day: ["Dé Domhnaigh","Dé Luain", "Dé Máirt", "Dé Céadaoin", "Déardaoin", "Dé hAoine", "Dé Sathairn"], day_abbr: ["DéDom.","DéL.", "DéM.", "DéC.", "DéarD.", "DéhA.", "Dé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: "''d mmmm yyyy'' HH:MM", full_long: "dddd',' d mmm yyyy HH:MM", full_long_small_date: "HH:MM'
d mmm yyyy''" }, messages: { loading_timeline: "Tá an Amlíne ag Lódáil... ", return_to_title: "Ar Ais go dtí an tideal", expand_timeline: "Leathnaigh An Amlíne", contract_timeline: "Coimrigh An Amlíne", wikipedia: "As Wikipedia, an ciclipéid saor", loading_content: "Ag Lódáil an", loading: "Ag Lódáil an Inneachar", swipe_nav: "Svaidhpeáil Chun Nascleanúint" } } } ================================================ FILE: source/js/Core/Language/locale/gl.js ================================================ /* Galician LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "gl", api: { wikipedia: "gl" }, date: { month: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"], month_abbr: ["Xan.", "Feb.", "Mar.", "Abr.", "Mai.", "Xuñ.", "Xul.", "Ago.", "Set.", "Out.", "Nov.", "Dec."], day: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"], day_abbr: ["Dom.", "Lun.", "Mar.", "Mér.", "Xov.", "Ven.", "Sáb."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'um' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, messages: { loading_timeline: "Cronoloxía esta cargando", return_to_title: "Volver ao título", expand_timeline: "Alongar a cronoloxía", contract_timeline: "Acurtar a cronoloxía", wikipedia: "Dende Wikipedia, a enciclopedia libre", loading_content: "cargando", loading: "cargando", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/he.js ================================================ /* Hebrew (beta) LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "he", right_to_left: true, api: { wikipedia: "he" }, date: { month: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], month_abbr: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], day: ["ראשון","שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"], day_abbr: ["יום א'","יום ב'", "יום ג'", "יום ד'", "יום ה'", "יום ו'", "שבת"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm,' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "d' mmm,' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, 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/hi.js ================================================ /* TimelineJS - ver. 2014-12-09-18-51-25 - 2014-12-09 Copyright (c) 2012-2013 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/. */ if(typeof VMM!="undefined"){VMM.Language={lang:"hi",api:{wikipedia:"hi"},date:{month:["जनवरी","फ़रवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्टूबर","नवंबर","दिसंबर"],month_abbr:["जनवरी","फ़रवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्टूबर","नवंबर","दिसंबर"],day:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],day_abbr:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"]},dateformats:{year:"yyyy",month_short:"mmm",month:"mmmm yyyy",full_short:"mmm d",full:"mmmm d',' yyyy",time_no_seconds_short:"h:MM TT",time_no_seconds_small_date:"h:MM TT'
'mmmm d',' yyyy''",full_long:"mmm d',' yyyy 'at' h:MM TT",full_long_small_date:"h:MM TT'
mmm d',' yyyy''"},messages:{loading_timeline:"टाइमलाइन लोड हो रहा है",return_to_title:"शीर्षक पर लौटें",expand_timeline:"टाइमलाइन का विस्तार करें",contract_timeline:"टाइमलाइन का अनुबंध करें",wikipedia:"विकिपीडिया, मुक्त विश्वकोश से",loading_content:"लोड हो रहा है सामग्री",loading:"लोड हो रहा है",swipe_nav:"Swipe to Navigate",read_more:"और पढ़ें"}}} ================================================ FILE: source/js/Core/Language/locale/hr.js ================================================ /* Croatian (Latin) LANGUAGE ================================================== */ if (typeof VMM != 'undefined') { VMM.Language = { lang: "hr", api: { wikipedia: "hr" }, date: { month: ["siječnja", "veljače", "ožujka", "travnja", "svibnja", "lipnja", "srpnja", "kolovoza", "rujna", "listopada", "studenog", "prosinca"], month_abbr: ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"], day: ["nedjelja", "ponedjeljak", "utorak", "srijeda", "četvrtak", "petak", "subota"], day_abbr: ["ned", "pon", "uto", "sri", "čet", "pet", "sub"] }, dateformats: { year: "yyyy.", month_short: "mmm", month: "mmmm yyyy.", full_short: "dd. mmm", full: "dd. mmmm yyyy.", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'dd. mmmm yyyy.''", full_long: "dd. mmmm yyyy. 'u' HH:MM", full_long_small_date: "HH:MM'
dd. mmm yyyy.''" }, messages: { loading_timeline: "Učitavanje... ", return_to_title: "Početak", expand_timeline: "Povećaj", contract_timeline: "Smanji", wikipedia: "Iz Vikipedije, slobodne enciklopedije", loading_content: "Sadržaj se učitava", loading: "Učitava se", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/hu.js ================================================ /* Hungarian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "hu", api: { wikipedia: "hu" }, date: { month: ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"], month_abbr: ["jan.", "febr.", "márc.", "ápr.", "máj.", "jún.", "júl.", "aug.", "szept.", "okt.", "nov.", "dec."], day: ["vasárnap","hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"], day_abbr: ["vas.","hétfő", "kedd", "szer.", "csüt.", "pén.", "szom."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "yyyy. mmmm", full_short: "mmm d.", full: "yyyy. mmmm d.", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM '
'yyyy. mmmm d.''", full_long: "yyyy. mmm d.',' HH:MM", full_long_small_date: "HH:MM '
yyyy. mmm d.''" }, messages: { loading_timeline: "Az idővonal betöltése... ", return_to_title: "Vissza a címhez", expand_timeline: "Nagyítás", contract_timeline: "Kicsinyítés", wikipedia: "A Wikipédiából, a szabad enciklopédiából", loading_content: "Tartalom betöltése", loading: "Betöltés", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/hy.js ================================================ /* Armenian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "hy", api: { wikipedia: "hy" }, date: { month: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"], month_abbr: ["Հնվ.", "Փետ.", "Մար", "Ապր", "Մայ", "Հուն", "Հուլ", "Օգս.", "Սեպ.", "Հոկ.", "Նոյ.", "Դեկ."], day: ["Կիրակի","Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"], day_abbr: ["Կի.","Եկ.", "Եք.", "Չո.", "Հի.", "Ու.", "Շա."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm',' yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "H:MM", time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''", full_long: "d mmm',' yyyy 'at' H:MM", full_long_small_date: "H:MM '
d mmm',' yyyy''" }, 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/id.js ================================================ /* Indonesian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "id", api: { wikipedia: "id" }, date: { month: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], month_abbr: ["Jan.", "Feb.", "Maret", "April", "Mei", "Juni", "July", "Agus.", "Sept.", "Okt.", "Nov.", "Des."], day: ["Ahad","Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"], day_abbr: ["Ahad","Sen.", "Sel.", "Rabu", "Kamis", "Jum.", "Sab."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'pukul' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, messages: { loading_timeline: "Memuat Timeline... ", return_to_title: "Kembali ke Judul", expand_timeline: "Kembangkan Timeline", contract_timeline: "Ciutkan Timeline", wikipedia: "dari Wikipedia, ensiklopedia bebas", loading_content: "Memuat Isi", loading: "Memuat", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/is.js ================================================ /* Icelandic LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "is", api: { wikipedia: "is" }, date: { month: ["janúar", "febrúar", "mars", "apríl", "maí", "júní", "júlí", "ágúst", "september", "október", "nóvember", "desember"], month_abbr: ["jan.", "feb.", "mars", "apríl", "maí", "júní", "júlí", "ágúst", "sept.", "okt.", "nóv.", "des."], day: ["sunnudagur", "mánudagur", "þriðjudagur", "miðvikudagur", "fimmtudagur", "föstudagur", "laugardagur"], day_abbr: ["sun.","mán.", "þri.", "mið.", "fim.", "fös.", "lau."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d'.' mmm", full: "d'.' mmmm yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "hh:MM TT", time_no_seconds_small_date: "hh:MM TT'
'd'.' mmmm yyyy''", full_long: "dddd',' d'.' mmm yyyy 'kl.' hh:MM TT", full_long_small_date: "hh:MM TT'
'dddd',' d'.' mmm yyyy''" }, messages: { loading_timeline: "Raða upp tímalínu... ", return_to_title: "Til baka á forsíðu", expand_timeline: "Stækka tímalínu", contract_timeline: "Minnka tímalínu", wikipedia: "From Wikipedia, the free encyclopedia", loading_content: "Raða", loading: "Raða", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/it.js ================================================ /* Italian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "it", api: { wikipedia: "it" }, date: { month: ["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"], month_abbr: ["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"], day: ["Domenica","Lunedí","Martedí","Mercoledí","Giovedí","Venerdí","Sabato"], day_abbr: ["Dom.","Lun.","Mar.","Mer.","Gio.","Ven.","Sab."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'alle' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, messages: { loading_timeline: "Caricamento Timeline... ", return_to_title: "Ritorna all'inizio", expand_timeline: "Espandi la Timeline", contract_timeline: "Contrai la Timeline", wikipedia: "Wikipedia, L’enciclopedia libera", loading_content: "Caricamento contenuti", loading: "Caricamento", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/iw.js ================================================ /* Hebrew (beta) LANGUAGE ================================================== */ trace("Language code 'iw' for Hebrew is deprecated. Use 'he' instead.") if(typeof VMM != 'undefined') { VMM.Language = { lang: "iw", right_to_left: true, api: { wikipedia: "he" }, date: { month: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], month_abbr: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], day: ["ראשון","שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"], day_abbr: ["יום א'","יום ב'", "יום ג'", "יום ד'", "יום ה'", "יום ו'", "שבת"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm,' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "d' mmm,' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, 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/ja.js ================================================ /* Japanese LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "ja", api: { wikipedia: "ja" }, date: { month: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], month_abbr: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], day: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], day_abbr: ["日", "月", "火", "水", "木", "金", "土"] }, dateformats: { year: "yyyy年", month_short: "mmm", month: "yyyy年 m月d日 (ddd)", full_short: "yyyy年m月d日", full: "yyyy年 m月d日 (ddd)", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'yyyy年m月d日''", full_long: "yyyy年m月d日 H時M分s秒", full_long_small_date: "HH:MM:ss'
'yyyy年m月d日''" }, messages: { loading_timeline: "タイムラインをロードしています…", return_to_title: "タイトルへ戻ります", expand_timeline: "タイムラインを展開します", contract_timeline: "タイムラインを縮めます", wikipedia: "出典:フリー百科事典『ウィキペディア(Wikipedia)』", loading_content: "コンテンツをロードしています", loading: "ローディング", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/ka.js ================================================ /* Georgian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "ka", api: { wikipedia: "ka" }, date: { month: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"], month_abbr: ["იან.", "თებ.", "მარტი", "აპრ", "მაი.", "ივნ.", "ივლ.", "აგვ.", "სექ.", "ოქტ.", "ნოე.", "დეკ."], day: ["კვირა","ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"], day_abbr: ["კვ.","ორ.", "სამ.", "ოთხ.", "ხუთ.", "პარ.", "შაბ."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "იტვირთება თაიმლაინი... ", return_to_title: "დაბრუნდი თავში", expand_timeline: "გაშალე თაიმლაინი", contract_timeline: "Contract Timeline", wikipedia: "თავისუფალი ენციკლოპედია Wikipedia-დან", loading_content: "შინაარსის ჩამოტვირთვა", loading: "ჩამოტვირთვა", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/ko.js ================================================ /* Korean LANGUAGE ================================================== */ if (typeof VMM != 'undefined') { VMM.Language = { lang: "ko", api: { wikipedia: "ko" }, date: { month: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], month_abbr: ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"], day: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], day_abbr: ["일", "월", "화", "수", "목", "금", "토"] }, dateformats: { year: "yyyy", month_short: "mm", month: "yyyy년 m월", full_short: "mm-dd", full: "yyyy년 m월 d일 ", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'yyyy mmm d''", full_long: "dddd',' d mmm yyyy 'um' HH:MM", full_long_small_date: "HH:MM'
'dddd','yyyy mmm d''" }, 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/lb.js ================================================ /* Luxembourgish LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "lb", api: { wikipedia: "lb" }, date: { month: ["Januar", "Februar", "Mäerz", "Abrëll", "Mee", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], month_abbr: ["Jan.", "Feb.", "Mäe.", "Abr.", "Mee", "Jun.", "Jul", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."], day: ["Sonndeg","Méindeg", "Dënschdeg", "Mëttwoch", "Donneschden", "Freiden", "Samschden"], day_abbr: ["Son.","Méi.", "Dë.", "Më.", "Do.", "Fr.", "Sa."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "d'.' mmmm yyyy", time_short: "hh:MM:ss", time_no_seconds_short: "hh:MM", time_no_seconds_small_date: "h:MM TT'
'd'.' mmmm yyyy''", full_long: "d'.' mmm yyyy 'um' hh:MM TT", full_long_small_date: "hh:MM'
d'.' mmm yyyy''" }, messages: { loading_timeline: "Timeline gëtt gelueden... ", return_to_title: "Zeréck zum Titel", expand_timeline: "Timeline vergréisseren", contract_timeline: "Timeline verklengeren", wikipedia: "Vu Wikipedia, der fräier Enzyklopedie", loading_content: "Inhalt lued", loading: "Lued" } } } ================================================ FILE: source/js/Core/Language/locale/lt.js ================================================ /* Lithuanian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "lt", api: { wikipedia: "lt" }, date: { month: ["Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio"], month_abbr: ["Saus.", "Vas.", "Kov.", "Bal.", "Geg.", "Birž.", "Liep.", "Rugpj.", "Rug.", "Spal.", "Lapkr.", "Gruod."], day: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"], day_abbr: ["Sek.","Pirm.", "Antr.", "Treč.", "Ketv.", "Penkt.", "Šešt."] }, 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Kraunama laiko juosta... ", return_to_title: "Grįžti į titulinį", expand_timeline: "Išplėsti laiko juostą", contract_timeline: "Sutraukti laiko juostą", wikipedia: "Iš Vikipedijos, laisvosios enciklopedijos", loading_content: "Kraunamas turinys... ", loading: "Kraunama" } } } ================================================ FILE: source/js/Core/Language/locale/lv.js ================================================ /* Latvian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "lv", api: { wikipedia: "lv" }, date: { month: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], month_abbr: ["Jan.", "Feb.", "Mar.", "Apr.", "Mai.", "Jūn.", "Jūl.", "Aug.", "Sep.", "Okt.", "Nov.", "Dec."], day: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"], day_abbr: ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "d. mmmm',' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "HH:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' hh:MM TT", full_long_small_date: "hh:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Ielādējas grafiks... ", return_to_title: "Atgriezties uz sākumu", expand_timeline: "Izvērst grafiku", contract_timeline: "Sašaurināt grafiku", wikipedia: "No Wikipedia, brīvās enciklopēdijas", loading_content: "Ielādējas saturs", loading: "Ielādējas", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/ms.js ================================================ /* Malay LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "ms", api: { wikipedia: "ms" }, date: { month: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], month_abbr: ["Jan.", "Feb.", "Mac", "Apr", "Mei", "Jun", "Jul", "Ogos.", "Sept.", "Okt.", "Nov.", "Dis."], day: ["Ahad","Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"], day_abbr: ["Ahd.","Isn.", "Sel.", "Rab.", "Kha.", "Jum.", "Sab."] }, 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'
'd mmmm yyyy''", full_long: "d mmm yyyy 'jam' h:MM TT", full_long_small_date: "h:MM TT'
d mmm yyyy''" }, messages: { loading_timeline: "Memuat Garis Masa... ", return_to_title: "Kembali ke Tajuk", expand_timeline: "Besarkan Garis Masa", contract_timeline: "Kecilkan Garis Masa", wikipedia: "Daripada Wikipedia, ensiklopedia bebas.", loading_content: "Memuat Kandungan", loading: "Memuat", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/ne.js ================================================ /* Nepali LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "ne", api: { wikipedia: "ne" }, 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'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "टाइमलाइन लोड हुदैछ... ", return_to_title: "शीर्षकमा फर्कनुहोस्", expand_timeline: "टाइमलाइन लामो बनाउनुहोस्", contract_timeline: "टाइमलाइन छोटो बनाउनुहोस्", wikipedia: "विकिपिडियाबाट", loading_content: "सामग्री लोड हुदैछ", loading: "लोड हुदैछ" } } } ================================================ FILE: source/js/Core/Language/locale/nl.js ================================================ /* Dutch LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "nl", api: { wikipedia: "nl" }, date: { month: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"], month_abbr: ["jan", "febr", "maa", "apr", "mei", "juni", "juli", "aug", "sept", "okt", "nov", "dec"], day: ["zondag","maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], day_abbr: ["zo","ma", "di", "wo", "do", "vr", "za"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'om' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, messages: { loading_timeline: "Tijdlijn laden ... ", return_to_title: "Terug naar het begin", expand_timeline: "Tijdlijn uitzoomen", contract_timeline: "Tijdlijn inzoomen", wikipedia: "From Wikipedia, the free encyclopedia", loading_content: "Inhoud laden", loading: "Laden", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/no.js ================================================ /* Norwegian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "no", api: { wikipedia: "no" }, date: { month: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], month_abbr: ["Jan.", "Feb.", "Mars", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sep.", "Okt.", "Nov.", "Des."], day: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], day_abbr: ["Søn.", "Man.", "Tir.", "Ons.", "Tor.", "Fre.", "Lør."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d. mmm", full: "d. mmmm',' yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd. mmmm',' yyyy''", full_long: "dddd',' d. mmm',' yyyy 'kl.' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d. mmm',' yyyy''" }, messages: { loading_timeline: "Laster tidslinje... ", return_to_title: "Tilbake til tittel", expand_timeline: "Utvid tidslinje", contract_timeline: "Krymp tidslinje", wikipedia: "Fra Wikipedia, den frie encyklopedi", loading_content: "Laster innhold", loading: "Laster", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/pl.js ================================================ /* Polish LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "pl", api: { wikipedia: "pl" }, date: { month: ["Stycznia", "Lutego", "Marca", "Kwietnia", "Maja", "Czerwca", "Lipca", "Sierpnia", "Września", "Października", "Listopada", "Grudnia"], month_abbr: ["Sty.", "Lut.", "Mar.", "Kwi.", "Maj.", "Cze.", "Lip.", "Sie.", "Wrz.", "Paź.", "Lis.", "Gru."], day: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"], day_abbr: ["Nie.", "Pon.", "Wto.", "Śro.", "Czw.", "Pią.", "Sob."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''", full_long: "dddd',' d mmm yyyy 'um' HH:MM", full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''" }, messages:{ loading_timeline: "Ładowanie osi czasu... ", return_to_title: "Wróć do tytułu", expand_timeline: "Powiększ oś czasu", contract_timeline: "Pomniejsz oś czasu", wikipedia: "Z Wikipedii, wolnej encyklopedii", loading_content: "Ładowanie zawartości", loading: "Ładowanie", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/pt-br.js ================================================ /* Brazilian Portuguese LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "pt-br", api: { wikipedia: "pt" }, date: { month: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], month_abbr: ["Jan.", "Fev.", "Mar.", "Abr.", "Mai.", "Jun.", "Jul.", "Ago.", "Set.", "Out.", "Nov.", "Dez."], day: ["Domingo","Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], day_abbr: ["Dom.","Seg.", "Ter.", "Qua.", "Qui.", "Sex.", "Sáb."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm 'de' yyyy", full_short: "d 'de' mmm", full: "d 'de' mmmm',' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "hh:MM TT", time_no_seconds_small_date: "hh:MM TT'
'd 'de' mmmm',' yyyy''", full_long: "dddd',' d 'de' mmm',' yyyy 'às' hh:MM TT", full_long_small_date: "hh:MM TT'
'dddd',' d 'de' mmm',' yyyy''" }, messages: { loading_timeline: "Carregando Timeline... ", return_to_title: "Voltar para o título", expand_timeline: "Expandir Timeline", contract_timeline: "Contrair Timeline", wikipedia: "Wikipédia, A enciclopédia livre", loading_content: "Carregando Conteúdo", loading: "Carregando", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/pt.js ================================================ /* Portuguese LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "pt", api: { wikipedia: "pt" }, date: { month: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], month_abbr: ["Jan", "Fev", "Mar", "Abr", "Maio", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], day: ["Domingo","Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado"], day_abbr: ["Dom","Seg", "Ter", "Qua", "Qui", "Sex", "Sab"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' hh:MM TT", full_long_small_date: "hh:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "A carregar a timeline... ", return_to_title: "Voltar ao Título", expand_timeline: "Expandir Timeline", contract_timeline: "Colapsar Timeline", wikipedia: "Wikipedia, A enciclopedia Livre.", loading_content: "A carregar o conteúdo", loading: "A carregar", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/rm.js ================================================ /* Romansh / Rumantsch LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "rm", api: { wikipedia: "rm" }, date: { month: ["Schaner", "Favrer", "Mars", "Avrigl", "Matg", "Zercladur", "Fanadur", "Avust", "Settember", "October", "November", "December"], month_abbr: ["Schan.", "Favr.", "Mars", "Avr.", "Matg", "Zercl.", "Fan.", "Avust", "Sett.", "Oct.", "Nov.", "Dec."], day: ["Dumengia","Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda"], day_abbr: ["Du","Gli", "Ma", "Me", "Gie", "Ve", "So"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d 'da' mmm", full: "d 'da' mmmm yyyy", time_short: "HH:M:s", time_no_seconds_short: "HH:M", time_no_seconds_small_date: "HH:M'
'd 'da' mmmm yyyy''", full_long: "d 'da' mmm yyyy', las' HH:M", full_long_small_date: "HH:M'
d 'da' mmm yyyy''" }, messages: { loading_timeline: "Chargiar la cronologia... ", return_to_title: "Turnar al titel", expand_timeline: "Expander la cronologia", contract_timeline: "Contract Timeline", wikipedia: "Da Vichipedia, l'enciclopedia libra", loading_content: "Chargiar il cuntegn", loading: "Chargiar" } } } ================================================ FILE: source/js/Core/Language/locale/ro.js ================================================ /* Romanian LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "ro", api: { wikipedia: "ro" }, date: { month: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], month_abbr: ["Ian.", "Feb.", "Mar.", "Apr.", "Mai", "Iun.", "Iul.", "Aug.", "Sep.", "Oct.", "Noi.", "Dec."], day: ["Duminică","Luni", "Marți", "Miercuri", "Joi", "Vineri", "Sâmbătă"], day_abbr: ["Dum.","Luni", "Mar.", "Mie.", "Joi", "Vin.", "Sâm."] }, 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'
'd mmmm',' yyyy''", full_long: "d mmm',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
d mmm',' yyyy''" }, messages: { loading_timeline: "Se încarcă cronologia... ", return_to_title: "Înapoi la titlu", expand_timeline: "Extinde cronologia", contract_timeline: "Restrânge cronologia", wikipedia: "De pe Wikipedia, enciclopedia gratuită", loading_content: "Se încarcă conținutul", loading: "Se încarcă" } } } ================================================ FILE: source/js/Core/Language/locale/ru.js ================================================ /* TimelineJS - ver. 2.30.0 - 2014-02-20 Copyright (c) 2012-2013 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/. */ /* Russian LANGUAGE ================================================== */ typeof VMM != "undefined" && (VMM.Language = { lang: "ru", api: { wikipedia: "ru" }, date: { month: ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"], month_abbr: ["янв.", "фев.", "март", "апр.", "май", "июнь", "июль", "авг.", "сент.", "окт.", "нояб.", "дек."], day: ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"], day_abbr: ["вск.", "пн.", "вт.", "ср.", "чт.", "пт.", "сб."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm',' yyyy", time_short: "H:MM:ss", time_no_seconds_short: "H:MM", time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''", full_long: "d mmm',' yyyy 'в' HH:MM", full_long_small_date: "HH:MM'
d mmm',' yyyy''" }, messages: { loading_timeline: "Загрузка... ", return_to_title: "Вернуться к заголовку", expand_timeline: "Увеличить", contract_timeline: "Уменьшить", wikipedia: "Из Wikipedia", loading_content: "Загрузка контента", loading: "Загрузка" } }); ================================================ FILE: source/js/Core/Language/locale/si.js ================================================ /* Sinhalese LANGUAGE ================================================== */ typeof VMM != "undefined" && (VMM.Language = { lang: "si", api: { wikipedia: "si" }, date: { month: ["ජනවාරි", "පෙබරවාරි", "මාර්තු", "අප්‍රේල්", "මැයි", "ජූනි", "ජූලි", "අගෝස්තු", "සැප්තැම්බර්", "ඔක්තෝම්බර්", "නොවැම්බර්", "දෙසැම්බර්"], month_abbr: ["ජන.", "පෙබ.", "මාර්තු", "අප්‍රේල්", "මැයි", "ජුනි", "ජුලි", "අගෝ.", "සැප්.", "ඔක්.", "නොවැ.", "දෙසැ."], day: ["ඉරිදා", "සදුදා", "අගහරුවදා", "බදාදා", "බ්‍රහස්පතින්දා", "සිකුරාදා", "සෙනසුරාදා"], day_abbr: ["ඉරි.", "සදු.", "අග.", "බදා.", "බ්‍රහස්.", "සිකු.", "සෙන."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "කාල රේඛාව ලෝඩ් වෙමින්... ", return_to_title: "නැවත මාතෘකාවට", expand_timeline: "කාල රේඛාව විහිදන්න", contract_timeline: "කාල රේඛාව අකුලන්න", wikipedia: "විකිපීඩියා, නිදහස් විශ්වකෝෂය වෙතින්", loading_content: "අන්තර්ගතය ලෝඩ් වෙමින්", loading: "ලෝඩ් වෙමින්" } }); ================================================ FILE: source/js/Core/Language/locale/sk.js ================================================ /* Slovak LANGUAGE ================================================== */ typeof VMM != "undefined" && (VMM.Language = { lang: "sk", api: { wikipedia: "sk" }, date: { month: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], month_abbr: ["Jan.", "Feb.", "Marec", "Apríl", "Máj", "Jún", "Júl", "Aug.", "Sept.", "Okt.", "Nov.", "Dec."], day: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"], day_abbr: ["Ned.", "Pon.", "Uto.", "Str.", "Štv.", "Pia.", "Sob."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "d. mmmm',' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' hh:MM TT", full_long_small_date: "hh:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Načítam časovú os... ", return_to_title: "Späť na úvod", expand_timeline: "Zväčšiť časovú os", contract_timeline: "Zmenšiť časovú os", wikipedia: "Z Wikipedie, encyklopédie zadarmo", loading_content: "Načítam obsah", loading: "Načítanie" } }); ================================================ FILE: source/js/Core/Language/locale/sl.js ================================================ /* Slovenian LANGUAGE SLOVENIAN ================================================== */ if (typeof VMM != 'undefined') { VMM.Language = { lang: "sl", api: { wikipedia: "sl" }, date: { month: ["januar", "februar", "marec", "april", "maj", "junij", "julij", "avgust", "september", "oktober", "november", "december"], month_abbr: ["jan.", "feb.", "marec", "april", "maj", "junij", "july", "avg.", "sept.", "okt.", "nov.", "dec."], day: ["nedelja", "ponedeljek", "torek", "sreda", "čertek", "petek", "sobota"], day_abbr: ["ned.", "pon.", "tor.", "sre.", "čet.", "pet.", "sob."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM", time_no_seconds_small_date: "h:MM' 'd mmmm' 'yyyy", full_long: "d mmm yyyy 'ob' hh:MM", full_long_small_date: "hh:MM' d mmm yyyy" }, messages: { loading_timeline: "Nalagam časovni trak... ", return_to_title: "Nazaj na naslov", expand_timeline: "Razširi časovni trak", contract_timeline: "Pokrči časovni trak", wikipedia: "Vir Wikipedija", loading_content: "Nalaganje vsebine", loading: "Nalaganje", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/sr-cy.js ================================================ /* Serbian (Cyrillic) LANGUAGE ================================================== */ if (typeof VMM != 'undefined') { VMM.Language = { lang: "рп", api: { wikipedia: "рп" }, date: { month: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], month_abbr: ["Јан.", "Феб.", "Март", "Апр.", "Мај", "Јун", "Јул", "Авг.", "Сеп.", "Окт.", "Нов.", "Дец."], day: ["Недеља", "Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"], day_abbr: ["Нед.", "Пон.", "Уто.", "Сре.", "Чет.", "Пет.", "Суб."] }, dateformats: { year: "yyyy.", month_short: "mmm", month: "mmmm yyyy.", full_short: "d. mmm", full: "d. mmmm yyyy.", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd. mmmm yyyy.''", full_long: "d. mmm yyyy. 'u' HH:MM", full_long_small_date: "HH:MM'
d. mmm yyyy.''" }, 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/sr.js ================================================ /* Serbian (Latin) LANGUAGE ================================================== */ if (typeof VMM != 'undefined') { VMM.Language = { lang: "sr", api: { wikipedia: "sr" }, date: { month: ["januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], month_abbr: ["Jan.", "Feb.", "Mart", "Apr.", "Maj", "Jun", "Jul", "Avg.", "Sep.", "Okt.", "Nov.", "Dec."], day: ["Nedelja", "Ponedeljak", "Utorak", "Sreda", "Četvratk", "Petak", "Subota"], day_abbr: ["Ned.", "Pon.", "Uto.", "Sre.", "Čet.", "Pet.", "Sub."] }, dateformats: { year: "yyyy.", month_short: "mmm", month: "mmmm yyyy.", full_short: "d. mmm", full: "d. mmmm yyyy.", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'd. mmmm yyyy.''", full_long: "d. mmm yyyy. 'u' HH:MM", full_long_small_date: "HH:MM'
d. mmm yyyy.''" }, messages: { loading_timeline: "Učitavanje... ", return_to_title: "Početak", expand_timeline: "Uvećaj", contract_timeline: "Umanji", wikipedia: "Iz Vikipedije, slobodne enciklopedije", loading_content: "Sadržaj se učitava", loading: "Učitava se", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/sv.js ================================================ /* Swedish LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "sv", api: { wikipedia: "sv" }, date: { month: ["januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december"], month_abbr: ["jan", "febr", "mars", "april", "maj", "juni", "juli", "aug", "sept", "okt", "nov", "dec"], day: ["söndag","måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"], day_abbr: ["sön","mån", "tis", "ons", "tors", "fre", "lör"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm',' yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "H:MM", time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''", full_long: "d mmm',' yyyy 'vid' H:MM", full_long_small_date: "H:MM'
d mmm',' yyyy''" }, messages: { loading_timeline: "Laddar tidslinje... ", return_to_title: "Tillbaka till start", expand_timeline: "Förstora tidslinje", contract_timeline: "Förminska tidslinje", wikipedia: "Från Wikipedia, den fria encyklopedin", loading_content: "Laddar innehåll", loading: "Laddar", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/ta.js ================================================ /* Tamil LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "ta", api: { wikipedia: "ta" }, date: { month: ["ஜனவரி", "பெப்ரவரி", "மார்ச்", "ஏப்ரல்", "மே", "ஜுன்", "ஜுலை", "ஆகஸ்ட்", "செப்டம்பர்", "ஒக்டோபர்", "நவம்பர்", "டிசம்பர்"], month_abbr: ["ஜன.", "பெப்.", "மார்ச்", "ஏப்ரல்", "மே", "ஜுன்", "ஜுலை", "ஆகஸ்ட்", "செப்ட்.", "ஒக்டோ.", "நவம்பர்", "டிசம்பர்"], day: ["ஞாயிறு","திங்கள்", "செவ்வாய்", "புதன்", "வியாழன்", "வெள்ளி", "சனி"], day_abbr: ["ஞா","தி", "செ", "பு", "வி", "வெ", "சனி"] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' hh:MM TT", full_long_small_date: "hh:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "நேரக்கோடு தரவேறுகிறது.... ", return_to_title: "தலைப்பிற்குச் செல்ல", expand_timeline: "நேரக்கோட்டை விரிக்க", contract_timeline: "நேரக்கோட்டை சுருக்க", wikipedia: "கட்டற்ற கலைக்களஞ்சியம், விக்கிப்பீடியாவிலிருந்து", loading_content: "உள்ளடக்கம் தரவேறுகிறது...", loading: "தரவேறுகிறது", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/te.js ================================================ /* Telugu LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "te", api: { wikipedia: "te" }, date: { month: ["జనవరి", "ఫిబ్రవరి", "మార్చి", "ఏప్రిల్", "మే", "జూన్", "జూలై", "ఆగస్ట్", "సెప్టెంబర్", "అక్టోబర్", "నవంబర్", "డిసెంబర్"], month_abbr: ["జన.", "ఫిబ్ర.", "మార్చి", "ఏప్రి.", "మే", "జూన్", "జూలై", "ఆగ.", "సెప్టెం.", "అక్టో.", "నవం.", "డిసెం."], day: ["ఆదివారం","సోమవారం", "మంగళవారం", "బుధవారం", "గురువారం", "శుక్రవారం", "శనివారం"], day_abbr: ["ఆది.","సోమ.", "మంగళ.", "బుధ.", "గురు.", "శుక్ర.", "శని."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, 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/th.js ================================================ /* Thai LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "th", api: { wikipedia: "th" }, 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'
'd mmmm yyyy''", full_long: "d mmmm yyyy 'เวลา' h:MM TT", full_long_small_date: "h:MM TT'
d mmm yyyy''" }, messages: { loading_timeline: "กำลังสร้างไทม์ไลน์... ", return_to_title: "กลับสู้หน้าหลัก", expand_timeline: "ขยายไทม์ไลน์", contract_timeline: "ย่อไทม์ไลน์", wikipedia: "จากวิกิพีเดีย สารานุกรมเสรี", loading_content: "กำลังโหลดข้อมูล", loading: "กำลังโหลด" } } } ================================================ FILE: source/js/Core/Language/locale/tl.js ================================================ /* Tagalog LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "tl", api: { wikipedia: "tl" }, date: { month: ["Enemo", "Pebrero", "Marso", "Abril", "Mayo", "Hunyo", "Hulyo", "Agosto", "Setyembre", "Oktubre", "Nobyembre", "Disyembre"], month_abbr: ["Ene.", "Peb.", "Mar.", "Abr.", "Mayo", "Hun.", "Hul.", "Ago.", "Set.", "Okt.", "Nob.", "Dis."], day: ["Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"], day_abbr: ["Li.","L.", "M.", "Mi.", "H.", "B.", "S."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "mmm d", full: "mmmm d',' yyyy", time_short: "h:MM:ss TT", time_no_seconds_short: "h:MM TT", time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''", full_long: "mmm d',' yyyy 'at' h:MM TT", full_long_small_date: "h:MM TT'
mmm d',' yyyy''" }, messages: { loading_timeline: "Loading Timeline... ", return_to_title: "Return to Title", expand_timeline: "Expand Timeline", contract_timeline: "Contract Timeline", wikipedia: "Mula sa Wikipedia, ang malayang ensiklopedya", loading_content: "Loading Content", loading: "Loading", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/tr.js ================================================ /* Turkish LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "tr", api: { wikipedia: "tr" }, date: { month: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], month_abbr: ["Oca.", "Şub.", "Mar.", "Nis.", "May.", "Haz.", "Tem.", "Ağu.", "Eyl.", "Eki.", "Kas.", "Ara."], day: ["Pazar","Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"], day_abbr: ["Paz.","Pzt.", "Sal.", "Çar.", "Per.", "Cum.", "Cts."] }, dateformats: { year: "yyyy", month_short: "mmm", month: "mmmm yyyy", full_short: "d mmm", full: "d mmmm',' yyyy", time_short: "HH:MM:ss", time_no_seconds_short: "H:MM", time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''", full_long: "d mmm',' yyyy 'at' H:MM", full_long_small_date: "H:MM '
d mmm',' yyyy''" }, messages: { loading_timeline: "Zaman Çizelgesi Yükleniyor... ", return_to_title: "Başlığa Dön", expand_timeline: "Zaman Çizelgesini Genişlet", contract_timeline: "Zaman Çizelgesini Daralt", wikipedia: "Wikipedia'dan, özgür ansiklopedi", loading_content: "İçerik Yükleniyor", loading: "Yükleniyor", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Language/locale/uk.js ================================================ /* TimelineJS - ver. 2.30.0 - 2014-02-20 Copyright (c) 2012-2013 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/. */ /* Ukrainian LANGUAGE ================================================== */ typeof VMM != "undefined" && (VMM.Language = { lang: "uk", api: { wikipedia: "uk" }, 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", time_no_seconds_short: "H:MM", time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''", full_long: "d mmm yyyy 'у' H:MM", full_long_small_date: "H:MM'
d mmm',' yyyy''" }, messages: { loading_timeline: "Завантаження...", return_to_title: "Повернутися до початку", expand_timeline: "Збільшити", contract_timeline: "Зменьшити", wikipedia: "З Wikipedia, вільної енциклопедії", loading_content: "Завантаження вмісту", loading: "Завантаження" } }); ================================================ FILE: source/js/Core/Language/locale/zh-cn.js ================================================ if (typeof VMM != "undefined") { VMM.Language = { lang: "zh-cn", api: { wikipedia: "zh" }, date: { month: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], month_abbr: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], day: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], day_abbr: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] }, dateformats: { year: "yyyy年", month_short: "mmm", month: "yyyy年 mmmm", full_short: "mmm d日", full: "yyyy年mmmmd日", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'yyyy年mmmmd日''", full_long: "dddd',' yyyy年mmmd日'um' HH:MM", full_long_small_date: "HH:MM'
'dddd',' yyyy年mmmd日''" }, 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/zh-tw.js ================================================ /* Taiwanese LANGUAGE ================================================== */ if(typeof VMM != 'undefined') { VMM.Language = { lang: "zh-tw", api: { wikipedia: "zh" }, date: { month: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], month_abbr: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], day: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], day_abbr: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"] }, dateformats: { year: "yyyy年", month_short: "mmm", month: "yyyy年 mmmm", full_short: "mmm d", full: "yyyy年mmmm d日", time_short: "HH:MM:ss", time_no_seconds_short: "HH:MM", time_no_seconds_small_date: "HH:MM'
'yyyy年mmmm d日''", full_long: "dddd',' yyyy年mmmm d日 'um' HH:MM", full_long_small_date: "HH:MM'
'dddd',' yyyy年mmmm d日''" }, messages: { loading_timeline: "載入時間線... ", return_to_title: "回到開頭", expand_timeline: "展開時間", contract_timeline: "縮短時間", wikipedia: "擷取自維基百科, 自由之百科全書", loading_content: "載入內容", loading: "載入中", swipe_nav: "Swipe to Navigate" } } } ================================================ FILE: source/js/Core/Library/AES.js ================================================ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* AES implementation in JavaScript (c) Chris Veness 2005-2011 */ /* - see http://csrc.nist.gov/publications/PubsFIPS.html#197 */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ var Aes = {}; // Aes namespace /** * AES Cipher function: encrypt 'input' state with Rijndael algorithm * applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage * * @param {Number[]} input 16-byte (128-bit) input state array * @param {Number[][]} w Key schedule as 2D byte-array (Nr+1 x Nb bytes) * @returns {Number[]} Encrypted output state array */ Aes.cipher = function(input, w) { // main Cipher function [§5.1] var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES) var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4] for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i]; state = Aes.addRoundKey(state, w, 0, Nb); for (var round=1; round 6 && i%Nk == 4) { temp = Aes.subWord(temp); } for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t]; } return w; } /* * ---- remaining routines are private, not called externally ---- */ Aes.subBytes = function(s, Nb) { // apply SBox to state S [§5.1.1] for (var r=0; r<4; r++) { for (var c=0; c>> i*8) & 0xff; for (var i=0; i<2; i++) counterBlock[i+2] = (nonceRnd >>> i*8) & 0xff; for (var i=0; i<4; i++) counterBlock[i+4] = (nonceSec >>> i*8) & 0xff; // and convert it to a string to go on the front of the ciphertext var ctrTxt = ''; for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]); // generate key schedule - an expansion of the key into distinct Key Rounds for each round var keySchedule = Aes.keyExpansion(key); var blockCount = Math.ceil(plaintext.length/blockSize); var ciphertxt = new Array(blockCount); // ciphertext as array of strings for (var b=0; b>> c*8) & 0xff; for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8) var cipherCntr = Aes.cipher(counterBlock, keySchedule); // -- encrypt counter block -- // block size is reduced on final block var blockLength = b>> c*8) & 0xff; for (var c=0; c<4; c++) counterBlock[15-c-4] = (((b+1)/0x100000000-1) >>> c*8) & 0xff; var cipherCntr = Aes.cipher(counterBlock, keySchedule); // encrypt counter block var plaintxtByte = new Array(ciphertext[b].length); for (var i=0; i 0) { while (c++ < 3) { pad += '='; plain += '\0'; } } // note: doing padding here saves us doing special-case packing for trailing 1 or 2 chars for (c=0; c>18 & 0x3f; h2 = bits>>12 & 0x3f; h3 = bits>>6 & 0x3f; h4 = bits & 0x3f; // use hextets to index into code string e[c/3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } coded = e.join(''); // join() is far faster than repeated string concatenation in IE // replace 'A's from padded nulls with '='s coded = coded.slice(0, coded.length-pad.length) + pad; return coded; } /** * Decode string from Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648] * (instance method extending String object). As per RFC 4648, newlines are not catered for. * * @param {String} str The string to be decoded from base-64 * @param {Boolean} [utf8decode=false] Flag to indicate whether str is Unicode string to be decoded * from UTF8 after conversion from base64 * @returns {String} decoded string */ Base64.decode = function(str, utf8decode) { utf8decode = (typeof utf8decode == 'undefined') ? false : utf8decode; var o1, o2, o3, h1, h2, h3, h4, bits, d=[], plain, coded; var b64 = Base64.code; coded = utf8decode ? str.decodeUTF8() : str; for (var c=0; c>>16 & 0xff; o2 = bits>>>8 & 0xff; o3 = bits & 0xff; d[c/4] = String.fromCharCode(o1, o2, o3); // check for padding if (h4 == 0x40) d[c/4] = String.fromCharCode(o1, o2); if (h3 == 0x40) d[c/4] = String.fromCharCode(o1); } plain = d.join(''); // join() is far faster than repeated string concatenation in IE return utf8decode ? plain.decodeUTF8() : plain; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple */ /* single-byte character encoding (c) Chris Veness 2002-2011 */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ var Utf8 = {}; // Utf8 namespace /** * Encode multi-byte Unicode string into utf-8 multiple single-byte characters * (BMP / basic multilingual plane only) * * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars * * @param {String} strUni Unicode string to be encoded as UTF-8 * @returns {String} encoded string */ Utf8.encode = function(strUni) { // use regular expressions & String.replace callback function for better efficiency // than procedural approaches var strUtf = strUni.replace( /[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz function(c) { var cc = c.charCodeAt(0); return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); } ); strUtf = strUtf.replace( /[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz function(c) { var cc = c.charCodeAt(0); return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); } ); return strUtf; } /** * Decode utf-8 encoded string back into multi-byte Unicode characters * * @param {String} strUtf UTF-8 string to be decoded back to Unicode * @returns {String} decoded string */ Utf8.decode = function(strUtf) { // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char! var strUni = strUtf.replace( /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars function(c) { // (note parentheses for precence) var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f); return String.fromCharCode(cc); } ); strUni = strUni.replace( /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars function(c) { // (note parentheses for precence) var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f; return String.fromCharCode(cc); } ); return strUni; } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ ================================================ FILE: source/js/Core/Library/LazyLoad.js ================================================ /*jslint browser: true, eqeqeq: true, bitwise: true, newcap: true, immed: true, regexp: false */ /* LazyLoad makes it easy and painless to lazily load one or more external JavaScript or CSS files on demand either during or after the rendering of a web page. Supported browsers include Firefox 2+, IE6+, Safari 3+ (including Mobile Safari), Google Chrome, and Opera 9+. Other browsers may or may not work and are not officially supported. Visit https://github.com/rgrove/lazyload/ for more info. Copyright (c) 2011 Ryan Grove All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @module lazyload @class LazyLoad @static @version 2.0.3 (git) */ LazyLoad = (function (doc) { // -- Private Variables ------------------------------------------------------ // User agent and feature test information. var env, // Reference to the element (populated lazily). head, // Requests currently in progress, if any. pending = {}, // Number of times we've polled to check whether a pending stylesheet has // finished loading. If this gets too high, we're probably stalled. pollCount = 0, // Queued requests. queue = {css: [], js: []}, // Reference to the browser's list of stylesheets. styleSheets = doc.styleSheets; // -- Private Methods -------------------------------------------------------- /** Creates and returns an HTML element with the specified name and attributes. @method createNode @param {String} name element name @param {Object} attrs name/value mapping of element attributes @return {HTMLElement} @private */ function createNode(name, attrs) { var node = doc.createElement(name), attr; for (attr in attrs) { if (attrs.hasOwnProperty(attr)) { node.setAttribute(attr, attrs[attr]); } } return node; } /** Called when the current pending resource of the specified type has finished loading. Executes the associated callback (if any) and loads the next resource in the queue. @method finish @param {String} type resource type ('css' or 'js') @private */ function finish(type) { var p = pending[type], callback, urls; if (p) { callback = p.callback; urls = p.urls; urls.shift(); pollCount = 0; // If this is the last of the pending URLs, execute the callback and // start the next request in the queue (if any). if (!urls.length) { callback && callback.call(p.context, p.obj); pending[type] = null; queue[type].length && load(type); } } } /** Populates the env variable with user agent and feature test information. @method getEnv @private */ function getEnv() { var ua = navigator.userAgent; env = { // True if this browser supports disabling async mode on dynamically // created script nodes. See // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order async: doc.createElement('script').async === true }; (env.webkit = /AppleWebKit\//.test(ua)) || (env.ie = /MSIE/.test(ua)) || (env.opera = /Opera/.test(ua)) || (env.gecko = /Gecko\//.test(ua)) || (env.unknown = true); } /** Loads the specified resources, or the next resource of the specified type in the queue if no resources are specified. If a resource of the specified type is already being loaded, the new request will be queued until the first request has been finished. When an array of resource URLs is specified, those URLs will be loaded in parallel if it is possible to do so while preserving execution order. All browsers support parallel loading of CSS, but only Firefox and Opera support parallel loading of scripts. In other browsers, scripts will be queued and loaded one at a time to ensure correct execution order. @method load @param {String} type resource type ('css' or 'js') @param {String|Array} urls (optional) URL or array of URLs to load @param {Function} callback (optional) callback function to execute when the resource is loaded @param {Object} obj (optional) object to pass to the callback function @param {Object} context (optional) if provided, the callback function will be executed in this object's context @private */ function load(type, urls, callback, obj, context) { var _finish = function () { finish(type); }, isCSS = type === 'css', nodes = [], i, len, node, p, pendingUrls, url; env || getEnv(); if (urls) { // If urls is a string, wrap it in an array. Otherwise assume it's an // array and create a copy of it so modifications won't be made to the // original. urls = typeof urls === 'string' ? [urls] : urls.concat(); // Create a request object for each URL. If multiple URLs are specified, // the callback will only be executed after all URLs have been loaded. // // Sadly, Firefox and Opera are the only browsers capable of loading // scripts in parallel while preserving execution order. In all other // browsers, scripts must be loaded sequentially. // // All browsers respect CSS specificity based on the order of the link // elements in the DOM, regardless of the order in which the stylesheets // are actually downloaded. if (isCSS || env.async || env.gecko || env.opera) { // Load in parallel. queue[type].push({ urls : urls, callback: callback, obj : obj, context : context }); } else { // Load sequentially. for (i = 0, len = urls.length; i < len; ++i) { queue[type].push({ urls : [urls[i]], callback: i === len - 1 ? callback : null, // callback is only added to the last URL obj : obj, context : context }); } } } // If a previous load request of this type is currently in progress, we'll // wait our turn. Otherwise, grab the next item in the queue. if (pending[type] || !(p = pending[type] = queue[type].shift())) { return; } head || (head = doc.head || doc.getElementsByTagName('head')[0]); pendingUrls = p.urls; for (i = 0, len = pendingUrls.length; i < len; ++i) { url = pendingUrls[i]; if (isCSS) { node = env.gecko ? createNode('style') : createNode('link', { href: url, rel : 'stylesheet' }); } else { node = createNode('script', {src: url}); node.async = false; } node.className = 'lazyload'; node.setAttribute('charset', 'utf-8'); if (env.ie && !isCSS) { node.onreadystatechange = function () { if (/loaded|complete/.test(node.readyState)) { node.onreadystatechange = null; _finish(); } }; } else if (isCSS && (env.gecko || env.webkit)) { // Gecko and WebKit don't support the onload event on link nodes. if (env.webkit) { // In WebKit, we can poll for changes to document.styleSheets to // figure out when stylesheets have loaded. p.urls[i] = node.href; // resolve relative URLs (or polling won't work) pollWebKit(); } else { // In Gecko, we can import the requested URL into a
================================================ FILE: tests/test_extra_html.json ================================================ { "timeline": { "headline":"The Amazon effect", "type":"default", "startDate":"2000", "text":"
How Amazon has changed the world of commerce

", "asset": { "media":"", "credit":"", "caption":"" }, "date": [ { "startDate":"2004", "headline":"How do purchases get from your virtual shopping cart to the doorstep? There are two ways.", "text":"", "asset": { "media":"https://vine.co/v/b55LOA1dgJU", "credit":"", "caption":"" } }, { "startDate":"2008", "headline":"Buying a vacuum through Amazon", "text":"", "asset": { "media":"_media/fulfillment1a.png", "credit":"", "caption":"The vacuum order is placed, processed and shipped completely by Amazon." } }, { "startDate":"2012", "headline":"Buying a vacuum through an alliance between
Amazon and GoVacuum", "text":"", "asset": { "media":"_media/fulfillment1b.png", "credit":"", "caption":"The vacuum, originally supplied by GoVacuum, is ordered, processed and shipped by Amazon." } }, { "startDate":"2016", "headline":"What is the Amazon effect?", "text":"
Consumers
Amazon and its Marketplace sellers are a one-stop shop for a broad range of merchandise making products easier to find. The best deals are often faster and cheaper than the alternatives.

Amazon
By fusing their businesses, both Amazon and independent sellers can attract more customers and improve profit margins. But doing so can create risks for Amazon and third-party sellers.
" }, { "startDate":"2024", "headline":"Amazon.com Fulfillment", "asset": { "media":"http://interactive.ftdata.co.uk/features/2012-06-01_amazon/pages/receipts.html" } } ] } } ================================================ FILE: tests/test_googlespreadsheet.html ================================================ Timeline JS Example
================================================ FILE: tests/test_googlespreadsheet_bc_era_ages_epoch.html ================================================ Timeline JS Example
================================================ FILE: tests/test_googlespreadsheet_biblical_ad.html ================================================ Timeline JS Example
================================================ FILE: tests/test_googlespreadsheet_minutes.html ================================================ Timeline JS Example
================================================ FILE: tests/test_iframe_640.html ================================================ Timeline JS Example
================================================ FILE: tests/test_jsonp.html ================================================ Timeline JS Example
================================================ FILE: tests/test_utc_firefox.html ================================================ Timeline JS Example
================================================ FILE: tests/test_utc_firefox.json ================================================ { "timeline": { "date": [ { "asset": { "caption": "", "media": "http://c8226405.myzen.co.uk/wp-content/uploads/2012/09/dummy4.jpg" }, "headline": "1869", "startDate": "1869,9,10", "classname": "myuniqueclassnamegoeshere", "text": "

Wm. Sugden and Sons Ltd started tailors shop in Cleckheaton

" }, { "asset": { "caption": "", "media": "http://c8226405.myzen.co.uk/wp-content/uploads/2012/09/sewingmachine3.jpg" }, "headline": "1896", "startDate": "1896,9,10,12,06", "text": "

Starts making shirts in the shop

" }, { "asset": null, "endDate": "1899,9,10", "headline": "1899", "startDate": "1899,9,10", "text": "

Shirt business has out grown the shop so moves into a larger factory at Water Lane Mills

" }, { "asset": null, "endDate": "1904,9,10", "headline": "1904", "startDate": "1904,9,10", "text": "

Another factory in Barnsley opens

" }, { "asset": null, "endDate": "1911,9,10", "headline": "1911", "startDate": "1911,9,10", "text": "

Opens a factory in Wakefield to make workwear and army uniforms

" }, { "asset": { "caption": "", "media": "http://c8226405.myzen.co.uk/wp-content/uploads/2012/09/green-shirt3.jpg" }, "endDate": "1924,9,10", "headline": "1924", "startDate": "1924,9,10", "text": "

Moves to a larger factory in Wakefield as product range expands

" }, { "asset": null, "endDate": "1930,9,10", "headline": "1920-1930", "startDate": "1920,9,10", "text": "

Acquire two weaving mills in Lancashire and make over five million shirts

" }, { "asset": null, "endDate": "1950,9,10", "headline": "1950", "startDate": "1950,9,10", "text": "

Sets up factory in South Yorkshire to manufacture jeans

" }, { "asset": null, "endDate": "1965,9,10", "headline": "1965", "startDate": "1965,9,10", "text": "

A bigger factory is needed to accommodate production

" }, { "asset": null, "endDate": "1968,9,10", "headline": "1968", "startDate": "1968,9,10", "text": "

Merger with Donner family and Double Two brand

" }, { "asset": null, "endDate": "1990,9,10", "headline": "1970-1990", "startDate": "1970,9,10", "text": "

Reputation for quality grows and Topflight brand of workwear is widely sold

" }, { "asset": null, "endDate": "1990,9,10", "headline": "1990", "startDate": "1990,9,10", "text": "

Managed Services concept introduced under Threadneedle brand

" }, { "asset": null, "endDate": "1998,9,10", "headline": "1998", "startDate": "1998,9,10", "text": "

John Sugden retires, a new generation of the family takes over

" }, { "asset": null, "endDate": "2012,9,10", "headline": "Present", "startDate": "2012,9,10", "text": "

Although the business has been reshaped throughout the years, the business still remains a heritage brand and is still an important part of Wakefieldu2019s history

" } ], "headline": "", "text": "", "type": "default" } } ================================================ FILE: website/__init__.py ================================================ ================================================ FILE: website/app.py ================================================ ''' Main entrypoint file. To run: $ python serve.py ''' from flask import Flask from flask import request from flask import render_template from flask import json from flask import send_from_directory import importlib import traceback import sys import os #if __name__ == "__main__": # Add current directory to sys.path site_dir = os.path.dirname(os.path.abspath(__file__)) if site_dir not in sys.path: sys.path.append(site_dir) # Set default FLASK_SETTINGS_MODULE for debug mode if not os.environ.get('FLASK_SETTINGS_MODULE', ''): os.environ['FLASK_SETTINGS_MODULE'] = 'core.settings.loc' # Import settings module for the inject_static_url context processor. settings_module = os.environ.get('FLASK_SETTINGS_MODULE') try: importlib.import_module(settings_module) except ImportError, e: raise ImportError( "Could not import settings '%s' (Is it on sys.path?): %s" \ % (settings_module, e)) settings = sys.modules[settings_module] app = Flask(__name__) build_dir = os.path.join(settings.PROJECT_ROOT, 'build') source_dir = os.path.join(settings.PROJECT_ROOT, 'source') @app.context_processor def inject_static_url(): """ Inject the variables 'static_url' and 'STATIC_URL' into the templates to avoid hard-coded paths to static files. Grab it from the environment variable STATIC_URL, or use the default. Never has a trailing slash. """ static_url = settings.STATIC_URL or app.static_url_path if static_url.endswith('/'): static_url = static_url.rstrip('/') return dict(static_url=static_url, STATIC_URL=static_url) @app.route('/build/') def catch_build(path): """ Serve /build/... urls from the build directory """ return send_from_directory(build_dir, path) @app.route('/source/') def catch_source(path): """ Serve /source/... urls from the source directory """ return send_from_directory(source_dir, path) @app.route('/') @app.route('/') def catch_all(path='index.html', context=None): """Catch-all function which serves every URL.""" context = context or {} if not os.path.splitext(path)[1]: path = os.path.join(path, 'index.html') return render_template(path, **context) if __name__ == "__main__": import getopt ssl_context = None port = 5000 try: opts, args = getopt.getopt(sys.argv[1:], "sp:", ["port="]) for opt, arg in opts: if opt == '-s': ssl_context = 'adhoc' elif opt in ('-p', '--port'): port = int(arg) else: print 'Usage: app.py [-s]' sys.exit(1) except getopt.GetoptError: print 'Usage: app.py [-s] [-p port]' sys.exit(1) app.run(host='0.0.0.0', port=5000, debug=True, ssl_context=ssl_context) ================================================ FILE: website/core/__init__.py ================================================ ================================================ FILE: website/core/settings/__init__.py ================================================ ================================================ FILE: website/core/settings/base.py ================================================ """Common settings and globals.""" import os from os.path import abspath, basename, dirname, join, normpath CORE_ROOT = dirname(dirname(abspath(__file__))) PROJECT_ROOT = dirname(dirname(CORE_ROOT)) ================================================ FILE: website/core/settings/loc.py ================================================ """Local settings and globals.""" import sys from os.path import normpath, join from .base import * # Import secrets -- not needed #sys.path.append( # abspath(join(PROJECT_ROOT, '../secrets/TimelineJS/stg')) #) #from secrets import * # Set static URL STATIC_URL = '/static' ================================================ FILE: website/static/css/site.css ================================================ /* General styles */ /* Layout */ section { padding: 20px 0; } footer { margin-top: 30px; } /* Navbar */ .navbar { font-size: 14px; } /* Overview */ #overview { padding: 40px 0 50px; margin: 0; } #overview hgroup { text-align: center; } #teaser { display: block; margin: 30px 0 -10px; font-family: sans-serif; } .new { font-style: italic; color: #333; font-weight: bold; margin-right: 3px; } #teaser:hover, #teaser:active, #teaser:focus { text-decoration: none; color: #0f9bd1; } #teaser .arrow { border-radius: 20px; background-color: #0f9bd1; color: white; padding: 0px 8px 4px; font-size: 26px; margin-left: 2px; display: inline-block; } #teaser .arrow:before{ content: "»"; display: inline-block; } #body-teaser { color: #333; background: #eee; border-top: solid 1px #d0d0d0; border-bottom: solid 1px #d0d0d0; padding: 30px 60px; margin: 20px 0; } #body-teaser .new { color: #CA5529; } /* Timeline */ #demo { width: 100%; height: 600px; } /* Steps */ .step { padding-top: 20px; padding-bottom: 40px; margin-bottom: 20px; border-bottom: 4px double #eee; } .step.last { border: none; } .step h2 { margin-top: 0; margin-bottom: 0; color: #ccc; font-size: 100px; line-height: 1em; } .step h3 { margin-top: 0; } .more-options { margin: 20px 0; display: none; } #preview { display: none; } #preview-embed-iframe { -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; } /* Examples */ #examples h3 { font-size: 16px; line-height: 1.3em; } h2.intro { margin: 20px auto 30px; max-width: 900px; padding: 0 20px; font-size: 36px; } #examples .row { margin-bottom: 20px; } #examples img { margin-bottom: 10px; } /* Developers */ #developers .develop { margin-top: 40px; margin-bottom: 40px; text-align: center; } /* Error */ #error { margin-top: 40px; margin-bottom: 80px; padding-top: 40px; padding-bottom: 40px; } #error .error { font-size: 36px; line-height: 1.3em; text-align: center; color: red; } #mc-embedded-subscribe-form .input-large { width: 260px; } #font-preview-trigger { margin-left: 10px;} ================================================ FILE: website/static/img/.gitignore ================================================ ================================================ FILE: website/static/js/.gitignore ================================================ ================================================ FILE: website/static/js/main.js ================================================ // overcome Timeline's stupid jQuery loading var $blueline = $.noConflict(); $blueline(document).ready(function() { var $ = $blueline; function navSmartScroll($destination) { var offset = $(".navbar").height() || 0, scrollTop = $destination.offset().top - 30; $("body,html").animate({scrollTop: scrollTop}, 350); } // Navbar scrollTo $(".navbar .nav a, [data-scroll='true']").click(function (e) { var $target = $(this) , href = $target.attr("href") , hash = href.substring(href.lastIndexOf('/') + 1) , $destination = $(hash); navSmartScroll($destination); return false; }); // More Options $(".show-options").click(function (e) { $(this).hide(); $(".more-options").slideDown(); return false; }); $("#font-preview-trigger").popover() // Preview $("#iframe-preview-button").click(function () { var $embed = $("#preview"); $embed.show(); $("body,html").animate({scrollTop: $embed.offset().top - 60}, 250); }); // Embed Generator updateEmbedCode(); $("#embed_code").click(function() { $(this).select(); }); $('#embed-width').change(function(evt) { updateEmbedCode(evt); }); $('#embed-wordpressplugin').change(function(evt) { updateEmbedCode(evt); }); $('#embed-font').change(function(evt) { updateEmbedCode(evt); }); $('#embed-height').change(function(evt) { updateEmbedCode(evt); }); $('#embed-maptype').change(function(evt) { updateEmbedCode(evt); }); $('#embed-googlemapkey').change(function(evt) { updateEmbedCode(evt); }); $('#embed-source-url').change(function(evt) { updateEmbedCode(evt); }); $('#embed-language').change(function(evt) { updateEmbedCode(evt); }); $('#embed-startatend').change(function(evt) { updateEmbedCode(evt); }); $('#embed-hashbookmark').change(function(evt) { updateEmbedCode(evt); }); $('#embed-startatslide').change(function(evt) { updateEmbedCode(evt); }); $('#embed-startzoomadjust').change(function(evt) { updateEmbedCode(evt); }); $('#embed-debug').change(function(evt) { updateEmbedCode(evt); }); $('.collapse').on('show',function(e) { window.location.hash = "show-" + $(this).attr('id'); }) if (window.location.hash.match(/#show-/)) { var $target = $("#" + window.location.hash.substr(6)); $target.collapse('show'); navSmartScroll($target.prev()); } }); ================================================ FILE: website/static/js/story-timeline.js ================================================ ================================================ FILE: website/static/welcome/welcome.json ================================================ { "timeline": { "headline":"Welcome to TimelineJS", "type":"default", "startDate":"1888", "text": "

TimelineJS is an open-source tool that enables you to build visually-rich interactive timelines and is available in 40 languages.

You're looking at an example of one right now.

Click on the arrow to the right to learn more.

", "asset": { "media":"//2.bp.blogspot.com/-dxJbW0CG8Zs/TmkoMA5-cPI/AAAAAAAAAqw/fQpsz9GpFdo/s1600/voyage-dans-la-lune-1902-02-g.jpg", "credit":"", "caption":"" }, "date": [ { "startDate":"1851", "headline":"It's Easy to Make Your Own Timeline", "text":"The TimelineJS Embed Generator makes it easy to add a timeline to your own site. Just copy our Google Spreadsheet template, add your events as rows in the spreadsheet, and use our generator tool to generate the HTML you need to add to your site.", "asset": { "media":"/static/welcome/step3.png", "credit":"", "caption":"Screenshot from TimelineJS Embed Generator tool (see below)" } }, { "startDate":"1871", "headline":"Illustrate your Timeline with photos, videos, tweets and more.", "text":"Timeline can automatically pull in photos, videos from YouTube or Vimeo, tweets, wikipedia entries, and many other media types to help tell your story.", "asset": { "media":"", "credit":"", "caption":"Screenshot from TimelineJS Embed Generator tool (see below)" } }, { "startDate":"1899", "headline":"YouTube video", "text":"To add a YouTube video, just add a link to it in the media field. No embedding necessary. http://youtu.be/lIvftGgps24", "asset": { "media":"http://youtu.be/lIvftGgps24", "credit":"Georges Méliès", "caption":"Le portrait mystérieux" } }, { "startDate":"1902", "headline":"YouTube with no text", "text":"", "asset": { "media":"http://youtu.be/7JDaOOw0MEE", "credit":"Georges Méliès", "caption":"A Trip to the Moon / Le Voyage dans la lune" } }, { "startDate":"1902", "headline":"Wikipedia", "text":"Add a link to a Wikipedia entry in the media field to show an excerpt alongside your text.", "asset": { "media":"http://en.wikipedia.org/wiki/A_Trip_to_the_Moon", "credit":"", "caption":"" } }, { "startDate":"1950,2,7", "headline":"Blockquote", "text":"This is an example of a blockquote.
<blockquote>“Just use html blockquotes in the media field.”</blockquote>", "asset": { "media":"
“You have brains in your head. You have feet in your shoes. You can steer yourself in any direction you choose. You're on your own, and you know what you know. And you are the guy who'll decide where to go.”
", "credit":"Dr. Seuss", "caption":"" } }, { "startDate":"1960,2,7", "headline":"Website", "text":"This is an example of a website. Just paste a link to the site in the media field.", "asset": { "media":"http://www.w3schools.com/", "credit":"w3schools", "caption":"http://w3schools.com" } }, { "startDate":"1979,1,18", "headline":"Google Map", "text":"Google Maps are easy too. Just add the link to the map in the media field.", "asset": { "media":"http://maps.google.com/maps?hl=en&sll=42.05083,-87.674194&sspn=0.020170947570668576,0.036220713642592585&z=15", "credit":"", "caption":"" } }, { "startDate":"1980,1,18", "headline":"Google Map with no text", "text":"", "asset": { "media":"http://maps.google.com/maps?q=chicago&hl=en&sll=41.874961,-87.619054&sspn=0.159263,0.351906&t=t&hnear=Chicago,+Cook,+Illinois&z=11", "credit":"", "caption":"" } }, { "startDate":"1985,2,7", "headline":"Flickr", "text":"To add a Flickr photo, just paste a link to the photo page in the media field. Example: http://www.flickr.com/photos/zachwise/7074630607/", "asset": { "media":"http://www.flickr.com/photos/zachwise/7074630607/in/photostream/", "credit":"Zach Wise", "caption":"" } }, { "startDate":"1990,2,7", "headline":"Flickr with no text", "text":"", "asset": { "media":"http://www.flickr.com/photos/zachwise/7050589957/in/photostream/", "credit":"Zach Wise", "caption":"March to work." } }, { "startDate":"2001,2,10", "headline":"A Tweet", "text":"To add a tweet, just paste a link to the tweet stats in the media field. Example: http://twitter.com/alykat/status/164184609519697920", "asset": { "media":"http://twitter.com/alykat/status/164184609519697920", "credit":"", "caption":"" } }, { "startDate":"2002,12,10", "headline":"Yet Another Tweet", "asset": { "media":"http://twitter.com/ArjunaSoriano/status/164181156147900416", "credit":"", "caption":"" } }, { "startDate":"2011,8,23", "headline":"Vimeo", "text":"

Just add a link to the video in the media field. Example: https://vimeo.com/33211636

", "asset": { "media":"https://vimeo.com/33211636", "credit":"Denis Chapon", "caption":"" } }, { "startDate":"2012,1,18", "headline":"SoundCloud ", "text":"Just add a link to the track in the media field.", "asset": { "media":"http://soundcloud.com/beastieboys/make-some-noise", "credit":"", "caption":"R.I.P. MCA." } }, { "startDate":"2013,10,01", "headline":"Get started!", "text":"Use the generator form to make your first timeline now.", "asset": { "media":"", "credit":"", "caption":"" } } ] } } ================================================ FILE: website/templates/_about.html ================================================

About

Document History

TimelineJS can pull in media from different sources. It has built in support for:

Twitter, Flickr, Google Maps, YouTube, Vimeo, Dailymotion, Wikipedia, SoundCloud and more media types in the future.

Creating one is as easy as filling in a Google spreadsheet or as detailed as JSON.

Tips and tricks to best utilize TimelineJS

  1. Keep it short, and write each event as a part of a larger narrative.
  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.
================================================ FILE: website/templates/_demo.html ================================================
================================================ FILE: website/templates/_description.html ================================================

How it Works

TimelineJS is an open-source tool that enables anyone to build visually,rich, interactive timelines. Beginners can create a timeline using nothing more than a Google spreadsheet. Experts can use their JSON skills to create custom installations, while keeping TimelineJS's core look and functionality.

Sources

It can pull in media from a variety of sources and has built-in support for Twitter, Flickr, Google Maps, YouTube, Vimeo, Vine, Dailymotion, Wikipedia, SoundCloud and more.

Tips & tricks

  1. Keep it short, and write each event as a part of a larger narrative.
  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.

Sign up for updates

Get updates, tips and news by email. No Spam.

Stay connected with us on twitter

================================================ FILE: website/templates/_developers.html ================================================

About the Project

This project is hosted on GitHub, the largest code host in the world. We encourage you to contribute to the project and we value your feedback. You can report bugs and discuss features on the GitHub issues page, or ask a question

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/.

Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.

================================================ FILE: website/templates/_examples.html ================================================

Examples

Have you made a timeline? Let us know, and we might feature it here.

================================================ FILE: website/templates/_help.html ================================================

Help

Have a question? Look for it in the FAQ below. No luck there? Try our community support forum. You may also find some answers in the old Google group archive, although it is no longer an active discussion forum.

All modern browsers are supported as well as Internet Explorer 8 and above.

If you run into problems with IE8, IE9 or IE10 and get a error message saying IE7 is not supported, it may be because you are running the browser in IE7 compatibility mode. Here are directions on how to change the compatibility mode.

If you're using a Google Spreadsheet as your source, make sure your Google spreadsheet is public and published. Also make sure you don't have any empty rows in the spreadsheet as this can sometimes cause problems.
Yes, but the photos must be publically available online and the URL must end in .jpg, .png, or .gif. Some users have found that uploading images to Dropbox is an easy and convenient way to give them a URL that’s compatible with TimelineJS.
TimelineJS is optimized for 20-30 entries. If you have more entries, you run a risk of slow load times. Test your timeline to make sure you are satisfied. The best remedy for slow load times may be to edit your timeline to include fewer entries or to create a series of smaller timelines. That said, some publications have built timelines that have hundreds of entries.
You can change the height using the embed tool above. If you need more control, read the Google Groupdiscussion to learn more.
You can change the font using the embed tool above. If you’d like to make modifications that aren’t supported by embed tool you’ll need to dig in to the CSS — here's a discussion that includes a few tips.
If this is your end goal it may be easier for you to use a slider tool rather than TimelineJS. Here are a few ways you can remove the timeline bar.

The TimelineJS iFrame embed method is compatible with WordPress. Some WordPress installs require users who want to paste code in to the HTML view to have an editor or administrator status — if you’re having trouble, make sure that you have sufficient permissions.

If you don't have the right permissions, try this plugin for Wordpress.

Thumbnails are only shown from Flickr, Youtube, Vimeo etc. That was done for performance reasons. Having a very large image file as a thumbnail really slows down the timeline. Flickr, Youtube etc have actual thumbnail sized images that can be used that don't cause performance issues. You can also create your own thumbnails.
The display of the timeline is dynamic. It chooses a time interval that best matches the number of events there are with the amount of time that is covered.
Tags are essentially categories. You can have up to 6 of them to categorize events on the timeline. The events on the timeline will align with their category row. See the screenshot below
The default number of rows is three. If you are using tags and you have more than three tags, the number of rows increases to six.

If you’re using the TimelineJS Google spreadsheet template, first make sure the cell you want to modify is set to Plain Text — "Format > Number > Plain Text.” Then simply enter the year (e.g. 1994) or month and year (e.g. 7/1979).

Earlier versions of TimelineJS required you to enter a date as January 1 of a given year to do this, but now you should just enter the full year, as explained above.

You can add B.C. dates by using negative years. For example, -100 would be 100 B.C. Be sure to change the formatting of the cell you want to modify to Plain Text — "Format > Number > Plain Text".
No. TimelineJS uses Google's API to access the data from the Google Spreadsheet. If you want to start your work in Excel and then copy and paste your data into a Google spreadsheet, that’ll work but the likelihood of errors increases.
Yes. JSON is the best and safest format for feeding information into TimelineJS from a database. Just use your language of choice to create a json file from your database.
Yes! Just grab a copy of the template and replace the language with the language you want to create. You can find your language's two letter code here. Save the file and post it to the Google Group or you can do a pull request on GitHub.
You can include a link in the text field using the standard HTML for a hyperlink.
================================================ FILE: website/templates/_make.html ================================================

Make a Timeline

TimelineJS works on any site or blog. Make your own in four easy steps. (video tutorial)

New!There's a new version of TimelineJS that is now available for beta testing. TimelineJS 3 is a full rewrite designed to make this popular tool more flexible for authors and developers.

Try TimelineJS 3 now »

1

Create your spreadsheet

Build a new Google Spreadsheet using our template. Drop dates, text and links to media into the appropriate columns. Note: Don't change the column headers, don't remove any columns, and don't leave any blank rows in your spreadsheet.

Google Spreadsheet Template

2

Publish to the web

Publish to Web

Under the File menu, select “Publish to the Web.”

In the next window, click the blue "publish" button. When asked, "Are you sure…?" click OK.

Now, copy the URL that appears in the center of the window. You'll use this in the next step.

Publish to Web 2

Publish to Web 3

3

Copy/paste spreadsheet URL into the generator box below

Make sure you've published it.

Width
Height

More Options

Customize (Optional)

If you are using a Google map type, please enter your API Key.

click to preview font combinations

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.

Slide

You can tell TimelineJS to start at a specific slide number

4

Embed the code into your website

Grab the embed code and paste it on your site where you want your TimelineJS to appear (just like a YouTube video).



Preview Link to Preview

Preview

================================================ FILE: website/templates/_overview.html ================================================

TimelineJS

Beautifully crafted timelines that are easy and intuitive to use.

Make a timeline now

New! Try the TimelineJS 3 beta

================================================ FILE: website/templates/base.html ================================================ {% block header %} Timeline JS - Beautifully crafted timelines that are easy, and intuitive to use. {% endblock %} {% block content %} {% endblock %} {% block scripts %} {% endblock %} ================================================ FILE: website/templates/error.html ================================================ {% extends "base.html" %} {% block content %}

Sorry the page could not be found on this server.

{% endblock %} ================================================ FILE: website/templates/examples/example.json ================================================ { "timeline": { "headline":"Elizabeth Taylor
1932-2011", "startDate":"1932", "text":"

The actress,renowned for her beauty, talent and eventful personal life, was one of the last stars left from Hollywood's golden age. A look at some of the milestones in her life.

This is demo prototype of this timeline tool. The test content orginates from The New York Time's interactive feature
Elizabeth Taylor: 1932-2011.

", "type":"default", "asset": { "media":"examples/taylor/born.jpg", "credit":"", "caption":"" }, "date": [ { "startDate":"2011,3,23", "headline":"Elizabeth Taylor Dies in Los Angeles", "asset": { "media":"examples/taylor/final.jpg", "credit":"", "caption":"She died of congestive heart failure at Cedars-Sinai Hospital in Los Angeles." }, "tags":"Personal life" }, { "startDate":"2004,11,1", "headline":"Reveals Congestive Heart Failure", "text":"Ms. Taylor disclosed that she had congestive heart failure,a disorder in which the heart ", "related":"", "tags":"Personal life" }, { "startDate":"2003,1,1", "headline":"Retires from Acting", "text":"Ms. Taylor, whose output steadily decreased beginning in the 1980s, announced her retirement from acting in 2003, saying she preferred to focus on her AIDS charity work.", "asset": { "media":"examples/taylor/retire.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"2002,1,1", "headline":"Receives Kennedy Center Honor", "text":"Ms. Taylor received a John F. Kennedy Center Honor in 2002.", "asset": { "media":"examples/taylor/kennedy.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Personal life, Career" }, { "startDate":"1999,12,1", "headline":"Introducing Dame Elizabeth Taylor", "text":"Ms. Taylor, a dual citizen of England and the United States, was appointed by Queen Elizabeth II as a Dame Commander of the Order of the British Empire.", "asset": { "media":"examples/taylor/dame.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Personal life, Career" }, { "startDate":"1999,1,1", "headline":"Named a Top Hollywood Legend by AFI", "text":"Ms. Taylor was listed seventh on the American Film Institute's list of the greatest American female screen legends.", "tags":"Career" }, { "startDate":"1991,10,6", "headline":"Marries Larry Fortensky", "asset": { "media":"examples/taylor/fortensky.jpg", "credit":"", "caption":"Ms. Taylor's eighth and final marriage was to Larry Fortensky" }, "endDate":"1996,10,31", "tags":"Marriages, Personal life" }, { "startDate":"1987,1,1", "headline":"Debut of Perfume Line", "text":"In the 1980s and 1990s, Ms. Taylor arguably became better known for her line of perfumes than her acting. Passion, her first licensed product, was released in 1987. White Diamonds followed in 1991.", "asset": { "media":"http://youtu.be/vjVfu8-Wp6s", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1985", "headline":"AIDS Activism", "text":"Ms. Taylor has been an energetic activist for AIDS-related causes.", "asset": { "media":"examples/taylor/aids.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "endDate":"2011,2,16", "tags":"Personal life" }, { "startDate":"1981", "headline":"Makes Broadway Debut", "text":"Ms. Taylor made her Broadway debut in a revival of \"The Little Foxes\" by Lillian Hellman.", "asset": { "media":"examples/taylor/broadway.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1976,12,4", "headline":"Marriage to John W. Warner", "asset": { "media":"examples/taylor/warner.jpg", "credit":"", "caption":"Ms. Taylor's seventh marriage" }, "endDate":"1982,11,7", "tags":"Marriages, Personal life" }, { "startDate":"1975,10,10", "headline":"Remarries Richard Burton", "text":"The second installment of the couple's marriage lasted less than 10 months. Ms. Taylor was also linked to Ardeshir Zahedi, the Iranian ambassador to Washington, during this time.", "asset": { "media":"examples/taylor/burton-2.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "endDate":"1976,7,29", "tags":"Marriages, Personal life" }, { "startDate":"1966,1,1", "headline":"Stars in 'Who's Afraid of Virginia Woolf?'", "text":"Ms. Taylor won her second Academy Award for arguably her most acclaimed role.", "asset": { "media":"examples/taylor/woolfe.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1964,3,15", "headline":"Marries Richard Burton", "asset": { "media":"examples/taylor/burton.jpg", "credit":"", "caption":"Ms. Taylor left Eddie Fisher and married the actor Richard Burton." }, "endDate":"1974,6,26", "tags":"Marriages, Personal life" }, { "startDate":"1963", "headline":"Stars in 'Cleopatra'", "asset": { "media":"http://youtu.be/NGDyZHlHklo", "credit":"", "caption":"The opulent production was among the most expensive in cinematic history at the time." }, "tags":"Career" }, { "startDate":"1961,4,17", "headline":"Wins First Academy Award", "text":"Ms. Taylor won her first Oscar for her role in \"Butterfield 8.\"", "asset": { "media":"examples/taylor/oscar.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1961,1,1", "headline":"Stars in 'Butterfield 8'", "text":"One of Ms. Taylor's most acclaimed roles was as a call girl in the 1960 film \"Butterfield 8.\"", "asset": { "media":"examples/taylor/butterfield.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "endDate":"196002152034", "tags":"Career" }, { "startDate":"1959,5,12", "headline":"Marries Eddie Fisher", "asset": { "media":"examples/taylor/fisher.jpg", "credit":"", "caption":"Ms. Taylor's fourth marriage." }, "endDate":"1964,3,6", "tags":"Marriages" }, { "startDate":"1957", "headline":"Nominated for an Oscar", "text":"Ms. Taylor received her first Academy Award nomination with a best lead actress nod for \"Raintree County, \" but she did not win. She was also nominated for best actress in \"Cat on a Hot Tin Roof\" (1958); \"Suddenly, Last Summer\" (1959); \"Butterfield 8\" (1960); and \"Who's Afraid of Virginia Woolf?\" (1966).", "asset": { "media":"http://youtu.be/rDk0JtQHc0A", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1957,2,2", "headline":"Marries Michael Todd", "asset": { "media":"examples/taylor/todd.jpg", "credit":"", "caption":"Ms. Taylor married Michael Todd,a film and theater producer." }, "endDate":"1958,3,22", "tags":"Marriages, Personal life" }, { "startDate":"1956", "headline":"Stars in 'Giant'", "text":"In another acclaimed early performance, Ms. Taylor starred opposite Rock Hudson and James Dean in George Stevens's epic set in Texas.", "asset": { "media":"examples/taylor/giant.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1954", "headline":"A Ubiquitous Starlet", "text":"Ms. Taylor's workload increased dramatically after \"A Place in the Sun.\" In 1954, her busiest year, she appeared in four films: \"Beau Brummell\"; \"Elephant Walk\"; \"The Last Time I Saw Paris\"; and \"Rhapsody.\"", "asset": { "media":"http://youtu.be/ebDVU2OjsSw", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1952", "headline":"Marriage to Michael Wilding", "text":"Ms. Taylor's second marriage, to Michael Wilding, an actor, also ended in divorce. They had two children: Michael Howard Wilding Jr. and Christopher Edward Wilding.", "related":"", "endDate":"1957,1,26", "tags":"Marriages, Personal life" }, { "startDate":"1951", "headline":"A Child Star Grows Up", "text":"In the 1950s Ms. Taylor matured into adult roles and began to be considered one of the most beautiful women in the world. Her first acclaimed screen performance as an adult was as a socialite, opposite Montgomery Clift, in George Stevens's \"A Place in the Sun\" in 1951.", "asset": { "media":"examples/taylor/sun.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1950,5,6", "headline":"Marriage to Conrad Hilton Jr.", "asset": { "media":"examples/taylor/hilton.jpg", "credit":"", "caption":"Ms. Taylor was married eight times to seven men." }, "endDate":"1951,1,29", "tags":"Marriages, Personal life" }, { "startDate":"1944", "headline":"'National Velvet' Makes Her a Star", "text":"Ms. Taylor became a child star after she played Velvet Brown in MGM's \"National Velvet.", "asset": { "media":"examples/taylor/velvet.jpg", "credit":"Robin Weiner\/Associated Press", "caption":"Elizabeth Taylor, with Earvin \"Magic\" Johnson, at an AIDS fundraiser in 1997." }, "tags":"Career" }, { "startDate":"1942", "headline":"Screen Debut", "text":"Ms. Taylor signed her first movie contract with Universal Pictures in 1941 and made her screen debut, at age 9, the following year in \"There's One Born Every Minute.\"\nMs. Taylor signed with Metro-Goldwyn-Mayer later in 1942 after Universal canceled her contract. \"Lassie Come Home\" (1943) was her first film for MGM; the studio went on to produce most of Ms. Taylor's most notable films.", "tags":"Career" }, { "startDate":"1932,2,27", "headline":"Born in London", "text":"

Elizabeth Rosemond Taylor was born in London to American parents, Sara Warmbrodt (the actress Sara Sothern) and Francis Taylor. Ms. Taylor was a dual citizen of England and the United States.\nIn 1939, when World War II began, the Taylors returned to America and eventually settled in Los Angeles.

", "tags":"Personal life" } ] } } ================================================ FILE: website/templates/examples/houston/data.json ================================================ { "timeline": { "headline":"Whitney Houston
1963 - 2012", "startDate":"1963", "text":"

Houston's voice caught the imagination of the world propelling her to superstardom at an early age becoming one of the most awarded performers of our time. This is a look into the amazing heights she achieved and her personal struggles with substance abuse and a tumultuous marriage.

", "type":"default", "asset": { "media":"http://www.flickr.com/photos/tm_10001/2310475988/", "credit":"flickr/tm_10001", "caption":"Whitney Houston performing on her My Love is Your Love Tour in Hamburg." }, "date": [ { "startDate":"1963,8,9", "headline":"A Musical Heritage", "text":"

Born in New Jersey on August 9th, 1963, Houston grew up surrounded by the music business. Her mother is gospel singer Cissy Houston and her cousins are Dee Dee and Dionne Warwick.

", "asset": { "media":"{{ static_url }}/img/examples/houston/family.jpg", "credit":"Cissy Houston photo:Tom Marcello
Dionne Warwick: CBS Television via Wikimedia Commons", "caption":"Houston's mother and Gospel singer, Cissy Houston (left) and cousin Dionne Warwick." } }, { "startDate":"1978", "headline":"First Recording", "text":"At the age of 15 Houston was featured on Michael Zager's song, Life's a Party.", "asset": { "media":"http://youtu.be/fSrO91XO1Ck", "credit":"Unidisc Music", "caption":"" } }, { "startDate":"1978", "headline":"The Early Years", "text":"As a teen Houston's credits include background vocals for Jermaine Jackson, Lou Rawls and the Neville Brothers. She also sang on Chaka Khan's, 'I'm Every Woman,' a song which she later remade for the Bodyguard soundtrack which is the bigget selling soundtrack of all time. It sold over 42 million copies worldwide.", "asset": { "media":"http://youtu.be/_gvJCCZzmro", "credit":"EbonyJet", "caption":"A young poised Whitney Houston in an interview with EbonyJet." } }, { "startDate":"1978", "headline":"Early Album Credits", "text":"As a teen Houston's credits include background vocals for Jermaine Jackson, Lou Rawls and the Neville Brothers. She also sang on Chaka Khan's, 'I'm Every Woman,' a song which she later remade for the Bodyguard soundtrack which is the bigget selling soundtrack of all time. It sold over 42 million copies worldwide.", "asset": { "media":"http://youtu.be/H7_sqdkaAfo", "credit":"Arista Records", "caption":"I'm Every Women as performed by Whitney Houston." } }, { "startDate":"1983", "headline":"Signed", "text":"Houston is signed to Arista Records after exec Clive Davis sees her performing on stage with her mother in New York.", "asset": { "media":"http://youtu.be/A4jGzNm2yPI", "credit":"Sony Music Entertainment", "caption":"Whitney Houston and Clive Davis discussing her discovery and her eponymous first album." } }, { "startDate":"1985", "headline":"Debut", "text":"Whitney Houston's self titled first release sold over 12 million copies in the U.S. and included the hit singles 'How Will I Know,' 'You Give Good Love,' 'Saving All My Love For You' and 'Greatest Love of All.'", "asset": { "media":"http://youtu.be/m3-hY-hlhBg", "credit":"Arista Records Inc.", "caption":"The 'How Will I Know' video showcases the youthful energy that boosted Houston to stardom." } }, { "startDate":"1986", "headline":"'The Grammys'", "text":"In 1986 Houston won her first Grammy for the song Saving All My Love. In total she has won six Grammys, the last of which she won in 1999 for It's Not Right But It's Okay.", "asset": { "media":"http://youtu.be/v0XuiMX1XHg", "credit":"The Recording Academy", "caption":"Dionne Warwick gleefully announces cousin, Whitney Houston, the winner of the Best Female Pop Vocal Performance for the song Saving All My Love." } }, { "startDate":"1987", "headline":"'Whitney'", "text":"Multiplatinum second album sells more than 20 million copies worldwide. With 'Whitney', Houston became the first female artist to produce four number 1 singles on one album including \"I Wanna Dance With Somebody,' 'Didn't We Almost Have It All,' 'So Emotional' and 'Where Do Broken Hearts Go.'", "asset": { "media":"http://youtu.be/eH3giaIzONA", "credit":"Arista Records Inc.", "caption":"I Wanna Dance With Somebody" } }, { "startDate":"1988", "headline":"\"One Moment In Time\"", "text":"The artist's fame continues to skyrocket as she records the theme song for the Seoul Olympics, 'One Moment In Time.'", "asset": { "media":"http://youtu.be/96aAx0kxVSA", "credit":"Arista Records Inc.", "caption":"\"One Moment In Time\" - Theme song to the 1988 Seoul Olympics" } }, { "startDate":"1989", "headline":"Bobby Brown", "text":"Houston and Brown first meet at the Soul Train Music Awards. In an interview with Rolling Stone Magazine, Houston admitted that it was not love at first sight. She turned down Brown's first marriage proposal but eventually fell in love with him.", "asset": { "media":"", "credit":"", "caption":"" } }, { "startDate":"1991", "headline":"Super Bowl", "text":"Houston's national anthem performance captures the hearts and minds of Americans ralllying behind soldiers in the Persian Guf War.", "asset": { "media":"http://youtu.be/5Fa09teeaqs", "credit":"CNN", "caption":"CNN looks back at Houston's iconic performance of the national anthem at Superbowl XXV." } }, { "startDate":"1992", "headline":"\"The Bodyguard\"", "text":"Houston starred opposite Kevin Costner in the box office hit, The Bodyguard. The soundtrack to the movie sold over 44 million copies worldwide garnering 3 Grammy's for the artist.", "asset": { "media":"http://youtu.be/h9rCobRl-ng", "credit":"Arista Records", "caption":"\"Run To You\" from the 1992 \"Bodyguard\" soundtrack.." } }, { "startDate":"1992", "headline":"Married Life", "text":"

After three years of courtship, Houston marries New Edition singer Bobby Brown. Their only child Bobbi Kristina Brown was born in 1993.

In 2003 Brown was charged with domestic violence after police responded to a domestic violence call. Houston and Brown were featured in the reality show, \"Being bobby Brown,\" and divorced in 2007.

", "asset": { "media":"http://youtu.be/5cDLZqe735k", "credit":"", "caption":"Bobby Brown performing \"My Prerogrative,\" from his \"Don't be Cruel\" solo album. Bobby Brown first became famous with the R&B group, New Edition." } }, { "startDate":"2002", "headline":"Crack is Whack", "text":"

Houston first publicly admitted to drug use in an interview with Diane Sawyer. The singer coined the term \"Crack is Whack,\" saying that she only used more expensive drugs.

", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/d/dd/ABC_-_Good_Morning_America_-_Diane_Sawyer.jpg", "credit":"flickr/Amanda Benham", "caption":"Diane Sawyer " } }, { "startDate":"2004", "headline":"Rehab", "text":"

Houston entered rehab several times beginning in 2004. She declared herself drug free in an interview with Oprah Winfrey in 2009 but returned to rehab in 2011.

", "asset": { "media":"http://youtu.be/KLk6mt8FMR0", "credit":"CNN", "caption":"Addiction expert, Dr. Drew, talks about Whitney's death and her struggle with addiction." } }, { "startDate":"2005", "headline":"Being Bobby Brown", "text":"

Being Bobby Brown was a reality show starring Brown and wife Whitney Houston. Houston refused to sign for a second season. A clip of her telling Brown to \"Kiss my ass,\" became a running gag on The Soup.

", "asset": { "media":"", "credit":"", "caption":"" } }, { "startDate":"2010", "headline":"A Rocky Comeback", "text":"

Houston's comeback tour is cut short due to a diminished voice damaged by years of smoking. She was reportedly devastated at her inability to perform like her old self.

", "asset": { "media":"", "credit":"", "caption":"" } }, { "startDate":"2012,2,11", "headline":"Whitney Houston
1963-2012", "text":"

Houston, 48, was discovered dead at the Beverly Hilton Hotel on on Feb. 11, 2012. She is survived by her daughter, Bobbi Kristina Brown, and mother, Cissy Houston.

", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/0/0f/Flickr_Whitney_Houston_performing_on_GMA_2009_4.jpg", "credit":"Asterio Tecson via Wikimedia", "caption":"Houston, performing on Good Morning America in 2009." } } ] } } ================================================ FILE: website/templates/examples/houston/index.html ================================================ Whitney Houston, 1963-2012
================================================ FILE: website/templates/examples/republican/index.html ================================================ Republican run-up: the GOP caucuses
================================================ FILE: website/templates/examples/shit-people-say/data.json ================================================ { "timeline": { "headline":"Sh*t People Say", "type":"default", "text":"When "Shit Girls Say" was uploaded to YouTube it was picked up by Reddit, the Huffington Post, Mashable etc. In a month, it racked up over 12 million views and has spawned a meme of Sh*t People Say.", "startDate":"2011,12,12", "asset": { "media":"http://youtu.be/u-yLGIH7W9Y", "credit":"", "caption":"Writers & Creators: Kyle Humphrey & Graydon Sheppard" }, "date": [ { "startDate":"2012,1,26", "headline":"Sh*t Politicians Say", "text":"

Sh*t Politicians Say landed just hours before Thursday night’s Republican presidential debate and stars actor Joe Leon. In true political fashion, his character rattles off common jargon heard from people running for office.

Do these ring a bell? Moral fiber, family values, trust me, three-point plan, earmarks, tough question, children are our future, Washington outsider, jobs, my opponent — all sound familiar.

", "asset": { "media":"http://youtu.be/u4XpeU9erbg", "credit":"", "caption":"" } }, { "startDate":"2012,1,10", "headline":"Sh*t Nobody Says", "text":"

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.

", "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":"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: website/templates/examples/shit-people-say/index.html ================================================ Sh*t People Say
================================================ FILE: website/templates/examples/user-interface/data.json ================================================ { "timeline": { "headline":"Revolutionary User Interfaces", "startDate":"1600", "text":"

The human computer interface helps to define computing at any one time. As computers have become more mainstream the interfaces have become more intimate. This is the journey of computer technology and how it has come to touch all of our lives.

", "type":"default", "asset": { "media":"{{ static_url }}/img/examples/user-interface/input.png", "credit":"Arjuna Soriano", "caption":"From punch cards to multi touch." }, "date": [ { "startDate":"1600", "headline":"The Antikythera", "text":"In the year 1900, sponge divers discovered the Antikythera Mechanism, a remarkable mechanical computer used to track the cycles of the solar system dated to as early as 89 B.C. There was no input however. All computations were carried out by the intricate system of clockwork like plates and wheels..", "asset": { "media":"http://youtu.be/DiQSHiAYt98", "credit":"Nature Video Channel", "caption":"" } }, { "startDate":"1642", "headline":"Pascal's Calculator", "text":"

Blaise Pascal invented this calculator to help his father reorganize the French tax system. It could add and subtract in one step and multiply and divide by repetition.

Input was achieved by spinning the little wheels: inspiration for the iPod click wheel?

", "asset": { "media":"{{ static_url }}/img/examples/user-interface/pascaline.jpg", "credit":"© 2005 David Monniaux ", "caption":"This piece is on display at Musée des Arts et Métiers, Paris." } }, { "startDate":"1820", "headline":"Thomas Arithometer", "text":"This is the first mass-produced calculator that could add, subtract, multiply and divide. Numbers were input with all of the little knobs and dials and then the handle was twisted to perform the calculation.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/5/59/Arithmometre.jpg", "credit":"By Ezrdr, via Wikimedia Commons", "caption":"" } }, { "startDate":"1801", "headline":"Jacquard Loom", "text":"A loom is not a computer. It is the first machine however to use punch-cards as a means of input into a machine. By changing the arrangement of the holes in the card, the loom would weave different patterns. ", "asset": { "media":"http://youtu.be/2ypE4ZJF7qY", "credit":"FiberMusings", "caption":"The Jacquard loom is still in use today in modern factories. The punch-cards can be clearly seen being pulled to the top of the loom." } }, { "startDate":"1833", "headline":"The Analytical Engine", "text":"Charles Babbage designed but was never able to produce a working model but it is significant in that it relied upon punched cards for data and programs and would employ a language similar to modern assembly language complete with loops and conditional branching (for the nerds out there).", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/a/a4/Analytical_Engine_%282290032530%29.jpg", "credit":"By Marcin Wichary via Wikimedia Commons", "caption":"This modern model of the Analytical Engine is housed at the Science Museum in London." } }, { "startDate":"1868", "headline":"The Typewriter", "text":"Again, not a computer but an important step forward in user interfaces. Invented by Christopher Sholes, An American engineer, the typewriter was layed out in the familiar QWERTY style.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/9/9a/Sholes_typewriter.jpg", "credit":"By George Iles, via Wikimedia Commons", "caption":"A prototype of the typewriter with the QWERTY layout clearly visible." } }, { "startDate":"1890", "headline":"Herman Hollerith", "text":"In 1890, Hollerith introduced his tabulating machine to be used in the census. He also later invented a key punch, a machine that punched the holes into cards operated by a keyboard. His company was one of the companies that later merged to form IBM.", "asset": { "media":"http://youtu.be/UZVEp78b0XI?t=1m54s", "credit":"clipcafe", "caption":"A history of early IBM punch card machines and featuring a Pascal calculator." } }, { "startDate":"1940", "headline":"Remote Access Computing", "text":"George Stibitz demonstrated the Complex Number Calculator (CNC) at Dartmouth College. The astonishing part was that the CNC was in New York City.", "asset": { "media":"", "credit":"", "caption":"" } }, { "startDate":"1946", "headline":"ENIAC", "text":"Weighing 30 tons, and containing over 18,000 vacuum tubes, the ENIAC was the first truly modern computer. It could be programmed for many complex programs and used an early keyboard as its input.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/1/16/Classic_shot_of_the_ENIAC.jpg", "credit":"U.S. Army photo", "caption":"\"Cpl. Irwin Goldstein (foreground) sets the switches on one of the ENIAC's function tables at the Moore School of Electrical Engineering.\" (Caption via Wikimedia)" } }, { "startDate":"1951", "headline":"UNICVAC I", "text":"The Universal Automatic Computer I weighed in at 13 tons and sold for over one million dollars. It was the first mass produced computer, selling 46 units. The massive cockpit of a console featured a keyboard", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/5/55/Museum_of_Science%2C_Boston%2C_MA_-_IMG_3163.JPG", "credit":"By Daderot (Own work) [Public domain], via Wikimedia Commons", "caption":"Input for the UNIVAC I was via keyboard in this massive input console." } }, { "startDate":"1964", "headline":"Multics", "text":"A collaboration between MIT, Bell Laboratories and General Electric created the Multics system. It was a multi-user, time sharing system that spurred along the use of a new interface, a monitor.", "asset": { "media":"", "credit":"", "caption":"" } }, { "startDate":"1968", "headline":"Minicomputer", "text":"Data General introduces the Nova Minicomputer which served as an inspiration for Steve Wozniak's design of the Apple I.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/7/7f/Data_General_Nova_SN_1.agr.JPG", "credit":"By Arnold Reinhold, via Wikimedia Commons", "caption":"The first Data General Nova minicomputer displayed at the Computer History Museum in Silicon Valley." } }, { "startDate":"1968,12,9", "headline":"The Mouse", "text":"Douglas C. Engelbart and his team demonstrated an online system featuring a mouse, hypertext and the first graphical user interface, a \"windows\" system. The mouse was encased in a wood body and had only one button.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/f/f0/SRI_Douglas_Engelbart_2008.jpg", "credit":"By SRI International, via Wikimedia Commons", "caption":"Douglas Engelbart with the first computer mouse prototype." } }, { "startDate":"1974", "headline":"Xerox Alto", "text":"The Xerox Alto was the first workstation with a built in mouse with three buttons.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/5/5e/Xerox_Alto_mit_Rechner.JPG", "credit":"By Joho345, via Wikimedia Commons", "caption":"" } }, { "startDate":"1976", "headline":"Apple I", "text":"Steve Wozniak designed the Apple I, a single-board computer that he and Steve Jobs sold for $500 each. Thus began Apple Inc. and the Personal Computer.", "asset": { "media":"http://www.flickr.com/photos/euthman/281712899/", "credit":"Ed Uthman via Flickr", "caption":"An Apple I computer on display at the Smithsonian." } }, { "startDate":"1976", "headline":"The Osborne I", "text":"Weighing 24 pounds and costing under $2,000, the Osborne I was the first portable computer, although you probably couldn't use it in your lap for too long.", "asset": { "media":"http://www.flickr.com/photos/mightyohm/5333827381/", "credit":"Jeff Keyzer via Flickr", "caption":"An Apple I computer on display at the Smithsonian." } }, { "startDate":"1982", "headline":"Windows 1.0", "text":"Microsoft unveils what will become the dominant operating system for the next several decades.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/a/a9/Microsoft_Windows_1.0_page1.jpg", "credit":"By Microsoft, via Wikimedia Commons", "caption":"" } }, { "startDate":"1984", "headline":"The Macintosh", "text":"Apple introduced the Macintosh which was the first commercially successful computer with a mouse and a Graphical User Interface. Apple's Think Different Superbowl commercial also plays this year.", "asset": { "media":"http://www.flickr.com/photos/mwichary/2179402603/", "credit":"Marcin Wichary via Flickr", "caption":"The Original Macintosh with extra external floppy drive." } }, { "startDate":"1997", "headline":"The Stylus", "text":"Personal digital assistants introduce the touch screen with the use of a stylus. Handwriting recognition was hit or miss but some companies developed simplified alphabet input strokes to improve recognition.", "asset": { "media":"{{ static_url }}/img/examples/user-interface/palm.png", "credit":"Channel R via Wikimedia Commons", "caption":"A Palm Pilot." } }, { "startDate":"2001,10,23", "headline":"Continuous Scrolling", "text":"The first iPod introduces the wheel as a user interface. It allowed users to continuously scroll through thousands of songs seemlessly. This interface helped Apple dominate the music player business and eventually the music content business through its iTunes ecosystem.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/3/35/Ipod_1G.png", "credit":"By Rjcflyer@aol.com at en.wikipedia via Wikimedia Commons", "caption":"The Original iPod with click wheel user interface." } }, { "startDate":"2007", "headline":"Multi Touch", "text":"Steve Jobs unveils the iPhone and the multi touch interface.", "asset": { "media":"http://upload.wikimedia.org/wikipedia/commons/4/49/IPhone_at_Macworld_%28angled_view%29.jpg", "credit":"By blakeburris, via Wikimedia Commons", "caption":"" } }, { "startDate":"2012", "headline":"Speech Recognition", "text":"

Speech recognition has been tested and improved upon for years in military cockpits in the U.S. France and U.K. In fact, Siri, the speech recognition engine used in the iPhone 4S was developed first by DARPA, the Defense Advanced Research Projects Agency.

", "asset": { "media":"{{ static_url }}/img/examples/user-interface/4s.jpg", "credit":"Apple Inc.", "caption":"" } } ] } } ================================================ FILE: website/templates/examples/user-interface/index.html ================================================ Revolutionary User Interfaces
================================================ FILE: website/templates/index.html ================================================ {% extends "base.html" %} {% block content %} {% include "_overview.html" %} {% include "_demo.html" %} {% include "_description.html" %} {% include "_make.html" %} {% include "_examples.html" %} {% include "_help.html" %} {% include "_developers.html" %} {% endblock %}