mirror of
https://github.com/webslides/WebSlides.git
synced 2025-09-21 02:11:33 +02:00
Compare commits
23 Commits
1.4.1
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
|
7b69c880e5 | ||
|
9ec4fae96b | ||
|
13cfd525e8 | ||
|
fb5208218f | ||
|
87db22523c | ||
|
d9c2cb44f8 | ||
|
9a2dfe0e52 | ||
|
26716804cb | ||
|
ea0f2cb833 | ||
|
5dd1b9c649 | ||
|
ed93fd8df9 | ||
|
43105bd180 | ||
|
bee1e87c7f | ||
|
e9fa8d2e3a | ||
|
13fe06daa8 | ||
|
eef9d75706 | ||
|
b1e03202e3 | ||
|
3b7203c9ab | ||
|
8912d05d70 | ||
|
8b19bd28f6 | ||
|
71f2fd52b9 | ||
|
fe58531e74 | ||
|
71b08f8d3b |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -17,3 +17,4 @@ coverage
|
|||||||
.Trashes
|
.Trashes
|
||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
webslides.zip
|
||||||
|
1
.npmignore
Normal file
1
.npmignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.babelrc
|
@@ -1,4 +1,3 @@
|
|||||||
language: node_js
|
language: node_js
|
||||||
node_js:
|
node_js:
|
||||||
- "6"
|
- "10"
|
||||||
- "7"
|
|
||||||
|
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,3 +1,14 @@
|
|||||||
|
# 1.5.0 (2017-09-16)
|
||||||
|
|
||||||
|
- [[#96]((https://github.com/webslides/webslides/issues/96))] Using Shift Space now allows to go to previous slide.
|
||||||
|
- [[#97]((https://github.com/webslides/webslides/issues/97))] Fixing CTRL/CMD + F not allowing to search.
|
||||||
|
- Dependencies updated.
|
||||||
|
|
||||||
|
# 1.4.2 (2017-09-12)
|
||||||
|
|
||||||
|
- Fixed `.toc` class. (Regression from Sass)
|
||||||
|
- Fixed baseline being incorrectly included.
|
||||||
|
|
||||||
# 1.4.1 (2017-08-18)
|
# 1.4.1 (2017-08-18)
|
||||||
|
|
||||||
- Fixed longform alignments. (Regression from Sass)
|
- Fixed longform alignments. (Regression from Sass)
|
||||||
|
@@ -89,11 +89,10 @@ You can add:
|
|||||||
- [Animate on scroll](http://michalsnik.github.io/aos/) (Useful for longform articles)
|
- [Animate on scroll](http://michalsnik.github.io/aos/) (Useful for longform articles)
|
||||||
- [pt](http://williamngan.github.io/pt/)
|
- [pt](http://williamngan.github.io/pt/)
|
||||||
|
|
||||||
|
|
||||||
### Dive In!
|
### Dive In!
|
||||||
|
|
||||||
- Do not miss [our demos](https://webslides.tv/).
|
- Do not miss [our demos](https://webslides.tv/).
|
||||||
- Want to get techie? Read [our wiki](wiki):
|
- Want to get techie? Read [our wiki](https://github.com/webslides/WebSlides/wiki):
|
||||||
- [FAQ](https://github.com/webslides/WebSlides/wiki)
|
- [FAQ](https://github.com/webslides/WebSlides/wiki)
|
||||||
- [Core API](https://github.com/webslides/WebSlides/wiki/Core-API)
|
- [Core API](https://github.com/webslides/WebSlides/wiki/Core-API)
|
||||||
- [Plugin Docs](https://github.com/webslides/WebSlides/wiki/Plugin-docs)
|
- [Plugin Docs](https://github.com/webslides/WebSlides/wiki/Plugin-docs)
|
||||||
|
10
index.html
10
index.html
@@ -294,11 +294,11 @@
|
|||||||
</svg>
|
</svg>
|
||||||
<strong>Guides</strong>
|
<strong>Guides</strong>
|
||||||
</h4>
|
</h4>
|
||||||
<p>If you need help, here's just three tutorials. Just a basic knowledge of HTML is required:</p>
|
<p>If you need help, here's just some tutorials. Just a basic knowledge of HTML is required:</p>
|
||||||
<ul class="description">
|
<ul class="description">
|
||||||
<li><a href="demos/components.html" title="WebSlides Components">WebSlides Components</a>.</li>
|
<li><a href="/demos/components.html" title="WebSlides Components">Components</a> · <a href="/demos/classes.html" title="WebSlides Classes">Classes</a>.</li>
|
||||||
<li><a href="demos/classes.html" title="WebSlides Classes">WebSlides Classes</a>.</li>
|
<li><a href="https://codepen.io/webslides" title="WebSlides on Codepen">WebSlides on Codepen</a>.</li>
|
||||||
<li><a href="demos/media.html" title="WebSlides Media">WebSlides Media: images, videos...</a></li>
|
<li><a href="/demos/media.html" title="WebSlides Media">WebSlides Media: images, videos...</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
@@ -357,7 +357,7 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</h2>
|
</h2>
|
||||||
<p>People share content that makes them feel inspired. WebSlides is a very effective way to engage young audiences, customers, and teams.</p>
|
<p>People share content that makes them feel inspired. WebSlides is a very effective way to engage young audiences, customers, and teams.</p>
|
||||||
<p>Best,<br> <a href="https://twitter.com/jlantunez">@jlantunez</a>, <a href="https://twitter.com/belelros">@belelros</a>, and <a href="https://twitter.com/luissacristan">@luissacristan</a>.</p>
|
<p>Best,<br> <a href="https://twitter.com/jlantunez">@jlantunez</a>, <a href="https://twitter.com/belelros">@belelros</a>, and <a href="https://twitter.com/luissacristan">@luissacristan</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- .end .content-right -->
|
<!-- .end .content-right -->
|
||||||
|
15724
package-lock.json
generated
15724
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
66
package.json
66
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "webslides",
|
"name": "webslides",
|
||||||
"version": "1.4.1",
|
"version": "1.5.0",
|
||||||
"description": "Making HTML presentations easy",
|
"description": "Making HTML presentations easy",
|
||||||
"main": "static/js/webslides.js",
|
"main": "static/js/webslides.js",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Antonio Laguna",
|
"name": "Antonio Laguna",
|
||||||
"email": "a.laguna@funcion13.com"
|
"email": "anlagmat@gmail.com"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -28,32 +28,33 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/webslides/webslides#readme",
|
"homepage": "https://github.com/webslides/webslides#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "^7.1.2",
|
"archiver": "^2.0.3",
|
||||||
"babel-cli": "^6.24.1",
|
"autoprefixer": "^7.1.4",
|
||||||
"babel-core": "^6.25.0",
|
"babel-cli": "^6.26.0",
|
||||||
"babel-jest": "^20.0.3",
|
"babel-core": "^6.26.0",
|
||||||
"babel-loader": "^7.1.1",
|
"babel-jest": "^22.0.4",
|
||||||
|
"babel-loader": "^7.1.2",
|
||||||
"babel-preset-env": "^1.6.0",
|
"babel-preset-env": "^1.6.0",
|
||||||
"babel-preset-es2015": "^6.24.1",
|
"babel-preset-es2015": "^6.24.1",
|
||||||
"codecov": "^2.3.0",
|
"codecov": "^3.0.0",
|
||||||
"css-loader": "^0.28.4",
|
"css-loader": "^0.28.7",
|
||||||
"eslint": "^4.4.1",
|
"eslint": "^4.7.0",
|
||||||
"eslint-loader": "^1.9.0",
|
"eslint-loader": "^1.9.0",
|
||||||
"eslint-plugin-jest": "^20.0.3",
|
"eslint-plugin-jest": "^21.1.0",
|
||||||
"extract-text-webpack-plugin": "^3.0.0",
|
"extract-text-webpack-plugin": "^3.0.0",
|
||||||
"jest": "^20.0.4",
|
"jest": "^22.0.4",
|
||||||
"node-sass": "^4.5.3",
|
"node-sass": "4.13.1",
|
||||||
"npm-run-all": "^4.0.2",
|
"npm-run-all": "^4.1.1",
|
||||||
"postcss-loader": "^2.0.6",
|
"postcss-loader": "^2.0.6",
|
||||||
"pre-commit": "^1.2.2",
|
"pre-commit": "^1.2.2",
|
||||||
"rimraf": "^2.6.1",
|
"rimraf": "^2.6.2",
|
||||||
"sass-lint": "^1.10.2",
|
"sass-lint": "^1.11.1",
|
||||||
"sass-loader": "^6.0.6",
|
"sass-loader": "^6.0.6",
|
||||||
"simulant": "^0.2.2",
|
"simulant": "^0.2.2",
|
||||||
"smart-banner-webpack-plugin": "^3.0.1",
|
"smart-banner-webpack-plugin": "^3.0.1",
|
||||||
"style-loader": "^0.18.2",
|
"style-loader": "^0.19.1",
|
||||||
"webpack": "^3.5.4",
|
"webpack": "^3.6.0",
|
||||||
"webpack-dev-server": "^2.7.1"
|
"webpack-dev-server": "^2.8.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prebuild": "rimraf static/js/webslide*",
|
"prebuild": "rimraf static/js/webslide*",
|
||||||
@@ -65,22 +66,27 @@
|
|||||||
"lint:tests": "eslint ./test --cache --ignore-pattern .gitignore",
|
"lint:tests": "eslint ./test --cache --ignore-pattern .gitignore",
|
||||||
"lint:css": "sass-lint -v -f stylish",
|
"lint:css": "sass-lint -v -f stylish",
|
||||||
"dev": "webpack-dev-server",
|
"dev": "webpack-dev-server",
|
||||||
"test": "jest && codecov"
|
"test": "jest && codecov",
|
||||||
|
"preversion": "npm jest",
|
||||||
|
"postversion": "npm run build && git add -A static && node ./zip-release.js && git push && git push --tags"
|
||||||
|
},
|
||||||
|
"release": {
|
||||||
|
"files": [
|
||||||
|
"demos/**/**",
|
||||||
|
"static/**/**",
|
||||||
|
"*.html",
|
||||||
|
"LICENSE",
|
||||||
|
"README.md"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"collectCoverage": true
|
"collectCoverage": true,
|
||||||
|
"testURL": "http://localhost/"
|
||||||
},
|
},
|
||||||
"pre-commit": [
|
"pre-commit": [
|
||||||
"lint"
|
"lint"
|
||||||
],
|
],
|
||||||
"babel": {
|
"dependencies": {
|
||||||
"presets": [
|
"request": "^2.83.0"
|
||||||
[
|
|
||||||
"es2015",
|
|
||||||
{
|
|
||||||
"modules": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,8 +8,9 @@ const CLASSES = {
|
|||||||
const Events = {
|
const Events = {
|
||||||
ENTER: 'dom:enter',
|
ENTER: 'dom:enter',
|
||||||
LEAVE: 'dom:leave',
|
LEAVE: 'dom:leave',
|
||||||
|
DISABLE: 'slide:disable',
|
||||||
ENABLE: 'slide:enable',
|
ENABLE: 'slide:enable',
|
||||||
DISABLE: 'slide:disable'
|
SHOW: 'slide:show'
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,7 +37,7 @@ class Slide {
|
|||||||
*/
|
*/
|
||||||
this.i = i;
|
this.i = i;
|
||||||
|
|
||||||
this.el.id = `section-${(i + 1)}`;
|
this.el.id = this.el.id ? this.el.id : `section-${(i + 1)}`;
|
||||||
this.el.classList.add(CLASSES.SLIDE);
|
this.el.classList.add(CLASSES.SLIDE);
|
||||||
|
|
||||||
// Hide slides by default
|
// Hide slides by default
|
||||||
@@ -57,6 +58,7 @@ class Slide {
|
|||||||
show() {
|
show() {
|
||||||
DOM.show(this.el);
|
DOM.show(this.el);
|
||||||
this.el.classList.add(CLASSES.CURRENT);
|
this.el.classList.add(CLASSES.CURRENT);
|
||||||
|
this.fire_(Events.SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -35,9 +35,15 @@ export default class Keyboard {
|
|||||||
|
|
||||||
switch (event.which) {
|
switch (event.which) {
|
||||||
case Keys.AV_PAGE:
|
case Keys.AV_PAGE:
|
||||||
case Keys.SPACE:
|
|
||||||
method = this.ws_.goNext;
|
method = this.ws_.goNext;
|
||||||
break;
|
break;
|
||||||
|
case Keys.SPACE:
|
||||||
|
if (event.shiftKey) {
|
||||||
|
method = this.ws_.goPrev;
|
||||||
|
} else {
|
||||||
|
method = this.ws_.goNext;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case Keys.RE_PAGE:
|
case Keys.RE_PAGE:
|
||||||
method = this.ws_.goPrev;
|
method = this.ws_.goPrev;
|
||||||
break;
|
break;
|
||||||
@@ -62,7 +68,10 @@ export default class Keyboard {
|
|||||||
method = !this.ws_.isVertical ? this.ws_.goNext : null;
|
method = !this.ws_.isVertical ? this.ws_.goNext : null;
|
||||||
break;
|
break;
|
||||||
case Keys.F:
|
case Keys.F:
|
||||||
method = this.ws_.fullscreen;
|
if (!event.metaKey && ! event.ctrlKey) {
|
||||||
|
method = this.ws_.fullscreen;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -60,6 +60,9 @@ export default class Navigation {
|
|||||||
this.el.appendChild(this.counter);
|
this.el.appendChild(this.counter);
|
||||||
|
|
||||||
this.ws_.el.appendChild(this.el);
|
this.ws_.el.appendChild(this.el);
|
||||||
|
this.slides = Array.prototype.slice.call(
|
||||||
|
document.querySelectorAll('#webslides section')).map(s => s.id);
|
||||||
|
|
||||||
this.bindEvents_();
|
this.bindEvents_();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +76,29 @@ export default class Navigation {
|
|||||||
this.next.addEventListener('click', this.onButtonClicked_.bind(this));
|
this.next.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||||
this.prev.addEventListener('click', this.onButtonClicked_.bind(this));
|
this.prev.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||||
this.counter.addEventListener('click', this.onButtonClicked_.bind(this));
|
this.counter.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||||
|
document.body.addEventListener('click', this.onBodyClicked_.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever the body is clicked, check if the element has [data-slide] attr
|
||||||
|
* and if so, navigate to it.
|
||||||
|
* @param {MouseEvent} event Click event
|
||||||
|
*/
|
||||||
|
onBodyClicked_(event) {
|
||||||
|
const matches = document.body.matches || document.body.msMatchesSelector;
|
||||||
|
let el;
|
||||||
|
|
||||||
|
if (matches.call(event.target, '[data-slide]')) {
|
||||||
|
el = event.target;
|
||||||
|
} else if (matches.call(event.target, '[data-slide] *')) {
|
||||||
|
el = event.target.querySelector('[data-slide]');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (el) {
|
||||||
|
event.preventDefault();
|
||||||
|
const i = this.slides.indexOf(el.dataset.slide);
|
||||||
|
this.ws_.goToSlide(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -148,7 +148,8 @@ export default class DOM {
|
|||||||
*/
|
*/
|
||||||
static fireEvent(target, eventType, eventInfo = {}) {
|
static fireEvent(target, eventType, eventInfo = {}) {
|
||||||
const event = new WSCustomEvent(eventType, {
|
const event = new WSCustomEvent(eventType, {
|
||||||
detail: eventInfo
|
detail: eventInfo,
|
||||||
|
bubbles: true
|
||||||
});
|
});
|
||||||
|
|
||||||
target.dispatchEvent(event);
|
target.dispatchEvent(event);
|
||||||
|
@@ -36,11 +36,6 @@ webslides.js will add .ws-ready automatically. Don't worry :) -- */
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- Prototype faster - Vertical rhythm -- */
|
|
||||||
.baseline {
|
|
||||||
background: url('../images/baseline.png') left top .8rem/.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
li li {
|
li li {
|
||||||
margin-left: 1.6rem;
|
margin-left: 1.6rem;
|
||||||
}
|
}
|
||||||
|
@@ -64,3 +64,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chapter {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.8rem;
|
||||||
|
line-height: 3.2rem;
|
||||||
|
padding-right: .8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-page {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*!
|
/*!
|
||||||
* Name: WebSlides
|
* Name: WebSlides
|
||||||
* Version: 1.4.1
|
* Version: 1.5.0
|
||||||
* Date: 2017-08-18
|
* Date: 2018-01-01
|
||||||
* Description: Making HTML presentations easy
|
* Description: Making HTML presentations easy
|
||||||
* URL: https://github.com/webslides/webslides#readme
|
* URL: https://github.com/webslides/webslides#readme
|
||||||
* Credits: @jlantunez, @LuisSacristan, @Belelros
|
* Credits: @jlantunez, @LuisSacristan, @Belelros
|
||||||
@@ -364,10 +364,6 @@ webslides.js will add .ws-ready automatically. Don't worry :) -- */
|
|||||||
#webslides::-webkit-scrollbar {
|
#webslides::-webkit-scrollbar {
|
||||||
display: none; }
|
display: none; }
|
||||||
|
|
||||||
/* -- Prototype faster - Vertical rhythm -- */
|
|
||||||
.baseline {
|
|
||||||
background: url("../images/baseline.png") left top 0.8rem/0.8rem; }
|
|
||||||
|
|
||||||
li li {
|
li li {
|
||||||
margin-left: 1.6rem; }
|
margin-left: 1.6rem; }
|
||||||
|
|
||||||
@@ -2400,6 +2396,15 @@ CV / News
|
|||||||
.toc li a:hover .toc-page:before {
|
.toc li a:hover .toc-page:before {
|
||||||
border-bottom-width: 2px; }
|
border-bottom-width: 2px; }
|
||||||
|
|
||||||
|
.chapter {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.8rem;
|
||||||
|
line-height: 3.2rem;
|
||||||
|
padding-right: .8rem; }
|
||||||
|
|
||||||
|
.toc-page {
|
||||||
|
float: right; }
|
||||||
|
|
||||||
/*===========================================
|
/*===========================================
|
||||||
10. Cards
|
10. Cards
|
||||||
============================================= */
|
============================================= */
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*!
|
/*!
|
||||||
* Name: WebSlides
|
* Name: WebSlides
|
||||||
* Version: 1.4.1
|
* Version: 1.5.0
|
||||||
* Date: 2017-08-18
|
* Date: 2018-01-01
|
||||||
* Description: Making HTML presentations easy
|
* Description: Making HTML presentations easy
|
||||||
* URL: https://github.com/webslides/webslides#readme
|
* URL: https://github.com/webslides/webslides#readme
|
||||||
* Credits: @jlantunez, @LuisSacristan, @Belelros
|
* Credits: @jlantunez, @LuisSacristan, @Belelros
|
||||||
@@ -263,7 +263,8 @@ var DOM = function () {
|
|||||||
var eventInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
var eventInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||||
|
|
||||||
var event = new __WEBPACK_IMPORTED_MODULE_0__custom_event__["a" /* default */](eventType, {
|
var event = new __WEBPACK_IMPORTED_MODULE_0__custom_event__["a" /* default */](eventType, {
|
||||||
detail: eventInfo
|
detail: eventInfo,
|
||||||
|
bubbles: true
|
||||||
});
|
});
|
||||||
|
|
||||||
target.dispatchEvent(event);
|
target.dispatchEvent(event);
|
||||||
@@ -377,8 +378,9 @@ var CLASSES = {
|
|||||||
var Events = {
|
var Events = {
|
||||||
ENTER: 'dom:enter',
|
ENTER: 'dom:enter',
|
||||||
LEAVE: 'dom:leave',
|
LEAVE: 'dom:leave',
|
||||||
|
DISABLE: 'slide:disable',
|
||||||
ENABLE: 'slide:enable',
|
ENABLE: 'slide:enable',
|
||||||
DISABLE: 'slide:disable'
|
SHOW: 'slide:show'
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -408,7 +410,7 @@ var Slide = function () {
|
|||||||
*/
|
*/
|
||||||
this.i = i;
|
this.i = i;
|
||||||
|
|
||||||
this.el.id = 'section-' + (i + 1);
|
this.el.id = this.el.id ? this.el.id : 'section-' + (i + 1);
|
||||||
this.el.classList.add(CLASSES.SLIDE);
|
this.el.classList.add(CLASSES.SLIDE);
|
||||||
|
|
||||||
// Hide slides by default
|
// Hide slides by default
|
||||||
@@ -436,6 +438,7 @@ var Slide = function () {
|
|||||||
value: function show() {
|
value: function show() {
|
||||||
__WEBPACK_IMPORTED_MODULE_0__utils_dom__["a" /* default */].show(this.el);
|
__WEBPACK_IMPORTED_MODULE_0__utils_dom__["a" /* default */].show(this.el);
|
||||||
this.el.classList.add(CLASSES.CURRENT);
|
this.el.classList.add(CLASSES.CURRENT);
|
||||||
|
this.fire_(Events.SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1779,9 +1782,15 @@ var Keyboard = function () {
|
|||||||
|
|
||||||
switch (event.which) {
|
switch (event.which) {
|
||||||
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].AV_PAGE:
|
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].AV_PAGE:
|
||||||
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].SPACE:
|
|
||||||
method = this.ws_.goNext;
|
method = this.ws_.goNext;
|
||||||
break;
|
break;
|
||||||
|
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].SPACE:
|
||||||
|
if (event.shiftKey) {
|
||||||
|
method = this.ws_.goPrev;
|
||||||
|
} else {
|
||||||
|
method = this.ws_.goNext;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].RE_PAGE:
|
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].RE_PAGE:
|
||||||
method = this.ws_.goPrev;
|
method = this.ws_.goPrev;
|
||||||
break;
|
break;
|
||||||
@@ -1806,7 +1815,10 @@ var Keyboard = function () {
|
|||||||
method = !this.ws_.isVertical ? this.ws_.goNext : null;
|
method = !this.ws_.isVertical ? this.ws_.goNext : null;
|
||||||
break;
|
break;
|
||||||
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].F:
|
case __WEBPACK_IMPORTED_MODULE_0__utils_keys__["a" /* default */].F:
|
||||||
method = this.ws_.fullscreen;
|
if (!event.metaKey && !event.ctrlKey) {
|
||||||
|
method = this.ws_.fullscreen;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1897,6 +1909,10 @@ var Navigation = function () {
|
|||||||
this.el.appendChild(this.counter);
|
this.el.appendChild(this.counter);
|
||||||
|
|
||||||
this.ws_.el.appendChild(this.el);
|
this.ws_.el.appendChild(this.el);
|
||||||
|
this.slides = Array.prototype.slice.call(document.querySelectorAll('#webslides section')).map(function (s) {
|
||||||
|
return s.id;
|
||||||
|
});
|
||||||
|
|
||||||
this.bindEvents_();
|
this.bindEvents_();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1913,6 +1929,32 @@ var Navigation = function () {
|
|||||||
this.next.addEventListener('click', this.onButtonClicked_.bind(this));
|
this.next.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||||
this.prev.addEventListener('click', this.onButtonClicked_.bind(this));
|
this.prev.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||||
this.counter.addEventListener('click', this.onButtonClicked_.bind(this));
|
this.counter.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||||
|
document.body.addEventListener('click', this.onBodyClicked_.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whenever the body is clicked, check if the element has [data-slide] attr
|
||||||
|
* and if so, navigate to it.
|
||||||
|
* @param {MouseEvent} event Click event
|
||||||
|
*/
|
||||||
|
|
||||||
|
}, {
|
||||||
|
key: 'onBodyClicked_',
|
||||||
|
value: function onBodyClicked_(event) {
|
||||||
|
var matches = document.body.matches || document.body.msMatchesSelector;
|
||||||
|
var el = void 0;
|
||||||
|
|
||||||
|
if (matches.call(event.target, '[data-slide]')) {
|
||||||
|
el = event.target;
|
||||||
|
} else if (matches.call(event.target, '[data-slide] *')) {
|
||||||
|
el = event.target.querySelector('[data-slide]');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (el) {
|
||||||
|
event.preventDefault();
|
||||||
|
var i = this.slides.indexOf(el.dataset.slide);
|
||||||
|
this.ws_.goToSlide(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
6
static/js/webslides.min.js
vendored
6
static/js/webslides.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -71,22 +71,26 @@ describe('Slide module', () => {
|
|||||||
const enter = jest.fn();
|
const enter = jest.fn();
|
||||||
const enable = jest.fn();
|
const enable = jest.fn();
|
||||||
const disable = jest.fn();
|
const disable = jest.fn();
|
||||||
|
const show = jest.fn();
|
||||||
|
|
||||||
slide.el.addEventListener('dom:leave', leave);
|
slide.el.addEventListener('dom:leave', leave);
|
||||||
slide.el.addEventListener('dom:enter', enter);
|
slide.el.addEventListener('dom:enter', enter);
|
||||||
slide.el.addEventListener('slide:enable', enable);
|
slide.el.addEventListener('slide:enable', enable);
|
||||||
slide.el.addEventListener('slide:disable', disable);
|
slide.el.addEventListener('slide:disable', disable);
|
||||||
|
slide.el.addEventListener('slide:show', show);
|
||||||
|
|
||||||
expect(enter).not.toHaveBeenCalled();
|
expect(enter).not.toHaveBeenCalled();
|
||||||
expect(leave).not.toHaveBeenCalled();
|
expect(leave).not.toHaveBeenCalled();
|
||||||
expect(enable).not.toHaveBeenCalled();
|
expect(enable).not.toHaveBeenCalled();
|
||||||
expect(disable).not.toHaveBeenCalled();
|
expect(disable).not.toHaveBeenCalled();
|
||||||
|
expect(show).not.toHaveBeenCalled();
|
||||||
|
|
||||||
slide.enable();
|
slide.enable();
|
||||||
expect(enter).not.toHaveBeenCalled();
|
expect(enter).not.toHaveBeenCalled();
|
||||||
expect(leave).not.toHaveBeenCalled();
|
expect(leave).not.toHaveBeenCalled();
|
||||||
expect(enable).toHaveBeenCalledTimes(1);
|
expect(enable).toHaveBeenCalledTimes(1);
|
||||||
expect(disable).not.toHaveBeenCalled();
|
expect(disable).not.toHaveBeenCalled();
|
||||||
|
expect(show).not.toHaveBeenCalled();
|
||||||
enable.mockClear();
|
enable.mockClear();
|
||||||
|
|
||||||
slide.disable();
|
slide.disable();
|
||||||
@@ -94,6 +98,7 @@ describe('Slide module', () => {
|
|||||||
expect(leave).not.toHaveBeenCalled();
|
expect(leave).not.toHaveBeenCalled();
|
||||||
expect(enable).not.toHaveBeenCalled();
|
expect(enable).not.toHaveBeenCalled();
|
||||||
expect(disable).toHaveBeenCalledTimes(1);
|
expect(disable).toHaveBeenCalledTimes(1);
|
||||||
|
expect(show).not.toHaveBeenCalled();
|
||||||
disable.mockClear();
|
disable.mockClear();
|
||||||
|
|
||||||
slide.moveAfterLast();
|
slide.moveAfterLast();
|
||||||
@@ -101,6 +106,7 @@ describe('Slide module', () => {
|
|||||||
expect(leave).toHaveBeenCalledTimes(1);
|
expect(leave).toHaveBeenCalledTimes(1);
|
||||||
expect(enable).not.toHaveBeenCalled();
|
expect(enable).not.toHaveBeenCalled();
|
||||||
expect(disable).not.toHaveBeenCalled();
|
expect(disable).not.toHaveBeenCalled();
|
||||||
|
expect(show).not.toHaveBeenCalled();
|
||||||
enter.mockClear();
|
enter.mockClear();
|
||||||
leave.mockClear();
|
leave.mockClear();
|
||||||
|
|
||||||
@@ -109,8 +115,12 @@ describe('Slide module', () => {
|
|||||||
expect(leave).toHaveBeenCalledTimes(1);
|
expect(leave).toHaveBeenCalledTimes(1);
|
||||||
expect(enable).not.toHaveBeenCalled();
|
expect(enable).not.toHaveBeenCalled();
|
||||||
expect(disable).not.toHaveBeenCalled();
|
expect(disable).not.toHaveBeenCalled();
|
||||||
|
expect(show).not.toHaveBeenCalled();
|
||||||
enter.mockClear();
|
enter.mockClear();
|
||||||
leave.mockClear();
|
leave.mockClear();
|
||||||
|
|
||||||
|
slide.show();
|
||||||
|
expect(show).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Move', () => {
|
test('Move', () => {
|
||||||
|
@@ -9,8 +9,7 @@ beforeAll(() => {
|
|||||||
test('Click nav plugin', () => {
|
test('Click nav plugin', () => {
|
||||||
const next = jest.fn();
|
const next = jest.fn();
|
||||||
const ws = document.getElementById('webslides');
|
const ws = document.getElementById('webslides');
|
||||||
// Simulates dataset
|
|
||||||
ws.dataset = {};
|
|
||||||
const webslides = {
|
const webslides = {
|
||||||
options: {
|
options: {
|
||||||
changeOnClick: true
|
changeOnClick: true
|
||||||
|
@@ -2,12 +2,14 @@ import Keyboard from '../../src/js/plugins/keyboard';
|
|||||||
import Keys from '../../src/js/utils/keys';
|
import Keys from '../../src/js/utils/keys';
|
||||||
|
|
||||||
// @TODO: Check to do this with simulant
|
// @TODO: Check to do this with simulant
|
||||||
const simulateKeyEvent = (el, code) => {
|
const simulateKeyEvent = (el, code, extra) => {
|
||||||
const evt = new KeyboardEvent('keydown', {
|
const config = Object.assign({
|
||||||
bubbles: true,
|
bubbles: true,
|
||||||
cancelableCode: true,
|
cancelableCode: true,
|
||||||
which: code,
|
which: code,
|
||||||
shiftKey: true});
|
shiftKey: false}, extra);
|
||||||
|
|
||||||
|
const evt = new KeyboardEvent('keydown', config);
|
||||||
el.dispatchEvent(evt);
|
el.dispatchEvent(evt);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -37,7 +39,7 @@ test('Keyboard plugin', () => {
|
|||||||
el: ws
|
el: ws
|
||||||
};
|
};
|
||||||
|
|
||||||
new Keyboard(webslides);
|
const key = new Keyboard(webslides);
|
||||||
|
|
||||||
expect(goto).not.toBeCalled();
|
expect(goto).not.toBeCalled();
|
||||||
expect(next).not.toBeCalled();
|
expect(next).not.toBeCalled();
|
||||||
@@ -51,18 +53,39 @@ test('Keyboard plugin', () => {
|
|||||||
expect(next.mock.calls.length).toBe(1);
|
expect(next.mock.calls.length).toBe(1);
|
||||||
simulateKeyEvent(document, Keys.SPACE);
|
simulateKeyEvent(document, Keys.SPACE);
|
||||||
expect(next.mock.calls.length).toBe(2);
|
expect(next.mock.calls.length).toBe(2);
|
||||||
simulateKeyEvent(document, Keys.RE_PAGE);
|
// Shift + Space
|
||||||
|
simulateKeyEvent(document, Keys.SPACE, {shiftKey: true});
|
||||||
|
expect(next.mock.calls.length).toBe(2);
|
||||||
expect(prev.mock.calls.length).toBe(1);
|
expect(prev.mock.calls.length).toBe(1);
|
||||||
|
simulateKeyEvent(document, Keys.RE_PAGE);
|
||||||
|
expect(prev.mock.calls.length).toBe(2);
|
||||||
|
|
||||||
|
// Home - End
|
||||||
simulateKeyEvent(document, Keys.HOME);
|
simulateKeyEvent(document, Keys.HOME);
|
||||||
expect(goto.mock.calls.length).toBe(1);
|
expect(goto.mock.calls.length).toBe(1);
|
||||||
|
simulateKeyEvent(document, Keys.END);
|
||||||
|
expect(goto.mock.calls.length).toBe(2);
|
||||||
|
|
||||||
|
// Arrow keys, only left right should increase
|
||||||
simulateKeyEvent(document, Keys.DOWN);
|
simulateKeyEvent(document, Keys.DOWN);
|
||||||
expect(next.mock.calls.length).toBe(2);
|
|
||||||
simulateKeyEvent(document, Keys.UP);
|
simulateKeyEvent(document, Keys.UP);
|
||||||
expect(prev.mock.calls.length).toBe(1);
|
|
||||||
simulateKeyEvent(document, Keys.LEFT);
|
simulateKeyEvent(document, Keys.LEFT);
|
||||||
expect(prev.mock.calls.length).toBe(2);
|
|
||||||
simulateKeyEvent(document, Keys.RIGHT);
|
simulateKeyEvent(document, Keys.RIGHT);
|
||||||
|
expect(prev.mock.calls.length).toBe(3);
|
||||||
expect(next.mock.calls.length).toBe(3);
|
expect(next.mock.calls.length).toBe(3);
|
||||||
|
|
||||||
|
// Arrow keys, only up down should increase
|
||||||
|
key.ws_.isVertical = true;
|
||||||
|
simulateKeyEvent(document, Keys.DOWN);
|
||||||
|
simulateKeyEvent(document, Keys.UP);
|
||||||
|
simulateKeyEvent(document, Keys.LEFT);
|
||||||
|
simulateKeyEvent(document, Keys.RIGHT);
|
||||||
|
expect(prev.mock.calls.length).toBe(4);
|
||||||
|
expect(next.mock.calls.length).toBe(4);
|
||||||
|
|
||||||
|
// F, only trigger on when alone
|
||||||
simulateKeyEvent(document, Keys.F);
|
simulateKeyEvent(document, Keys.F);
|
||||||
|
simulateKeyEvent(document, Keys.F, {ctrlKey: true});
|
||||||
|
simulateKeyEvent(document, Keys.F, {metaKey: true});
|
||||||
expect(fullscreen.mock.calls.length).toBe(1);
|
expect(fullscreen.mock.calls.length).toBe(1);
|
||||||
});
|
});
|
||||||
|
@@ -29,7 +29,7 @@ test('Navigation plugin', () => {
|
|||||||
expect(fakeCounter.tagName).toBe('SPAN');
|
expect(fakeCounter.tagName).toBe('SPAN');
|
||||||
expect(fakeCounter.childNodes.length).toBe(1);
|
expect(fakeCounter.childNodes.length).toBe(1);
|
||||||
expect(fakeCounter.childNodes[0].tagName).toBe('A');
|
expect(fakeCounter.childNodes[0].tagName).toBe('A');
|
||||||
expect(fakeCounter.childNodes[0].href).toBe('about:blank#');
|
expect(fakeCounter.childNodes[0].href).toBe('http://localhost/#');
|
||||||
expect(fakeCounter.childNodes[0].title).toBe('View all slides');
|
expect(fakeCounter.childNodes[0].title).toBe('View all slides');
|
||||||
|
|
||||||
new Navigation(webslides);
|
new Navigation(webslides);
|
||||||
|
@@ -44,10 +44,10 @@ test('YouTube utility', () => {
|
|||||||
new YouTube(webslides);
|
new YouTube(webslides);
|
||||||
|
|
||||||
expect(typeof window.onYouTubeIframeAPIReady).toBe('function');
|
expect(typeof window.onYouTubeIframeAPIReady).toBe('function');
|
||||||
webslides.el.querySelector('[data-youtube]').dataset = {
|
const el = webslides.el.querySelector('[data-youtube]');
|
||||||
autoplay: true,
|
|
||||||
youtubeId: 'CQY3KUR3VzM'
|
el.dataset.autoplay = true;
|
||||||
};
|
el.dataset.youtubeId = 'CQY3KUR3VzM';
|
||||||
|
|
||||||
window.onYouTubeIframeAPIReady();
|
window.onYouTubeIframeAPIReady();
|
||||||
|
|
||||||
|
@@ -8,8 +8,8 @@ describe('Hash utility', () => {
|
|||||||
document.location.hash = '#slide=1';
|
document.location.hash = '#slide=1';
|
||||||
const goto = jest.fn();
|
const goto = jest.fn();
|
||||||
const ws = document.getElementById('webslides');
|
const ws = document.getElementById('webslides');
|
||||||
// Simulates dataset
|
|
||||||
ws.dataset = {};
|
|
||||||
const webslides = {
|
const webslides = {
|
||||||
options: {
|
options: {
|
||||||
changeOnClick: true
|
changeOnClick: true
|
||||||
|
21
zip-release.js
Normal file
21
zip-release.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/* eslint-disable no-console */
|
||||||
|
const fs = require('fs');
|
||||||
|
const archiver = require('archiver');
|
||||||
|
const pck = require('./package.json');
|
||||||
|
|
||||||
|
const output = fs.createWriteStream(`${__dirname}/${pck.name}.zip`);
|
||||||
|
const archive = archiver('zip', { zlib: { level: 9 } });
|
||||||
|
|
||||||
|
output.on('close', () => {
|
||||||
|
console.log(`${archive.pointer()} total bytes`);
|
||||||
|
});
|
||||||
|
|
||||||
|
archive.on('error', err => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
archive.pipe(output);
|
||||||
|
|
||||||
|
pck.release.files.forEach(f => archive.glob(f));
|
||||||
|
|
||||||
|
archive.finalize();
|
Reference in New Issue
Block a user