๐ŸฆŽ The cross browser extension that blends in

Overview

Rango

Rango is a cross browser extension that helps you interact with web pages using your voice and talon. It does this by drawing hints with letters next to elements that you can use to click, hover, copy or show link adresses and many more features to come.

Installation

In order to use the extension you need two pieces: the extension and the talon files.

You can download the talon files from here. Clone or download them to your talon user folder.

Firefox

You can install the extension through Firefox Add-ons here

Chrome and Chromium Browsers

Due to this issue I am not able to submit the extension to the Chrome Web Store. So it has to be loaded manually. There are two ways to do this:

Download the Zip File

  • Download the latest release from here
  • Extract the contents
  • Go to chrome://extensions/, enable developer mode, click load unpacked, go into the folder that you just extracted and click open.

The downside of this method is that you have to do that every time you want to update the extension.

Build From Source

  • Clone this repository: git clone https://github.com/david-tejada/rango
  • cd into it: cd rango
  • Install with npm: npm install
  • Build: npm run build
  • Go to chrome://extensions/, enable developer mode, click load unpacked, go into the dist folder that you just build and click open.

Once you have done this, in order to update, you just have to:

  • Update your repo: git pull
  • Install with npm: npm install
  • Build: npm run build

You can automate the update process with a shell script.

It's possible that you see some errors after adding the extension manually, just ignore them. The extension will work fine.

Usage

There are two modes: direct and explicit clicking. To switch between them you have to use the command rango direct or rango explicit.

Direct Clicking

This is the default mode. With it enabled you just have to say the characters to click an element. To avoid misclicks it only listens to a pause, one or two letters followed by another pause. If you actually want to enter one or two letters you have to use the knausj command press

Examples

  • a: Clicks on link with the hint a
  • gh: Clicks on link with the hint gh
  • abc: Enters the characters abc
  • press a: Enters the character a

Explicit Clicking

With explicit clicking you have to precede every hint with the word click. This mode prevents any misclicks at the expense of being a bit more tedious.

Other Commands

  • hover <hint>: It hovers over the element. After 10 seconds the element will be automatically unhovered.
  • hover fix <hint>: It hovers over the element. The element will not be automatically unhovered.
  • dismiss: It clears any previously hovered element.
  • show <hint>: It shows the url address.
  • copy link <hint>: It copies the url address to the clipboard.
  • blank <hint>: It opens the link in a new tab.
  • hints toggle: It shows and hides the hints.
  • hint bigger: It increases the size of the hints
  • hint smaller: It decreases the size of the hints

Changing Hints Font Type

At the moment there is no option to customize the hints font type. Options for that will be added in the future. In the meantime if you find hints text difficult to read, apart from using the commands for changing the hints size, you can change the monospace font in the browser settings and the hints will render with that font.

