├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Gruntfile.js ├── LICENSE.md ├── README.md ├── bower.json ├── css ├── demo-page.css ├── demo-page.css.map ├── sequence-theme.intro.css └── sequence-theme.intro.css.map ├── images ├── bracket-close.png ├── bracket-close.svg ├── bracket-open.png ├── bracket-open.svg ├── browser-buttons.png ├── browser-buttons.svg ├── browsers │ ├── chrome_128x128.png │ ├── chrome_64x64.png │ ├── edge_128x128.png │ ├── edge_64x64.png │ ├── firefox_128x128.png │ ├── firefox_64x64.png │ ├── ie8_128x128.png │ ├── ie8_64x64.png │ ├── ie9_128x128.png │ ├── ie9_64x64.png │ ├── opera_128x128.png │ ├── opera_64x64.png │ ├── safari_128x128.png │ └── safari_64x64.png ├── browserstack-logo.png ├── browserstack-logo@2x.png ├── bulb.svg ├── chevron-up.svg ├── favicon.ico ├── phone.png ├── phone@2x.png ├── sequence-logo-medium.png ├── sequence-logo.png ├── sequence-logo.svg ├── square.png ├── square.svg ├── swipe.png ├── swipe@2x.png └── touch-icon.png ├── index.html ├── package.json ├── scripts ├── hammer.min.js ├── imagesloaded.pkgd.min.js ├── sequence-theme.intro.js ├── sequence-theme.intro.min.js ├── sequence.js ├── sequence.min.js └── sequence.min.map ├── scss ├── demo-page.scss ├── partials │ └── mixins.scss └── sequence-theme.intro.scss ├── src └── sequence.js └── tests ├── index.html ├── karma.conf.js ├── setup-tests.js ├── spec ├── animation-fallback.js ├── animation.js ├── autoplay.js ├── canvas.js ├── events.js ├── goto.js ├── hashtags.js ├── init.js ├── methods.js ├── pagination.js ├── preloader.js └── ui.js └── themes ├── amd ├── README.md ├── css │ └── sequence-theme.test-theme.css ├── index.html └── scripts │ ├── app.js │ └── require.js ├── multiple-test ├── css │ └── sequence-theme.multiple-test.css ├── index.html └── scripts │ └── sequence-theme.multiple-test.js └── test-theme ├── README.md ├── css └── sequence-theme.test-theme.css ├── image1.png ├── image2.png ├── index.html └── scripts └── sequence-theme.test-theme.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .sass-cache 3 | node_modules 4 | *.log 5 | tmp 6 | .tmp 7 | bower_components 8 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## 2.1.0 (2015/08/27) 4 | 5 | - Added [`reverseTimingFunctionWhenNavigatingBackwards`](http://www.sequencejs.com/documentation/#reversetimingfunctionwhennavigatingbackwards) option. `false` by default. 6 | 7 | ## 2.0.0 (2015/08/09) 8 | 9 | - Built from ground-up 10 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | - [Project Files](#project-files) 4 | - [Using Grunt](#using-grunt) 5 | - [Submitting A Bug](#submitting-a-bug) 6 | - [Submitting A Pull Request](#submitting-a-pull-request) 7 | - [Submit Your Theme to The Showcase](#submit-your-theme-to-the-showcase) 8 | 9 | ## Project Files 10 | 11 | The following gives a brief description for each file's purpose. 12 | 13 | ### `css` 14 | 15 | Contains stylesheets for the demo page and intro theme. 16 | 17 | ### `scripts` 18 | 19 | Contains the compiled `sequence.js` and its minified version `sequence.min.js`. If you want to develop `sequence.js` please do so in the version found in `src`. Also contains the following third-party dependencies: 20 | 21 | - `hammer.min.js` - Used for touch support 22 | - `imagesloaded.pkgd.min.js` - Used for preloading images 23 | - `sequence-theme.intro.js` - Options and inititation code to start Sequence.js on the Intro theme. 24 | 25 | ### `src` 26 | 27 | Contains the development version of `sequence.js`. This is the file to change should you wish to work on the core Sequence.js library. 28 | 29 | ### `tests` 30 | 31 | Contains a test file and test themes. Head to [`tests/index.html`](/tests/index.html). 32 | 33 | ### `.gitignore` 34 | 35 | Lists files/directory that [Git](http://git-scm.com/) should ignore. 36 | 37 | ### `bower.json` 38 | 39 | Lists Sequence.js' [Bower](http://bower.io/) details and the dependencies it uses. 40 | 41 | ### `CHANGELOG.md` 42 | 43 | Contains history of all the changes made to Sequence.js. 44 | 45 | ### `CONTRIBUTING.md` 46 | 47 | The very file you are reading right now! 48 | 49 | ### `Gruntfile.js` 50 | 51 | Describes the automated tasks used for developing Sequence.js. 52 | 53 | ### `index.html` 54 | 55 | The Intro theme for Sequence.js. 56 | 57 | ### `LICENSE.md` 58 | 59 | License information for Sequence.js. 60 | 61 | ### `package.json` 62 | 63 | Lists Sequence.js' [NPM](https://www.npmjs.org/) details and the dependencies it uses during development. 64 | 65 | ### `README.md` 66 | 67 | The intro to Sequence.js. 68 | 69 | ## Using Grunt 70 | 71 | The Sequence.js project uses [Grunt](http://gruntjs.com/) to automate useful tasks. With Grunt installed (see Grunt's [Getting Started](http://gruntjs.com/getting-started)), use the following command to install Sequence.js' project dependencies: 72 | 73 | ``` 74 | npm install 75 | ``` 76 | 77 | Once Sequence.js dependencies have installed you can use the commands `grunt`, `grunt serve`, `grunt test`, and `grunt test-watch`. 78 | 79 | ### `grunt` 80 | 81 | This will manually run the tasks run via the `grunt serve` command once. 82 | 83 | ### `grunt serve` 84 | 85 | This will start a development environment with the following automated tasks: 86 | 87 | - Starts a [livereload](http://livereload.com/) session that will reload your browser whenever a file is changed (be sure to install [livereload](http://livereload.com/)) 88 | - Opens your browser and navigates to `http://localhost:8000/` 89 | - Sets up a *watch* task to run the following sub-tasks: 90 | - Update the version number in `sequence.js` and `bower.json` when changed in `package.json` 91 | - Copy `src/sequence.js` to the `scripts` directory and create an uglify (minified) copy as `scripts/sequence.min.js` 92 | - Process any `.scss` files found in the `scss` directory then copy to `css` and minify 93 | 94 | You only need to run `grunt serve` per each development session as the *watch* task will continue to operate as you modify files. 95 | 96 | ### `grunt test` 97 | 98 | Manually runs [JSHint](http://www.jshint.com/about/) and Sequence.js tests via jasmine and karma. 99 | 100 | ### `grunt test-watch` 101 | 102 | Runs the same tests as the `grunt test` command each time the files in `tests/` are updated. 103 | 104 | ## Submitting a Bug 105 | 106 | Please note that the issue tracker is for bugs only -- either relating to sequence.js, its dependencies, or official Sequence.js themes. For support on your own Sequence.js themes, please use [StackOverflow](http://stackoverflow.com/questions/ask?tags=sequencejs) with the tag `sequencejs`. 107 | 108 | ### Before reporting a bug 109 | 110 | 1. Search [issue tracker](https://github.com/IanLunn/Sequence/issues) for similar issues. 111 | 112 | ### How to report a bug 113 | 114 | 1. Specify the version number of the sequence.js library where the bug occurred (you'll find it toward the top of `sequence.js`, `sequence.min.js`, or `package.json`). 115 | 2. Specify your browser version and operating system (for example, Chrome 35, Windows 8) 116 | 3. Describe the problem in detail. Explain what happened, and what you expected would happen. 117 | 4. Provide a [reduced test-case](https://css-tricks.com/reduced-test-cases/) via [CodePen](http://codepen.io/), [JSBin](http://jsbin.com/), [JSFiddle](http://jsfiddle.net/), or similar. 118 | 5. If helpful, include a screenshot. Annotate the screenshot for clarity. 119 | 120 | ## Submitting a Pull Request 121 | 122 | 1. Make sure you have a [GitHub](https://github.com/) account. 123 | 2. Fork the repository on [GitHub](https://github.com/IanLunn/Sequence). 124 | 3. Make changes to your clone of the repository. 125 | 4. Submit a pull request. 126 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var LIVERELOAD_PORT = 35729; 4 | var SERVER_PORT = 8000; 5 | var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT}); 6 | var mountFolder = function (connect, dir) { 7 | return connect.static(require('path').resolve(dir)); 8 | }; 9 | 10 | module.exports = function(grunt) { 11 | 12 | require('time-grunt')(grunt); 13 | 14 | require('load-grunt-tasks')(grunt, { 15 | scope: 'devDependencies', 16 | config: 'package.json', 17 | pattern: ['grunt-*'] 18 | }); 19 | 20 | grunt.initConfig({ 21 | pkg: grunt.file.readJSON('package.json'), 22 | 23 | jshint: { 24 | all: ['src/sequence.js'] 25 | }, 26 | 27 | copy: { 28 | main: { 29 | files: [ 30 | {src: ['src/sequence.js'], dest: 'scripts/sequence.js'}, 31 | {src: ['bower_components/hammerjs/hammer.min.js'], dest: 'scripts/hammer.min.js'}, 32 | {src: ['bower_components/imagesloaded/imagesloaded.pkgd.min.js'], dest: 'scripts/imagesloaded.pkgd.min.js'}, 33 | {src: ['bower_components/respond/dest/respond.min.js'], dest: 'scripts/respond.min.js'} 34 | ] 35 | } 36 | }, 37 | 38 | version: { 39 | js: { 40 | options: { 41 | prefix: '@version\\s*' 42 | }, 43 | src: ['src/**/*.js'] 44 | }, 45 | json: { 46 | options: { 47 | prefix: '"version":\\s"*' 48 | }, 49 | src: ['bower.json'] 50 | } 51 | }, 52 | 53 | sass: { 54 | 55 | options: { 56 | style: 'expanded' 57 | }, 58 | 59 | main: { 60 | expand: true, 61 | flatten: true, 62 | src: ['scss/*.scss'], 63 | dest: 'css/', 64 | ext: '.css', 65 | extDot: 'last', 66 | rename: function(dest, src) { 67 | return dest + src.replace("scss", "css"); 68 | } 69 | } 70 | }, 71 | 72 | /* 73 | * Auto prefix CSS file 74 | */ 75 | autoprefixer: { 76 | options: { 77 | browsers: ['last 2 version', 'ie 7', 'ie 8', 'ie 9'] 78 | }, 79 | 80 | main: { 81 | src: ['css/styles.css'] 82 | } 83 | }, 84 | 85 | /* 86 | * Minify CSS 87 | */ 88 | cssmin: { 89 | 90 | main: { 91 | expand: true, 92 | cwd: 'css/', 93 | src: ['styles.css', '!styles.min.css'], 94 | dest: 'css/', 95 | ext: '.min.css', 96 | extDot: 'last' 97 | } 98 | }, 99 | 100 | uglify: { 101 | 102 | options: { 103 | preserveComments: 'some' 104 | }, 105 | 106 | main: { 107 | options: { 108 | mangle: false, 109 | sourceMap: true, 110 | sourceMapName: 'scripts/sequence.min.map' 111 | }, 112 | files: { 113 | 'scripts/sequence.min.js': ['src/sequence.js'] 114 | } 115 | } 116 | }, 117 | 118 | connect: { 119 | options: { 120 | port: SERVER_PORT, 121 | hostname: 'localhost' 122 | }, 123 | livereload: { 124 | options: { 125 | base: '/', 126 | middleware: function (connect) { 127 | return [ 128 | lrSnippet, 129 | mountFolder(connect, '') 130 | ]; 131 | } 132 | } 133 | } 134 | }, 135 | 136 | open: { 137 | server: { 138 | path: 'http://localhost:' + SERVER_PORT 139 | } 140 | }, 141 | 142 | watch: { 143 | options: { 144 | nospawn: true, 145 | livereload: true 146 | }, 147 | 148 | versions: { 149 | files: ['package.json'], 150 | tasks: ['version'], 151 | options: { 152 | spawn: false 153 | } 154 | }, 155 | 156 | // Uglify sequence.js 157 | js_sequence: { 158 | files: ['src/sequence.js'], 159 | tasks: ['uglify', 'copy'], 160 | options: { 161 | spawn: false 162 | } 163 | }, 164 | 165 | js: { 166 | files: ['scripts/*.js'], 167 | options: { 168 | spawn: false 169 | } 170 | }, 171 | 172 | jshint: { 173 | files: ['src/sequence.js'], 174 | tasks: ['jshint'], 175 | options: { 176 | spawn: false 177 | } 178 | }, 179 | 180 | // Process SASS, autoprefix, and minify main CSS 181 | scss: { 182 | files: ['scss/*.scss'], 183 | tasks: ['sass:main', 'autoprefixer', 'cssmin'], 184 | options: { 185 | spawn: false 186 | } 187 | }, 188 | 189 | // Refresh the page when .html pages are changed 190 | html: { 191 | files: ['*.html', 'tests/**/*.html'], 192 | options: { 193 | spawn: false 194 | } 195 | } 196 | }, 197 | 198 | karma: { 199 | single: { 200 | configFile: 'tests/karma.conf.js', 201 | singleRun: true 202 | }, 203 | 204 | watch: { 205 | configFile: 'tests/karma.conf.js', 206 | singleRun: false, 207 | autoWatch: true 208 | } 209 | } 210 | }); 211 | 212 | require('load-grunt-tasks')(grunt); 213 | 214 | // Watch for local development 215 | grunt.registerTask('serve', 'start the server and watch files', [ 216 | 'connect:livereload', 217 | 'open', 218 | 'watch' 219 | ]); 220 | 221 | // Manual compile 222 | grunt.registerTask('default', [ 223 | 'version', 224 | 'copy', 225 | 'sass', 226 | 'autoprefixer', 227 | 'cssmin', 228 | 'uglify' 229 | ]); 230 | 231 | // Single use test - will run jshint and karma once 232 | grunt.registerTask('test', 'run tests', [ 233 | 'jshint', 234 | 'karma:single' 235 | ]); 236 | 237 | grunt.registerTask('test-watch', 'start a server to watch test files and run tests when they are updated', [ 238 | 'karma:watch' 239 | ]); 240 | }; 241 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # Licenses 2 | 3 | The Sequence.js Library is made available under three different licenses depending on how you plan to use it. The following gives a brief description of each license. Please see the [official Sequence.js license page](http://sequencejs.com/licenses/) for full details. 4 | 5 | ## Personal/Open-Source 6 | 7 | Use for free in personal/open-source projects, such as: 8 | 9 | - Your portfolio website 10 | - Charity websites 11 | - Your own free Sequence.js themes 12 | 13 | Distribute, modify, and/or integrate the Sequence.js Library in multiple personal/open-source projects under the same [GPLv3 license](http://opensource.org/licenses/gpl-3.0.html). 14 | 15 | [Full Details](http://sequencejs.com/licenses/#personal-open-source) 16 | 17 | ## Commercial 18 | 19 | Purchase a Commercial License to use in one commercial application, such as: 20 | 21 | - Client projects 22 | - Premium WordPress themes etc 23 | - Your own premium Sequence.js themes 24 | 25 | Distribute, modify, and/or integrate the Sequence.js Library in one commercial application per license 26 | 27 | [Full Details](http://sequencejs.com/licenses/#commercial) | [Buy Now →](http://sequencejs.com/licenses/#commercial-overview) 28 | 29 | ## Commercial OEM 30 | 31 | Purchase a commercial OEM License to use in one commercial application, such as: 32 | 33 | - WYSIWYG Editors 34 | - SDKs/Toolkits 35 | - Sequence.js Theme Builders 36 | 37 | Distribute, modify, and/or integrate the Sequence.js Library in one commercial application per license, with which your customers can generate additional commercial applications 38 | 39 | [Full Details](http://sequencejs.com/licenses/#commercial-oem) | [Buy Now →](http://sequencejs.com/licenses/#commercial-oem-overview) 40 | 41 | --- 42 | 43 | ## Sequence.js Theme Licenses 44 | 45 | Sequence.js themes are licensed individually. Please see their respective theme pages on the [Sequence.js website](http://sequencejs.com/themes) for license information. 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Sequence.js [![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=IanLunn&url=https://github.com/IanLunn/Sequence&title=Sequence&language=english&tags=github&category=software) [![Join the chat at https://gitter.im/IanLunn/Sequence](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/IanLunn/Sequence?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 2 | ===================== 3 | 4 | > The responsive CSS animation framework for creating unique sliders, presentations, banners, and other step-based applications. 5 | 6 | Sequence.js provides all of the JavaScript functionality you need for step-based applications such as sliders and presentations, allowing you to concentrate on producing your content with style. 7 | 8 | Easily add transitions using the `.seq-in` and `.seq-out` CSS classes automatically added via Sequence.js to style how your slides/steps and content animate. 9 | 10 | Find out how Sequence.js works in the [Introduction theme](http://ianlunn.github.io/Sequence/) or for more details, head to the [documentation](http://sequencejs.com/documentation/). 11 | 12 | See the [introduction](http://ianlunn.github.io/Sequence/) and [ready-made themes](http://www.sequencejs.com/themes/). 13 | 14 | ## Features 15 | 16 | - Rapid development of animated step-based applications using CSS 17 | - Fully supports responsive design 18 | - Supported on mobile, tablet, and desktop devices 19 | - No limitations on CSS, HTML, and workflow you can use 20 | - Animate canvas and content 21 | - Hardware acceleration (for smooth animation even on mobile devices) 22 | - Touch support via [Hammer.js](http://eightmedia.github.io/hammer.js/) 23 | - Auto play 24 | - Easy-to-add next/previous/pause buttons and pagination 25 | - Preloader via [ImagesLoaded](http://imagesloaded.desandro.com/) 26 | - Hash tag support 27 | - Keyboard navigation 28 | - 30+ options and API for custom functionality 29 | - Top quality [documentation](http://sequencejs.com/documentation/) 30 | - Supports all major browsers with a fallback mode for legacy browsers ([detailed browser support](http://sequencejs.com/developers/browser-support/)) 31 | - [Ready-made themes](http://sequencejs.com/themes/) available 32 | - [Yeoman generator](https://github.com/IanLunn/generator-sequence) available for quick scaffolding of themes 33 | 34 | ### Browser Support 35 | 36 | Sequence.js is supported in modern browsers on major platforms, with a [fallback theme](http://www.sequencejs.com/documentation/#browser-support-and-fallback-mode) for Internet Explorer 8 and 9, and other older browsers that don't support CSS transitions. 37 | 38 | [See Browser Support in more detail](http://www.sequencejs.com/developers/browser-support/). 39 | 40 | ## Getting Started 41 | 42 | To get started [download](http://sequencejs.com/download/) Sequence.js and then head to the [documentation](http://www.sequencejs.com/documentation/). If you'd like to contribute to Sequence.js development, please see the [contributing guidelines](https://github.com/IanLunn/Sequence/blob/master/CONTRIBUTING.md). 43 | 44 | ### Download 45 | 46 | - [Download Sequence.js](http://sequencejs.com/download/) 47 | 48 | Sequence.js can also be installed using the [Bower](http://bower.io/) command: 49 | 50 | ``` 51 | bower install sequencejs 52 | ``` 53 | 54 | or [NPM](https://www.npmjs.org/): 55 | 56 | ``` 57 | npm install sequencejs 58 | ``` 59 | 60 | ## Philosophy 61 | 62 | Sequence.js aims to provide a complete animation framework for you to create animated step-based applications almost entirely in CSS without getting in the way of how you or a web browser work. Create content and then animate it using the HTML, CSS, and workflow you're used to. Sequence.js will take care of the JavaScript functionality. There's no special syntax to learn, no limitations on the workflow you are used to, and no heavy JavaScript implementations recreating what the browser is already capable of. 63 | 64 | ## Authors 65 | 66 | [Ian Lunn](http://ianlunn.co.uk/) and [contributors](https://github.com/IanLunn/Sequence/graphs/contributors). 67 | 68 | Follow [@IanLunn](https://twitter.com/IanLunn/) on Twitter for Sequence.js news, web design & development links, tips, and opinions 69 | 70 | ## Sponsors 71 | 72 | Browser testing environment provided by BrowserStack. 73 | 74 | [![Browser Stack](http://www.sequencejs.com/wp-content/themes/sequence/images/browserstack-light.png)](http://browserstack.com/) 75 | 76 | ## Licenses 77 | 78 | License information can be found on the [Sequence.js website](http://www.sequencejs.com/licenses/). 79 | 80 | ## Hire Ian Lunn 81 | 82 | [Ian Lunn](http://ianlunn.co.uk) is a Web Designer, Front-end Developer, and author of [CSS3 Foundations](http://css3foundations.com/). 83 | 84 | Hire [Ian Lunn](http://ianlunn.co.uk) for responsive design, WordPress sites, HTML, CSS, and JavaScript. 85 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sequencejs", 3 | "description": "The responsive CSS animation framework for creating unique sliders, presentations, banners, and other step-based applications.", 4 | "version": "2.1.0", 5 | "main": "scripts/sequence.min.js", 6 | "license": "SEE LICENSE IN LICENSE.md", 7 | "homepage": "http://www.sequencejs.com/", 8 | "repository": { 9 | "type": "git", 10 | "url": "git://github.com/IanLunn/Sequence.git" 11 | }, 12 | "bugs": "https://github.com/IanLunn/Sequence/issues", 13 | "authors": [ 14 | "Ian Lunn " 15 | ], 16 | "keywords": [ 17 | "sequence", 18 | "sequence.js", 19 | "sequencejs", 20 | "slider", 21 | "carousel", 22 | "animation", 23 | "animation framework", 24 | "css animation" 25 | ], 26 | "license": "MIT", 27 | "ignore": [ 28 | "**/.*", 29 | "node_modules", 30 | "bower_components", 31 | "test", 32 | "tests" 33 | ], 34 | "dependencies": { 35 | "hammerjs": "2.0.4", 36 | "imagesloaded": "3.1.5" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /css/demo-page.css: -------------------------------------------------------------------------------- 1 | /* 2 | * The following styles are solely for the demo page and are not required 3 | * for the Intro theme to work. 4 | */ 5 | body { 6 | margin: 0; 7 | padding: 0; 8 | background: #F8F8F8; 9 | font-family: "Ubuntu", sans-serif; 10 | -webkit-text-size-adjust: 100%; 11 | } 12 | 13 | a { 14 | text-decoration: none; 15 | } 16 | 17 | .container { 18 | max-width: 1200px; 19 | margin: 0 auto; 20 | padding: 0 10px; 21 | padding: 0 .625rem; 22 | } 23 | @media only screen and (min-width: 737px) { 24 | .container { 25 | padding: 0 40px; 26 | padding: 0 2.5rem; 27 | } 28 | } 29 | 30 | .group { 31 | position: relative; 32 | } 33 | .group:before, .group:after { 34 | content: ""; 35 | display: table; 36 | } 37 | .group:after { 38 | clear: both; 39 | } 40 | 41 | .valign { 42 | font-size: 0; 43 | } 44 | .valign:before { 45 | content: ""; 46 | height: 100%; 47 | } 48 | .valign:before, 49 | .valign > * { 50 | display: inline-block; 51 | vertical-align: middle; 52 | } 53 | .valign > * { 54 | font-size: 16px; 55 | } 56 | 57 | .browsehappy { 58 | background: #ccc; 59 | color: #000; 60 | margin: 0; 61 | padding: 1em; 62 | } 63 | .browsehappy a { 64 | color: #2AA0D4; 65 | } 66 | .browsehappy a:focus, .browsehappy a:hover { 67 | color: #0890CA; 68 | } 69 | 70 | .header { 71 | padding: 2.65em 0; 72 | background: white; 73 | font-family: "Montserrat", sans-serif; 74 | text-align: center; 75 | } 76 | .header .container > div { 77 | width: 100%; 78 | font-size: 0; 79 | } 80 | .header a { 81 | padding: .625em; 82 | color: #B1B1B1; 83 | text-decoration: none; 84 | } 85 | .header a:focus, .header a:hover { 86 | color: black; 87 | } 88 | .header .logo, 89 | .header .nav { 90 | font-size: 16px; 91 | font-size: 1rem; 92 | } 93 | .header .logo { 94 | margin-bottom: 1em; 95 | } 96 | .header .nav { 97 | height: 100%; 98 | line-height: 1.6; 99 | } 100 | @media only screen and (min-width: 737px) { 101 | .header { 102 | text-align: left; 103 | } 104 | .header .logo, 105 | .header .nav { 106 | display: inline-block; 107 | vertical-align: middle; 108 | width: 50%; 109 | } 110 | .header .logo { 111 | margin-bottom: 0; 112 | } 113 | .header .nav { 114 | text-align: right; 115 | } 116 | } 117 | 118 | a .fa { 119 | display: inline; 120 | } 121 | 122 | .nav { 123 | margin: 0; 124 | padding: 0; 125 | } 126 | .nav li { 127 | display: inline-block; 128 | vertical-align: middle; 129 | list-style: none; 130 | } 131 | 132 | .social { 133 | margin-bottom: .875em; 134 | text-align: center; 135 | line-height: 2; 136 | } 137 | 138 | .social-button { 139 | display: inline-block; 140 | vertical-align: middle; 141 | width: 100px; 142 | } 143 | 144 | .twitter-follow-button { 145 | display: block; 146 | margin: 0 auto; 147 | } 148 | 149 | .follow { 150 | margin-bottom: 1.25em; 151 | line-height: 1.6; 152 | } 153 | 154 | .main .title:first-of-type { 155 | margin-top: 5em; 156 | } 157 | 158 | .title { 159 | margin-top: 5em; 160 | margin-bottom: 2em; 161 | text-align: center; 162 | color: #282828; 163 | } 164 | .title h1, 165 | .title h2 { 166 | font-family: "Montserrat", sans-serif; 167 | } 168 | .title h1 { 169 | margin: 0; 170 | margin-bottom: .5em; 171 | font-family: "Montserrat", sans-serif; 172 | font-size: 2em; 173 | font-weight: 500; 174 | line-height: 1.25; 175 | -webkit-hyphens: manual; 176 | -moz-hyphens: manual; 177 | -ms-hyphens: manual; 178 | hyphens: manual; 179 | } 180 | .title h2 { 181 | margin: 0; 182 | margin-bottom: 0; 183 | font-size: 1em; 184 | font-weight: 300; 185 | line-height: 1.4; 186 | } 187 | .title .tagline { 188 | line-height: 1.4; 189 | } 190 | @media only screen and (min-width: 568px) { 191 | .title h1 { 192 | margin-bottom: .18em; 193 | font-size: 2.25em; 194 | } 195 | .title h2 { 196 | font-size: 1.15em; 197 | } 198 | } 199 | @media only screen and (min-width: 641px) { 200 | .title { 201 | margin-top: 8.75em; 202 | margin-bottom: 3em; 203 | } 204 | .title h1 { 205 | margin-bottom: .18em; 206 | font-size: 2.75em; 207 | } 208 | .title h2 { 209 | margin-bottom: 2em; 210 | font-size: 1.25em; 211 | line-height: 1.6; 212 | } 213 | } 214 | 215 | .main a { 216 | color: #2AA0D4; 217 | } 218 | .main a:focus, .main a:hover { 219 | color: #0890CA; 220 | } 221 | 222 | .products { 223 | margin: 0; 224 | padding: 0; 225 | } 226 | .products img { 227 | max-width: 100%; 228 | height: auto; 229 | } 230 | .products a, 231 | .products a:focus, 232 | .products a:hover { 233 | color: #282828; 234 | } 235 | .products .product { 236 | margin-bottom: 2em; 237 | list-style: none; 238 | } 239 | .products .product img { 240 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.4); 241 | -webkit-transition-duration: .2s; 242 | -webkit-transition-property: box-shadow; 243 | transition-duration: .2s; 244 | transition-property: box-shadow; 245 | } 246 | .products .product:focus img, .products .product:hover img { 247 | box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.6); 248 | } 249 | .products .product img, 250 | .products .product a { 251 | display: block; 252 | } 253 | .products .product h3 { 254 | margin: .555556em 0 0 0; 255 | } 256 | @media only screen and (min-width: 569px) { 257 | .products .product { 258 | width: 48.3607%; 259 | float: left; 260 | } 261 | .products .product:nth-child(2n+1) { 262 | margin-right: 1.63934%; 263 | } 264 | .products .product:nth-child(2n) { 265 | margin-left: 1.63934%; 266 | } 267 | .products .product:nth-last-child(1), .products .product:nth-last-child(2) { 268 | margin-bottom: 0; 269 | } 270 | } 271 | 272 | .button-set { 273 | margin: 1em 0; 274 | text-align: center; 275 | } 276 | .button-set .button { 277 | margin-left: 0.285714em; 278 | margin-right: 0.285714em; 279 | } 280 | 281 | a.button { 282 | display: inline-block; 283 | margin-top: .71428571em; 284 | padding: 1.2em; 285 | color: white; 286 | text-align: center; 287 | text-transform: uppercase; 288 | font-size: .875em; 289 | font-weight: 700; 290 | -webkit-transition-duration: .2s; 291 | transition-duration: .2s; 292 | -webkit-transition-property: background-color; 293 | transition-property: background-color; 294 | } 295 | a.button:first-of-type { 296 | margin-left: 0; 297 | } 298 | a.button:last-of-type { 299 | margin-right: 0; 300 | } 301 | a.button:focus, a.button:hover { 302 | color: white; 303 | } 304 | a.button i { 305 | margin-left: 2px; 306 | } 307 | a.button.button-link { 308 | background: #36C26F; 309 | } 310 | a.button.button-link:focus, a.button.button-link:hover { 311 | background: #16B557; 312 | } 313 | a.button.button-highlight { 314 | background: #2AA0D4; 315 | } 316 | a.button.button-highlight:focus, a.button.button-highlight:hover { 317 | background: #0890CA; 318 | } 319 | 320 | .code-block { 321 | max-width: 580px; 322 | margin: 2.5em auto 1em auto; 323 | font-size: 16px; 324 | font-size: 1rem; 325 | } 326 | .code-block code { 327 | background: white; 328 | display: block; 329 | padding: 1em; 330 | line-height: 1.6; 331 | font-family: "Droid Sans Mono",Courier New,Courier,Lucida Sans Typewriter,Lucida Typewriter,monospace; 332 | font-size: .875em; 333 | } 334 | 335 | .footer { 336 | margin: 0; 337 | padding: 5em 0 1em 0; 338 | background: #181818; 339 | color: #777; 340 | } 341 | .footer a { 342 | color: #B1B1B1; 343 | } 344 | 345 | .full-button { 346 | display: block; 347 | margin-top: 5em; 348 | padding: 1em; 349 | text-align: center; 350 | background: #36C26F; 351 | font-size: 1.5em; 352 | color: white; 353 | } 354 | .full-button:focus, .full-button:hover { 355 | background: #16B557; 356 | } 357 | 358 | .made-by { 359 | display: block; 360 | margin-top: 5em; 361 | font-family: "Montserrat", sans-serif; 362 | text-align: center; 363 | line-height: 1.6; 364 | } 365 | .made-by svg { 366 | display: block; 367 | } 368 | .made-by ul, 369 | .made-by p { 370 | margin: 0; 371 | padding: 0; 372 | } 373 | .made-by ul { 374 | margin-bottom: .25em; 375 | } 376 | .made-by li { 377 | display: inline-block; 378 | vertical-align: middle; 379 | line-height: 1; 380 | } 381 | .made-by p { 382 | margin-top: .4em; 383 | font-size: .875em; 384 | } 385 | .made-by a { 386 | padding: 0 .125em; 387 | color: #B1B1B1; 388 | transition-duration: .2s; 389 | transition-property: color; 390 | } 391 | .made-by a:focus, .made-by a:hover { 392 | color: white; 393 | } 394 | .made-by i { 395 | font-size: 26px; 396 | height: 30px; 397 | } 398 | .made-by .follow { 399 | margin-top: 2em; 400 | } 401 | .made-by .follow iframe { 402 | margin-bottom: .5em; 403 | } 404 | .made-by small { 405 | display: block; 406 | margin-top: 3em; 407 | font-size: .625em; 408 | } 409 | 410 | .ild-ident { 411 | display: block; 412 | } 413 | @keyframes circle { 414 | 50% { 415 | transform: scale(1.26923); 416 | } 417 | } 418 | @keyframes initials { 419 | 50% { 420 | transform: translateY(-8px) translateZ(0); 421 | } 422 | } 423 | .ild-ident svg { 424 | display: block; 425 | overflow: visible; 426 | transform: scale(1) translateZ(0); 427 | } 428 | .ild-ident svg .circle-holder { 429 | transform: translate(-7px, -7px); 430 | } 431 | .ild-ident svg .circle { 432 | transform: translate(7px, 7px); 433 | } 434 | .ild-ident svg.active .i { 435 | animation: initials .4s ease-in-out; 436 | } 437 | .ild-ident svg.active .l { 438 | animation: initials .4s .2s ease-in-out; 439 | } 440 | .ild-ident svg.active .circle { 441 | animation: circle .5s .1s ease-in-out; 442 | } 443 | 444 | .sponsor { 445 | max-width: 290px; 446 | margin: 0 auto; 447 | text-align: center; 448 | } 449 | .sponsor p { 450 | font-size: .875em; 451 | line-height: 1.6; 452 | } 453 | 454 | /*# sourceMappingURL=demo-page.css.map */ 455 | -------------------------------------------------------------------------------- /css/demo-page.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": ["../scss/demo-page.scss"], 5 | "names": [], 6 | "file": "demo-page.css" 7 | } 8 | -------------------------------------------------------------------------------- /css/sequence-theme.intro.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": ["../scss/sequence-theme.intro.scss","../scss/partials/mixins.scss"], 5 | "names": [], 6 | "file": "sequence-theme.intro.css" 7 | } 8 | -------------------------------------------------------------------------------- /images/bracket-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/bracket-close.png -------------------------------------------------------------------------------- /images/bracket-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bracket-close 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /images/bracket-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/bracket-open.png -------------------------------------------------------------------------------- /images/bracket-open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bracket-open 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /images/browser-buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browser-buttons.png -------------------------------------------------------------------------------- /images/browser-buttons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Browser Buttons Copy 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /images/browsers/chrome_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/chrome_128x128.png -------------------------------------------------------------------------------- /images/browsers/chrome_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/chrome_64x64.png -------------------------------------------------------------------------------- /images/browsers/edge_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/edge_128x128.png -------------------------------------------------------------------------------- /images/browsers/edge_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/edge_64x64.png -------------------------------------------------------------------------------- /images/browsers/firefox_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/firefox_128x128.png -------------------------------------------------------------------------------- /images/browsers/firefox_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/firefox_64x64.png -------------------------------------------------------------------------------- /images/browsers/ie8_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/ie8_128x128.png -------------------------------------------------------------------------------- /images/browsers/ie8_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/ie8_64x64.png -------------------------------------------------------------------------------- /images/browsers/ie9_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/ie9_128x128.png -------------------------------------------------------------------------------- /images/browsers/ie9_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/ie9_64x64.png -------------------------------------------------------------------------------- /images/browsers/opera_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/opera_128x128.png -------------------------------------------------------------------------------- /images/browsers/opera_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/opera_64x64.png -------------------------------------------------------------------------------- /images/browsers/safari_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/safari_128x128.png -------------------------------------------------------------------------------- /images/browsers/safari_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browsers/safari_64x64.png -------------------------------------------------------------------------------- /images/browserstack-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browserstack-logo.png -------------------------------------------------------------------------------- /images/browserstack-logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/browserstack-logo@2x.png -------------------------------------------------------------------------------- /images/bulb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bulb 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /images/chevron-up.svg: -------------------------------------------------------------------------------- 1 | Created by Bonnie Beachfrom the Noun Project 2 | -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/favicon.ico -------------------------------------------------------------------------------- /images/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/phone.png -------------------------------------------------------------------------------- /images/phone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/phone@2x.png -------------------------------------------------------------------------------- /images/sequence-logo-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/sequence-logo-medium.png -------------------------------------------------------------------------------- /images/sequence-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/sequence-logo.png -------------------------------------------------------------------------------- /images/sequence-logo.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /images/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/square.png -------------------------------------------------------------------------------- /images/square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | square 4 | A blue square 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /images/swipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/swipe.png -------------------------------------------------------------------------------- /images/swipe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/swipe@2x.png -------------------------------------------------------------------------------- /images/touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/images/touch-icon.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sequencejs", 3 | "description": "The responsive CSS animation framework for creating unique sliders, presentations, banners, and other step-based applications.", 4 | "version": "2.1.0", 5 | "main": "scripts/sequence.min.js", 6 | "license": "SEE LICENSE IN LICENSE.md", 7 | "author": "Ian Lunn", 8 | "homepage": "http://www.sequencejs.com/", 9 | "bugs": "https://github.com/IanLunn/Sequence/issues", 10 | "repository": { 11 | "type": "git", 12 | "url": "git://github.com/IanLunn/Sequence.git" 13 | }, 14 | "keywords": [ 15 | "sequence", 16 | "sequence.js", 17 | "sequencejs", 18 | "slider", 19 | "carousel", 20 | "animation", 21 | "animation framework", 22 | "css animation" 23 | ], 24 | "devDependencies": { 25 | "connect-livereload": "~0.3.2", 26 | "grunt": "~0.4.2", 27 | "grunt-autoprefixer": "~0.4.1", 28 | "grunt-contrib-connect": "~0.6.0", 29 | "grunt-contrib-copy": "~0.5.0", 30 | "grunt-contrib-cssmin": "~0.7.0", 31 | "grunt-contrib-jasmine": "^0.8.2", 32 | "grunt-contrib-jshint": "^0.10.0", 33 | "grunt-contrib-sass": "~0.6.0", 34 | "grunt-contrib-uglify": "~0.3.0", 35 | "grunt-contrib-watch": "~0.5.3", 36 | "grunt-karma": "^0.10.1", 37 | "grunt-open": "~0.2.3", 38 | "grunt-version": "~0.3.0", 39 | "jasmine-core": "^2.2.0", 40 | "karma-jasmine": "^0.3.5", 41 | "karma-phantomjs-launcher": "^0.1.4", 42 | "load-grunt-tasks": "~0.2.1", 43 | "time-grunt": "~0.2.8" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /scripts/hammer.min.js: -------------------------------------------------------------------------------- 1 | /*! Hammer.JS - v2.0.4 - 2014-09-28 2 | * http://hammerjs.github.io/ 3 | * 4 | * Copyright (c) 2014 Jorik Tangelder; 5 | * Licensed under the MIT license */ 6 | !function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=nb(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===yb||f.eventType===Ab)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Bb&&(i>xb||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=mb(l.x)>mb(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:lb(c/b),y:lb(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Cb:mb(a)>=mb(b)?a>0?Db:Eb:b>0?Fb:Gb}function I(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],Lb)-J(a[1],a[0],Lb)}function L(a,b){return I(b[0],b[1],Lb)/I(a[0],a[1],Lb)}function M(){this.evEl=Nb,this.evWin=Ob,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Rb,this.evWin=Sb,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ub,this.evWin=Vb,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Ab|Bb)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xb,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(yb|zb)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===yb)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Ab|Bb)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Tb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Ub="touchstart",Vb="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Tb[a.type];if(b===yb&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Ab|Bb)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}});var Wb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Xb="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wb[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==tb,e=c.pointerType==vb;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Ab|Bb)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Yb=v(jb.style,"touchAction"),Zb=Yb!==d,$b="compute",_b="auto",ac="manipulation",bc="none",cc="pan-x",dc="pan-y";T.prototype={set:function(a){a==$b&&(a=this.compute()),Zb&&(this.manager.element.style[Yb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Zb){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bc),f=q(d,dc),g=q(d,cc);return e||f&&c&Hb||g&&c&Ib?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var ec=1,fc=2,gc=4,hc=8,ic=hc,jc=16,kc=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hc>d&&b(!0),b(),d>=hc&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kc)},canEmit:function(){for(var a=0;af?Db:Eb,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Cb:0>g?Fb:Gb,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fc||!(this.state&fc)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fc)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(ab,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_b]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Ab|Bb)&&!f)this.reset();else if(a.eventType&yb)this.reset(),this._timer=e(function(){this.state=ic,this.tryEmit()},b.time,this);else if(a.eventType&Ab)return ic;return kc},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ic&&(a&&a.eventType&Ab?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=nb(),this.manager.emit(this.options.event,this._input)))}}),j(bb,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fc)}}),j(cb,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Hb|Ib,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Hb|Ib)?b=a.velocity:c&Hb?b=a.velocityX:c&Ib&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&mb(b)>this.options.velocity&&a.eventType&Ab},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(db,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ac]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distancet;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("eventEmitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(this,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function c(e){this.img=e}function f(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];if("IMG"===n.nodeName&&this.addImage(n),n.nodeType&&(1===n.nodeType||9===n.nodeType))for(var i=n.querySelectorAll("img"),r=0,o=i.length;o>r;r++){var s=i[r];this.addImage(s)}}},s.prototype.addImage=function(e){var t=new c(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),c.prototype=new t,c.prototype.check=function(){var e=v[this.img.src]||new f(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},c.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return f.prototype=new t,f.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},f.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},f.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},f.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},f.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},f.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}); -------------------------------------------------------------------------------- /scripts/sequence-theme.intro.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Theme Name: Intro 3 | * Version: 1.0.0 4 | * Theme URL: http://sequencejs.com/themes/intro/ 5 | * 6 | * The Sequence.js introduction theme used to briefly describe how Sequence.js works 7 | * 8 | * This theme is powered by Sequence.js - The 9 | * responsive CSS animation framework for creating unique sliders, 10 | * presentations, banners, and other step-based applications. 11 | * 12 | * Author: Ian Lunn 13 | * Author URL: http://ianlunn.co.uk/ 14 | * 15 | * Theme License: http://sequencejs.com/licenses/#free-theme 16 | * Sequence.js Licenses: http://sequencejs.com/licenses/ 17 | * 18 | * Copyright © 2015 Ian Lunn Design Limited unless otherwise stated. 19 | */ 20 | 21 | // Get the Sequence element 22 | var sequenceElement = document.getElementById("sequence"), 23 | sequenceViewCodeButtons = document.querySelectorAll(".seq-view-code"); 24 | 25 | // Place your Sequence options here to override defaults 26 | // See: http://sequencejs.com/documentation/#options 27 | var options = { 28 | phaseThreshold: 100, 29 | preloader: true, 30 | reverseWhenNavigatingBackwards: true, 31 | fallback: { 32 | speed: 300 33 | } 34 | } 35 | 36 | // Launch Sequence on the element, and with the options we specified above 37 | var mySequence = sequence(sequenceElement, options); 38 | 39 | 40 | 41 | var codePane = { 42 | $openElement: undefined, 43 | $openButton: undefined, 44 | 45 | getTarget: function(e) { 46 | var evt, 47 | targetElement; 48 | 49 | evt = e || window.event; // get window.event if argument is falsy (in IE) 50 | 51 | // get srcElement if target is falsy (IE) 52 | targetElement = evt.target || evt.srcElement; 53 | 54 | return targetElement; 55 | }, 56 | 57 | getWindowSize: function($el) { 58 | 59 | if (typeof getComputedStyle !== 'undefined') { 60 | return window.getComputedStyle($el, ':after').getPropertyValue('content').replace(/\"/g, ''); 61 | } else { 62 | return false; 63 | } 64 | }, 65 | 66 | init: function(viewCodeButtons) { 67 | 68 | var $step, 69 | $codePane, 70 | $codePaneButton, 71 | $pagination = mySequence.$pagination.elements[0], 72 | $canvas = mySequence.$canvas, 73 | targetElement; 74 | 75 | // Toggle a code pane when its button is clicked 76 | mySequence.utils.addEvent(sequenceElement, "click", function(e) { 77 | 78 | // Don't use this functionality in large layout 79 | if (codePane.getWindowSize($canvas) === "large") { 80 | return; 81 | } 82 | 83 | targetElement = codePane.getTarget(e); 84 | 85 | if (targetElement.className === "seq-view-code") { 86 | /* Toggle the codepane when the view-code button is clicked */ 87 | $codePane = targetElement.parentNode; 88 | $step = $codePane.parentNode; 89 | $codePaneButton = targetElement; 90 | 91 | codePane.toggle($step, $codePane, $codePaneButton); 92 | } else if (targetElement.nodeName === "LI") { 93 | /* Close the codepane when clicking on the step */ 94 | codePane.hide($step, true, codePane.$openElement); 95 | } 96 | }); 97 | 98 | // Close a code pane when its pagination link is clicked 99 | mySequence.utils.addEvent($pagination, "click", function(e) { 100 | 101 | var $parentLink, 102 | stepNo, 103 | $step; 104 | 105 | targetElement = codePane.getTarget(e); 106 | 107 | // Don't use this functionality in large layout 108 | if (codePane.getWindowSize($canvas) === "large") { 109 | return; 110 | } 111 | 112 | // Get the pagination link being clicked 113 | $parentLink = (targetElement.parentNode.nodeName === "LI") ? targetElement.parentNode : targetElement.parentNode.parentNode; 114 | 115 | // Get the step number of the clicked pagination link 116 | stepNo = [].indexOf.call ($parentLink.parentNode.children, $parentLink); 117 | 118 | // Get the related step 119 | $step = mySequence.$steps[stepNo]; 120 | 121 | // Hide the code pane 122 | codePane.hide($step, true); 123 | }); 124 | }, 125 | 126 | // Show/hide a code pane based on current state 127 | toggle: function($step, $codePane, $button) { 128 | 129 | var isOpen = $codePane.getAttribute("data-is-open"); 130 | 131 | if (isOpen !== "true") { 132 | codePane.show($step, $codePane, $button); 133 | } else { 134 | codePane.hide($step, true, $codePane, $button); 135 | } 136 | }, 137 | 138 | // Show a code pane 139 | // Use a data-attribute to save state 140 | // Save the open element so it can be closed when a non-code-pane 141 | // element is clicked 142 | show: function($step, $codePane, $button) { 143 | 144 | mySequence.utils.addClass($step, "seq-code-pane-open"); 145 | mySequence.utils.removeClass($step, "seq-code-pane-snap-shut"); 146 | 147 | $button.innerHTML = ' Hide Code'; 148 | 149 | $codePane.setAttribute("data-is-open", true); 150 | codePane.$openElement = $codePane; 151 | codePane.$openButton = $button; 152 | }, 153 | 154 | /* 155 | * Hide a code pane 156 | * 157 | * $step - The step element the code pane belongs to 158 | * animate - Whether the code pane should be animated. No animation is used for when the code pane is automatically closed because the user navigated away without manually closing it 159 | * $codePane - The code pane element 160 | * $button - The button that opens/closes the code pane 161 | */ 162 | hide: function($step, animate, $codePane, $button) { 163 | 164 | if ($codePane === undefined) { 165 | $codePane = codePane.$openElement; 166 | } 167 | 168 | // If there is no open element, don't continue 169 | if (codePane.$openElement === undefined) { 170 | return; 171 | } 172 | 173 | if ($button === undefined) { 174 | $button = codePane.$openButton; 175 | } 176 | 177 | $step = $codePane.parentNode; 178 | 179 | // Prevent the code pane from animating, snap shut instead 180 | if (animate === false) { 181 | mySequence.utils.addClass($step, "seq-code-pane-snap-shut"); 182 | } 183 | 184 | mySequence.utils.removeClass($step, "seq-code-pane-open"); 185 | 186 | $button.innerHTML = ' Show Code'; 187 | 188 | $codePane.setAttribute("data-is-open", false); 189 | codePane.$openElement = undefined; 190 | codePane.$openButton = undefined; 191 | } 192 | } 193 | 194 | mySequence.ready = function() { 195 | 196 | // When Sequence.js is ready 197 | codePane.init(sequenceViewCodeButtons); 198 | }; 199 | 200 | mySequence.animationStarted = function(id, sequence) { 201 | 202 | // When animation starts, close any open code panes 203 | var $currentStep = sequence.$steps[sequence.currentStepId - 1]; 204 | 205 | codePane.hide($currentStep, false); 206 | } 207 | -------------------------------------------------------------------------------- /scripts/sequence-theme.intro.min.js: -------------------------------------------------------------------------------- 1 | var sequenceElement=document.getElementById("sequence"),sequenceViewCodeButtons=document.querySelectorAll(".seq-view-code"),options={phaseThreshold:100,preloader:!0,reverseWhenNavigatingBackwards:!0,fallback:{speed:300}},mySequence=sequence(sequenceElement,options),codePane={$openElement:void 0,$openButton:void 0,getTarget:function(a){var b,c;return b=a||window.event,c=b.target||b.srcElement},getWindowSize:function(a){return"undefined"!=typeof getComputedStyle?window.getComputedStyle(a,":after").getPropertyValue("content").replace(/\"/g,""):!1},init:function(){var a,b,c,d,e=mySequence.$pagination.elements[0],f=mySequence.$canvas;mySequence.utils.addEvent(sequenceElement,"click",function(e){"large"!==codePane.getWindowSize(f)&&(d=codePane.getTarget(e),"seq-view-code"===d.className?(b=d.parentNode,a=b.parentNode,c=d,codePane.toggle(a,b,c)):"LI"===d.nodeName&&codePane.hide(a,!0,codePane.$openElement))}),mySequence.utils.addEvent(e,"click",function(a){var b,c,e;d=codePane.getTarget(a),"large"!==codePane.getWindowSize(f)&&(b="LI"===d.parentNode.nodeName?d.parentNode:d.parentNode.parentNode,c=[].indexOf.call(b.parentNode.children,b),e=mySequence.$steps[c],codePane.hide(e,!0))})},toggle:function(a,b,c){var d=b.getAttribute("data-is-open");"true"!==d?codePane.show(a,b,c):codePane.hide(a,!0,b,c)},show:function(a,b,c){mySequence.utils.addClass(a,"seq-code-pane-open"),mySequence.utils.removeClass(a,"seq-code-pane-snap-shut"),c.innerHTML=' Hide Code',b.setAttribute("data-is-open",!0),codePane.$openElement=b,codePane.$openButton=c},hide:function(a,b,c,d){void 0===c&&(c=codePane.$openElement),void 0!==codePane.$openElement&&(void 0===d&&(d=codePane.$openButton),a=c.parentNode,b===!1&&mySequence.utils.addClass(a,"seq-code-pane-snap-shut"),mySequence.utils.removeClass(a,"seq-code-pane-open"),d.innerHTML=' Show Code',c.setAttribute("data-is-open",!1),codePane.$openElement=void 0,codePane.$openButton=void 0)}};mySequence.ready=function(){codePane.init(sequenceViewCodeButtons)},mySequence.animationStarted=function(a,b){var c=b.$steps[b.currentStepId-1];codePane.hide(c,!1)}; -------------------------------------------------------------------------------- /scss/demo-page.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * The following styles are solely for the demo page and are not required 3 | * for the Intro theme to work. 4 | */ 5 | 6 | $fontBody: 'Ubuntu', sans-serif; 7 | $fontFeature: 'Montserrat', sans-serif; 8 | 9 | $active1: #2AA0D4; 10 | $active1a: #0890CA; 11 | $active1b: #046995; 12 | $active2: #36C26F; 13 | $active2a: #16B557; 14 | $active2b: #04923E; 15 | $active3: #F96D38; 16 | 17 | body { 18 | margin: 0; 19 | padding: 0; 20 | background: #F8F8F8; 21 | font-family: $fontBody; 22 | -webkit-text-size-adjust: 100%; 23 | } 24 | 25 | a { 26 | text-decoration: none; 27 | } 28 | 29 | .container { 30 | max-width: 1200px; 31 | margin: 0 auto; 32 | padding: 0 10px; 33 | padding: 0 .625rem; 34 | 35 | @media only screen and (min-width: 737px) { 36 | padding: 0 40px; 37 | padding: 0 2.5rem; 38 | } 39 | } 40 | 41 | .group { 42 | position: relative; 43 | 44 | &:before, 45 | &:after { 46 | content: ""; 47 | display: table; 48 | } 49 | 50 | &:after { 51 | clear: both; 52 | } 53 | } 54 | 55 | .valign { 56 | font-size: 0; 57 | 58 | &:before { 59 | content: ""; 60 | height: 100%; 61 | } 62 | 63 | &:before, 64 | > * { 65 | display: inline-block; 66 | vertical-align: middle; 67 | } 68 | 69 | > * { 70 | font-size: 16px; 71 | } 72 | } 73 | 74 | .browsehappy { 75 | background: #ccc; 76 | color: #000; 77 | margin: 0; 78 | padding: 1em; 79 | 80 | a { 81 | color: $active1; 82 | 83 | &:focus, 84 | &:hover { 85 | color: $active1a; 86 | } 87 | } 88 | } 89 | 90 | .header { 91 | padding: 2.65em 0; 92 | background: white; 93 | font-family: $fontFeature; 94 | text-align: center; 95 | 96 | .container > div { 97 | width: 100%; 98 | font-size: 0; 99 | } 100 | 101 | a { 102 | padding: .625em; 103 | color: #B1B1B1; 104 | text-decoration: none; 105 | 106 | &:focus, 107 | &:hover { 108 | color: black; 109 | } 110 | } 111 | 112 | .logo, 113 | .nav { 114 | font-size: 16px; 115 | font-size: 1rem; 116 | } 117 | 118 | .logo { 119 | margin-bottom: 1em; 120 | } 121 | 122 | .nav { 123 | height: 100%; 124 | line-height: 1.6; 125 | } 126 | 127 | @media only screen and (min-width: 737px) { 128 | text-align: left; 129 | 130 | .logo, 131 | .nav { 132 | display: inline-block; 133 | vertical-align: middle; 134 | width: 50%; 135 | } 136 | 137 | .logo { 138 | margin-bottom: 0; 139 | } 140 | 141 | .nav { 142 | text-align: right; 143 | } 144 | } 145 | } 146 | 147 | a .fa { 148 | display: inline; 149 | } 150 | 151 | .nav { 152 | margin: 0; 153 | padding: 0; 154 | 155 | li { 156 | display: inline-block; 157 | vertical-align: middle; 158 | list-style: none; 159 | } 160 | } 161 | 162 | .social { 163 | margin-bottom: .875em; 164 | text-align: center; 165 | line-height: 2; 166 | } 167 | 168 | .social-button { 169 | display: inline-block; 170 | vertical-align: middle; 171 | width: 100px; 172 | } 173 | 174 | .twitter-follow-button { 175 | display: block; 176 | margin: 0 auto; 177 | } 178 | 179 | .follow { 180 | margin-bottom: 1.25em; 181 | line-height: 1.6; 182 | } 183 | 184 | .main .title:first-of-type { 185 | margin-top: 5em; 186 | } 187 | 188 | .title { 189 | margin-top: 5em; 190 | margin-bottom: 2em; 191 | text-align: center; 192 | color: #282828; 193 | 194 | h1, 195 | h2 { 196 | font-family: $fontFeature; 197 | } 198 | 199 | h1 { 200 | margin: 0; 201 | margin-bottom: .5em; 202 | font-family: $fontFeature; 203 | font-size: 2em; 204 | font-weight: 500; 205 | line-height: 1.25; 206 | -webkit-hyphens: manual; 207 | -moz-hyphens: manual; 208 | -ms-hyphens: manual; 209 | hyphens: manual; 210 | } 211 | 212 | h2 { 213 | margin: 0; 214 | margin-bottom: 0; 215 | font-size: 1em; 216 | font-weight: 300; 217 | line-height: 1.4; 218 | } 219 | 220 | .tagline { 221 | line-height: 1.4; 222 | } 223 | 224 | @media only screen and (min-width: 568px) { 225 | h1 { 226 | margin-bottom: .18em; 227 | font-size: 2.25em; 228 | } 229 | 230 | h2 { 231 | font-size: 1.15em; 232 | } 233 | } 234 | 235 | @media only screen and (min-width: 641px) { 236 | margin-top: 8.75em; 237 | margin-bottom: 3em; 238 | 239 | h1 { 240 | margin-bottom: .18em; 241 | font-size: 2.75em; 242 | } 243 | 244 | h2 { 245 | margin-bottom: 2em; 246 | font-size: 1.25em; 247 | line-height: 1.6; 248 | } 249 | } 250 | } 251 | 252 | .main { 253 | a { 254 | color: $active1; 255 | 256 | &:focus, 257 | &:hover { 258 | color: $active1a; 259 | } 260 | } 261 | } 262 | 263 | .products { 264 | margin: 0; 265 | padding: 0; 266 | 267 | img { 268 | max-width: 100%; 269 | height: auto; 270 | } 271 | 272 | a, 273 | a:focus, 274 | a:hover { 275 | color: #282828; 276 | } 277 | 278 | .product { 279 | margin-bottom: 2em; 280 | list-style: none; 281 | 282 | img { 283 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.4); 284 | -webkit-transition-duration: .2s; 285 | -webkit-transition-property: box-shadow; 286 | transition-duration: .2s; 287 | transition-property: box-shadow; 288 | } 289 | 290 | &:focus, 291 | &:hover { 292 | img { 293 | box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.6); 294 | } 295 | } 296 | 297 | img, 298 | a { 299 | display: block; 300 | } 301 | 302 | h3 { 303 | margin: .555556em 0 0 0; 304 | } 305 | } 306 | 307 | @media only screen and (min-width: 569px) { 308 | .product { 309 | width: 48.3607%; 310 | float: left; 311 | 312 | &:nth-child(2n+1) { 313 | margin-right: 1.63934%; 314 | } 315 | 316 | &:nth-child(2n) { 317 | margin-left: 1.63934%; 318 | } 319 | 320 | &:nth-last-child(1), 321 | &:nth-last-child(2) { 322 | margin-bottom: 0; 323 | } 324 | } 325 | } 326 | } 327 | 328 | .button-set { 329 | margin: 1em 0; 330 | text-align: center; 331 | 332 | .button { 333 | margin-left: 0.285714em; 334 | margin-right: 0.285714em; 335 | } 336 | } 337 | 338 | a.button { 339 | display: inline-block; 340 | margin-top: .71428571em; 341 | padding: 1.2em; 342 | color: white; 343 | text-align: center; 344 | text-transform: uppercase; 345 | font-size: .875em; 346 | font-weight: 700; 347 | -webkit-transition-duration: .2s; 348 | transition-duration: .2s; 349 | -webkit-transition-property: background-color; 350 | transition-property: background-color; 351 | 352 | &:first-of-type { 353 | margin-left: 0; 354 | } 355 | 356 | &:last-of-type { 357 | margin-right: 0; 358 | } 359 | 360 | &:focus, &:hover { 361 | color: white; 362 | } 363 | 364 | i { 365 | margin-left: 2px; 366 | } 367 | 368 | &.button-link { 369 | background: #36C26F; 370 | } 371 | 372 | &.button-link:focus, &.button-link:hover { 373 | background: #16B557; 374 | } 375 | 376 | &.button-highlight { 377 | background: #2AA0D4; 378 | } 379 | 380 | &.button-highlight:focus, &.button-highlight:hover { 381 | background: #0890CA; 382 | } 383 | } 384 | 385 | .code-block { 386 | max-width: 580px; 387 | margin: 2.5em auto 1em auto; 388 | font-size: 16px; 389 | font-size: 1rem; 390 | 391 | code { 392 | background: white; 393 | display: block; 394 | padding: 1em; 395 | line-height: 1.6; 396 | font-family: "Droid Sans Mono",Courier New,Courier,Lucida Sans Typewriter,Lucida Typewriter,monospace; 397 | font-size: .875em; 398 | } 399 | } 400 | 401 | .footer { 402 | margin: 0; 403 | padding: 5em 0 1em 0; 404 | background: #181818; 405 | color: #777; 406 | 407 | a { 408 | color: #B1B1B1; 409 | } 410 | } 411 | 412 | .full-button { 413 | display: block; 414 | margin-top: 5em; 415 | padding: 1em; 416 | text-align: center; 417 | background: $active2; 418 | font-size: 1.5em; 419 | color: white; 420 | 421 | &:focus, 422 | &:hover { 423 | background: $active2a; 424 | } 425 | } 426 | 427 | .made-by { 428 | display: block; 429 | margin-top: 5em; 430 | font-family: $fontFeature; 431 | text-align: center; 432 | line-height: 1.6; 433 | 434 | svg { 435 | display: block; 436 | } 437 | 438 | ul, 439 | p { 440 | margin: 0; 441 | padding: 0; 442 | } 443 | 444 | ul { 445 | margin-bottom: .25em; 446 | } 447 | 448 | li { 449 | display: inline-block; 450 | vertical-align: middle; 451 | line-height: 1; 452 | } 453 | 454 | p { 455 | margin-top: .4em; 456 | font-size: .875em; 457 | } 458 | 459 | a { 460 | padding: 0 .125em; 461 | color: #B1B1B1; 462 | transition-duration: .2s; 463 | transition-property: color; 464 | 465 | &:focus, 466 | &:hover { 467 | color: white; 468 | } 469 | } 470 | 471 | i { 472 | font-size: 26px; 473 | height: 30px; 474 | } 475 | 476 | .follow { 477 | margin-top: 2em; 478 | 479 | iframe { 480 | margin-bottom: .5em; 481 | } 482 | } 483 | 484 | small { 485 | display: block; 486 | margin-top: 3em; 487 | font-size: .625em; 488 | } 489 | } 490 | 491 | .ild-ident { 492 | display: block; 493 | 494 | @keyframes circle { 495 | 50% { 496 | transform: scale(1.26923077); 497 | } 498 | } 499 | 500 | @keyframes initials { 501 | 50% { 502 | transform: translateY(-8px) translateZ(0); 503 | } 504 | } 505 | 506 | svg { 507 | display: block; 508 | overflow: visible; 509 | transform: scale(1) translateZ(0); 510 | 511 | .circle-holder { 512 | transform: translate(-7px, -7px); 513 | } 514 | 515 | .circle { 516 | transform: translate(7px, 7px); 517 | } 518 | 519 | &.active { 520 | .i { 521 | animation: initials .4s ease-in-out; 522 | } 523 | 524 | .l { 525 | animation: initials .4s .2s ease-in-out; 526 | } 527 | 528 | .circle { 529 | animation: circle .5s .1s ease-in-out; 530 | } 531 | } 532 | } 533 | } 534 | 535 | .sponsor { 536 | max-width: 290px; 537 | margin: 0 auto; 538 | text-align: center; 539 | 540 | p { 541 | font-size: .875em; 542 | line-height: 1.6; 543 | } 544 | } 545 | -------------------------------------------------------------------------------- /scss/partials/mixins.scss: -------------------------------------------------------------------------------- 1 | // Prefix declarations 2 | @mixin prefixed($property, $value) { 3 | -webkit-#{$property}: unquote($value); 4 | #{$property}: unquote($value); 5 | } 6 | 7 | // Prefix keyframe animations 8 | @mixin key-frames($name) { 9 | @-webkit-keyframes #{$name} { 10 | @content 11 | } 12 | 13 | @keyframes #{$name} { 14 | @content 15 | } 16 | } 17 | 18 | @mixin aspect-ratio($width, $height) { 19 | position: relative; 20 | height: auto; 21 | 22 | &:before { 23 | /* Make an element a certain aspect ratio */ 24 | display: block; 25 | content: ""; 26 | width: 100%; 27 | padding-top: ($height / $width) * 100%; 28 | } 29 | 30 | .seq-screen { 31 | position: absolute; 32 | top: 0; 33 | left: 0; 34 | right: 0; 35 | bottom: 0; 36 | } 37 | } 38 | 39 | // Vertically align the child element 40 | @mixin valign($child) { 41 | .seq-valign { 42 | /* Remove 4px gap between vertically aligned elements */ 43 | font-size: 0; 44 | } 45 | 46 | .seq-valign:before { 47 | /* Use a pseudo-element at 100% height to push the child element into the center */ 48 | content: ""; 49 | height: 100%; 50 | } 51 | 52 | .seq-valign:before, 53 | .seq-valign > #{$child} { 54 | /* Vertically center the pseudo-element and child relative to one another */ 55 | display: inline-block; 56 | vertical-align: middle; 57 | } 58 | 59 | .seq-valign > #{$child} { 60 | /* Reset the font-size as the parent was set to 0px to remove the 4px gap */ 61 | font-size: 16px; 62 | font-size: 1rem; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /tests/index.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /tests/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // http://karma-runner.github.io/0.12/config/configuration-file.html 3 | // Generated on 2015-03-07 using 4 | // generator-karma 0.9.0 5 | 6 | module.exports = function(config) { 7 | 'use strict'; 8 | 9 | config.set({ 10 | // enable / disable watching file and executing tests whenever any file changes 11 | autoWatch: false, 12 | 13 | // base path, that will be used to resolve files and exclude 14 | basePath: '', 15 | 16 | // testing framework to use (jasmine/mocha/qunit/...) 17 | frameworks: ['jasmine'], 18 | 19 | // list of files / patterns to load in the browser 20 | files: [ 21 | 'setup-tests.js', 22 | '../scripts/imagesloaded.pkgd.min.js', 23 | '../scripts/hammer.min.js', 24 | '../scripts/sequence.js', 25 | 'spec/*.js' 26 | ], 27 | 28 | // list of files / patterns to exclude 29 | exclude: [ 30 | ], 31 | 32 | // web server port 33 | port: 8080, 34 | 35 | // Start these browsers, currently available: 36 | // - Chrome 37 | // - ChromeCanary 38 | // - Firefox 39 | // - Opera 40 | // - Safari (only Mac) 41 | // - PhantomJS 42 | // - IE (only Windows) 43 | browsers: [ 44 | 'PhantomJS' 45 | ], 46 | 47 | // Which plugins to enable 48 | plugins: [ 49 | 'karma-phantomjs-launcher', 50 | 'karma-jasmine' 51 | ], 52 | 53 | // Continuous Integration mode 54 | // if true, it capture browsers, run tests and exit 55 | singleRun: false, 56 | 57 | colors: true, 58 | 59 | // level of logging 60 | // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG 61 | logLevel: config.LOG_INFO, 62 | 63 | // Uncomment the following lines if you are using grunt's server to run the tests 64 | // proxies: { 65 | // '/': 'http://localhost:9000/' 66 | // }, 67 | // URL root prevent conflicts with the site root 68 | // urlRoot: '_karma_' 69 | }); 70 | }; 71 | -------------------------------------------------------------------------------- /tests/setup-tests.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Append a Sequence element to the DOM for testing and set up other functions 3 | * required for testing 4 | */ 5 | 6 | var done = function() {}; 7 | 8 | var appendSequence, 9 | resetSequence, 10 | initSequence; 11 | 12 | appendSequence = function() { 13 | 14 | var sequenceHtml = '
  • Box 1
  • Box 2
  • Box 3
