Giter VIP home page Giter VIP logo

clippy's Introduction

Hi there ๐Ÿ‘‹

I'm Nabil Tharwat, a software engineer, content creator, and mentor based in Cairo, Egypt. I started coding when I was 12 with VB, and now living in JS land. I love contributing to open source. Accessibility and performance are part of my eternal quest.

I run a YouTube channel and a weekly podcast. My articles can be found on my blog, even the ones published on freeCodeCamp news and dev.to. I also founded an online community, Valarium, make sure to check them out!

Get in touch

Email and Twitter are your best channels. You can also find me on LinkedIn and Discord.

Beyond work

When I'm not coding some frontend stuff I'm usually found experimenting, mentoring people new to the field, trying out new utilities on the market, blogging, going live, making videos and devlogs, or contributing to Valarium.

To infinity and beyond

  • ๐Ÿ”ญ Iโ€™m currently working on some interesting ideas!
  • ๐ŸŒฑ Iโ€™ve finally graduated Computer Science at Cairo University, and still exploring mental health for developers
  • ๐Ÿ‘ฏ Iโ€™m looking to collaborate on projects built with technologies like TypeScript!
  • ๐Ÿ’ฌ Ask me anything!
  • ๐Ÿ˜„ Pronouns: He/Him

Sponsor

I have a GitHub Sponsors profile up if you'd like to support me and my work! ๐Ÿ™๐Ÿ˜„

y u m

clippy's People

Contributors

allcontributors[bot] avatar iamkacperwasik avatar kl13nt avatar mahmoudhendi1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

mahmoudhendi1

clippy's Issues

Feature: A better tutorial/about page

Given that features are currently growing in size a better way instead of the intro on the home page is to have a separate "about" window with all the features and disclaimers.

Feature: Improved accessibility

There's a major flaw with the current design. The left click to copy and right click to delete listeners aren't accessible to keyboard users. Thus the whole app is completely useless without a mouse. Adding a context menu or buttons like the pin one would grant more a11y.

  • Entry Keyboard Navigation
  • Copy Entry Button
  • Delete Entry Button
  • Pin Entry Button
  • Pinned Entry Indication
  • Multi-Select Toggle

The new design will be the following:

image

๐Ÿ› Bug: about page freezes and is unclosable

Describe the bug
about page freezes and is unclosable

To Reproduce
Steps to reproduce the behavior:

  1. copy repo
  2. npm run dev or npm run make
  3. start the program
  4. see whats happening

Expected behavior
fully loaded about page

Screenshots
image

Environment (please complete the following information):

Possible fix
comment out this line:

aboutWindow.hide();

add show: true to

clippy/src/index.js

Lines 309 to 312 in 0703612

options: {
...DEFAULT_PAGE_OPTIONS,
parent: mainWindow,
},

Feature: Bulk delete

Title says it all. Having a bulk delete option would be pretty awesome! The bulk selection algo is already in place and is being used in bulk copy, so why not add a new method bulkDelete or deleteSelection that deletes all currently selected entries? Of course deleting a number of items would require a confirmation prompt, which should be easy as well.

๐Ÿงฉ Feature: Display update details after restart

Is your feature request related to a problem? Please describe.
I'd like to display the release notes that autoUpdater fetches. When a user restarts Clippy after a successful update that info should be displayed using react-markdown.

  1. On autoUpdater update-downloaded store that data in the local app data
  2. Set store.isUpdating to true (already done)
  3. On launch, check store.isUpdating
  4. If true, send event to render process to display release notes
  5. Set store.isUpdating and related values to false

Additional context
Make sure to prevent all that when the platform is linux.

๐Ÿ› Bug: Multi-select error invalidates previous selections

Describe the bug
Trying to copy any non-text entity will unselect all the selected entities

To Reproduce
Steps to reproduce the behavior:

  1. Copy multiple texts
  2. Copy an image
  3. Press Shift and select some texts
  4. Select an image
  5. All entities become unselected

Expected behavior
The alert pop up, the image cannot be selected, and other selected entities will remain the same.

๐Ÿ› Bug: About page doesn't load on Ubuntu

To Reproduce
Steps to reproduce the behavior:

  1. clone this repo
  2. install dependencies
  3. npm run dev
  4. click About in the top-left corner
  5. blank page

Expected behavior
page with content

Screenshots
image

Environment (please complete the following information):

Additional context
It can be fixed by changing

aboutWindow.loadURL(path.join(__dirname, "about.html"))

to

aboutWindow.loadURL(`file://${__dirname}/about.html`)

Documentation and release management

Currently Clippy doesn't have a release pipeline, proper versioning, nor any sort of documentation such as contribution guides. This is bad for users who aren't tech-savvy and would like to download this app, and developers that wish to contribute. More info is needed.

๐Ÿ› Bug: program lag and drains computer CPU when you copy .jpg file

Describe the bug
When you copy some image that is .jpg, Clippy starts to lag and drains computer cpu.

To Reproduce
Steps to reproduce the behavior:

  1. copy repo
  2. npm run dev or npm run make
  3. start the program
  4. copy any image from google
  5. see whats happening

Screenshots
image
image

Environment (please complete the following information):

๐Ÿ› Bug: standard-version generates wrong version numbers

Describe the bug
The maintainers haven't responded to my issue yet, so I'll have to implement a work-around in the meantime.

To Reproduce
Steps to reproduce the behavior:

  1. npm install
  2. npm run release
  3. generates wrong version using before-previous-tag commits
  4. repeat

