Git Product home page Git Product logo

prokeys's Introduction

prokeys logo

Developed by: Aquila Softworks (Gaurang Tandon, Jaidev Shriram, Yoogottam Khandelwal and Varun Singh)

UPDATE (May 2020)

Work on this project had come to a halt for quite a long time, and we have now taken the sad decision to suspend all activity on this project (this also includes answering customer queries or fixing critical vulnerabilities if any). We are college students who are caught up in our own collegework and side-projects, and are unfortunately unable to find the time or energy to work on this project anymore.

I (Gaurang) had originally conceived this project five years ago, and I have appreciated the long term association with this, and the learning I have gained by working on this, as well as by interacting with several valuable customers. To date I have received hundreds of emails, and replied to many of them. Even if I had not replied to your mail, please be assured I had definitely read it but could not reply due to time constraints.

Entire organizations have used this project - which merely started as a side project for me - in their customer service units, and I am more than honored to have started a project that was - at its peak - used by 30k+ users globally. I appreciate all the love and support this project got from all the users, and I am forever thankful to them.

If you still use ProKeys, do not worry! It will continue to work as it has worked so far. I own the extension on the Web Store, and I am NOT going to sell this extension off to a third party, since I am aware that this extension handles critical personal user data, and the chances that a third party could potentially sell that data are large.

Note: Even though work on this project is halted, we are not giving up the rights to the name on the Web Store. The ProKeys extension still continues to exist on the Web Store. It is still being regularly used by 20k+ users globally. The license terms still remain intact.

version users rating
deps repo size

ProKeys is a completely free, Google Chrome and Opera extension that lets you be productive in online text-related work with its number of features like:

[More info on all these in Help section inside the app]

  1. Snippets - define custom abbreviations, and retrieve the text associated with them simply by pressing the hotkey (default: Shift+Space). Example: "brb" can expand to "Be right back!"
  2. Placeholders - are fields in the snippet body that can be given dynamic values on using the snippet.
  3. Mathomania - do math without leaving your text editor, and without calculators. Example: "[[ 15% * 600 =]]" gives "90" and "[[ (5+6) * 15^2 =]]" gives "2475".
  4. Clipboard access - insert [[%p]] anywhere in your snippet body. It will automatically be substituted with the current clipboard data.
  5. Snippet embedding: you can embed one or more snippets inside another snippet, simply by doing [[%s(snip_name)]].
  6. Auto-Insert - Quotes ('"') and braces ('(', '[', '{') are auto-completed, and you can specify your custom insert-it-for-me also (like, inserting a '>' on typing of a '<') in the settings.
  7. Date/Time Macros - embed short symbols inside the parentheses of '[[%d()]]' inside a snippet body and it will auto replace the symbol with the current date and time related value. A sample snippet as well as a guide has been provided (in Help section inside the app). Date/Time Arithmetic - use the + or - sign to move forward or backward in time in date/time macros. Supports both relative as well as independent evaluation.
  8. Omnibox support - search through your snippets and use them right in the browser address bar!
  9. URL Macro - insert customizable parts of the current tab URL into the snippet.
  10. Variables - built-in variables holding dynamic values for "date", "time" and (browser) "version"
  11. Tab Key - The tab key can be made to insert 4 spaces, instead of it's default function, thus speeding up work.
  12. Context menu access - for blocking sites and inserting snippets.
  13. Sync/Local storage - Use whichever you prefer.

Libraries/Code sources

Except for the feather-weight open-source QuillJS rich text editor, I only utilized vanilla JS for super performance and less app size. Also Eric Meyer's CSS reset stylesheet - public domain - has been used with modifications.

Some icon images have been sourced from Font Awesome 5. The license is at this link. No changes (except scaling) were made to these images.

Technical details

Are shared on here in a long, three post series. In brief: this extension uses content scripts which are injected into every page and (what follows is for the snippet functionality only) every time the user presses the hotkey, a check is made for the preceding text, which if matches the name of any of the snippets, is substituted with the snippet body. A subsequent test for placeholders is made as well.

Contribute

