All Projects → midzer → tobii

midzer / tobii

Licence: MIT license
An accessible, open-source lightbox with no dependencies

Programming Languages

javascript
184084 projects - #8 most used programming language
SCSS
7915 projects

Projects that are alternatives of or similar to tobii

Tobi
An accessible, open-source lightbox with no dependencies.
Stars: ✭ 195 (+47.73%)
Mutual labels:  vanilla, a11y, lightbox, accessible
Parvus
An accessible, open-source image lightbox with no dependencies.
Stars: ✭ 124 (-6.06%)
Mutual labels:  vanilla, a11y, lightbox
Parvus
An accessible, open-source image lightbox with no dependencies.
Stars: ✭ 248 (+87.88%)
Mutual labels:  vanilla, a11y, lightbox
Chakra Ui
⚡️Simple, Modular & Accessible UI Components for your React Applications
Stars: ✭ 295 (+123.48%)
Mutual labels:  a11y, accessible
Lity
Lightweight, accessible and responsive lightbox.
Stars: ✭ 1,051 (+696.21%)
Mutual labels:  lightbox, accessible
Chakra Ui
⚡️ Simple, Modular & Accessible UI Components for your React Applications
Stars: ✭ 22,745 (+17131.06%)
Mutual labels:  a11y, accessible
Reakit
Toolkit for building accessible rich web apps with React
Stars: ✭ 5,265 (+3888.64%)
Mutual labels:  a11y, accessible
Dragon Drop
Accessible drag and drop list reorder module
Stars: ✭ 385 (+191.67%)
Mutual labels:  a11y, accessible
Bootstrap Vue
BootstrapVue provides one of the most comprehensive implementations of Bootstrap v4 for Vue.js. With extensive and automated WAI-ARIA accessibility markup.
Stars: ✭ 13,603 (+10205.3%)
Mutual labels:  a11y, accessible
Handorgel
Accessible W3C conform accordion written in ES6.
Stars: ✭ 239 (+81.06%)
Mutual labels:  a11y, accessible
A11y accordions
ES5 ARIA Accordion Component
Stars: ✭ 108 (-18.18%)
Mutual labels:  a11y, accessible
a11y-react-emoji
⚛️ An accessible Emoji component for React applications
Stars: ✭ 69 (-47.73%)
Mutual labels:  a11y, accessible
drawer
A touch-enabled drawer component for the modern web.
Stars: ✭ 26 (-80.3%)
Mutual labels:  vanilla
a11y-components
No description or website provided.
Stars: ✭ 32 (-75.76%)
Mutual labels:  a11y
csvConf2021
Data visualization accessibility talk for csv,conf,v6 (2021)
Stars: ✭ 19 (-85.61%)
Mutual labels:  a11y
mini-rpc
Spring + Netty + Protostuff + ZooKeeper 实现了一个轻量级 RPC 框架,使用 Spring 提供依赖注入与参数配置,使用 Netty 实现 NIO 方式的数据传输,使用 Protostuff 实现对象序列化,使用 ZooKeeper 实现服务注册与发现。使用该框架,可将服务部署到分布式环境中的任意节点上,客户端通过远程接口来调用服务端的具体实现,让服务端与客户端的开发完全分离,为实现大规模分布式应用提供了基础支持
Stars: ✭ 221 (+67.42%)
Mutual labels:  lightbox
ckeditor4-plugin-a11ychecker
Accessibility checker for CKEditor 4
Stars: ✭ 17 (-87.12%)
Mutual labels:  a11y
PHP-Vanilla-Buycraft
A basic "BuyCraft" implementation written in PHP for pure vanilla Minecraft servers.
Stars: ✭ 17 (-87.12%)
Mutual labels:  vanilla
vanilla-jsx
Vanilla jsx without runtime. HTML Tag return DOM in js, No virtual DOM.
Stars: ✭ 70 (-46.97%)
Mutual labels:  vanilla
axe-playwright
♿: Custom commands for Playwright to run accessibility (a11y) checks with axe-core
Stars: ✭ 88 (-33.33%)
Mutual labels:  a11y

Tobii

Version License Dependencies npm bundle size

An accessible, open-source lightbox with no dependencies.

See it in Action

Open slide with a picture of the Berlin television tower

Table of contents

