Code Monkey home page Code Monkey logo

new-tab's Introduction

Build status Coverage status Chrome Web Store version Licence

New Tab

A high-performance browser new tab page that gets you where you need to go faster. Utilises the latest tools and tech, packaged into an easy to use Chrome browser extension.

Add to Chrome

Overview

I was frustrated with the default Google Chrome new tab page experience. The "top sites" feature quickly outgrew its usefulness and I found myself using bookmarks instead every time. I never used the Google web search input either, as the search bar is all I need. I wondered, "If I could design my own new tab, what would it look like?"... enter the New Tab extension.

What started as an experiment to play with the Chrome browser APIs and explore web performance optimisations, New Tab has grown into something that genuinely improves my productivity. Maybe it can help you too!

Features

  • Fastest loading of any new tab page with all the features you expect.
  • Distraction-free, minimal design aesthetic with multiple themes.
  • A list of your open tabs, recently closed tabs, and top sites.
  • Search tabs, bookmarks, history, and top sites in one place.
  • Simple bookmarks bar.
  • Links to frequently used destinations in your browser.

Design goals

Issue Why / How
Access Still have access to common things like the bookmarks bar etc.
Speed Near-instant access to functionality. Page load performance, runtime performance, and file size should all be scrupulously optimised.
Privacy & Security Zero user tracking (unlike most other extensions!). Very restrictive Content Security Policy. Local data only; no remote data fetching.
Unobtrusive No annoying things like distracting colours, illegible text, or entries in your right-click menu.

Technology

Browser support

Recent versions of Google Chrome and other Chromium-based browsers (e.g., Brave, Edge).

Bugs

Report any bugs you encounter on the GitHub issue tracker.

Known issues

  1. The extension's bookmarks bar functionality is limited. Browsers don't allow extensions to control the native bookmarks bar visibility, so the extension recreates a simple version. The goal is high-performance and fast access rather than emulating the native bookmarks bar. Use the bookmark manager for access to all features.
  2. The page needs to be reloaded after adding, editing, or removing bookmarks. The changes are not live because bookmarks don't change so often.

Changelog

See releases on GitHub.

License

MIT license. See LICENSE.

The lightning bolt icon is from twitter/twemoji which is licensed CC-BY 4.0.


© 2024 Max Milton

new-tab's People

Contributors

dependabot[bot] avatar maxmilton avatar mend-bolt-for-github[bot] avatar renovate-bot avatar renovate[bot] 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

Watchers

 avatar  avatar  avatar  avatar

new-tab's Issues

Circular dependency

Just clone the repo and then ran the build

(!) Circular dependency
src/components/BookmarkNode.ts -> src/components/BookmarkFolder.svelte -> src/components/BookmarkNode.ts

Latest build

How to download currently latest build v0.14.0 for chrome?
On webstore it's old version.

Public release blockers

The next public release is currently blocked due to:

  • Bookmark folder popups render off screen when too far to the right: #1121
  • Bookmark folder popups don't show and hide at the correct time: #1122
  • Bookmark folders don't look correct: #1120, #1123
  • Settings UI needs updating, doesn't need to be perfect but at least a basic refresh: #621
  • Chrome Web Store listing needs updating: #1119, #259

I want to get all of these fixed before publishing the next public release. For anyone who wants to try intermittent versions you can go to https://github.com/maxmilton/new-tab/releases and manually install the latest release's chrome-extension.zip.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • chore(deps): lock file maintenance

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

bun
package.json
  • stage1 0.8.0-next.7
  • @ekscss/plugin-import 0.0.12
  • @maxmilton/stylelint-config 0.0.15
  • @playwright/test 1.41.0
  • @types/bun 1.0.2
  • @types/chrome 0.0.258
  • @typescript-eslint/eslint-plugin 6.19.0
  • @typescript-eslint/parser 6.19.0
  • ekscss 0.0.17
  • eslint 8.56.0
  • eslint-config-airbnb-base 15.0.0
  • eslint-config-airbnb-typescript 17.1.0
  • eslint-config-prettier 9.1.0
  • eslint-plugin-import 2.29.1
  • eslint-plugin-prettier 5.1.3
  • eslint-plugin-unicorn 50.0.1
  • happy-dom 13.1.4
  • lightningcss 1.23.0
  • prettier 3.2.4
  • stylelint 16.1.0
  • stylelint-config-standard 36.0.0
  • terser 5.27.0
  • typescript 5.3.3
  • bun-types 1.0.23
github-actions
.github/workflows/ci.yml
  • actions/checkout v4
  • oven-sh/setup-bun v1
  • actions/checkout v4
  • oven-sh/setup-bun v1
  • actions/upload-artifact v4
  • actions/checkout v4
  • oven-sh/setup-bun v1
.github/workflows/codeql-analysis.yml
  • actions/checkout v4
  • github/codeql-action v3
  • github/codeql-action v3
  • github/codeql-action v3
