Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Common libraries in src/lib #625

Merged
merged 3 commits into from
Oct 9, 2017
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,31 @@ rootElement.addEventListener( "impress:init", function() {
impress().init();
```

#### .tear()

Resets the DOM to its original state, as it was before `init()` was called.

This can be used to "unload" impress.js. A particular use case for this is, if you want to do
dynamic changes to the presentation, you can do a teardown, apply changes, then call `init()`
again. (In most cases, this will not cause flickering or other visible effects to the user,
beyond the intended dynamic changes.)

**Example:**

```JavaScript
impress().tear();
```

**Example:**

```JavaScript
var rootElement = document.getElementById( "impress" );
rootElement.addEventListener( "impress:init", function() {
console.log( "Impress init" );
});
impress().init();
```
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably a copy/paste leftover here, I'll raise a PR to remove it

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


#### .next()

Navigates to the next step of the presentation using the [`goto()` function](#impressgotostepindexstepelementidstepelement-duration).
Expand Down
4 changes: 2 additions & 2 deletions src/lib/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,11 @@ Putting all of the above together, a skeleton library file will look like:
var instanceVar = {};

// LIBRARY FUNCTIONS
var libararyFunction1 = function () {
var libraryFunction1 = function () {
/* ... */
};

var libararyFunction2 = function () {
var libraryFunction2 = function () {
/* ... */
};

Expand Down
19 changes: 14 additions & 5 deletions src/lib/gc.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,34 +31,43 @@
recordStartingState( rootId );

// LIBRARY FUNCTIONS
// Below are definitions of the library functions we return at the end
// Definitions of the library functions we return as an object at the end

// `pushElement` adds a DOM element to the gc stack
var pushElement = function( element ) {
elementList.push( element );
};

// Convenience wrapper that combines DOM appendChild with gc.pushElement
// `appendChild` is a convenience wrapper that combines DOM appendChild with gc.pushElement
var appendChild = function( parent, element ) {
parent.appendChild( element );
pushElement( element );
};

// `pushEventListener` adds an event listener to the gc stack
var pushEventListener = function( target, type, listenerFunction ) {
eventListenerList.push( { target:target, type:type, listener:listenerFunction } );
};

// Convenience wrapper that combines DOM addEventListener with gc.pushEventListener
// `addEventListener` combines DOM addEventListener with gc.pushEventListener
var addEventListener = function( target, type, listenerFunction ) {
target.addEventListener( type, listenerFunction );
pushEventListener( target, type, listenerFunction );
};

// If the above utilities are not enough, plugins can add their own callback function
// to do arbitrary things.
// `addCallback` If the above utilities are not enough, plugins can add their own callback
// function to do arbitrary things.
var addCallback = function( callback ) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit hard from the name of it to understand what callback is it, why to add it, when it will be called.

It took me a while (and reading the code) to realise it's simply a callback called on teardown. So I would suggest renaming it to addTeardownCallback which will be more descriptive.

callbackList.push( callback );
};
addCallback( function( rootId ) { resetStartingState( rootId ); } );

// `teardown` will
// - execute all callbacks in LIFO order
// - call `removeChild` on all DOM elements in LIFO order
// - call `removeEventListener` on all event listeners in LIFO order
// The goal of a teardown is to return to the same state that the DOM was before
// `impress().init()` was called.
var teardown = function() {

// Execute the callbacks in LIFO order
Expand Down