The previous attempt at merely reading a property of event.target was
incorrect. It worked at first but errors reappeared later, so must
have been a reace.
This wraps the entire navigation event handlers in the try-catch, and
then checks for the very specific error and suppresses it. Other errors
are rethrown as is.
Changed the onclick handler to trigger the impress:console:open event
and not use the impressConsole() global function any more. The latter
is considered deprecated now that impressConsole is integrated into
impress.js itself.
Also catch some errors that appear in event handlers when the target
for the click event was immediately removed from DOM.
Fixes#651
1.0.0-beta1: Merge 2 years worth of work from dev to master!
Highlights
* New plugin based architecture allows adding more features without bloating core src/impress.js file
* Source files are in src/ and compiled into js/impress.js with npm run build. End users should continue to use js/impress.js as before.
* 19 new plugins
* Integrates impressConsole.js by default (press 'P' to open speaker console)
* Markdown support for those that are too much in a hurry to type HTML
* 5 new demo presentations under examples/ show case the new features
* Removes the code that prevented impress.js from running on mobile phones
Explains the plugins, lib and build.js, etc.
Also delete the contributor guidelines in .github. We won't be using
those going forward, what README.md says is enough.
This demo presentation is written entirely in Markdown, as provided
by the combination of the extras plugin, and extras/markdown/markdown.js
The idea for using Markdown instead of HTML came from users who felt that
sometimes when you just need to quickly toss together some slides, using
Markdown is faster than HTML. Same approach is also familiar to Hovercraft
users, where RST is converted to a traditional HTML based impress.js presentation.
Unlike Hovercraft, using Markdown.js allows you to write Markdown directly into
your html file that is the presentation. It is converted in the browser, and no
separate command line tool is necessary. As a result you can also mix and match:
some slides can be HTML (when needed) and some in Markdown.
Add one presentation that provides a very simple demo, using
impress.js to create a very traditional "slide show". Possibly
it's an easier way to learn impress.js (it's commented, just like
the official demo.) It uses the relative positioning plugin and
uses "speaker notes", which aren't shown in the presentation,
but are picked up and shown in the speaker console (press 'P').
Also uses autoplay, forms... and includes short demo of all the extra
addons from extras/. (Highlight.js, Markdown.js, Mathjax.js, Mermaid.js)
The toolbar plugin produces a generic toolbar container, which then can contain
buttons, drop-downs or any html inside it. The user can position and otherwise
style the toolbar, and any widgets inside it will follow.
Other plugins that wish to expose graphical controls (navigation-ui, autoplay)
will use the impress:toolbar:appendChild event to 'send' their controls to
this plugin.
Originally from https://github.com/m42e/impress.js-progress and
adapted for the new plugin api. Also made the sample CSS produce
a smaller bar and font.
Adds event.detail.next to impress:stepleave event in impress.js.
navigation-ui plugin provides "back" and "forward" controls,
as well as a select drop down list to jump to any step. It is
added to act as an example of a UI plugin, meaning that it
exposes visible html elements.
(This plugin depends on the toolbar plugin, which is added 3 commits
from now.)
This commit adds a generic mouse-timeout plugin. (Same code was
originally part of toolbar plugin, but is now general purpose and
available to user to apply any CSS to it.)
Although this implementation is different and more generic, the
suggestion to add ability to hide mouse cursor came from
a pull request by Sebastian Clausen (@sclausen):
impress#536
The functionality is simple:
After 3 seconds of mouse inactivity, add the css class
`body.impress-mouse-timeout`. On `mousemove`, `click` or `touch`, remove the
class.
A user will then use (or not) his own CSS to hide whatever he wants to hide
after 3 seconds of mouse inactivity.
Press 'P' to show a speaker console in a separate window.
Supports:
- Navigation controls
- This slide and next slide preview screens
- Speaker notes
- Clock and timer
Also applies this patch, which makes impressConsole.js follow the new
impress.js plugin standard: regebro/impress-console#22
Note: As impressConsole is now a plugin, it is included by default. You
no longer need to include it with a separate <script> tag. Nor do you
need to call its init() method.
Shows a help popup when user presses H. Add
<div id="impress-help">
...to the presentation to enable it.
Other plugins send their help text to this plugin as events.
The idea and style for this help popup comes from hovercraft, which would
generate such html code into each presentation it creates.
Adds new form plugin, which blurs() focus on impress:stepleave. This is to
prevent an input field from being focused when it is no longer visible.
Related to supporting forms, in an earlier commit we already changed the
navigation plugin to only listen to keypress events from body and html
elements. This was to allow presentations to have, for example, form
elements, where users can type text, including spaces, use arrows, etc.
To make loading of extras/ addons simpler, and remove cruft from
presentation html files, I created a new plugin src/plugins/extras/.
If any of the extra addons (highlight.js, markdown.js, mathjax.js
or mermaid.js) are added to the html file with a regular <script> tag,
then this module will discover and know how to init the module for you,
so it is not necessary to do that in html. If you're not using
the extras, this plugin does nothing.
Note that in the branch history where you are reading this commit,
the extras/ directory doesn't actually exist yet, nor do the
examples/ that use them. But they will hopefully join this branch soon.
It turns out in CSS 3D, the order in which you specify for example
the rotateX(), rotateY() and rotateZ() transformations matter.
Each rotation is relative to the objects then-current position.
Impress.js being hardwired to always do rotateX->rotateY->rotateZ
was therefore limiting, and in fact there are some positions that
can never be reached with an xyz order. The new data-rotate-order=""
attribute allows to specify the order as a permutation of the 3
letters x, y, z, thus relaxing this limitation.
See http://openlife.cc/blogs/2016/october/3d-rotations-css-and-impressjs
for (much) more details.
Unlike impress:stepenter, we emit impress:steprefresh event also
when the "entered" step is the current step. This allows plugins
to reload or redraw objects if needed.
(Note that resize plugin already calls goto() on the active element
for similar purposes when it sees a window resize event. Emitting
impress:steprefresh allows other plugins to join in such a refresh,
and also others can call goto() if a refresh is needed.)
The Mobile plugin adds CSS classes body.impress-mobile and
div.prev, div.next. These can be used in CSS to hide non-active
steps completely, in order to reduce memory consumption on
small mobile devices.
Also:
- Removes the code that allowed navigation by tapping left/right edge of screen.
- Actually, this was already removed in this branch...
- Removes the code that disabled impress.js on mobile devices
- Adds new API call impress().swipe()
Refactored for the plugin api from this pull request by @and3rson:
https://github.com/impress/impress.js/pull/496
Manually "cherry picked" from
c44fd0f4c1
This allows plugins to register to be executed at the beginning of
impress().init() and impress().goto() respectively. By returning false,
a plugin can also cancel the event.
Also adds 3 plugins that use this: rel, goto and stop.