.github/workflows/publish.yml
  • actions/checkout v4
  • oven-sh/setup-bun v1
  • maxmilton/action-create-release v0
.github/workflows/semgrep-analysis.yml
  • actions/checkout v4
  • github/codeql-action v3

  • Check this box to trigger a request for Renovate to run again on this repository

Too easy to open the wrong bookmark folder

After the fixes for #1122 we are in a position where bookmark popups are shown/dismissed at the right time, other than the scenario where a folder popup is open and when mousing over to it the mouse cursor hits another folder opening it + dismissing the actual target folder. This leads to opening the wrong folder too easily.

We could fix this by adding a short delay before opening folder popups. Getting the timing just right might be interesting... 160ms?

Empty bookmark subfolders should have an "(empty)" entry

When a bookmark folder is empty it should be clear to the user. Chrome shows a (empty) item in the folder popup in a muted colour. We should do the same.

On the old master release branch this was already implemented but after the big refactor it now needs to be implemented again.

Bookmark folder popups render off screen when too far to the right

When a folder popup is rendered we need to check if its position fits on the screen (horizontally) and if not then handle appropriately.

If the level is 1 (bookmarks bar is level 0) then probably render the right edge aligned with the right side of the screen (CSS right: 0). If the level is > 1 experiment with rendering the folder popup to the left of the parent folder (including for nested levels too for consistency).

Favicons not updating when the site is not in Chrome's favicon cache

Another issue arising from PR #273, in order to get the best possible performance, favicons are loaded directly from the Chrome favicon cache (chrome://favicon/). This is amazing for performance because there's no remote network requests slowing down page rendering.

The issue arises in that when you open a website for the first time and its favicon is not in the cache, it will never change from the default favicon, even after the chrome.tabs.onUpdated event. Apparently it can take a moment for the favicon to be added to the cache but its well after the tab update event has fired.

There are some existing Chrome bugs which could be related to this but we might still be able to implement a workaround using a combination of chrome://favicon/ and changeInfo.favIconUrl in the meantime.

Related:

Bookmark folder popups don't show and hide at the correct time

On the next branch the logic behind rendering bookmark subfolders has been rewritten.

Before it was CSS based for layout etc. which was great for performance and simplifying logic but had limitations like the inability to scroll a long list of bookmark items or control folder position when overflowing the screen. The new logic is JS based so there's no longer any issues with position and layout, however, the implementation is still incomplete.

Current issues:

  • There should be a short delay before opening the first folder on hover to prevent accidental opens (this works now!).
    • After the first folder is open, there should be no delay opening nested folders since that's annoying and feels like the app has frozen (Chrome actually still uses a delay for nested folders but I don't think that's ideal).
  • There should also be a delay before closing a folder popup (on mouseout) to closing when the user is moving their mouse to a nested folder etc. (this work now too! Interestingly Chrome keeps folders open until a click outside or ESC key press).
    • The delay timeout speed should be tweaked for the optimal UX.
    • When opening another folder on the same level any existing folder popup on that level should be closed immediately.

Many things here differ from the Chrome UX because Chromium is designed for good a11y however this extension favours speed.

Open Tabs list reset on tabs events while a search is active

If a search is active and a tabs event fires, the "Open Tabs" section is updated without the search filter. It's easy to replicate (and especially annoying) on initial browser load while all the previous open tabs are loading.

Version: v0.15.0

