Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
.. contents:: Table of Contents
This package provides a javascript library to make gallery overlays such as Lightbox <http://www.jacklmoore.com/colorbox/example1/>
_.
But the main difference is that you have full control over the rendering and fetching of gallery items.
The gallery is able to notify if the user has reached the first or last item. This can be useful when more items should be loaded as a batch.
The items of the gallery can be extended or reset.
The gallery always tracks the active item.
An API provides a way to control the gallery from outside.
Add the package as dependency to your setup.py:
.. code:: python
setup(... install_requires=[ 'ftw.showroom', ])
or to your buildout configuration:
.. code:: ini
[instance] eggs += ftw.showroom
and rerun buildout.
Install the Generic Setup profile.
Plone 4.3
.. image:: https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Plone-logo.svg/2000px-Plone-logo.svg.png :target: https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Plone-logo.svg/2000px-Plone-logo.svg.png :height: 50px
Rebuilding the library (resources/javascript.js):
.. code-block:: bash
grunt build
Watching for changes and rebuild the bundle automatically:
.. code-block:: bash
grunt watch
or the default task
.. code-block:: bash
grunt watch
Running all test:
.. code-block:: bash
npm test
or
.. code-block:: bash
grunt test
Running a specific test:
.. code-block:: bash
grunt test --grep="Name of your test"
This package is copyright by 4teamwork <http://www.4teamwork.ch/>
_.
ftw.showroom
is licensed under GNU General Public License, version 2.
The client library depends on Grunt <http://gruntjs.com/>
_. Assuming
you already have Node.js installed on your system, run the following command:
.. code:: bash
sudo npm install -g grunt
To install the dependencies, run the following command:
.. code:: bash
npm install
And with npm you get the following packages:
Grunt <http://gruntjs.com/>
_ - JavaScript task runner.Babel <https://babeljs.io/>
_ - ES6 Transpiler.Browserify <http://browserify.org/>
_ - Dependency BundlerKarma <http://karma-runner.github.io/>
_ - JavaScript test runner.Jasmine <http://jasmine.github.io/>
_ - JavaScript test suite.Chai <http://chaijs.com/>
_ - JavaScript Assertion Library.Run the following command to re-build the library:
.. code:: bash
grunt build
Run the following command to watch for changes which trigger a rebuild:
.. code:: bash
grunt
See https://github.com/substack/browserify-handbook for more information about browserify.
Browserify comes with a built-in support to generate source maps. It is already enabled by default, but feel free to disable source maps. Refer to this article <https://developers.google.com/chrome-developer-tools/docs/javascript-debugging#source-maps>
_
to enable source maps in Google Chrome, if you haven't already done so.
Run all tests
.. code:: bash
grunt test
Run a specific test
.. code:: bash
grunt test --grep="Name of your test"
Creates an empty showroom instance with default options
.. code:: javascript
let showroom = Showroom();
The showroom constructor accepts a NodeList <https://developer.mozilla.org/en/docs/Web/API/NodeList>
_ or a jQuery <http://api.jquery.com/jquery/>
_.
The items can provide a target as an HTML data attribute (data-showroom-target) to define the endpoint where the item will fetch its content from.
To make a title visible in the overlay provide a title as an HTML data attribute (data-showroom-title).
.. code:: HTML
.. code:: javascript
let items = document.querySelectorAll(".item"); let showroom = Showroom(items);
or
.. code:: javascript
let items = $(".item"); let showroom = Showroom(items);
The showrooms provide the following options.
+---------------+--------------------------+--------------------------------------------------------------------------+ | Option | Default | Description | +===============+==========================+==========================================================================+ | cssClass | "ftw-showroom" | Class attribute on the root element of the gallery | +---------------+--------------------------+--------------------------------------------------------------------------+ | render | See rendering_. section | Override the default render behavior | +---------------+--------------------------+--------------------------------------------------------------------------+ | tail | Empty function | Called when the user reaches the last element of the gallery | +---------------+--------------------------+--------------------------------------------------------------------------+ | head | Empty function | Is getting called when the user reaches the first element of the gallery | +---------------+--------------------------+--------------------------------------------------------------------------+ | fetch | See fetching_. section | Override the default fetch behavior | +---------------+--------------------------+--------------------------------------------------------------------------+ | beforeRender | noop | Hook to augment the item for example | +---------------+--------------------------+--------------------------------------------------------------------------+ | template | See template section | Override the default gallery template | +---------------+--------------------------+--------------------------------------------------------------------------+ | target | body Element | Define a selector where the gallery will be attached | +---------------+--------------------------+--------------------------------------------------------------------------+ | offset | 0 | Offset for the current item counter, useful for batches | +---------------+--------------------------+--------------------------------------------------------------------------+
.. _events:
ftw.showroom fires the following events on document
:
+---------------------+----------+-----------------------------------------------------------------------------------------------------------+ | Event | Params | Description | +=====================+==========+===========================================================================================================+ | showroom:item:shown | showroom | Invoked every time an item is shown, so if showroom opens, every time the selected showroom item changes. | +---------------------+----------+-----------------------------------------------------------------------------------------------------------+
To listen to an event use the following code:
.. code:: javascript
$(document).on('showroom:item:shown', function (showroom) { // do something with the showroom/item })
.. _fetching:
The default fetching function uses the target provided by each item to make an AJAX call to retrieve its content.
.. code:: javascript
function fetch(item) { return $.get(item.target); };
This function can be overridden, see Configuration_.
.. code:: javascript
let showroom = Showroom(items, { fetch: (item) => { return "
Some other content
"; } } );.. _rendering:
The default rendering function returns an HTML string using the default Handlebars <http://handlebarsjs.com/>
_ template
padding the internal showroom data, the prefeteched content and the active item.
.. code:: javascript
function render(content) { return $.when(content).pipe((content) => { return $(template({ showroom: data, content: content, item: register.current })); }); }
This function can be overridden, see Configuration_.
.. code:: javascript
let showroom = Showroom(items, { render: (content) => { return $(template()); } } );
References are useful if you want to open a showroom item that is referenced by more than one element on the same page. You just have to add the showroom-reference class and the data-showroom-target-item attribute to make the connection. The data-showroom-target-item attribute contains an id which references a showroom item on the page. You have to set the data-showroom-id by manually on the showroom item to make the connection with the reference.
There is currently no interface to make the connection manually.
But you have to call showroom.refresh()
to refresh the references.
.. code:: html
Showroom.open
Opens a specific item. If no item is specified the showroom tries to show the first in the store otherwise it does nothing.
.. code:: javascript
showroom.open();
or
.. code:: javascript
showroom.open(item);
Showroom.close
Closes the overlay by hiding the element.
.. code:: javascript
showroom.close();
Showroom.next
Opens the next item in the item queue. When the pointer reaches the last item the showroom does nothing.
.. code:: javascript
showroom.next();
Showroom.prev
Opens the previous item in the item queue. When the pointer reaches the first item the showroom does nothing.
.. code:: javascript
showroom.prev();
Showroom.append
Extend the current item queue with new items. The items are appended at the end of the queue.
The pointer remains unaffected.
The append method accepts a NodeList <https://developer.mozilla.org/en/docs/Web/API/NodeList>
_ or a jQuery <http://api.jquery.com/jquery/>
_
.. code:: javascript
let newItems = document.querySelectorAll(".newItems"); showroom.append(newItems);
or
.. code:: javascript
let newItems = $(".newItems"); showroom.append(newItems);
Showroom.prepend
Extend the current item queue with new items, similar to the append
method, but the items are prepended at the beginning of the queue.
The pointer remains unaffected.
The prepend method accepts a NodeList <https://developer.mozilla.org/en/docs/Web/API/NodeList>
_ or a jQuery <http://api.jquery.com/jquery/>
_
.. code:: javascript
let newItems = document.querySelectorAll(".newItems"); showroom.prepend(newItems);
or
.. code:: javascript
let newItems = $(".newItems"); showroom.prepend(newItems);
Showroom.reset
Reset the current item store with new items. The overlay will be closed and the pointer set to 0
.
To empty the item store reset with no arguments.
.. code:: javascript
let newItems = document.querySelectorAll(".newItems"); showroom.reset(newItems);
or
.. code:: javascript
let newItems = document.querySelectorAll(".newItems"); showroom.reset();
Showroom.destroy
After destroying the showroom is no longer able to open any items. The store will be reset and the marker class removed.
The overlay will be closed as well.
All items will loose their data-showroom-id
.
.. code:: javascript
showroom.destroy();
Showroom.setTotal
Updates the total value and rerenders the opened overlay. The method does only allow numeric values.
.. code:: javascript
showroom.setTotal(34);
Showroom.setOffset
Updates the offset. Prevents negative offsets. The method does only allow numeric values.
.. code:: javascript
showroom.setOffset(42);
Showroom.refresh
Refreshes the showroom references.
.. code:: javascript
showroom.refresh();
Introduce uninstall profile [Kevin Bieri]
Introduce upgrade steps [Kevin Bieri]
Cleanup version pinnings [Kevin Bieri]
showroom-item
class
Therefore manually refreshing events is no longer necessary
[Kevin Bieri]Make template configurable [Kevin Bieri]
Introduce showroom references [Kevin Bieri]
Provide offset option for showroom. The offset is added to the current number and allows to display correct item number for batched items. [deiferni]
FAQs
Javascript library to make gallery overlays
We found that ftw.showroom demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 8 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.