Features

  • No dependencies
  • Supports multiple content types:
    • Images
    • Inline HTML
    • Iframes
    • Videos (YouTube, Vimeo)
  • Grouping
  • Events
  • Customizable with settings and CSS
  • Accessible:
    • ARIA roles
    • Keyboard navigation:
      • Prev/ Next Keys: Navigate through slides
      • ESCAPE Key: Close Tobii
      • TAB Key: Focus elements within Tobii, not outside
    • User preference media features:
      • prefers-reduced-motion media query
    • When Tobii opens, focus is set to the first focusable element in Tobii
    • When Tobii closes, focus returns to what was in focus before Tobii opened
  • Touch & Mouse drag support:
    • Drag/ Swipe horizontal to navigate through slides
    • Drag/ Swipe vertical to close Tobii
  • Responsive

Get Tobii

Download

CSS: dist/tobii.min.css

JavaScript:

  • dist/tobii.min.js: IIFE build for maximum browser support, including IE 11
  • dist/tobii.mjs: Build specially designed to work in all modern browsers
  • dist/tobii.module.js: ESM build
  • dist/tobii.umd.js: UMD build
  • dist/tobii.js: CommonJS/Node build

Package managers

Tobii is also available on npm.

npm install @midzer/tobii --save

Usage

You can install Tobii by linking the .css and .js files to your HTML file. The HTML code may look like this:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Your page title</title>

  <!-- CSS -->
  <link href="tobii.min.css" rel="stylesheet">
</head>
<body>
  <!-- Your HTML content -->

  <!-- JS -->
  <script src="tobii.min.js"></script>
</body>
</html>

Initialize the script by running:

const tobii = new Tobii()

Media types

Image

The standard way of using Tobii is a linked thumbnail image with the class name lightbox to a larger image:

<a href="path/to/image.jpg" class="lightbox">
  <img src="path/to/thumbnail.jpg" alt="I am a caption">
</a>

Instead of a thumbnail, you can also refer to a larger image with a text link:

<a href="path/to/image.jpg" class="lightbox">
  Open image
</a>

If you use a Markdown parser or CMS and want to make all images in a post automatically viewable in a lightbox, use the following JavaScript code to add all images to the same album:

document.addEventListener('DOMContentLoaded', () => {
  // This assumes your article is wrapped in an element with the class "content-article".
  document.querySelectorAll('.content-article img').forEach((articleImg) => {
    // Add lightbox elements in blog articles for Tobii.
    const lightbox = document.createElement('a');
    lightbox.href = articleImg.src;
    lightbox.classList.add('lightbox');
    lightbox.dataset.group = 'article';
    articleImg.parentNode.appendChild(lightbox);
    lightbox.appendChild(articleImg);
  });
});

Inline-HTML

For inline HTML, create an element with a unique ID:

<div id="selector">
  <!-- Your HTML content -->
</div>

Then create a link with the class name lightbox and a href attribute that matches the ID of the element:

<a href="#selector" data-type="html" class="lightbox">
  Open HTML content
</a>

or a button with the class name lightbox and a data-target attribute that matches the ID of the element:

<button type="button" data-type="html" data-target="#selector" class="lightbox">
  Open HTML content
</button>

In both ways, the attribute data-type with the value html is required.

Iframe

For an iframe, create a link with the class name lightbox:

<a href="https://www.wikipedia.org" data-type="iframe" class="lightbox">
  Open Wikipedia
</a>

or a button with the class name lightbox and a data-target attribute:

<button type="button" data-type="iframe" data-target="https://www.wikipedia.org" class="lightbox">
  Open Wikipedia
</button>

In both ways, the attribute data-type with the value iframe is required.

Optional attributes

  • data-height set the height and data-width the width of the iframe.

YouTube

For a YouTube video, create a link with the class name lightbox and a data-id attribute with the YouTube video ID:

<a href="#" data-type="youtube" data-id="KU2sSZ_90PY" class="lightbox">
  Open YouTube video
</a>

or a button with the class name lightbox and a data-id attribute with the YouTube video ID:

<button type="button" data-type="youtube" data-id="KU2sSZ_90PY" class="lightbox">
  Open YouTube video
</button>

In both ways, the attribute data-type with the value youtube is required.

Optional attributes

  • data-controls indicates whether the video player controls are displayed: 0 do not display and 1 display controls in the player.
  • data-height set the height and data-width the width of the player. I recommend using an external library for responsive iframes.