'; 15 | 16 | document.body.innerHTML = sequenceHtml; 17 | }; 18 | 19 | resetSequence = function(sequence) { 20 | sequence.destroy(); 21 | }; 22 | 23 | removeSequence = function() { 24 | var testContainer = document.getElementById("test-container"); 25 | testContainer.parentNode.removeChild(testContainer); 26 | }; 27 | 28 | initSequence = function(options) { 29 | 30 | if (options === undefined) { 31 | options = {}; 32 | } 33 | 34 | var sequenceElement = document.getElementById("sequence"), 35 | mySequence = sequence(sequenceElement, options); 36 | 37 | return mySequence; 38 | }; 39 | -------------------------------------------------------------------------------- /tests/spec/animation-fallback.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.animationFallback 3 | */ 4 | -------------------------------------------------------------------------------- /tests/spec/animation.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.animation 3 | */ 4 | 5 | describe("animation.getPropertySupport()", function() { 6 | 7 | var sequence; 8 | 9 | // Set up Sequence and wait for it to be ready 10 | beforeAll(function(done) { 11 | 12 | appendSequence(); 13 | 14 | sequence = initSequence(); 15 | 16 | sequence.ready = function() { 17 | done(); 18 | }; 19 | 20 | }); 21 | 22 | afterAll(function(done) { 23 | removeSequence(); 24 | SetTimeout(function() { 25 | resetSequence(sequence); 26 | done(); 27 | }, 500); 28 | }); 29 | 30 | it("should return a list of properties and whether the browser supports them", function() { 31 | expect(sequence.animation.getPropertySupport()).toEqual(jasmine.any(Object)); 32 | }); 33 | }); 34 | 35 | describe("animation.requiresFallbackMode()", function() { 36 | 37 | var sequence; 38 | 39 | // Set up Sequence and wait for it to be ready 40 | beforeAll(function(done) { 41 | 42 | appendSequence(); 43 | 44 | sequence = initSequence(); 45 | 46 | sequence.ready = function() { 47 | done(); 48 | }; 49 | }); 50 | 51 | afterAll(function(done) { 52 | removeSequence(); 53 | SetTimeout(function() { 54 | resetSequence(sequence); 55 | done(); 56 | }, 500); 57 | }); 58 | 59 | it("should put Sequence in fallbackMode if transitions aren't supported", function() { 60 | 61 | var propertySupport = { 62 | transitions: false 63 | }; 64 | expect(sequence.animation.requiresFallbackMode(propertySupport)).toEqual(true); 65 | }); 66 | }); 67 | 68 | describe("animation.getReversePhaseDelay()", function() { 69 | 70 | var sequence; 71 | 72 | // Set up Sequence and wait for it to be ready 73 | beforeAll(function(done) { 74 | 75 | appendSequence(); 76 | 77 | sequence = initSequence(); 78 | 79 | sequence.ready = function() { 80 | done(); 81 | }; 82 | }); 83 | 84 | afterAll(function(done) { 85 | removeSequence(); 86 | SetTimeout(function() { 87 | resetSequence(sequence); 88 | done(); 89 | }, 500); 90 | }); 91 | 92 | 93 | it("should return a next reversePhaseDelay of 1000 when the currentPhaseTotal is 2000, nextPhaseTotal is 1000, phaseThreshold is false, ignorePhaseThresholdWhenSkipped is false, and Sequence.js isn't animating", function() { 94 | 95 | var currentPhaseTotal = 2000, 96 | nextPhaseTotal = 1000, 97 | phaseThresholdOption = false, 98 | ignorePhaseThresholdWhenSkipped = false, 99 | isAnimating = false; 100 | 101 | expect(sequence.animation.getReversePhaseDelay(currentPhaseTotal, nextPhaseTotal, phaseThresholdOption, ignorePhaseThresholdWhenSkipped, isAnimating)).toEqual(jasmine.objectContaining({ 102 | next: 1000, 103 | current: 0 104 | })); 105 | }); 106 | 107 | 108 | it("should return a current reversePhaseDelay of 1000 when the currentPhaseTotal is 1000, nextPhaseTotal is 2000, phaseThreshold is false, ignorePhaseThresholdWhenSkipped is false, and Sequence.js isn't animating", function() { 109 | 110 | var currentPhaseTotal = 1000, 111 | nextPhaseTotal = 2000, 112 | phaseThresholdOption = false, 113 | ignorePhaseThresholdWhenSkipped = false, 114 | isAnimating = false; 115 | 116 | expect(sequence.animation.getReversePhaseDelay(currentPhaseTotal, nextPhaseTotal, phaseThresholdOption, ignorePhaseThresholdWhenSkipped, isAnimating)).toEqual(jasmine.objectContaining({ 117 | next: 0, 118 | current: 1000 119 | })); 120 | }); 121 | 122 | 123 | it("should return no reversePhaseDelay when the currentPhaseTotal and nextPhaseTotal are the same, phaseThreshold is false, ignorePhaseThresholdWhenSkipped is false, and Sequence.js isn't animating", function() { 124 | 125 | var currentPhaseTotal = 1000, 126 | nextPhaseTotal = 1000, 127 | phaseThresholdOption = false, 128 | ignorePhaseThresholdWhenSkipped = false, 129 | isAnimating = false; 130 | 131 | expect(sequence.animation.getReversePhaseDelay(currentPhaseTotal, nextPhaseTotal, phaseThresholdOption, ignorePhaseThresholdWhenSkipped, isAnimating)).toEqual(jasmine.objectContaining({ 132 | next: 0, 133 | current: 0 134 | })); 135 | }); 136 | 137 | 138 | it("should not return a phaseThreshold when phaseThreshold is true", function() { 139 | 140 | var currentPhaseTotal = 2000, 141 | nextPhaseTotal = 1000, 142 | phaseThresholdOption = true, 143 | ignorePhaseThresholdWhenSkipped = false, 144 | isAnimating = false; 145 | 146 | expect(sequence.animation.getReversePhaseDelay(currentPhaseTotal, nextPhaseTotal, phaseThresholdOption, ignorePhaseThresholdWhenSkipped, isAnimating)).toEqual(jasmine.objectContaining({ 147 | next: 0, 148 | current: 0 149 | })); 150 | }); 151 | 152 | 153 | it("should return a phaseThreshold when ignorePhaseThresholdWhenSkipped is false, regardless of whether Sequence is animating", function() { 154 | 155 | var currentPhaseTotal = 2000, 156 | nextPhaseTotal = 1000, 157 | phaseThresholdOption = false, 158 | ignorePhaseThresholdWhenSkipped = false, 159 | isAnimating = true; 160 | 161 | // When animating 162 | expect(sequence.animation.getReversePhaseDelay(currentPhaseTotal, nextPhaseTotal, phaseThresholdOption, ignorePhaseThresholdWhenSkipped, isAnimating)).toEqual(jasmine.objectContaining({ 163 | next: 1000, 164 | current: 0 165 | })); 166 | 167 | // When not animating 168 | isAnimating = false; 169 | 170 | expect(sequence.animation.getReversePhaseDelay(currentPhaseTotal, nextPhaseTotal, phaseThresholdOption, ignorePhaseThresholdWhenSkipped, isAnimating)).toEqual(jasmine.objectContaining({ 171 | next: 1000, 172 | current: 0 173 | })); 174 | }); 175 | 176 | 177 | it("should not return a phaseThreshold when ignorePhaseThresholdWhenSkipped is true, and Sequence is animating", function() { 178 | 179 | var currentPhaseTotal = 2000, 180 | nextPhaseTotal = 1000, 181 | phaseThresholdOption = false, 182 | ignorePhaseThresholdWhenSkipped = true, 183 | isAnimating = true; 184 | 185 | expect(sequence.animation.getReversePhaseDelay(currentPhaseTotal, nextPhaseTotal, phaseThresholdOption, ignorePhaseThresholdWhenSkipped, isAnimating)).toEqual(jasmine.objectContaining({ 186 | next: 0, 187 | current: 0 188 | })); 189 | }); 190 | }); 191 | 192 | describe("animation.getDirection()", function() { 193 | 194 | var sequence; 195 | 196 | // Set up Sequence and wait for it to be ready 197 | beforeAll(function(done) { 198 | 199 | appendSequence(); 200 | 201 | sequence = initSequence(); 202 | 203 | sequence.ready = function() { 204 | done(); 205 | }; 206 | 207 | }); 208 | 209 | afterAll(function(done) { 210 | removeSequence(); 211 | SetTimeout(function() { 212 | resetSequence(sequence); 213 | done(); 214 | }, 500); 215 | }); 216 | 217 | it("should return 1 when no direction is defined", function() { 218 | 219 | var id = 2, 220 | definedDirection = undefined, 221 | currentStepId = 1, 222 | noOfSteps = 3, 223 | isFallbackMode = false, 224 | reverseWhenNavigatingBackwardsOption = true, 225 | cycleOption = true; 226 | 227 | expect(sequence.animation.getDirection(id, definedDirection, currentStepId, noOfSteps, isFallbackMode, reverseWhenNavigatingBackwardsOption, cycleOption)).toEqual(1); 228 | }); 229 | 230 | 231 | it("should return 1 when going from the last step to the first", function() { 232 | 233 | var id = 1, 234 | definedDirection = 1, 235 | currentStepId = 5, 236 | noOfSteps = 5, 237 | isFallbackMode = false, 238 | reverseWhenNavigatingBackwardsOption = true, 239 | cycleOption = true; 240 | 241 | expect(sequence.animation.getDirection(id, definedDirection, currentStepId, noOfSteps, isFallbackMode, reverseWhenNavigatingBackwardsOption, cycleOption)).toEqual(1); 242 | }); 243 | 244 | 245 | it("should return 1 when the reverseWhenNavigatingBackwards option is disabled", function() { 246 | 247 | var id = 1, 248 | definedDirection = 1, 249 | currentStepId = 5, 250 | noOfSteps = 5, 251 | isFallbackMode = false, 252 | reverseWhenNavigatingBackwardsOption = false, 253 | cycleOption = true; 254 | 255 | expect(sequence.animation.getDirection(id, definedDirection, currentStepId, noOfSteps, isFallbackMode, reverseWhenNavigatingBackwardsOption, cycleOption)).toEqual(1); 256 | }); 257 | 258 | 259 | it("should return 1 when in fallback mode", function() { 260 | 261 | var id = 1, 262 | definedDirection = 1, 263 | currentStepId = 5, 264 | noOfSteps = 5, 265 | isFallbackMode = true, 266 | reverseWhenNavigatingBackwardsOption = true, 267 | cycleOption = true; 268 | 269 | expect(sequence.animation.getDirection(id, definedDirection, currentStepId, noOfSteps, isFallbackMode, reverseWhenNavigatingBackwardsOption, cycleOption)).toEqual(1); 270 | }); 271 | 272 | it("should return 1 when the step being navigated to is ahead of the current step", function() { 273 | 274 | var id = 2, 275 | definedDirection = undefined, 276 | currentStepId = 1, 277 | noOfSteps = 5, 278 | isFallbackMode = false, 279 | reverseWhenNavigatingBackwardsOption = true, 280 | cycleOption = true; 281 | 282 | expect(sequence.animation.getDirection(id, definedDirection, currentStepId, noOfSteps, isFallbackMode, reverseWhenNavigatingBackwardsOption, cycleOption)).toEqual(1); 283 | }); 284 | 285 | 286 | it("should return -1 when the step being navigated to is before the current step", function() { 287 | 288 | var id = 2, 289 | definedDirection = undefined, 290 | currentStepId = 3, 291 | noOfSteps = 5, 292 | isFallbackMode = false, 293 | reverseWhenNavigatingBackwardsOption = true, 294 | cycleOption = true; 295 | 296 | expect(sequence.animation.getDirection(id, definedDirection, currentStepId, noOfSteps, isFallbackMode, reverseWhenNavigatingBackwardsOption, cycleOption)).toEqual(-1); 297 | }); 298 | }); 299 | -------------------------------------------------------------------------------- /tests/spec/autoplay.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.autoPlay 3 | */ 4 | describe("autoPlay", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence({ 14 | autoPlay: false 15 | }); 16 | 17 | sequence.ready = function() { 18 | done(); 19 | }; 20 | }); 21 | 22 | afterAll(function(done) { 23 | removeSequence(); 24 | SetTimeout(function() { 25 | resetSequence(sequence); 26 | done(); 27 | }, 500); 28 | }); 29 | 30 | it("should allow autoPlay to be started once, then prevent autoPlay from being started again when already active", function() { 31 | 32 | // Start once then try starting again 33 | expect(sequence.autoPlay.start()).toEqual(true); 34 | expect(sequence.autoPlay.start()).toEqual(false); 35 | }); 36 | }); 37 | 38 | describe("autoPlay.getDelay()", function() { 39 | 40 | var sequence; 41 | 42 | // Set up Sequence and wait for it to be ready 43 | beforeAll(function(done) { 44 | 45 | appendSequence(); 46 | 47 | sequence = initSequence({ 48 | autoPlay: false 49 | }); 50 | 51 | sequence.ready = function() { 52 | done(); 53 | }; 54 | }); 55 | 56 | afterAll(function(done) { 57 | removeSequence(); 58 | SetTimeout(function() { 59 | resetSequence(sequence); 60 | done(); 61 | }, 500); 62 | }); 63 | 64 | it("should return a delay with the same value as options.autoPlayInterval when delay is true or options.autoPlayDelay is null", function() { 65 | 66 | expect(sequence.autoPlay.getDelay(true, null, 5000)).toEqual(5000); 67 | }); 68 | 69 | it("should return a delay with the same value as options.autoPlayDelay when delay is true or undefined", function() { 70 | 71 | expect(sequence.autoPlay.getDelay(true, 250, 5000)).toEqual(250); 72 | }); 73 | 74 | it("should return a delay of 0 when delay is false or undefined", function() { 75 | 76 | expect(sequence.autoPlay.getDelay(false, null, 5000)).toEqual(0); 77 | expect(sequence.autoPlay.getDelay(undefined, 250, 5000)).toEqual(0); 78 | expect(sequence.autoPlay.getDelay(undefined, null, 5000)).toEqual(0); 79 | }); 80 | 81 | it("should return a delay of 750 when a custom delay is defined, regardless of options.autoPlayInterval and options.autoPlayDelay", function() { 82 | 83 | expect(sequence.autoPlay.getDelay(750, null, 5000)).toEqual(750); 84 | expect(sequence.autoPlay.getDelay(750, 250, 5000)).toEqual(750); 85 | }); 86 | }); 87 | 88 | describe("autoPlay.stop()", function() { 89 | var sequence; 90 | 91 | // Set up Sequence and wait for it to be ready 92 | beforeAll(function(done) { 93 | 94 | appendSequence(); 95 | 96 | sequence = initSequence({ 97 | autoPlay: false 98 | }); 99 | 100 | sequence.ready = function() { 101 | done(); 102 | }; 103 | }); 104 | 105 | afterAll(function(done) { 106 | removeSequence(); 107 | SetTimeout(function() { 108 | resetSequence(sequence); 109 | done(); 110 | }, 500); 111 | }); 112 | 113 | it("should stop autoPlay if the autoPlay option is enabled and active", function() { 114 | 115 | sequence.options.autoPlay = true; 116 | sequence.isAutoPlaying = true; 117 | 118 | expect(sequence.autoPlay.stop()).toEqual(true); 119 | }); 120 | 121 | it("should not stop autoPlay if it doesn't need to (because the autoPlay option is disabled)", function() { 122 | 123 | sequence.options.autoPlay = false; 124 | 125 | expect(sequence.autoPlay.stop()).toEqual(false); 126 | }); 127 | 128 | it("should not stop autoPlay if it doesn't need to (because autoPlay isn't active anyway)", function() { 129 | 130 | sequence.isAutoPlaying = false; 131 | 132 | expect(sequence.autoPlay.stop()).toEqual(false); 133 | }); 134 | }); 135 | 136 | 137 | describe("autoPlay.unpause() / autoPlay.pause()", function() { 138 | var sequence; 139 | 140 | // Set up Sequence and wait for it to be ready 141 | beforeAll(function(done) { 142 | 143 | appendSequence(); 144 | 145 | sequence = initSequence({ 146 | autoPlay: false 147 | }); 148 | 149 | sequence.ready = function() { 150 | done(); 151 | }; 152 | }); 153 | 154 | afterAll(function(done) { 155 | removeSequence(); 156 | SetTimeout(function() { 157 | resetSequence(sequence); 158 | done(); 159 | }, 500); 160 | }); 161 | 162 | it("should unpause autoPlay if autoPlay was previously paused", function() { 163 | 164 | expect(sequence.autoPlay.unpause()).toEqual(false); 165 | 166 | sequence.isAutoPlayPaused = true; 167 | expect(sequence.autoPlay.unpause()).toEqual(true); 168 | }); 169 | 170 | it("should pause autoPlay if autoPlay was previously unpaused", function() { 171 | 172 | expect(sequence.autoPlay.pause()).toEqual(true); 173 | 174 | sequence.isAutoPlayPaused = true; 175 | expect(sequence.autoPlay.pause()).toEqual(false); 176 | }); 177 | }); 178 | -------------------------------------------------------------------------------- /tests/spec/canvas.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.canvas 3 | */ 4 | describe("canvas move()", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence({ 14 | animateCanvas: true 15 | }); 16 | 17 | sequence.ready = function() { 18 | done(); 19 | }; 20 | 21 | }); 22 | 23 | afterAll(function(done) { 24 | removeSequence(); 25 | SetTimeout(function() { 26 | resetSequence(sequence); 27 | done(); 28 | }, 500); 29 | }); 30 | 31 | it("should return false when the animateCanvas option is disabled and true when the canvas was successfully moved", function() { 32 | 33 | sequence.options.animateCanvas = false; 34 | expect(sequence.canvas.move(1, true)).toEqual(false); 35 | 36 | sequence.options.animateCanvas = true; 37 | expect(sequence.canvas.move(1, true)).toEqual(true); 38 | }); 39 | 40 | }); 41 | 42 | describe("canvas removeNoJsClass()", function() { 43 | 44 | var sequence; 45 | 46 | // Set up Sequence and wait for it to be ready 47 | beforeAll(function(done) { 48 | 49 | appendSequence(); 50 | 51 | sequence = initSequence(); 52 | 53 | sequence.ready = function() { 54 | done(); 55 | }; 56 | 57 | }); 58 | 59 | afterAll(function(done) { 60 | removeSequence(); 61 | SetTimeout(function() { 62 | resetSequence(sequence); 63 | done(); 64 | }, 500); 65 | }); 66 | 67 | it("removeNoJsClass() should remove the No-JS class from any step that was given it", function() { 68 | 69 | var step2 = document.getElementById("step2"); 70 | expect(step2.classList.length).toEqual(0); 71 | }); 72 | 73 | }); 74 | -------------------------------------------------------------------------------- /tests/spec/events.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.manageEvents 3 | */ 4 | describe("manageEvents()", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence(); 14 | 15 | sequence.ready = function() { 16 | done(); 17 | }; 18 | }); 19 | 20 | afterAll(function(done) { 21 | removeSequence(); 22 | SetTimeout(function() { 23 | resetSequence(sequence); 24 | done(); 25 | }, 500); 26 | }); 27 | 28 | it("should add a hashChange event and return the element and handler function", function(done) { 29 | 30 | var myEvent = sequence.manageEvents.add.hashChange()[0]; 31 | expect(myEvent.element).not.toEqual(undefined); 32 | expect(typeof myEvent.handler === "function").toEqual(true); 33 | done(); 34 | }); 35 | 36 | it("should add a button event and return the element and handler function", function(done) { 37 | 38 | // Use a nextButton, and add it with an empty function 39 | var button = sequence.ui.getElements("nextButton", true); 40 | var myEvent = sequence.manageEvents.add.button(button, "nav", function(){})[0]; 41 | 42 | expect(myEvent.element).not.toEqual(undefined); 43 | expect(typeof myEvent.handler === "function").toEqual(true); 44 | done(); 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /tests/spec/goto.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.goTo() 3 | */ 4 | describe("goTo()", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence({ 14 | autoPlay: false 15 | }); 16 | 17 | sequence.ready = function() { 18 | done(); 19 | }; 20 | }); 21 | 22 | afterAll(function(done) { 23 | removeSequence(); 24 | SetTimeout(function() { 25 | resetSequence(sequence); 26 | done(); 27 | }, 500); 28 | }); 29 | 30 | it("should prevent going to the same step already being viewed", function() { 31 | 32 | setTimeout(function() { 33 | sequence.goTo(1); 34 | expect(sequence.goTo(1)).toEqual(false); 35 | }, 100); 36 | 37 | }); 38 | 39 | it("should prevent going to a non-existent step", function() { 40 | 41 | expect(sequence.goTo(5)).toEqual(false); 42 | expect(sequence.goTo(-1)).toEqual(false); 43 | }); 44 | 45 | it("should prevent going to a step whilst another is animating and navigationSkip is disabled", function() { 46 | 47 | sequence.options.navigationSkip = false; 48 | sequence.isAnimating = true; 49 | 50 | expect(sequence.goTo(2)).toEqual(false); 51 | }); 52 | 53 | it("should prevent going to a step if the navigationSkipThreshold is active", function() { 54 | 55 | sequence.options.navigationSkip = true; 56 | sequence.navigationSkipThresholdActive = true; 57 | 58 | expect(sequence.goTo(2)).toEqual(false); 59 | }); 60 | }); 61 | -------------------------------------------------------------------------------- /tests/spec/hashtags.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.hashtags 3 | */ 4 | describe("hashtags.getStepHashTags()", function() { 5 | 6 | 7 | var sequence; 8 | 9 | // Set up Sequence and wait for it to be ready 10 | beforeAll(function(done) { 11 | 12 | appendSequence(); 13 | 14 | setTimeout(function() { 15 | sequence = initSequence({ 16 | autoPlay: false, 17 | hashTags: true, 18 | startingStepId: 2 19 | }); 20 | 21 | sequence.ready = function() { 22 | done(); 23 | }; 24 | }, 1000); 25 | }); 26 | 27 | afterAll(function(done) { 28 | removeSequence(); 29 | SetTimeout(function() { 30 | resetSequence(sequence); 31 | done(); 32 | }, 500); 33 | }); 34 | 35 | it("should return an array containing a hashtag name for each step, taken from the step's ID attribute", function() { 36 | 37 | expect(sequence.hashTags.getStepHashTags()).toEqual(jasmine.any(Array)); 38 | expect(sequence.hashTags.getStepHashTags()[0]).toEqual("step1"); 39 | }); 40 | 41 | it("should return an array containing a hashtag name for each step, taken from the step's data-seq-hashtag attribute", function() { 42 | 43 | sequence.options.hashDataAttribute = true; 44 | 45 | expect(sequence.hashTags.getStepHashTags()).toEqual(jasmine.any(Array)); 46 | expect(sequence.hashTags.getStepHashTags()[0]).toEqual("step1attr"); 47 | }); 48 | }); 49 | 50 | 51 | describe("hashtags.hasCorrespondingStep()", function() { 52 | 53 | 54 | var sequence; 55 | 56 | // Set up Sequence and wait for it to be ready 57 | beforeAll(function(done) { 58 | 59 | appendSequence(); 60 | 61 | setTimeout(function() { 62 | sequence = initSequence({ 63 | autoPlay: false, 64 | hashTags: true, 65 | startingStepId: 2 66 | }); 67 | 68 | sequence.ready = function() { 69 | done(); 70 | }; 71 | }, 1000); 72 | }); 73 | 74 | afterAll(function(done) { 75 | removeSequence(); 76 | SetTimeout(function() { 77 | resetSequence(sequence); 78 | done(); 79 | }, 500); 80 | }); 81 | 82 | it("should return the zero-based ID of the step that the hashtag corresponds to", function() { 83 | 84 | // The hashtag "step1" should match an element with the ID of step1 85 | expect(sequence.hashTags.hasCorrespondingStep("step1")).toEqual(0); 86 | }); 87 | 88 | it("should return -1 when the hashtag tested doesn't have a corresponding step", function() { 89 | 90 | expect(sequence.hashTags.hasCorrespondingStep("step4")).toEqual(-1); 91 | }); 92 | }); 93 | -------------------------------------------------------------------------------- /tests/spec/init.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Test initiation of Sequence 3 | */ 4 | describe("Sequence initiation", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence({ 14 | autoPlay: true 15 | }); 16 | 17 | sequence.ready = function() { 18 | done(); 19 | }; 20 | }); 21 | 22 | afterAll(function(done) { 23 | removeSequence(); 24 | SetTimeout(function() { 25 | resetSequence(sequence); 26 | done(); 27 | }, 500); 28 | }); 29 | 30 | it("should return the sequence object", function() { 31 | 32 | expect(sequence).toEqual(jasmine.any(Object)); 33 | }); 34 | 35 | it("should add data-seq-enabled to the element", function() { 36 | expect(parseInt(sequence.$container.dataset.seqEnabled)).toEqual(jasmine.any(Number)); 37 | }); 38 | 39 | it("should merge and override default options with developer options (change autoPlay from the default of false to true)", function() { 40 | 41 | expect(sequence.options.autoPlay).toEqual(true); 42 | }); 43 | 44 | it("should expose properties", function() { 45 | 46 | expect(sequence.options).toEqual(jasmine.any(Object)); 47 | expect(sequence.$container.id).toEqual("sequence"); 48 | expect(sequence.$screen.classList.contains("seq-screen")).toEqual(true); 49 | expect(sequence.$canvas.classList.contains("seq-canvas")).toEqual(true); 50 | expect(sequence.$steps).toEqual(jasmine.any(Array)); 51 | 52 | expect(sequence.isAnimating).not.toEqual(undefined); 53 | expect(sequence.isReady).not.toEqual(undefined); 54 | expect(sequence.noOfSteps).not.toEqual(undefined); 55 | expect(sequence.stepProperties).not.toEqual(undefined); 56 | expect(sequence.propertySupport).not.toEqual(undefined); 57 | expect(sequence.isFallbackMode).not.toEqual(undefined); 58 | expect(sequence.firstRun).not.toEqual(undefined); 59 | expect(sequence.currentStepId).not.toEqual(undefined); 60 | expect(sequence.isReady).not.toEqual(undefined); 61 | }); 62 | }); 63 | 64 | describe("Sequence multiple instantiations", function() { 65 | 66 | var sequence; 67 | 68 | // Set up Sequence and wait for it to be ready 69 | beforeAll(function(done) { 70 | 71 | appendSequence(); 72 | 73 | // Init Sequence on
74 | sequence = initSequence(); 75 | 76 | sequence.ready = function() { 77 | done(); 78 | }; 79 | }); 80 | 81 | afterAll(function(done) { 82 | removeSequence(); 83 | SetTimeout(function() { 84 | resetSequence(sequence); 85 | done(); 86 | }, 500); 87 | }); 88 | 89 | it("should prevent a second instantiation on the same element and instead return the object already attached to the element", function() { 90 | 91 | // Get the instanceId added the first time on the element 92 | var originalInstanceId = parseInt(sequence.$container.dataset.seqEnabled); 93 | expect(originalInstanceId).toEqual(jasmine.any(Number)); 94 | 95 | // Init Sequence AGAIN on
96 | sequence = initSequence({}, "sequence"); 97 | 98 | // Make sure the same instanceId is returned 99 | expect(parseInt(sequence.$container.dataset.seqEnabled)).toEqual(originalInstanceId); 100 | }); 101 | }); 102 | -------------------------------------------------------------------------------- /tests/spec/methods.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Tests for small methods 3 | */ 4 | describe("next()", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence({ 14 | autoPlay: false, 15 | cycle: true 16 | }); 17 | 18 | sequence.ready = function() { 19 | done(); 20 | }; 21 | }); 22 | 23 | afterAll(function(done) { 24 | removeSequence(); 25 | SetTimeout(function() { 26 | resetSequence(sequence); 27 | done(); 28 | }, 500); 29 | }); 30 | 31 | it("should go to the next step and return the ID of that step", function() { 32 | 33 | sequence.currentStepId = 1; 34 | expect(sequence.next()).toEqual(2); 35 | }); 36 | 37 | it("should go to the first step if the current step is the last and the cycle option is enabled", function() { 38 | 39 | sequence.currentStepId = 3; 40 | expect(sequence.next()).toEqual(1); 41 | }); 42 | 43 | it("should prevent next() if on the last step and the cycle option is disabled", function() { 44 | 45 | sequence.options.cycle = false; 46 | sequence.currentStepId = 3; 47 | expect(sequence.next()).toEqual(false); 48 | }); 49 | }); 50 | 51 | describe("prev()", function() { 52 | 53 | var sequence; 54 | 55 | // Set up Sequence and wait for it to be ready 56 | beforeAll(function(done) { 57 | 58 | appendSequence(); 59 | 60 | sequence = initSequence({ 61 | autoPlay: false, 62 | cycle: true, 63 | startingStepId: 3 64 | }); 65 | 66 | sequence.ready = function() { 67 | done(); 68 | }; 69 | }); 70 | 71 | afterAll(function(done) { 72 | removeSequence(); 73 | SetTimeout(function() { 74 | resetSequence(sequence); 75 | done(); 76 | }, 500); 77 | }); 78 | 79 | it("should go to the previous step and return the ID of that step", function() { 80 | 81 | sequence.currentStepId = 2; 82 | expect(sequence.prev()).toEqual(1); 83 | }); 84 | 85 | it("should go to the last step if the current step is the first and the cycle option is enabled", function() { 86 | 87 | sequence.currentStepId = 1; 88 | expect(sequence.prev()).toEqual(3); 89 | }); 90 | 91 | it("should prevent prev() if on the first step and the cycle option is disabled", function() { 92 | 93 | sequence.options.cycle = false; 94 | sequence.currentStepId = 1; 95 | expect(sequence.prev()).toEqual(false); 96 | }); 97 | }); 98 | 99 | describe("toggleAutoPlay()", function() { 100 | 101 | var sequence; 102 | 103 | // Set up Sequence and wait for it to be ready 104 | beforeAll(function(done) { 105 | 106 | appendSequence(); 107 | 108 | sequence = initSequence({ 109 | autoPlay: true 110 | }); 111 | 112 | sequence.ready = function() { 113 | done(); 114 | }; 115 | }); 116 | 117 | it("should stop auoPlay and return false if autoPlay was active", function() { 118 | 119 | sequence.isAutoPlaying = true; 120 | expect(sequence.toggleAutoPlay()).toEqual(false); 121 | }); 122 | 123 | it("should start auoPlay and return true if autoPlay was inactive", function() { 124 | 125 | sequence.stop(); 126 | expect(sequence.toggleAutoPlay()).toEqual(true); 127 | }); 128 | 129 | }); 130 | -------------------------------------------------------------------------------- /tests/spec/pagination.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.pagination 3 | */ 4 | describe("pagination", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence(); 14 | 15 | sequence.ready = function() { 16 | done(); 17 | }; 18 | }); 19 | 20 | afterAll(function(done) { 21 | removeSequence(); 22 | SetTimeout(function() { 23 | resetSequence(sequence); 24 | done(); 25 | }, 500); 26 | }); 27 | 28 | it("getLinks() should return an array containing 3 pagination links", function() { 29 | 30 | var $pagination = document.querySelectorAll(".seq-pagination")[0], 31 | paginationLinks = sequence.pagination.getLinks($pagination, "sequence"); 32 | 33 | expect(paginationLinks).toEqual(jasmine.any(Array)); 34 | expect(paginationLinks.length).toEqual(3); 35 | }); 36 | 37 | it("update() should return the current pagination link", function() { 38 | 39 | var currentPaginationLink = sequence.pagination.update(); 40 | 41 | expect(currentPaginationLink).toEqual(jasmine.any(Array)); 42 | expect(currentPaginationLink.length).toEqual(1); 43 | }); 44 | 45 | }); 46 | -------------------------------------------------------------------------------- /tests/spec/preloader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.preloader 3 | */ 4 | describe("preloader", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence(); 14 | 15 | sequence.ready = function() { 16 | done(); 17 | }; 18 | }); 19 | 20 | afterAll(function(done) { 21 | removeSequence(); 22 | SetTimeout(function() { 23 | resetSequence(sequence); 24 | done(); 25 | }, 500); 26 | }); 27 | 28 | it("init() should return true when the default preloader is used", function() { 29 | 30 | sequence.options.preloader = true; 31 | expect(sequence.preload.init()).toEqual(true); 32 | }); 33 | 34 | it("init() should return true when a custom preloader element is used", function() { 35 | 36 | sequence.options.preloader = ".seq-custom-preload-element"; 37 | expect(sequence.preload.init()).toEqual(true); 38 | }); 39 | 40 | it("init() should return false when the preloader isn't used", function() { 41 | 42 | sequence.options.preloader = false; 43 | expect(sequence.preload.init()).toEqual(false); 44 | }); 45 | 46 | it("should add the default preloader element to the document", function() { 47 | 48 | sequence.options.preloader = true; 49 | var defaultPreloader = document.querySelectorAll(".seq-preloader"); 50 | 51 | expect(defaultPreloader.length).toBeGreaterThan(0); 52 | }); 53 | 54 | it("should return false when the default preloader is not being used", function() { 55 | 56 | sequence.options.preloader = false; 57 | expect(sequence.preload.append()).toEqual(false); 58 | 59 | sequence.options.preloader = '#custom-preloader'; 60 | expect(sequence.preload.append()).toEqual(false); 61 | }); 62 | 63 | it("should return true when the default preloader is being used", function() { 64 | 65 | sequence.options.preloader = true; 66 | expect(sequence.preload.append()).toEqual(true); 67 | }); 68 | 69 | it("hideStepsUntilPreloaded() should return true when enabled", function() { 70 | 71 | sequence.options.hideStepsUntilPreloaded = true; 72 | expect(sequence.preload.toggleStepsVisibility()).toEqual(true); 73 | }); 74 | 75 | it("hideStepsUntilPreloaded() should return false when disabled", function() { 76 | 77 | sequence.options.hideStepsUntilPreloaded = false; 78 | expect(sequence.preload.toggleStepsVisibility()).toEqual(false); 79 | }); 80 | 81 | it("getImagesToPreload() should return an empty array if the images or src attributes aren't specificed in an array", function() { 82 | 83 | var imagesToPreload = "images/hi.jpg"; 84 | expect(sequence.preload.getImagesToPreload(imagesToPreload)).toEqual(jasmine.any(Array)); 85 | }); 86 | }); 87 | -------------------------------------------------------------------------------- /tests/spec/ui.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sequence.ui 3 | */ 4 | describe("ui.getElements()", function() { 5 | 6 | var sequence; 7 | 8 | // Set up Sequence and wait for it to be ready 9 | beforeAll(function(done) { 10 | 11 | appendSequence(); 12 | 13 | sequence = initSequence(); 14 | 15 | sequence.ready = function() { 16 | done(); 17 | }; 18 | }); 19 | 20 | afterAll(function(done) { 21 | removeSequence(); 22 | SetTimeout(function() { 23 | resetSequence(sequence); 24 | done(); 25 | }, 500); 26 | }); 27 | 28 | it("should get a default element (.seq-next)", function() { 29 | 30 | var nextButton = sequence.ui.getElements("nextButton", true); 31 | var expectedNextButton = document.querySelectorAll(".seq-next"); 32 | 33 | expect(nextButton).toEqual([expectedNextButton[0]]); 34 | 35 | done(); 36 | }); 37 | 38 | it("should get a custom element via a CSS Selector (.custom-next)", function() { 39 | 40 | var nextButton = sequence.ui.getElements("nextButton", ".custom-next"); 41 | var expectedNextButton = document.querySelectorAll(".custom-next"); 42 | 43 | expect(nextButton).toEqual([expectedNextButton[0]]); 44 | 45 | done(); 46 | }); 47 | 48 | it("should get a custom element via an ID Selector (#next)", function() { 49 | 50 | var nextButton = sequence.ui.getElements("nextButton", "#next"); 51 | var expectedNextButton = document.querySelectorAll("#next"); 52 | 53 | expect(nextButton).toEqual([expectedNextButton[0]]); 54 | }); 55 | }); 56 | -------------------------------------------------------------------------------- /tests/themes/amd/README.md: -------------------------------------------------------------------------------- 1 | # Test Theme 2 | 3 | > Used for Testing Sequence 4 | 5 | Test Theme is powered by [Sequence.js](http://sequencejs.com/) - The open-source CSS animation framework. 6 | 7 | Author: [Ian Lunn](https://ianlunn.co.uk/) 8 | Email: [hello@ianlunn.co.uk](mailto://hello@ianlunn.co.uk) 9 | GitHub: [@IanLunn](https://github.com/IanLunn) 10 | Twitter: [@IanLunn](https://twitter.com/IanLunn) 11 | 12 | License: [MIT](http://opensource.org/licenses/MIT) 13 | 14 | Copyright (c) 2014 Ian Lunn 15 | 16 | ## Getting Started 17 | 18 | 1. Move the `test-theme` directory to the same directory as the page you'd like the theme to appear on. 19 | 2. Add the stylesheet within the `` tags on your page below existing stylesheets, using the following: 20 | `` 21 | 3. From index.html in the downloaded theme, copy everything inside the tags, then paste into the page you'd like the theme to appear on. 22 | 4. Add a reference to the Sequence library, its third-party dependencies, and the theme options just before the closing `` element on your page: 23 | ```javascript 24 | 25 | 26 | 27 | 28 | ``` 29 | 5. From index.html in the downloaded theme, copy everything inside the tags, then paste into the page you'd like the theme to appear on. 30 | 6. Save your file and upload newly added/modified files to your web server. You're done! 31 | 32 | A theme's options can be changed in `scripts/sequence-theme.test-theme.js`. See Options in the [documentation](http://www.sequencejs.com/developers/documentation/). 33 | 34 | ## Support 35 | 36 | For theme support, please use the following contact details: 37 | 38 | Email: [info@sequencejs.com](mailto://info@sequencejs.com) 39 | Website: [http://sequencejs.com/](http://sequencejs.com/) 40 | 41 | ## Sequence.js License 42 | 43 | The [Sequence.js](http://sequencejs.com/) library is made available under the following open-source [MIT license](http://opensource.org/licenses/MIT): 44 | 45 | > Copyright (c) 2014 Ian Lunn Design Limited 46 | 47 | > 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. 48 | 49 | > 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. 50 | 51 | Sequence themes are made available under their own licenses. Please respect them accordingly. 52 | 53 | ## Release History 54 | *Nothing yet* -------------------------------------------------------------------------------- /tests/themes/amd/css/sequence-theme.test-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Theme Name: Test Theme 3 | * Version: 0.1.0 4 | * Theme URL: 5 | * 6 | * Used for Testing Sequence 7 | * 8 | * Powered by Sequence.js - The open-source CSS animation framework. 9 | * 10 | * Author: Ian Lunn 11 | * Author URL: https://ianlunn.co.uk/ 12 | * 13 | * Test Theme Sequence Theme Copyright (c) Ian Lunn 2014 14 | * License: MIT http://opensource.org/licenses/MIT 15 | * 16 | * Sequence.js and its dependencies are copyright (c) Ian Lunn 2014 unless otherwise stated. 17 | */ 18 | 19 | .seq-current { 20 | border: red solid 1px; 21 | } 22 | 23 | #sequence { 24 | position: relative; 25 | height: 300px; 26 | width: 100%; 27 | max-width: 500px; 28 | margin: 0 auto; 29 | padding: 0; 30 | border: black solid 2px; 31 | font-family: sans-serif; 32 | } 33 | 34 | #sequence.seq-fallback { 35 | border: blue solid 2px; 36 | } 37 | 38 | #sequence .seq-screen, 39 | #sequence .seq-canvas, 40 | #sequence .seq-canvas > * { 41 | position: absolute; 42 | height: 100%; 43 | width: 100%; 44 | margin: 0; 45 | padding: 0; 46 | list-style: none; 47 | } 48 | 49 | #sequence .box { 50 | position: absolute; 51 | height: 100px; 52 | width: 100px; 53 | border: red solid 1px; 54 | left: 100%; 55 | -webkit-transition-duration: 4s; 56 | transition-duration: 4s; 57 | /*transition-timing-function: linear;*/ 58 | } 59 | 60 | #sequence #step3 .box { 61 | /*transition-delay: 1s;*/ 62 | } 63 | 64 | #sequence #step3 .boxb { 65 | -webkit-transition-duration: 3s; 66 | transition-duration: 3s; 67 | /*transition-delay: 1s;*/ 68 | } 69 | 70 | #sequence .boxb { 71 | top: 200px; 72 | } 73 | 74 | #sequence .seq-in .box { 75 | left: 50%; 76 | margin-left: -50px; 77 | } 78 | 79 | #sequence .seq-out .box { 80 | left: 0; 81 | margin-left: -100px; 82 | } 83 | -------------------------------------------------------------------------------- /tests/themes/amd/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Test Theme - Sequence.js Theme 8 | 9 | 10 | 11 | 12 |
13 |
14 |
    15 |
  • 16 |
    Box 1
    17 |
    Box 1b
    18 |
  • 19 |
  • 20 |
    Box 2
    21 |
    Box 2b
    22 |
  • 23 |
  • 24 |
    Box 3
    25 |
    Box 3b
    26 |
  • 27 |
28 |
29 |
30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /tests/themes/amd/scripts/app.js: -------------------------------------------------------------------------------- 1 | require.config({ 2 | baseUrl: '../../../scripts', 3 | paths: { 4 | imagesLoaded: 'imagesloaded.pkgd.min', 5 | Hammer: 'hammer.min' 6 | } 7 | }); 8 | 9 | require(["sequence"], function(sequence) { 10 | 11 | var element = document.getElementById("sequence"); 12 | 13 | var options = { 14 | autoPlay: true 15 | }; 16 | 17 | var mySequence = sequence(element, options); 18 | }); 19 | -------------------------------------------------------------------------------- /tests/themes/amd/scripts/require.js: -------------------------------------------------------------------------------- 1 | /* 2 | RequireJS 2.1.16 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved. 3 | Available via the MIT or new BSD license. 4 | see: http://github.com/jrburke/requirejs for details 5 | */ 6 | var requirejs,require,define; 7 | (function(ba){function G(b){return"[object Function]"===K.call(b)}function H(b){return"[object Array]"===K.call(b)}function v(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&& 19 | (f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a= 20 | this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f); 21 | if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval", 22 | "fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b, 23 | a);this.check()}));this.errback?q(a,"error",u(this,this.errback)):this.events.error&&q(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b, 24 | registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a); 25 | b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n, 26 | q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d, 27 | e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==e&&(!("."===k||".."===k)||1e.attachEvent.toString().indexOf("[native code"))&& 34 | !Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"), 35 | s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"=== 36 | b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this); 37 | -------------------------------------------------------------------------------- /tests/themes/multiple-test/css/sequence-theme.multiple-test.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Theme Name: Multiple Test 3 | * Version: 0.1.0 4 | * Theme URL: http://sequencejs.com/themes/multiple-test/ 5 | * 6 | * A theme to test multiple instances 7 | * 8 | * Powered by Sequence.js - The open-source CSS animation framework. 9 | * 10 | * Author: Ian Lunn 11 | * Author URL: https://ianlunn.co.uk/ 12 | * 13 | * Multiple Test Sequence Theme Copyright (c) Ian Lunn 2014 14 | * License: MIT http://opensource.org/licenses/MIT 15 | * 16 | * Sequence.js and its dependencies are copyright (c) Ian Lunn 2014 unless otherwise stated. 17 | */ 18 | 19 | .seq-pagination .seq-current { 20 | border: red solid 1px; 21 | } 22 | 23 | .seq-pause.seq-paused { 24 | border: red solid 1px; 25 | } 26 | 27 | .sequence { 28 | position: relative; 29 | height: 400px; 30 | width: 100%; 31 | max-width: 600px; 32 | overflow: hidden; 33 | margin: 0 auto; 34 | padding: 0; 35 | border: black solid 2px; 36 | font-family: sans-serif; 37 | } 38 | 39 | .sequence .seq-screen, 40 | .sequence .seq-canvas, 41 | .sequence .seq-canvas > * { 42 | margin: 0; 43 | padding: 0; 44 | list-style: none; 45 | } 46 | 47 | .sequence .seq-canvas { 48 | position: absolute; 49 | height: 100%; 50 | width: 100%; 51 | white-space: nowrap; 52 | } 53 | 54 | .sequence .seq-canvas > * { 55 | display: inline-block; 56 | vertical-align: top; 57 | width: 100%; 58 | height: 100%; 59 | white-space: normal; 60 | text-align: center; 61 | } 62 | 63 | .sequence h2, 64 | .sequence h3 { 65 | display: block; 66 | opacity: 0; 67 | -webkit-transition-duration: 0.5s; 68 | transition-duration: 0.5s; 69 | } 70 | 71 | .sequence h2 { 72 | -webkit-transform: translate(0, -20px); 73 | -ms-transform: translate(0, -20px); 74 | transform: translate(0, -20px); 75 | } 76 | 77 | .sequence h3 { 78 | -webkit-transform: translate(0, 20px); 79 | -ms-transform: translate(0, 20px); 80 | transform: translate(0, 20px); 81 | } 82 | 83 | .sequence .seq-in h2, 84 | .sequence .seq-in h3 { 85 | opacity: 1; 86 | -webkit-transform: translate(0, 0); 87 | -ms-transform: translate(0, 0); 88 | transform: translate(0, 0); 89 | } 90 | 91 | .sequence .seq-out h2, 92 | .sequence .seq-out h3 { 93 | opacity: 1; 94 | -webkit-transform: translate(0, 0); 95 | -ms-transform: translate(0, 0); 96 | transform: translate(0, 0); 97 | } 98 | -------------------------------------------------------------------------------- /tests/themes/multiple-test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Multiple Test - Sequence.js Theme 8 | 9 | 10 | 11 | 12 |

