Giter Site home page Giter Site logo

midzer / tobii Goto Github PK

View Code? Open in Web Editor NEW
190.0 5.0 20.0 1.17 MB

An accessible, open-source lightbox with no dependencies

Home Page: https://midzer.github.io/tobii/demo/

License: MIT License

JavaScript 86.65% SCSS 13.35%
javascript css vanilla a11y lightbox scss accessible

tobii's Introduction

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.
captionHTML bool false Allow HTML captions.
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.
autoplayAudio bool false Audio will automatically start playing.

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.

tobii's People

Contributors

calinou avatar felixranesberger avatar midzer avatar moritzlost avatar ocean90 avatar refi64 avatar viliusle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

tobii's Issues

Autoplay youtube

Videos in pages usually should not auto-play, its annoying.
But when you click on video to get modal dialog, it should always auto-play when modal dialog loads, because if not, user have to click 2 times to start watching video.

p.s. autoplayVideo should not exists or have true value by default.

Close button position

In most cases close button in top-right corner works. But not in all cases. If we have lots of small images or using inline HTML feature (modal window will be small) or having big screen, close button should be closer to actual content. User focus will be in center, and to exit, he will need to waste time searching for close button and move mouse to close button.

The problem, it is hard to achieve it even with custom CSS, because current HTML layout will not let you do this easily. We should try to find a way to solve it.

p.s. I am not suggest to change it globally, but to have such ability with data- attribute. It would probably be breaking change.

Add "close" event

Maybe I'm missing a technique that would easily allow me to watch for this, but it would be nice to have a "close" event like the "open", "next", and "previous" that are already available.

Use case: updating a slider slide index on close to match the lightbox's last open slide.

inline HTML missing styles

inline HTML modal dialog is missing default styles. I believe it should be included in library by default:

.tobii__slide div[data-type="html"]{
	background: white;
	padding: 10px 20px;
	max-width: 800px;
}

p.s. not related, but "Inline HTML" link on readme.md does not work.

Documentation improvements

Right now it is difficult to understand what settings you can use for Tobii config during init or what you can use on element with data-xxxxx. These are different things and supports different keys. There is info, but it is difficult to find and understand.

I suggest to create extra table for data-attributes:

  • data-type
  • data-target
  • data-group
  • data-width
  • data-height
  • data-controls

It would be perfect to update lib to support all options with both data attributes and inside Tobii config init. But for now better documentation would be enough. Because developers can assign data attributes dynamically (I found adding data-xxxxx attributes very tiring if you have lots of HTML)

Wondering if fix for #28 will be in v2.3.0?

First of all, thanks for making this available! Its the only accessible lightbox that allows grouping of images that I've found.

My question is: Will the fix for #28 be available in v2.3.0 and is there an estimated release date for v2.3.0?

Thanks!

Retina optimization

During image init, srcset should not be set on page load, but only when lightbox effect is called. data-srcset should be used, only only when image is loading, only then set it.

Right now having lots of 2x images for retina, browser will pre-load it even if user will not use lightbox.

Test case:

<a href="https://via.placeholder.com/600.jpg" class="lightbox" data-srcset="https://via.placeholder.com/1200.jpg 2x"> Open</a>
<a href="https://via.placeholder.com/600.jpg?2" class="lightbox" data-srcset="https://via.placeholder.com/1200.jpg?2 2x"> Open</a>
<a href="https://via.placeholder.com/600.jpg?3" class="lightbox" data-srcset="https://via.placeholder.com/1200.jpg?3 2x"> Open</a>

All 3 https://via.placeholder.com/1200.jpg will be preloaded, which is wrong. Imagine page has 83 retina images.

Add license and link to library for easier license compliance

Currently, the files in dist/js only state the following:

/**
 * tobii 2.0.0-beta 
 *
 */

I suggest changing it to something like this:

/**
 * tobii 2.0.0-beta 
 * Licensed under the MIT license.
 * https://github.com/midzer/tobii
 */