Expected behavior
Should just bump version number correctly and generate a proper change log.

Environment (please complete the following information):

  • OS: Windows 8.1 Pro
  • Version: Clippy 2.0.0

Additional context
We may use npm-version coupled with conventional changelog-cli.

๐Ÿงฉ Feature: Options Page

Is your feature request related to a problem? Please describe.
An options page is inevitable. Auto-updating is not everyone's cup o' tea. It certainly ain't mine. Giving users more control over it would be nice. Keyboard shortcuts as well.

Describe the solution you'd like
Define a full-page card Preact component page that gives you control over what you wish to modify.

Describe alternatives you've considered
A completely separate page. This page would have a separate entry point in webpack.renderer.config.js and implements simple Preact form validation for settings.

Feature: Pin entries to the top of the list

Description

This feature is implemented in the new Windows 10 clipboard.

  • Pinned entries shouldn't be deleted when Clear log is clicked
  • There should be a pin icon next to all entries that when clicked pins the respective entry to the top of the list
  • Could be a globally attached listener that looks at the element currently pointed at by the cursor, and if it's an entry then display the pin next to it. This would save resources instead of rendering a pin for each entry in the list. This would of-course require adding a data-item=true to the li container.

๐Ÿงฉ Feature: Support syntax highlighting

Is your feature request related to a problem? Please describe.
Syntax highlighting might be fun! I'd love to see the code I copy from online sources to have full syntax highlighting on my clipboard instead of having to copy it back to and editor.

Describe the solution you'd like
react-syntax-highlighter is one of the best libraries for this task.

Feature: Show which entry is on the clipboard

I think this would be very possible. If on inserting something that's not already on the clipboard then it should be marked as 'onClipboard', and have another state _id pointing to the entry with the id of the entry currently on the clipboard.

The entry in the list could be labelled somehow or just have a constant border/outline.

Feature: Keyboard shortcuts

The following shortcuts would make it easier to manage the clipboard:

  • CTRL + DELETE - clear clipboard
  • SELECT MULTIPLE + DELETE - delete selected entries
  • SELECT MULTIPLE + CTRL + C - copy selected entries
  • CTRL + SHIFT + DELETE - clear log

This could be implemented in two stages

  • Add general listeners for shortcuts
  • Add an options page to manage these shortcuts

๐Ÿงฉ Feature: Settings page

Is your feature request related to a problem? Please describe.
Currently a few instances of changing behavior have come to my attention based on user feedback. Mainly the multi-select behavior and keyboard shortcut management. Providing a minimal settings page to handle that should be better.

Will research this a bit more.

Todo:

  • Settings Page
  • Menu Item
  • Shortcut Controls
  • Multi-Select Behavior
  • Copied HTML Render Behavior

๐Ÿ› Bug: Tray click handler doesn't fire on Ubuntu 18 LTS

Describe the bug
Clicking the tray icon should open up the program.

To Reproduce
Steps to reproduce the behavior:

  1. Launch Clippy
  2. Minimize it to tray
  3. Click the tray icon
  4. Nothing happens

Expected behavior
Clippy should've been shown again.

Environment (please complete the following information):

Additional context
There's another bug on Kali where the tray icon doesn't show up at all. Perhaps removing the tray entirely and replacing it with normal minimize behavior until I implement a GNOME Extension for it would be better.

๐Ÿ› Bug(linux): right click prompt all options disabled on kali linux

Describe the bug
Right clicking an entry on kali linux doesn't provide a proper dialog. The dialog has no clickable options. Options are visible, but not clickable.

To Reproduce

  1. Copy anything
  2. Right click the entry
  3. The dialog that will show up will have no clickable options

Expected behavior
The dialog should be clickable normally.

Screenshots
image

Environment (please complete the following information):

Feature: Select multiple entries at once

Description

This may be a bit tricky. Just like everything, holding CTRL or SHIFT while clicking different entries should select all the entries.

Edge Case

There's an edge case that I figured. Choosing multiple text entries should return them as a single \n separated string, while choosing different types is troublesome.

An image AND a text node can't be concatenated, in which case the current selection will accept a single type.

How To

This is a frontend job mostly. Modify the Preact code in render.js to include this. Make sure to add a check in the normal click handler to prevent copying instantly if CTRL is active.

๐Ÿ› Bug: tray icon not visible on kali linux

Describe the bug
It's come to my attention that electron doesn't support tray icons on linux in general. The fix would be to conditionally render the tray on macOS and Windows only, and minimize to taskbar normally on linux otherwise.

Environment:

  • OS: All supported linux distributions.
  • Version: master

WIP Chore: Test coverage

  • Setup codecov with GH actions
  • Add badge to README https://shields.io/category/coverage
  • Add tests for existing functionality

๐Ÿงฉ Feature: Drag Select

Is your feature request related to a problem? Please describe.
On multiple operating systems, when clicking, holding, and dragging the mouse over a collection of files, all the files in the selection range are selected. If this could be implemented in Clippy it'd make the effort of selecting multiple consecutive entry items a lot easier.

Describe the solution you'd like
Adding a click handler that adds a mousemove listener and creates a rectangular selection zone based on mouse movement may be a way to implement this.

Describe alternatives you've considered
A library exists for this, called SelectionJS. We could either mock its behavior or use it right away. It's only 4 KBs.

Additional context
The behavior would be the same across Windows and Linux since it's rather dependent on the render Chromium process.

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.