Multiple instance testing

13 | 14 |

These instances test to make sure:

15 |
    16 |
  • multiple sliders work together
  • 17 |
  • UI elements within a slider should only control that slider
  • 18 |
  • UI elements outside of sliders, should control all sliders
  • 19 |
  • Multiple UI elements can belong to one slider. (Slider 1 has elements on each of its slides)
  • 20 |
  • Multiple pagination in slider 1 should correctly update (a red border around the revelant link in each slide)
  • 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 | 32 |
33 | 34 |
35 | 36 |
37 |
    38 |
  • 39 |

    Powered by Sequence.js

    40 |

    The open-source CSS animation framework

    41 | 42 | 43 | 44 | 45 | 46 |
    47 | 48 | 49 | 50 |
    51 |
  • 52 |
  • 53 |

    Create Unique Animated Themes

    54 |

    For sliders, presentations, banners, accordions, and other step-based applications

    55 | 56 | 57 | 58 | 59 | 60 |
    61 | 62 | 63 | 64 |
    65 |
  • 66 |
  • 67 |

    No Restrictions, Endless Possibilities

    68 |

    Use the HTML and CSS syntax you're used to. No JavaScript knowledge required.

    69 | 70 | 71 | 72 | 73 | 74 |
    75 | 76 | 77 | 78 |
    79 |
  • 80 |