The header should also be added to the CSS. This way, people using the library can comply with the license more easily. Thanks in advance πŸ™‚

Missing build instructions

"npm run dev" works, but it only builds tobii.js.
"npm run build" throws "'BROWSERSLIST_ENV' is not recognized as an internal or external command,"

What are requirements? NPM only?

What is procedure to get working environment? is this correct?

git clone ***
cd ***
npm install
npm run build

after closing a slide with an iframe playing sound inside, sound keep playing

I'm loading a slide with a page inside iframe, the page has sound,
after closing the lightbox, the sound keep playing
I'm using this method to set the iframe slider:

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

<script>
jQuery( document ).ready(function() {
    const tobii = new Tobii();
});
</script>

Optimizations issues

This lib will builds huge list of tobi__slider elements on page load. During this time, JS blocks everything else like user input, page rendering and so on.

  • if we have lots of elements, that need lightbox effect, block time increase
  • if user is on mobile, (JS processing is slower) block time increase a lot
  • if using multiple inline HTML blocks with lots of text and DOM elements inside - block time increase
  • if all of above - we have a big problem.

And now google penalize sites for being slow. So this should be fixed.

What can be done? On load create only basic DOM elements, like container, buttons. Only when user does click, do heavy work to display something using lightbox effect.

Dom-tree

Namespace [data-type] in CSS

Currently, Tobii adds styling for [data-type] globally, which interferes with other elements on a site that have the data-type attribute (unrelated to Tobii). It would be good to change this to .tobii [data-type] or something similar.

Data-target need more priority.

If you have iframe type link with href and data-target, library will ignore data-target. I believe data-target should overwrite href attribute:

  • because data-target is optional, devs can remove it if you they dont want it.
  • lets say we have link that goes to /page.php. Data-target value is page.pph?version=modal. Data-target will be ignored, but you can not change href, because this will be used if user will open link in new tab. But if user opens link in same tab, you want to show modal link with different parameters.

p.s. fix is very easy:
https://github.com/midzer/tobii/blob/production/src/js/index.js#L292

Close button and counter float on the picture

Close button and counter float on the picture in mobile if the picture is stretched in height.

22ea2ced31

I fixed it like this:

.tobii__slider {
    top: 5em;
}

[data-type] {
    height: 100%;
    max-height: 100%;
    display: flex;
    align-items: center;
}

    [data-type] > figure {
        max-height: 100%;
    } 

Unwanted grouping

Hello! I've setup a CodePen to point out two issues I'm seeing, the first of which is unwanted grouping.

When I have more than one lightbox element and I do not use the data-group attribute, the lightbox behaves as if I did. See it, here:

https://codepen.io/marcamos/pen/NWxaMXQ

Inaccessible as a modal

When using tobii as a modal, the modal contents are inaccessible via keyboard. They can't be focused on or read using the controls. Tested with Voiceover, Chrome on MacOS.

var tobii = new Tobii({
  swipeClose: false,
  draggable: false,
})

Purpose of callback functions

Hi,
I did not investigate when you introduced all those callback arguments. As all involved functions are syncronous, I wonder why we need those arguments.

So writting

function foo () {
  // do something
}
tobi.next(foo)

should be the same as

function foo () {
  // do something
}
tobi.next()
foo()

For my taste, those additional callback parameters just blow code up. Could you explain a possible use case for them?

Thanks in advance and have a nice day
midzer

Multiple instances does not work

Multiple instances of Tobii does not work. Last will work, others - not.

Example:

<a href="https://img.youtube.com/vi/HHi8qOtHnhE/maxresdefault.jpg" class="first" data-group="first">
   First - this will not work
</a>
<a href="https://img.youtube.com/vi/HHi8qOtHnhE/maxresdefault.jpg" class="second" data-group="second">
   Second - this will work
</a>
const tobii_first = new Tobii({
  selector: '.first'
})
const tobii_second = new Tobii({
  selector: '.second'
})