Comments
  • Editing a rich text field which contains a rango hint submits the hint contained when submitting the form

    Editing a rich text field which contains a rango hint submits the hint contained when submitting the form

    I have only witnessed this in Jira but have not gone looking to replicate anywhere else yet.

    If you are editing a rich text input area which has a link in it, it is marked up with a rango hint bq image

    If you then submit the form the hint letters end up in the saved content - bq image

    opened by richardmcmillen 13
  • Not Working in Firefox

    Not Working in Firefox

    I'm using firefox 106.0.1 (64-bit) on ubuntu 22.04 LTS. It was working for some time but stopped working sometime around when the new firefox update came out. However, it does work if you're in keyboard mode and you use the prefix press or upper case but this only works for the alphabet to click links/hints and not for voice commands or the knausj_talon alphabet in text fields, the address bar, etc. The hot keys don't seem to be the issue because I didn't have problems in the beginning after installing but the default configuration is Ctrl+Shift+3 to get the talon request and Ctrl+Shift+Insert to get the talon request (legacy). Below is the output in REPL console of talon when I say, "x", "ab", and "crown af":

    thread<139625494476352> | grammar.cfg_compile 0.097865s thread<139625494476352> | grammar.cfg_list user.rango_hint_styles: 0.000110s thread<139625494476352> | grammar.cfg_list user.rango_hint_weights: 0.000086s thread<139625494476352> | grammar.cfg_list user.rango_hints_toggle_levels: 0.000089s thread<139625494476352> | grammar.cfg_list user.rango_page_location_property: 0.000092s thread<139625494476352> | grammar.cfg_compile_and_link 0.098478s main | engine.phrase plex talon_plugins.subtitles | action speech.enabled() user/knausj_talon/apps/vscode/command_client/command_client.py | action user.emit_pre_phrase_signal() user/knausj_talon/plugin/command_history/command_history.py | action user.history_transform_phrase_text(['plex']) user/knausj_talon/plugin/command_history/command_history.py | action speech.enabled() main | action core.run_phrase(C(None, ['x'])) core | action core.run_command(CommandImpl(Rule("<user.rango_target>")), C(_la_ltuser_2erango_5ftarget_gt_ra, ['x'])) core | action core.run_talon_script(ResourceContext("user.rango-talon.rango_direct_clicking.talon"), TalonScript(code='user.rango_command_with_target("directClickElement", rango_target)'), C(_la_ltuser_2erango_5ftarget_gt_ra, ['x'])) user/rango-talon/rango_direct_clicking.talon | action user.rango_command_with_target('directClickElement', ['x']) user/rango-talon/rango.py | action key('ctrl-shift-insert') main | engine.phrase air bat talon_plugins.subtitles | action speech.enabled() user/knausj_talon/apps/vscode/command_client/command_client.py | action user.emit_pre_phrase_signal() user/knausj_talon/plugin/command_history/command_history.py | action user.history_transform_phrase_text(['air', 'bat']) user/knausj_talon/plugin/command_history/command_history.py | action speech.enabled() main | action core.run_phrase(C(None, ['ab'])) core | action core.run_command(CommandImpl(Rule("<user.rango_target>")), C(_la_ltuser_2erango_5ftarget_gt_ra, ['ab'])) core | action core.run_talon_script(ResourceContext("user.rango-talon.rango_direct_clicking.talon"), TalonScript(code='user.rango_command_with_target("directClickElement", rango_target)'), C(_la_ltuser_2erango_5ftarget_gt_ra, ['ab'])) user/rango-talon/rango_direct_clicking.talon | action user.rango_command_with_target('directClickElement', ['ab']) user/rango-talon/rango.py | action key('ctrl-shift-insert') main | engine.phrase crown air fine talon_plugins.subtitles | action speech.enabled() user/knausj_talon/apps/vscode/command_client/command_client.py | action user.emit_pre_phrase_signal() user/knausj_talon/plugin/command_history/command_history.py | action user.history_transform_phrase_text(['crown', 'air', 'fine']) user/knausj_talon/plugin/command_history/command_history.py | action speech.enabled() main | action core.run_phrase(C(None, crown ['af'])) core | action core.run_command(CommandImpl(Rule("crown <user.rango_target>")), C(crown___ltuser_2erango_5ftarget_gt, crown ['af'])) core | action core.run_talon_script(ResourceContext("user.rango-talon.rango.talon"), TalonScript(code='user.rango_command_with_target("scrollElementToTop", rango_target)'), C(crown___ltuser_2erango_5ftarget_gt, crown ['af'])) user/rango-talon/rango.talon | action user.rango_command_with_target('scrollElementToTop', ['af']) user/rango-talon/rango.py | action key('ctrl-shift-insert') user/knausj_talon/plugin/mouse/mouse.py | action tracking.control_enabled() user/knausj_talon/plugin/mouse/mouse.py | action tracking.control1_enabled() user/knausj_talon/plugin/mouse/mouse.py | action tracking.control_enabled() user/knausj_talon/plugin/mouse/mouse.py | action tracking.control1_enabled() user/rango-talon/rango.py | context.refresh user.rango-talon.rango (tags)

    opened by L4ma01bW13 12
  • Stable hints when scrolling - maintain the same hint for the lifetime of a clickable element

    Stable hints when scrolling - maintain the same hint for the lifetime of a clickable element

    Disclaimer: this is a bit of a mess of a PR, pushing this only to show progress and as a proof of concept. I will clean a lot of this up if you would like to proceed with it.

    Goal

    Typically when scrolling the number of elements and their index position in the intersectors array changes, meaning their hint changes.

    Stablise hints - so that if a link has the hint af, after a scroll event or resize and the link is still in the viewport regardless of what other clickable elements come and go then its hint should remain af.

    If the link is no longer in the viewport then the hint af is released and is free for another clickable element to use.

    Why

    I love rango but one thing I thought would be cool to try is to stablise the hints upon scrolling to reduce distractions when navigating the webpage. The hints changes now are subtle but removing them completely seemed like a nice thing to try.

    As I have been developing this I really notice the difference when going back to rango without this stablisation. ๐Ÿ˜…

    Other than the visual improvements I think it could be a better UX, you can see a link you want to click and then as long as you don't scroll it out of view you can use the same hint.

    Why not

    This does introduce significantly more complexity, so it is arguable if it is worth it. If you like I could look at hiding this functionality behind an option in the extension.

    Other considerations

    • Preferring one character hints when they are available seems like it would be nice. This might necessitate two stacks which can be used, preferring the single char one when it has elements in it.

    Status

    It seems to be working okay-ish, there is a weirdness when it alternates between showing 1 set of hints, and hiding another set of hints, both sets which are on the screen at all times, but at some point during the scroll event elementIsObscured is true. I think one set of hints is hiding the others and so you get this alternate effect. It is pretty easy to replicate on this page when scrolling down the list of files: https://github.com/david-tejada/rango/find/main I have not seen it on other pages yet.

    I think possibly hiding hints on scroll and then reshowing the same hints with the same letters could help. Not 100% sure I am on the right track with that though.


    Other Approaches

    I am probably missing something a little more elegant so please point that out if can think of anything.

    What do you think of the feature and/or approach @david-tejada? Throwing this up for early feedback.

    opened by richardmcmillen 12
  • Rango for Safari

    Rango for Safari

    Wrap Rango as a Safari web extension. Implements clipboard support in the native app.

    Update CONTRIBUTING.md with Safari instructions.

    Here's the app's main window:

    image
    opened by nriley 10
  • Direct clicking when focussed on input field inputs `ร…` - doesn't click requested element

    Direct clicking when focussed on input field inputs `ร…` - doesn't click requested element

    Having seen the recent change where you demonstrated clicking a link while focussed on an input field I tried it out. Though when I do, it doesn't quite work, when focussed on an input and saying the letter for a hint the request is sent to rango, the letter ร… is typed into the input field, and then Talon reports a timeout waiting for response.

    I'm on macos 12.3.1, using up-to-date Firefox.

    opened by richardmcmillen 8
  • Add scrolling

    Add scrolling

    • [x] A command for scrolling an specific element: We will need to find the closest ancestor with overflow.
    • [x] Add commands for scrolling an element to a certain position (top, center , bottom)
    enhancement v0.2.1 
    opened by david-tejada 8
  • Ability to hide rango hints per tab

    Ability to hide rango hints per tab

    https://github.com/david-tejada/rango/issues/20 means that I frequently have to hide/show rango hints when jumping around tabs as I spend a lot of time in Confluence and Jira where this is a problem. It would be great if I could toggle the hints per tab to not have to deal with that.

    Also a sidenote, I find when I toggle the rango hints it seems to cause some significant work for my browser and it lags for a bit. I wonder if this is due to having multiple tabs open and rango having to do a lot of work to show all the hints after them being toggled off? Being able to toggle per tab would also help with that.

    opened by richardmcmillen 6
  • Add CONTRIBUTING.md doc

    Add CONTRIBUTING.md doc

    This explains how to get up and running to debug rango. Including adding web-ext as an explicit dev dependency.

    This is mostly for my own convenience as it took me a while to realise how easy it was and I forgot how to do this after having done it the first time. I thought others may also find this useful. Also, this may not be totally right so please correct me if not, I figured this out from reading the package.json and some googling.

    NOTE: this also includes what seems to be a lot of changes to the package-lock.json, I am not sure if main is missing these changes or if my local set up isn't quite right.

    opened by richardmcmillen 4
  • Not able to click element in google mail - other UI elements aren't markedup with hint

    Not able to click element in google mail - other UI elements aren't markedup with hint

    I haven't noticed this anywhere else yet but I have problems selecting the checkbox in the top left of google mail to select all unread mail. Saying the letter hint performs the animation of the hint but the checkbox is not selected. This does work with Vimium but I haven't looked at what could be the difference yet.

    image image

    Another thing I saw was that in the google mail UI some clickable elements with Vimium aren't marked up with hints in rango

    Rango: image

    Vimium: image

    opened by richardmcmillen 4
  • Support targets where click event was added with addEventListener

    Support targets where click event was added with addEventListener

    Example of this is view replies for 9gag comments

    Possible solutions https://stackoverflow.com/questions/9046741/get-event-listeners-attached-to-node-using-addeventlistener

    opened by AndreasArvidsson 2
  • Ability to define whether or not links opened in new tabs become focussed

    Ability to define whether or not links opened in new tabs become focussed

    I think this means being able to set the selected value https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create when creating the tab here https://github.com/david-tejada/rango/blob/b90edaa346db93cf29423ef91b28450e6aa0e39d/src/background/tabs-messaging.ts#L90 as it defaults to true.

    I am unsure what to suggest for the Talon command, and whether or not it should share the existing blank ... command with an extra qualifier or if it should get a new one. I think I'm leaning towards a new word, some for consideration:

    stash air
    load air
    set air
    store air
    pack air
    

    Trying to think of words which invoke imagery of stashing something away for later use as is common with opening links in new tabs

    opened by richardmcmillen 2
  • Multiple urls attached to the page title

    Multiple urls attached to the page title

    Currently to attach the URL to the title when there is no navigation event (the page uses History.pushState or History.pushState to change the url) I add a mutation observer to the document.head to see if the title has changed. The problem with this approach is that if the page doesn't change the title and there is some other change to the head I keep attaching the new url after the previous ones.

    opened by david-tejada 0
  • Make new tab position follow browser settings

    Make new tab position follow browser settings

    Opening a new tab with blank, stash or clicking multiple elements should follow the settings of the browser.

    https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings/newTabPosition

    opened by david-tejada 0
  • Implement copy/paste to input/textarea

    Implement copy/paste to input/textarea

    paste to <hint>: pastes clipboard into input/textarea clearing its contents beforehand copy <hint>: copies text in input/text area to clipboard

    opened by david-tejada 0
  • Rango swallows key presses when dialog window is open

    Rango swallows key presses when dialog window is open

    For example, when you right click something and open the 'save as' dialog window, commands to write one or more keys are still consumed by rango. This makes it a little bit more difficult to write a file name in the dialog window as you can't use the single letter commands there.

    opened by crschnick 2
  • `copy text <target>` shouldn't copy text of elements with style

    `copy text ` shouldn't copy text of elements with style "user-select: none"

    For example, in this page if you try to select the text of the element with the hint "ax":

    Screenshot 2022-09-03 at 11 46 17 the resulting text is `1npm i @nut-tree/nut-js` instead of `npm i @nut-tree/nut-js`
    opened by david-tejada 0