81 |
82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 | 92 | 93 | 94 |
95 | 96 |
97 |
    98 |
  • 99 |

    Powered by Sequence.js

    100 |

    The open-source CSS animation framework

    101 |
  • 102 |
  • 103 |

    Create Unique Animated Themes

    104 |

    For sliders, presentations, banners, accordions, and other step-based applications

    105 |
  • 106 |
  • 107 |

    No Restrictions, Endless Possibilities

    108 |

    Use the HTML and CSS syntax you're used to. No JavaScript knowledge required.

    109 |
  • 110 |
111 |
112 |
113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /tests/themes/multiple-test/scripts/sequence-theme.multiple-test.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Theme Name: Multiple Test 3 | * Version: 0.1.0 4 | * Theme URL: http://sequencejs.com/themes/multiple-test/ 5 | * 6 | * A theme to test multiple instances 7 | * 8 | * Powered by Sequence.js - The open-source CSS animation framework. 9 | * 10 | * Author: Ian Lunn 11 | * Author URL: https://ianlunn.co.uk/ 12 | * 13 | * Multiple Test Sequence Theme Copyright (c) Ian Lunn 2014 14 | * License: MIT http://opensource.org/licenses/MIT 15 | * 16 | * Sequence.js and its dependencies are copyright (c) Ian Lunn 2014 unless otherwise stated. 17 | */ 18 | 19 | // Get the Sequence elements 20 | var sequenceElement1 = document.getElementById("sequence1"); 21 | var sequenceElement2 = document.getElementById("sequence2"); 22 | 23 | // Place your Sequence options here to override defaults 24 | // See: https://github.com/IanLunn/Sequence/blob/v2/DOCUMENTATION.md 25 | var options = { 26 | keyNavigation: true, 27 | autoPlay: false 28 | } 29 | 30 | // Launch Sequence on the elements, and with the options we specified above 31 | var mySequence1 = sequence(sequenceElement1, options); 32 | var mySequence2 = sequence(sequenceElement2, options); 33 | 34 | function updateButtons(buttons, text) { 35 | 36 | for (var i = 0; i < buttons.length; i++) { 37 | var button = buttons[i]; 38 | button.innerHTML = text; 39 | } 40 | } 41 | 42 | mySequence1.stopped = function() { 43 | updateButtons(mySequence1.$autoPlay, "Start"); 44 | } 45 | 46 | mySequence1.started = function() { 47 | updateButtons(mySequence1.$autoPlay, "Stop"); 48 | } 49 | 50 | mySequence2.stopped = function() { 51 | updateButtons(mySequence2.$autoPlay, "Start"); 52 | } 53 | 54 | mySequence2.started = function() { 55 | updateButtons(mySequence2.$autoPlay, "Stop"); 56 | } 57 | -------------------------------------------------------------------------------- /tests/themes/test-theme/README.md: -------------------------------------------------------------------------------- 1 | # Test Theme 2 | 3 | > Used for Testing Sequence 4 | 5 | Test Theme is powered by [Sequence.js](http://sequencejs.com/) - The open-source CSS animation framework. 6 | 7 | Author: [Ian Lunn](https://ianlunn.co.uk/) 8 | Email: [hello@ianlunn.co.uk](mailto://hello@ianlunn.co.uk) 9 | GitHub: [@IanLunn](https://github.com/IanLunn) 10 | Twitter: [@IanLunn](https://twitter.com/IanLunn) 11 | 12 | License: [MIT](http://opensource.org/licenses/MIT) 13 | 14 | Copyright (c) 2014 Ian Lunn 15 | 16 | ## Getting Started 17 | 18 | 1. Move the `test-theme` directory to the same directory as the page you'd like the theme to appear on. 19 | 2. Add the stylesheet within the `` tags on your page below existing stylesheets, using the following: 20 | `` 21 | 3. From index.html in the downloaded theme, copy everything inside the tags, then paste into the page you'd like the theme to appear on. 22 | 4. Add a reference to the Sequence library, its third-party dependencies, and the theme options just before the closing `` element on your page: 23 | ```javascript 24 | 25 | 26 | 27 | 28 | ``` 29 | 5. From index.html in the downloaded theme, copy everything inside the tags, then paste into the page you'd like the theme to appear on. 30 | 6. Save your file and upload newly added/modified files to your web server. You're done! 31 | 32 | A theme's options can be changed in `scripts/sequence-theme.test-theme.js`. See Options in the [documentation](http://www.sequencejs.com/developers/documentation/). 33 | 34 | ## Support 35 | 36 | For theme support, please use the following contact details: 37 | 38 | Email: [info@sequencejs.com](mailto://info@sequencejs.com) 39 | Website: [http://sequencejs.com/](http://sequencejs.com/) 40 | 41 | ## Sequence.js License 42 | 43 | The [Sequence.js](http://sequencejs.com/) library is made available under the following open-source [MIT license](http://opensource.org/licenses/MIT): 44 | 45 | > Copyright (c) 2014 Ian Lunn Design Limited 46 | 47 | > 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. 48 | 49 | > 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. 50 | 51 | Sequence themes are made available under their own licenses. Please respect them accordingly. 52 | 53 | ## Release History 54 | *Nothing yet* -------------------------------------------------------------------------------- /tests/themes/test-theme/css/sequence-theme.test-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Theme Name: Test Theme 3 | * Version: 0.1.0 4 | * Theme URL: 5 | * 6 | * Used for Testing Sequence 7 | * 8 | * Powered by Sequence.js - The open-source CSS animation framework. 9 | * 10 | * Author: Ian Lunn 11 | * Author URL: https://ianlunn.co.uk/ 12 | * 13 | * Test Theme Sequence Theme Copyright (c) Ian Lunn 2014 14 | * License: MIT http://opensource.org/licenses/MIT 15 | * 16 | * Sequence.js and its dependencies are copyright (c) Ian Lunn 2014 unless otherwise stated. 17 | */ 18 | 19 | .seq-current { 20 | border: red solid 1px; 21 | } 22 | 23 | #sequence { 24 | position: relative; 25 | height: 300px; 26 | width: 100%; 27 | max-width: 500px; 28 | margin: 0 auto; 29 | padding: 0; 30 | border: black solid 2px; 31 | font-family: sans-serif; 32 | } 33 | 34 | #sequence.seq-fallback { 35 | border: blue solid 2px; 36 | } 37 | 38 | #sequence .seq-screen, 39 | #sequence .seq-canvas, 40 | #sequence .seq-canvas > * { 41 | position: absolute; 42 | height: 100%; 43 | width: 100%; 44 | margin: 0; 45 | padding: 0; 46 | list-style: none; 47 | } 48 | 49 | #sequence .box { 50 | position: absolute; 51 | height: 100px; 52 | width: 100px; 53 | border: red solid 1px; 54 | left: 100%; 55 | transition-duration: .5s; 56 | /*transition-delay: 1s;*/ 57 | transition-timing-function: linear; 58 | } 59 | 60 | #sequence .boxb { 61 | top: 100px; 62 | } 63 | 64 | #sequence .boxb { 65 | /*transition-delay: 0s;*/ 66 | } 67 | 68 | #sequence .seq-in .box { 69 | left: 50%; 70 | margin-left: -50px; 71 | } 72 | 73 | #sequence .seq-out .box { 74 | left: 0; 75 | margin-left: -100px; 76 | } 77 | -------------------------------------------------------------------------------- /tests/themes/test-theme/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/tests/themes/test-theme/image1.png -------------------------------------------------------------------------------- /tests/themes/test-theme/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IanLunn/Sequence/c5d905f5f255eb2cc4ff6f3863470b034b2c1ee8/tests/themes/test-theme/image2.png -------------------------------------------------------------------------------- /tests/themes/test-theme/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Test Theme - Sequence.js Theme 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 |
28 |
29 |
    30 |
  • 31 |
    Box 1
    32 |
    Box 1b
    33 |
  • 34 |
  • 35 |
    Box 2
    36 | 37 |
  • 38 |
  • 39 |
    Box 3
    40 | 41 |
  • 42 |
  • 43 |
    Box 4
    44 | 45 |
  • 46 |
  • 47 |
    Box 5
    48 | 49 |
  • 50 |