First of all, thanks for your contribution! Every small bit of it counts! You can:

  1. Create a new issue for bugs, feature requests, and enhancements.
  2. Write a review (or anonymous feedback), or get support with some technical problems.
  3. Fork the repo, make changes, and submit a pull request, describing the changes made.
  4. Help me translate ProKeys to your native language.
  5. Share the word about ProKeys with people!
  6. Monetary donations are gratefully accepted at email [email protected] using PayPal

Development

To setup this repo, clone it, cd into it, and then run npm run build. This will create a unminified development build in ./dist which you can then load into Chrome. This step is required because Chrome does not yet natively support import/export syntax for Chrome extensions.

We use both global variables and import/export ones. The import/export ones are either functions or unmodified constants. Only those variables are declared under window which need to be modified in different scripts.

Contact us - [email protected] - to discuss anything related to the above if you want to.

prokeys's People

Contributors

ammarbinfaisal avatar ammarbinfaisal1 avatar dependabot[bot] avatar gaurangtandon avatar iwrote avatar lee-tts avatar yoogottamk 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  avatar  avatar  avatar

prokeys's Issues

Improvement in export modal v3.1

Instead of:

image

we can put just 3 simple radio boxes under heading "Choose use of data":

  1. Backup entire data
  2. Backup only snips
  3. Print all snips

as, when you try to select, in the current version, "Entire data" followed by "to print...", you get the same data as you'd get if you select "Entire data" and then "to backup"

Another solution (better)

The combination of "Entire data" followed by "to print..." should give printable data including all properties in user settings.

v3.1 Add null as a delimiter.

In the text below (originally typed in gmail text area)-

brb

Space is set as a delimiter in the default list. But the "brb" above didn't expand like the one below, probably because it is on the edge of the window so there is no character before it. No delimiter.
(The dot before expanded brb was added to show the space automatically removed by githubs formatting engine.)

. be right back

Can you permanently add null to the list of delimiters or something? So that snips typed in the very edge of a window also expand.

JS Error

Browser name: Chrome
OS name: - Win7
Description: I got a JS error in chrome console

Uncaught TypeError: Cannot read property 'substring' of undefined
snippet_classes.js:formatted:154

Line:
return t.timestamp = "number" == typeof e.timestamp ? e.timestamp : Date.parse(e.timestamp.substring(11)),

I can't use the extension due to this error
This happens in the Options page as well as Regular webpages

Probable cause: My saved snippets don't have all the same structure, some contain the keys [body, name, timestamp] while others only have [body, name] or timestamp is null
{"name":"brg","body":"best regards","timestamp":null}

Please fix it, thank you

v3.1 Import/Export Breakdown with Delimiter Invalidation in Snips

Delimiters make import/export completely dysfunctional. Users can't keep track of all that. I exported a snip with " in it (while " was a delimiter). I couldn't import it.
What would happen when a user exports 10 snippets with hyphens in them. A month later he adds hyphen as a delimiter.
Fails to import his snippets and rage quits.

Parenthesis auto-insert mangles emoticon `:(`