Grouping

If you have a group of related types that you would like to combine into a set, add the data-group attribute:

<a href="path/to/image_1.jpg" class="lightbox" data-group="vacation">
  <img src="path/to/thumbnail_1.jpg" alt="I am a caption">
</a>

<a href="path/to/image_2.jpg" class="lightbox" data-group="vacation">
  <img src="path/to/thumbnail_2.jpg" alt="I am a caption">
</a>

// ...

<a href="path/to/image_4.jpg" class="lightbox" data-group="birthday">
  <img src="path/to/thumbnail_4.jpg" alt="I am a caption">
</a>

// ...

Options

You can pass an object with custom options as an argument.

const tobii = new Tobii({
  captions: false
})

The following options are available:

Property Type Default Description
selector string ".lightbox" All elements with this class triggers Tobii.
captions bool true Display captions, if available.
captionsSelector "self", "img" "img" Set the element where the caption is. Set it to "self" for the a tag itself.
captionAttribute string "alt" Get the caption from given attribute.
captionText function null Custom callback which returns the caption text for the current element. The first argument of the callback is the element. If set, captionsSelector and captionAttribute are ignored.
nav bool, "auto" "auto" Display navigation buttons. "auto" hides buttons on touch-enabled devices.
navText string ["inline svg", "inline svg"] Text or HTML for the navigation buttons.
navLabel string ["Previous", "Next"] ARIA label for screen readers.
close bool true Display close button.
closeText string "inline svg" Text or HTML for the close button.
closeLabel string "Close" ARIA label for screen readers.
loadingIndicatorLabel string "Image loading" ARIA label for screen readers.
counter bool true Display current image index.
keyboard bool true Allow keyboard navigation.
zoom bool true Display zoom icon.
zoomText string "inline svg" Text or HTML for the zoom icon.
docClose bool true Click outside to close Tobii.
swipeClose bool true Swipe up to close Tobii.
draggable bool true Use dragging and touch swiping.
threshold number 100 Touch and mouse dragging threshold (in px).
autoplayVideo bool false Videos will automatically start playing as soon as they can do so without stopping to finish loading the data.

Data attributes

You can also use data attributes to customize HTML elements.

<a href="path/to/image.jpg" class="lightbox" data-group="custom-group">
  Open image.
</a>

The following options are available:

Property Description
data-type Sets media type. Possible values: html,iframe,youtube.
data-id Required for youtube media type.
data-target Can be used to set target for "iframe" and "html" types.
data-group Set custom group
data-width Set container width for iframe or youtube types.
data-height Set container height for iframe or youtube types.
data-controls Indicates whether the video player controls are displayed: 0 do not display and 1 display controls in the player.
data-allow Allows to set allow attribute on iframes.
data-srcset Allows to have Responsive image or retina images
data-zoom Allows to enable or disable zoom icon. Values: "true" or "false"

API

Function Description
open(index) Open Tobii. Optional index (Integer), zero-based index of the slide to open.
select(index) Select a slide with index (Integer), zero-based index of the slide to select.
previous() Select the previous slide.
next() Select the next slide.
selectGroup(value) Select a group with value (string), name of the group to select.
close() Close Tobii.
add(element) Add element (DOM element).
remove(element) Remove element (DOM element).
isOpen() Check if Tobii is open.
slidesIndex() Return the current slide index.
slidesCount() Return the current number of slides.
currentGroup() Return the current group name.
reset() Reset Tobii.
destroy() Destroy Tobii.

Events

Bind events with the .on() and .off() methods.

const tobii = new Tobii()

const listener = function listener () {
  console.log('eventName happened')
}

// bind event listener
tobii.on(eventName, listener)

// unbind event listener
tobii.off(eventName, listener)
eventName Description
open Triggered after Tobii has been opened.
close Triggered after Tobii has been closed.
previous Triggered after the previous slide is selected.
next Triggered after the next slide is selected.

Browser support

Tobii supports the following browser (all the latest versions):

  • Chrome
  • Firefox
  • Internet Explorer 11
  • Edge
  • Safari

Build instructions

See Wiki > Build instructions

Contributing

  • Open an issue or a pull request to suggest changes or additions
  • Spread the word

License

Tobii is available under the MIT license. See the LICENSE file for more info.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].