This can be issue, when you want to track events, right now you get event from all objects, without knowing which exactly. (separate bug)

Provide a registry API for supported elements/media types

By default the library supports images, inline HTML, iframes and YouTube videos. There's already a comment "you can add new type to support something new" but that's not true unless you change the source directly.
Idea: Provide an API that allows to add and remove media types.

This is related to #1 to split the library into modules. I think it would be nice if each media type is its own module which can be added manually. This should reduce the package size for users who want to use the library only for images.
A possible implementation may look like this:

// import Tobii from 'tobii'; // This would continue to include all types
import { Base as Tobii } from 'tobii'; // This one requires you to manually register the types
import image from 'tobii/types/image';
import youtube from 'tobii/types/youtube';
import myCustomType from './my-custom-type';

Tobii.registerType(image);
Tobii.registerType(youtube);
Tobii.registerType(myCustomType);

new Tobii();

Inspired by the Day.js library.

What are your thoughts on this idea? Are there better implementation ideas?

ignore duplicates

Library should ignore duplicates by default, because it makes no sense to loop through same image 3 times for example.

Use case: having 3 tabs with same HTML code.

Swipe-up and swiping off-image

  1. Being able to swipe up, as well as left and right, leads to the image 'jumping around', which (to me) feels and looks odd in an image gallery. I have set "swipeClose: false" so that Tobii no longer closes on swiping up, but the image still moves up when swiped up.
    --> Is it possible to disable swipe-up if 'swipeClose' is false, just as swipe-down is always disabled?

  2. When swiping left or right, if the pointer is dragged off the image, Tobii closes on mouseup, just like it would if one clicked outside the image. I think the correct behavior would be to drag the image gallery, not close it.
    --> Would it be possible to disable the "click outside image to close" functionality while dragging?

can be used inside js function?

Hi, not an issue per se, more of a question. Can tobbi be used inside a js function?

Used another library previously that allowed:

function pdfl(){
    var lightbox = lity('capital.html');
}

Is it possible to use tobii similar to that?

Thanks.

Allow caption text to be set from a callback

The caption text is currently quite limited as it only supports an attribute on the element itself or the image. It would be nice to be able to use other sources for the caption text, like the content of an existing figcaption element.

This could be implemented by adding a new config which allows to set a custom callback. The callback would get the current element to be able to identify the correct caption and should return the relevant caption text. I'm going to submit a PR for this idea.

Any plans for Vimeo support?

Hello! A quick question: are there any plans for Vimeo support in the same way YouTube is supported?

Thank you for making this – it's lovely.

Dragging not working

In Chrome, dragging between images is not working in version 2.3.0 (was working in 2.2.0). One can see this feature is not working by trying to drag in the Images (grouped) demo.

No support for IE

Looks like tobii doesn't work in IE (I use the latest IE for testing). I get an error in tobii.min.js and looks like it's related to arrow functions. Just wondering if there is a build that will work in IE?

Inline HTML issue

If multiple links use same unique ID selector for content (inline HTML type), only last link will work. Other will show empty dialog with no console errors.

Improve demo

Current demo is very simple, it can give impressions that library is simple too and does not support advanced features. Also having good demo help developers with testing. i would probably include