Bookmark folders don't always look consistent

  • Folder popup width often too narrow resulting in bookmark item title text being truncated
  • Folder popup min and max width
  • Nested folders with long scrollable lists can result in the scrollbars rendering strangely (although this may be an issue due to my local browser's experimental flag options)
  • Subfolders are missing a caret icon (to help differentiate folders from links)

Change low resolution picture in the chrome webstore

Hey man!

Love this extension. It's absolutely amazing, super fast and comfy. I follow ur code changes. This tool increases my productivity by removing distracting bookmarks bar, and show very fast what top sites i visit since it's shown on the new tab page.

However I believe more people should know about it!

The current image in the webstore https://chrome.google.com/webstore/detail/new-tab/cpcibnbdmpmcmnkhoiilpnlaepkepknb
however is very ugly; low resolution and doesnt show all capabilities! Could you perhaps change it to a higher resolution image (or multiple images) and perhaps show dark mode too? Or even better would be a GIF there showing new tab with its capabilties (change layout, themes etc).

It would definitely 'sell' this extension more I think.

Anyways, thanks.

Settings needs to be redesigned

Although the settings view is functional, it's not so pretty and could be more strightforward. Adding a little text documenting what's going on would probably be helpful too.

Move from jsdom to Happy DOM for faster tests

In the theme of trying to make everything in this project fast, it would be nice if the unit/functional tests were also made faster. Although jsdom is widely used and stable, it's also a little slow to initialise. Switching to happy-dom would greatly speed things up.

Even though Happy DOM is less used in the wild, they still strive to make it accurate. Anyway once we have [more] e2e tests, those will provide strong validation that our code is working as expected.

This is currently blocked because of issues within Happy DOM; their TreeWalker implementation is currently broken (our JS "framework" stage1, abuses TreeWalker internally). I'll update this issue once I've made a bug report on their repo.

Bookmark folder popup position not always ideal

Now that #1151 is merged we have bookmark folder popup position that is "good enough" for general use but the experience is not ideal in all scenarios.

For context, "top level" means a folder is on the bookmark bar itself and not nested inside another folder.

Folder popup position scenarios

  1. Normal/default position
    • Top level: Show below the parent
    • Nested: Show beside the parent (on the right side)
  2. Overflowing viewport to the right
    • Top level: Align the popup to the right edge of the viewport
    • Nested: Show beside the parent (on the left side)
      • Subsequent nested folder popups should also open to the left
        • At this point if a popup overflows to the left of the viewport then open to the right of the parent
  3. Overflowing viewport both left and right
    • If the viewport is very narrow and the popup overflows on both sides there's basically nothing we can do. In this case the user will need to use the native bookmark bar or bookmark manager.

The current popup position logic from #1151 covers everything other than opening subsequent nested folder popups to the left (and then to the right if overflowing the left edge of the viewport).

Other issues

  • Popups remain in place when the parent is scrolled. Native chrome closes the popup upon scrolling the parent, perhaps we should do the same. TBH it's not such a big deal though.

[Bug] Theme switches to light even when dark is set

At random times new tab shows a white background as if the light theme was set. However it says dark theme is in use in the settings.

This is really annoying since it hurts my eyes haha. I don't know why or when this happens but perhaps someone else has had it too?

Version: 0.18, not from chrome webstore but self build using npm build

Refactor the bookmark bar overflow functionality

Durring the last big refactor I commented out the existing bookmark bar overflow code as I wasn't very happy with. How bookmark sub folders work needs to be completely refactored so as part of that work we should also write a new way to handle overflow.

TODO: Find some good virtual list implementations for insperation.

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Location: .github/renovate.json
Error type: Invalid JSON (parsing failed)
Message: Syntax error: expecting end of expression or separator near "] // "b

Inconsistent LinkItem <img> padding

The LinkItem image padding is currently added if there's a title; class="{_node.title && 'pad'}". No title means _node.title === undefined and no padding is added, which is what we want. However, on some systems Chome returns a space character when there is no title, breaking the logic.

We need to figure out what's causing this difference between systems and change the logic to still work for both. This needs to be as high performance as possible since it's normally repeated many times on page load.

Known working system: Arch Linux + Chrome dev channel, version 70.0.3538.110
Known broken system: Ubuntu Linux + Chrome Version 72.0.3626.7 (Official Build) dev (64-bit)

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on all branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please delete the greenkeeper/initial branch in this repository, and then remove and re-add this repository to the Greenkeeper App’s white list on Github. You'll find this list on your repo or organization’s settings page, under Installed GitHub Apps.

Not able to scroll in bookmark folders

When the screen height is limited it's not possible to access all the bookmarks in a list because some are rendered off-screen. Need to implement some way of scrolling for access to all bookmarks.

Missing privacy policy

The most recent Chrome Web Store submission was rejected due to a "missing privacy policy".

Sadly there's little notice about where the privacy policy should be and how to link to it. Do we really need a privacy policy or could filling out the store listing better resolve the issue? This all seems a bit strange because the extension explicitly does not collect any user data and is very strict about privacy. The extension does however use browser supplied data (only) about open tabs, history search, etc. Because of the ambiguity this needs deeper looking into.

Excerpt from the rejection notification email:

Item name: New Tab

Item ID: cpcibnbdmpmcmnkhoiilpnlaepkepknb

Violation(s):

User data privacy:

- Violation reference ID: Purple Nickel
- Violation: Privacy policy link is broken or unavailable
- How to rectify: Add a publicly accessible and working link to your privacy policy.
- Relevant section of the programme policy:
	If your product handles personal or sensitive user data, then your product must post a privacy policy. (learn more)

"learn more" link: https://developer.chrome.com/webstore/program_policies#userdata

More info:

[FEATURE] Add Unsplash Backgrounds

Hi,
I like the extension very much. It's more helpful than most other new tab pages. One thing i would like to have is a randomly changing unsplash background.

Is it possible to add it?

Black flashing when using white theme

When using the extension with the white theme, the screen is flashing black shortly when loading the new tab page.

Maybe CSS for the black theme is applied on load and the white theme CSS is overwriting it later on?

Chrome Web Store listing needs updating

Before we can publish a new version on the Chrome Web Store it's now required to have screenshots and privacy info. This would be a good opportunity to rewrite the content etc. too.

Related: #259

Screenshots

The project sounds cool! It could use some example screenshots though - both in the readme and in the extension store.

There's not much motivation to install something and try it out without an idea of what you'll be getting.

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.