Press a colon and then pressing ( auto inserts a ) which makes the text :() instead of expected :(.

Solution:

Detect a colon press and prevent just the parenthesis auto-insert right after it if ( i s pressed. @iWrote Any other suggestions?

v3.1 Content editable snip editor results in <div> and <br> spam

Problem:

Create a snip like this:

12345asdasd
asdasd

asdasd


asdasd



asdasd

(make sure to press enter for line breaks instead of copy pasting the above)

Execute the snippet in a textarea you get this:

12345asdasd<div>asdasd</div><div>
</div><div>asdasd</div><div><br></div><div><br></div><div>asdasd</div><div><br></div><div><br></div><div><br></div><div>asdasd</div>

Solution:

Replace divs by inserting a br before and after the div, before saving the snippet. On inserting the snip in a textarea, replace the <br>s with a new line \n character.

Improper storage of data in chrome storage

Storage is like:

Item1. "UserSnippets": {} // big object of all snippets

instead of:

Item1: "snip1": {},
Item2: "snip2": {},
Item3: "snip3": {}.
etc.

The former results in the QUOTA_BYTES_PER_ITEM error at only 10% of the total used storage area.

Two options for fixing:

  1. Store snip1, snip2 etc. globally.
  2. Create similar function detailed here to chunk data http://stackoverflow.com/questions/13373187/can-i-increase-quota-bytes-per-item-in-chrome

Prefer 2nd option to avoid mangling data storage format of existing users.

'choose file containing data'

Browser name: - Chrome
OS name: - chrome
Site where ProKeys is functioning improperly - %site_url%
Description: I have installed ProKeys into chrome on a windows 10 pc. When I select "import/Restore" and I am given the prompt to choose a file to upload, I click this link and nothing happens. If I right click and choose open link, it just takes me to a settings page. On my mac with chrome it open the file chooser. Please give me some advice on what maybe causing this issue on my pc and what I can do. BTW I have already cleaned off chrome and Prokeys twice and reinstalled, but this made no difference.

Thank you

Support expansion inside of address/URL bar

Supports limited expansion: any multiline text, rich text is made single line by stripping all \newlines. formatting, etc.
But, paste/date macros are completely supported. Variables are supported.
Working on the address bar while viewing a blocked site should work.

Feature is useful for people having weird proxy expansions for some reason.

Snippets not been pasted

Browser name: - CHROME
OS name: - WINDOWS 10 ENT and KUBUNTU 16.04
Version: 3.0.0.1
Site forum.xda-developers.com (vBulletin)
Description: Right Mouse Button >> ProKeys >> select any Snippet is not pasted at all.

I had to "Perform bulk action" >> "Select All" >> "Move to Folder" >> "Snippets" >> "Move to Folder"

Then the snippet paste correctly.

If the tab is closed, the Move to Folder has to be repeated.

below, my full backup:

 {
   "blockedSites": [],
   "charsToAutoInsertUserList": [
     [
       "(",
       ")"
     ],
     [
       "{",
       "}"
     ],
     [
       "\"",
       "\""
     ],
     [
       "[",
       "]"
     ]
   ],
   "dataUpdateVariable": false,
   "dataVersion": 1,
   "hotKey": [
     "ctrlKey",
     32
   ],
   "language": "English",
   "snippets": [
     "Snippets",
     1465242888361,
     {
       "name": "Device-Visitor",
       "body": "Hello\n\nThanks for using XDA Assist.\n\nGiven your report, we could not determine the [B]Manufacturer & Model[/B] of your device in order to better approach your issue.\n\nI will have to ask you to create a new Thread where you could be as detailed as possible regarding your devices information and issue.\n\nNice regards and good luck.\n\n[B]THREAD CLOSED[/B]\n\n.",
       "timestamp": 1465248736124
     },
     {
       "name": "Device-XDA",
       "body": "Hi %user%\n\nThanks for using XDA Assist.\n\nCould you please state the [B]Manufacturer & Model[/B] of your device so we would better approach your issue guiding you to the appropriate experts?\n\nI will be waiting for your reply.\n\nNice regards.\n\n.",
       "timestamp": 1465248532902
     },
     {
       "name": "Duplicate-XDA",
       "body": "Hi %user%\n\nThank you for using XDA Assist\n\nWe were able to determine that you have already posted your issue [url=%url%]here[/url]. It would be convenient that you give some time for our experts to analyse and answer you.\n\nIf you feel that it's taking too much, you may *bump up* you original thread by reposting some aditional information regarding it and so.\n\nThankful for your understanding.\n\nNice regards and good luck.\n\n[B]THREAD CLOSED[/B]\n\n.",
       "timestamp": 1465249467051
     },
     {
       "name": "English-Visitor",
       "body": "Hello\n\nThank you for using XDA Assist\n\nAccording to [url=http://forum.xda-developers.com/announcement.php?f=3194]XDA rules[/url] (4) we are an English Only forum and, as so, I will have to ask you to re-post your question in that language.\n\nThankful for your understanding.\n\nNice regards.\n\n[B]THREAD CLOSED[/B]\n\n.",
       "timestamp": 1465247595961
     },
     {
       "name": "English-XDA",
       "body": "Hi %user%\n\nThank you for using XDA Assist\n\nAccording to [url=http://forum.xda-developers.com/announcement.php?f=3194]XDA rules[/url] (4) we are an English Only forum and, as so, I will have to ask you to re-post your question in that language [U]within 2 days[/U] in order to keep this assistance up.\n\nThankful for your understanding.\n\nNice regards.\n\n.",
       "timestamp": 1465248182651
     },
     {
       "name": "MOD-Move",
       "body": "Please, move this thread to the [%name%] forum\n\n%url%\n\nThank you.",
       "timestamp": 1465239309692
     },
     {
       "name": "MOD-Senior",
       "body": "Please, verify this thread as a Senior Member has posted at XDA Assist forum.\n\nThank you.",
       "timestamp": 1465248306577
     },
     {
       "name": "QaA-Visitor",
       "body": "Hello\n\nPlease use the below link to register a XDA Account first, prior to start posting and replying onto our forums.\n\n[URL=\"http://forum.xda-developers.com/register.php\"]Join the Experts[/URL]\n\nWhen you complete your registration, I invite you to post your request in the below forum as our team of experts there should be able to help you:\n\n[URL=\"http://forum.xda-developers.com/android/help\"]Android Q&A, Help & Troubleshooting[/URL]\n\nBest regards and good luck.\n\n.",
       "timestamp": 1465238968590
     },
     {
       "name": "QaA-XDA",
       "body": "Hi %user%\n\nThank you for using XDA Assist\n\nAs we do not have an specific forum dedicated to your device yet, our experts at the below forum should be able to help you. Please be welcome to ask in there.\n\n[URL=\"http://forum.xda-developers.com/android/help\"]Android Q&A, Help & Troubleshooting[/URL]\n\nNice regards and good luck.\n\n.\n",
       "timestamp": 1465238874300
     }
   ],
   "tabKey": false,
   "visited": true
 }

Import popup v3

  1. Open import popup in v3.
  2. Select a file and then close the popup.
  3. Open it again and select the same file.
  4. The text "File X.doc is ready. Click to restore" does not appear.

Problem:

onchange does not fire since files are same. So, have to reset the value of $fileInput element.

v3.1 FeatureBreaking Glitch in Snippet Editor

(Pencil icon menu)
Pressing enter to add a line break in the snippets' expansion does something weird. Instead of taking the cursor to the next line, I think it pastes a whole new text field!

The glitch is easy to reproduce. Just press enter while editing a snips expansion. Press it multiple times to see it more clearly.

(enter = return key)

Seek user review in a polite unobtrusive manner

image

Utilize either of the above two spaces to ask the user's a question (after ProKeys usage of about a week): "Hey! How has your experience been so far?" - with two options - "Awesome!"/"Okayish".

  1. Clicking awesome would convert the box to "Wonderful! Tell the world about it!" with two options - "Yes!" (opens the chrome store)/"Not now"
  2. Clicking Okayish would convert the box to "We're sorry! Please tell us what went wrong" with two options - "Yes!" (opens a survey form)/"Not now"

Points to decide:

  1. UI of the popup box (@iWrote your domain)
  2. What to do in case of clicking "not now".

Refer to: Different tuts on "unobtrusive user feedback"

Conflicts with Grammarly

Issue created in reference to a user complaint on the Chrome Webstore.

Grammarly for Chrome glitches while running in parallel with ProKeys. Sometimes spellcheck just stops working while testing in Gmail.

I'll ask the user for more details.

Edit: Actually a fresh install of ProKeys after installing Grammarly, and then reloading the page, seems to get rid of all issues. At least on Gmail.

Add privacy page

With this text:

"
I enlist here the reasons (the bold headers are hyperlinks to the Chrome API docs which you can see; Opera uses the same API as well):

  1. storage - to store the snippets and user settings
  2. notifications - to display notifications on install and update
  3. tabs - to inject the content script into the webpages on first install (helps ProKeys to work without page reload)
  4. <all_urls> - is required to make sure ProKeys work on all websites (and access the text box where you type text)

As you see, no external data is collected and sent to any external servers. You are free to check out all the code on GitHub as well. It's mainly for the Chrome version, but the code is 99% same. Additionally, I may inform you that whenever any developer uploads/updates an addon, it is duly checked by an Opera moderator to make sure it meets all its rules, one of which says "It must not send private data to an external store, for example through XHR". Read all the rules here."

(refers to Opera but can modify for Chrome)

Check compatibility for multiple sites

EverNote web
SRM
Workflowy
"Possibility of supporting Salesforce Service Cloud?

It doesn't work as far as I know based on Sales force hosting an iframe in an iframe, in another iframe. Any insight would be awesome!

Right now I am working around this by expanding in another window and copy/pasting the expansion. "

excerpts from users of other similar apps

Enable special highlight for placeholders and macros in snip body view

image

In this snip preview box, placeholders and date time macros are not distinctly differentiated from normal text. This has two defects:

  1. Having to scan very hard to locate them, not good for visually-inferior/impatient people.
  2. If you have the macros highlighted in that preview box, it implies that you got their syntax correct, other wise, until you run them, you can't know that you had missed a closing ] or whatever.

@iWrote Design suggestions please?

Note that the design has to be used in the above preview box as well as in the snip editor box (since now it is a contenteditable editor, it supports highlighting with all sorts of colors and sizes and everything)

Urgent: Chrome Webstore Description edits

NEW: Brand new ProKeys v3.0.0 - completely revamped every single thing - from the UI to the Features - everything has been repolished!

to

NEW: ProKeys v3.0.0 - completely revamped the UI and refined the Features!

because features can't be revamped and the revision is shorter.

Tab key issue

In a content editable editor, pressing [Tab] key and then pressing " (or any auto-insert's first part) mangle the caret position and text.

Data modification not caught by Chrome when editing name of snippet/folder

Steps to reproduce:

  1. Edit the name of any folder.
  2. Notice that on the second PC, the name of the folder is not updated yet.
  3. Add a new snippet/folder OR change other settings data
  4. Notice that now, on the second PC, the name of the folder is updated.

Fix:

  1. Introduce a top-level toggle variable dataUpdated that will alternate between true/false every time any data is updated, so that syncing can properly take place.

Auto-Insert problem in case of double quotes

When I press ( and then ), the second brace is overwritten properly so it enhances user experience.

But, the same does not happen in case of double quotes. Pressing double quotes twice gives four quotes.

Snippet insertion problem

I save a snippet as "at"-->"awetrucks" then prokeys should NOT automatically "cat"-->"cawetrucks" if it is not saved as a snippet.

Add snippet macro to insert current browser URL

[[%(url1)]] should produce github.com/GaurangTandon.
[[%(url3)]] should produce github.com/GaurangTandon/ProKeys/issues.
[[%(url03)]] should produce www.github.com/GaurangTandon/ProKeys/issues.
[[%(url003)]] should produce http://www.github.com/GaurangTandon/ProKeys/issues.

(when used on this page)

Any ideas for a better syntax, @iWrote ?

Add folder select list to Restore Revision popup

Current UI:

image

Proposed new UI:

image

Replace the textbox in current UI with the above layout, with only the search button and no else buttons.

Reasons:

  1. Second UI is more user friendly. He/she can easily browse snippets and folders.
  2. It does not make sense to let users edit the selected revision when they always can edit it after restoring. Hence, got rid of that textarea.

Support for right-to-left languages

like Arabic or Urdu.

Is it possible for us to support these languages? What changes will we need to do for these languages?

open-deliberation

Create promo image for prokeys

Based on the fact that prokeys requires no account sign up for the user. Just install and get started.

(Needed because some other expanders require an account before functioning. We don't. And the user must be made aware of this.)

Prokeys not working after update

Browser name: - CHROME
OS name: - WIN_7
Site where ProKeys is functioning improperly - ALL
Description: Prokeys isn't working at all. The "options" page
capture
is blank except for the link to "Prokeys" in the chrome store (which does work) and the links "Snippets", "Settings", "Help", "About" (which do nothing when clicked).
Snippets do not work on any website.

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.