51 |
52 |
53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /tests/themes/test-theme/scripts/sequence-theme.test-theme.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Theme Name: Test Theme 3 | * Version: 0.1.0 4 | * Theme URL: 5 | * 6 | * Used for Testing Sequence 7 | * 8 | * Powered by Sequence.js - The open-source CSS animation framework. 9 | * 10 | * Author: Ian Lunn 11 | * Author URL: https://ianlunn.co.uk/ 12 | * 13 | * Test Theme Sequence Theme Copyright (c) Ian Lunn 2014 14 | * License: MIT http://opensource.org/licenses/MIT 15 | * 16 | * Sequence.js and its dependencies are copyright (c) Ian Lunn 2014 unless otherwise stated. 17 | */ 18 | 19 | // Get the Sequence element 20 | var sequenceElement = document.getElementById("sequence"); 21 | 22 | // Place your Sequence options here to override defaults 23 | // See: https://github.com/IanLunn/Sequence/blob/v2/DOCUMENTATION.md 24 | var options = { 25 | // animateCanvas: true, 26 | // autoPlay: true, 27 | // autoPlayDirection: -1, 28 | // autoPlayInterval: 2000, 29 | // autoPlayDelay: 1000, 30 | phaseThreshold: false, 31 | ignorePhaseThresholdWhenSkipped: true, 32 | preloader: true, 33 | keyNavigation: true, 34 | // cycle: false, 35 | // hashTags: true, 36 | startingStepId: 2, 37 | // startingStepAnimatesIn: true, 38 | reverseWhenNavigatingBackwards: true, 39 | // navigationSkip: false, 40 | // ignorePhaseThresholdWhenSkipped: false, 41 | fadeStepWhenSkipped: true, 42 | preventReverseSkipping: false 43 | } 44 | 45 | var mySequence, 46 | initButton = document.getElementById("init"), 47 | destroyButton = document.getElementById("destroy"); 48 | 49 | // Launch Sequence on the element, and with the options we specified above 50 | function init() { 51 | mySequence = sequence(sequenceElement, options); 52 | 53 | mySequence.started = function(sequence) { 54 | sequence.$autoPlay[0].innerHTML = "Stop Autoplay"; 55 | }; 56 | 57 | mySequence.stopped = function(sequence) { 58 | sequence.$autoPlay[0].innerHTML = "Start Autoplay"; 59 | }; 60 | } 61 | 62 | init(); 63 | 64 | mySequence.utils.addEvent(initButton, "click", function() { 65 | init(); 66 | }); 67 | 68 | mySequence.utils.addEvent(destroyButton, "click", function() { 69 | if (mySequence !== undefined) { 70 | mySequence.destroy(); 71 | mySequence = undefined; 72 | } 73 | }); 74 | 75 | mySequence.currentPhaseStarted = function(id) { 76 | console.log("cur started", id); 77 | } 78 | 79 | mySequence.currentPhaseEnded = function(id) { 80 | console.log("cur ended", id); 81 | } 82 | 83 | mySequence.nextPhaseStarted = function(id) { 84 | console.log("next started", id); 85 | } 86 | 87 | mySequence.nextPhaseEnded = function(id) { 88 | console.log("next ended", id); 89 | } 90 | 91 | mySequence.animationStarted = function(id) { 92 | console.log("---started---", id); 93 | }; 94 | 95 | mySequence.animationEnded = function(id) { 96 | console.log("---ended---", id); 97 | }; 98 | --------------------------------------------------------------------------------