Releases(v0.2.3)
  • v0.2.3(Sep 2, 2022)

  • v0.2.2(Aug 24, 2022)

    Changed

    • Avoid direct clicking if the user is in the address bar or in the devtools
    • Most hint commands now accept multiple targets, including direct clicking.

    Added

    • Added command tab split to move current tab to new window.
    • Added command tab back to switch between the two most recent tabs.
    • Added detection of more clickable elements using attribute "jsaction" and style "cursor: pointer".

    Full Changelog: https://github.com/david-tejada/rango/compare/v0.2.1...v0.2.2

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Jul 4, 2022)

    Changed

    • Changed hints size and positioning so they get less in the way.
    • Hide hints when scrolling unless they scroll with the page.
    • Don't show hints on disabled elements.

    Added

    • Added commands for scrolling element to top, center and bottom.
    • Added additional parameter to the API for custom scroll amount.
    • Added role="menuitemradio" to clickable elements.
    • Added keyboard clicking.
    • Added element title to "show" command.
    • Added ability to click on multiple targets.

    Fixed

    • Fixed occurrences of duplicated hints.
    • Fixed some elements not reacting to clicks by also dispatching "mousedown" and "mouseup" events.
    • Fixed some elements not reacting to hover by also dispatching "mouseenter" event.
    • Fixed url in title sometimes removing the title and leaving only the url.
    • Fixed url in title not updating with hash changes.
    • Fixed command dismiss buggy behavior.
    • Fix error calling "new Color" with empty string which resulted in hints not showing in some pages (issue #28)
    • Fixed jittery hints after v0.2.0
    Source code(tar.gz)
    Source code(zip)
    rango-0.2.1.xpi(648.04 KB)
  • v0.2.0(Jun 22, 2022)

    Changed

    • Use a different tab than the current one to use as copy-paste area in Chromium to minimize the issue where the clipboard textarea steals focus.
    • Return the focus to the previous active element in Chromium clipboard.
    • Improve the appearance and placement of the hints.
    • Change hotkey to ctrl-shift-3 as some users were having issues with ctrl-shift-insert. Leave the latter as a fallback for backwards compatibility.
    • Improved performance by caching hint background color and first text node element.
    • Improved performance by checking if an element is visible only when necessary.
    • Improved hints toggle responsiveness by first updating the active tabs and then the rest using window.requestIdleCallback.
    • Implement adaptable hints. If part of the element being hinted is still visible it will try to place the hint at the bottom left corner.

    Added

    • Added command to open one or more links in a new tab without focusing it.
    • Added multiple commands for closing tabs.
    • Added command for cloning the current tab.
    • Added commands for scrolling the current page and the scroll container of a particular hint.
    • Added command to copy the text content of a hinted element.
    • Added command to copy the address of a particular hint in markdown format.
    • Added commands to copy the location information of the current hint (host, origin, address, ...).
    • Added command to copy the address of the current page in markdown format.
    • Added commands to change between "boxed" and "subtle" hint style.
    • Added command to change the weight of the hint font between "bold", "normal" and "auto".
    • Added command to refresh the hints without needing to reload the page.
    • Added commands to show or hide the hints in five levels of priority (now, page, host, tab, global).
    • Added commands to include or exclude single letters from hints. Useful to minimize misclicks when using direct clicking.
    • Added URL in the title (useful so that talon knows the current URL) and commands to enable or disable this option.
    • Added flashing hint when using the command hover.
    • Added elements with contenteditable to the elements that need to be hinted.
    • Added shortcut to disable the hints.

    Removed

    • Removed command hover fixed and leave hover without a timeout.

    Fixed

    • Fixed issue #20 regarding the editor TinyMCE. Now, if the whole body is contentEditable, hints won't be displayed.
    • In direct clicking mode, if there is no hint or the hints are off, now it will type the characters.
    • Fixed an issue when some hints would remain even after the hinted element wasn't visible in the viewport.
    • Fixed hints not including combinations of the same letter.
    Source code(tar.gz)
    Source code(zip)
    rango-firefox-0.2.0.xpi(119.36 KB)
  • v0.1.9(May 26, 2022)

  • v0.1.8(May 26, 2022)

  • v0.1.7(May 12, 2022)

  • v0.1.6(May 11, 2022)

  • v0.1.5(May 10, 2022)

    0.1.5 - 2022-05-10

    If you update to this version remember to update rango-talon

    Added

    • Rango now supports iframes!
    • Added commands for changing hints size: hint bigger and hint smaller
    • More ways to toggle hints on and off:
      • With the shortcut ctrl-shift-space
      • Clicking the extension button in the browser toolbar

    Changed

    • Reduced displayHints timeout for added snappiness

    Fixed

    • Fix hints position not being calculated properly on some pages #8
    • Fix hints not returning to its original size after clicking

    Full Changelog: https://github.com/david-tejada/rango/compare/v0.1.4...v0.1.5

    Source code(tar.gz)
    Source code(zip)
    rango-0.1.5.zip(88.25 KB)
  • v0.1.4(May 7, 2022)

    What's Changed

    • Stable hints when scrolling - maintain the same hint for the lifetime of a clickable element by @richardmcmillen in https://github.com/david-tejada/rango/pull/13

    Full Changelog: https://github.com/david-tejada/rango/compare/v0.1.3...v0.1.4

    Source code(tar.gz)
    Source code(zip)
    rango-0.1.4.zip(117.73 KB)
  • v0.1.3(May 7, 2022)

  • v0.1.2(May 5, 2022)

  • v0.1.1(May 4, 2022)

Owner
David Tejada
David Tejada
A lightweight extension to automatically detect and provide verbose warnings for embedded iframe elements in order to protect against Browser-In-The-Browser (BITB) attacks.

Enhanced iFrame Protection - Browser Extension Enhanced iFrame Protection (EIP) is a lightweight extension to automatically detect and provide verbose

odacavo 16 Dec 24, 2022
dotdotdot.js, advanced cross-browser ellipsis for multiple line content.

dotdotdot Dotdotdot is a javascript plugin for truncating multiple line content on a webpage. It uses an ellipsis to indicate that there is more text

Fred Heusschen 1.7k Dec 20, 2022
Modern Cross Browser Testing in JavaScript using Playwright

Modern Cross Browser Testing in JavaScript using Playwright This repository contains the example code for the Modern Cross Browser Testing in JavaScri

Applitools 5 Oct 3, 2022
A lightweight cross browser javascript scrollbar.

tinyscrollbar ** HELP MAINTAINER NEEDED!! ** Environments in which to use tinyscrollbar Browser support differs between the jQuery plugin and the plai

Maarten Baijs 398 Nov 9, 2022
Pretty, customisable, cross browser replacement scrollbars

jScrollPane - cross browser custom scroll bars jScrollPane is a jQuery plugin which allows you to replace a browser's default scroll bars (on an eleme

Kelvin Luck 2.2k Dec 15, 2022
Simple wrapper for cross-browser usage of the JavaScript Fullscreen API

screenfull Simple wrapper for cross-browser usage of the JavaScript Fullscreen API, which lets you bring the page or any element into fullscreen. Smoo

Sindre Sorhus 6.7k Dec 30, 2022
A jQuery plugin that adds cross-browser mouse wheel support.

jQuery Mouse Wheel Plugin A jQuery plugin that adds cross-browser mouse wheel support with delta normalization. In order to use the plugin, simply bin

jQuery 3.9k Dec 26, 2022
Freewall is a cross-browser and responsive jQuery plugin to help you create grid, image and masonry layouts for desktop, mobile, and tablet...

Freewall Freewall is a cross-browser and responsive jQuery plugin to help you create many types of grid layouts: flexible layouts, images layouts, nes

Minh Nguyen 1.9k Dec 27, 2022
๐Ÿ”จ Cross-browser JavaScript library to disable scrolling page

scroll-lock Cross-browser JavaScript library to disable scrolling page Live demo | README ะฝะฐ ั€ัƒััะบะพะผ New features 2.0 More advanced touch event handli

null 253 Dec 17, 2022
A super-lightweight, highly configurable, cross-browser date / time picker jQuery plugin

Zebra Datepicker A super-lightweight, highly configurable, cross-browser date/time picker jQuery plugin Zebra_Datepicker is a small yet and highly con

Stefan Gabos 391 Dec 29, 2022
Cross-browser plugin to remove addictive features on YouTube like thumbnails, comments, previews and more...

ZenTube Installation Features Remove some (more) elements from Youtube to make it less addictive. Mix and match between the following options: Hide or

inversepolarity 57 Dec 17, 2022
Eth-explorers-extension - Chrome extension to open Ethereum addresses & transaction hash from any page on popular explorers + dashboards

eth-explorers-extension(s) This repository contains two folders with two extensions that work for address and transactions respectively. 1. eth-addres

Apoorv Lathey 71 Jan 6, 2023
Nami Wallet is a browser based wallet extension to interact with the Cardano blockchain.

Nami Wallet Nami Wallet is a browser based wallet extension to interact with the Cardano blockchain. It's an open-source project and built by Berry Po

Berry 335 Dec 29, 2022
A Browser extension that not only makes your browsing experience safe but makes it optimized

Sia Sia is a browser extension that not only makes your browsing experience safe but makes it optimized Table of Contents About The Project Built With

Arun Govind M 14 Feb 23, 2022
Browser extension for generating HOTP passcodes for Duo Security Multi-Factor Authentication

duo-extension Browser extension for generating HOTP passcodes for Duo Security multi-factor authentication. Compatible with Firefox and Chromium-based

Avik Rao 11 Oct 25, 2022
EkoolExtended - Browser extension with bunch of tweaks for the ekool.eu

Ekool Extended Ekool Extended is a browser extension that has a bunch of tweaks for the ekool.eu Since it's a first Alpha version it has only one feat

null 1 Jan 4, 2022
A2er - Fun browser extension, changing all words ending with `a` to end with `er`.

a2er Fun browser extension, changing all words ending with a to end with er. This started as a joke between friends and me, pronouncing words ending w

Sebastian Schicho 1 Jan 10, 2022
Demodal is a browser extension that automatically removes content blocking modals including paywalls, discount offers, promts to sign up or enter your email address and more.

Demodal Demodal is a browser extension that automatically removes content blocking modals including paywalls, discount offers, promts to sign up or en

Elbert Alias 225 Jan 4, 2023
Browser Extension to deliver AI-generated alt-text for the Visually Impaired.

GenAlt - Generated Image Descriptions for BVI The Blind and Visually Impaired (BVI) rely on alt-text, image descriptions, to experience the trillions

Anish 11 Sep 10, 2022