Improvements :

  • Image (single)
  • Images (grouped)
  • Inline HTML
  • Iframe
  • YouTube (not sure about it, since YouTube have to auto-play by default)
  • YouTube (auto-play)
  • Image with events (on-load, on-exit - we don't have it yet)
  • Manual call on some example link/button.
  • Image (not existing)
  • Iframe (not existing)
  • YouTube (not existing)

p.s. sorted by priority.

zoom icon

  1. Zoom icon is nice to have, but sometimes it must be disabled. Right now having button with image inside, zoom icon will appear and it will not look good.

Solution could be checking for data-zoom="false".

  1. using inline SVG for zoom icon for each of link is bad for performance. CSS should be used. Even it is not big deal, but having this activated by default for bis site will be a problem for performance. There is good tip:

If we need SVG(s) for backgrounds but they are < than 5k each:
.bg { background: url('data:image/svg+xml;utf8,<svg ...> ... '); }

If we need SVG(s) for backgrounds but they are > than 5k each:
.bg { background: url('images/file.svg'); }

animation issue

Animation on second and third gallery items works only if you wait before opening second slide. If you open gallery and try to load next and next and next item fast, there will be no animation, but it will appear for other items.

events missing data

Events does not have any data, only name, it means you don't know from which element event was fired.

p.s. there is a way to pass data to events (as string). I can push PR to include lightbox media type or even target ID in event.

Basically I could not find a way to get events only from specific link. let me know if I missed something.

Thought I'd share how I stop iframe > video from playing after closing Tobii

Hello,

I'm in the process of building a page where Tobii launches a Vimeo video. As Vimeo doesn't seem to be supported in the same way that YouTube is, I fell back to using the iframe feature of Tobii, and it works well.

What I then discovered is…

  1. The Vimeo video is launched in the lightbox
  2. The visitor presses play
  3. When the visitor wants to stop watching, they close Tobii
  4. At this point, the video is still playing – it's merely hidden, but it can still be heard

So, I had to determine how to stop a video after the visitor clicks Tobii's close button, or its backdrop. This is what I came up with and it seems to work well:

new Tobii()

const initCustomTobii = function() {
  document.querySelector('.tobii__close')?.addEventListener('click', handleTobiiIframes)
  document.querySelector('.tobii__slider')?.addEventListener('click', handleTobiiIframes)
}

const handleTobiiIframes = function() {
  const tobiiIframes = document.querySelectorAll('.tobii iframe')
  if (tobiiIframes) {
    tobiiIframes.forEach(function(iframe) {
      let src = iframe.src
      iframe.src = src
    })
  }
}

initCustomTobii()

I thought I'd share this in case it's helpful to others.

lint issues

Lets update lint rules to make development faster.
Suggestions:

  1. allow font-weight: bold; - very common,
  2. allow color: #aabbcc - fixing to #abc is not good idea, most apps / color pickers will let you get 6 symbols color code.

Youtube API errors

Sometimes if you have page with lots of resources, YouTube modal videos will throw random errors: (sometimes it works, sometimes video does not load, sometimes you get errors when you try to close video and dark overlay stays.....).

After googling, youtube devs says, it chrome issue, so there will be no fix ... And I understand that it is not your problem directly, but i want to find a way, since other users will probably get this too.

Solution can be remove YouTube API and use simple iframe, like it was on previous Tobii version (I just checked code, still have it). Or provide settings for devs to choose how youtube will be played.

1st error: https://www.youtube.com/s/player/11aba956/www-widgetapi.vflset/www-widgetapi.js

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('') does not match the recipient window's origin ('').

2nd error: lightbox.js?ver=1624634839:97

Uncaught TypeError: a[e.getAttribute(...)].playVideo is not a function
at Object.onLoad (lightbox.js?ver=1624634839:97)
at Y (lightbox.js?ver=1624634839:167)
at q (lightbox.js?ver=1624634839:151)
at HTMLAnchorElement.W (lightbox.js?ver=1624634839:201)

Drop IE11

I've found places in code where we can save some bytes by removing .keyCode. Current (optional) polyfill is for IE only, I think.

In Germany, less then 1% of users still use IE. So it's more or less dead after offical support has been dropped last year.

How about removing it for an upcoming v3?

Retina images support

Retina support should be nice to have.

of course, we developers can use simple trick with 2x image width and height with very high compression. 1x screens should render it as 50% width (quality becomes good), retina would also see this images as OK quality. But not tested yet with tobii lib.

p.s. low priority.

Invisible navigation

On image with white background, navigation icons are invisible. (white icon on white background).

Doesnt work with images containing query strings

As this title the doesnt like images containing a query string (like those coming from the Shopify CDN). This was fixed on the first version of Tobi, but doesnt seem to have been carried over to Tobii.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.