LinkedIn Tool

Minor enhancements to LinkedIn. Mostly just hotkeys.

These are versions of this script where the code was updated. Show all versions.

  • v5.67 2023-12-27

    Include the height of the toolbar in the Scroller margins.

    Issue #156.

    Implement n/p for scrolling through job details.

    Issue #169.

    Bump to latest lib/web release to grab refactored otmot().

    Issue #221.

    Mix in the notification URL to dedupe when text is identical.

    Closes #222.

    Update how the menu is found in Feed.

    Closes #223.

    Update release notes.

    Bump version number.

  • v5.66 2023-12-26

    Move Scroller fixups into a local Service class.

    Most pages do fixups upon app initialization. However, Profile needs to do some extra work with information that is only available after this page has been visited at least once. So defer it until that initial activation.

    Note that it does not yet do that extra work. This is just prep.

    Issue #156.

    Fine-tune the CSS selector for the details pane.

    Issue #169.

    Re-add the LIT menu item if it disappears.

    Sometimes the global nav menu items get rebuilt shortly after we add our custom item.

    Now we monitor the nav list, and if it changes, we re-add ours if necessary.

    Closes #220.

    Update release notes.

    Bump version number.

  • v5.65 2023-12-24

    Move initial primary Scroller creation into the getter.

    Issue #156.

    Switch results page selection to N/P.

    This frees up n/p for use inside the details pane. This will make it consistent with how Messaging is handled.

    Issue #169.

    Add some additional monitoring to Global.#gotoNavLink().

    Issue #218.

    Update release notes.

    Bump version number.

  • v5.64 2023-12-23

    Do fixups on Profile.#entriesHow.

    Issue #156.

    Add some initial logging to some navigation methods.

    Issue #218.

    Bump version number.

  • v5.63 2023-12-21

    Update MyNetwork to the new layout.

    Hopefully this is already rolled out completely and will not be rolled back again.

    While at it, may the cards uid function use anchor hrefs instead of the whole innerText if available.

    Closes #219.

    Update release notes.

  • v5.62 2023-12-21

    Implement Edit for the current section.

    Issue #156.

    Migrate a couple of static methods to instance methods.

    Issue #218.

    Update release notes.

    Bump version number.

  • v5.61 2023-12-19

    Implement m to view more (or Show all...) for the current item.

    Issue #156.

    Switch from local constant to one from lib/base.

    The other one this time.

    Closes #216.

    Update release notes.

    Bump version number.

  • v5.60 2023-12-17

    Have #isItemViewable() explicitly return a Boolean.

    Also, log this fact during getItems post processing.

    Previously, it would return a truthy value of the height in pixels, while, valid code wise, was difficult to pick out in the logs.

    Issue #208.

    Implement next/previous for entries inside a section.

    Different sections have different layouts, so need a few different selectors to figure them out. Would not be surprised if a few are missed.

    Sections that have tab panels inside of them (currently know about Interests and Recommendations) are triggering a known issue with Scroller not wrapping. Fortunately, in practical use, not a big deal, however, it does give us a good test bed to find a fix.

    Issue #156, #208.

    Filter out non-viewable items before scrolling by N.

    This allows removing the skipping non-viewable loop completely.

    Issue #208.

    Update release notes.

    Bump version number.

  • v5.59 2023-12-16

    Basic navigation keys.

    Issue #156.

    Update release notes.

    Bump version number.

  • v5.58 2023-12-14

    Initial support for the Profile view.

    Does nothing more than exists.

    Issue #156.

    Update release notes.

    Bump version number.

  • v5.57 2023-12-12

    Implement S to toggle the star on a conversation.

    Issue #144.

    Update release notes.

    Bump version number.

  • v5.56 2023-12-11

    Implement = to open the nearest menu.

    Issue #144.

    Remove now unused method, dumpInfoAboutElement.

    Issue #205.

    Update release notes.

    Bump version number.

  • v5.55 2023-12-10

    Migrate uses of SPA.dumpInfoAboutElement() to promoted version.

    Issue #205.

    Switch from local constant to one from lib/base.

    Issue #216.

    Bump version number.

  • v5.54 2023-12-09

    Add descriptive text to the assertEqual() in a loop.

    Issue #215.

    Update to most recent release of all libraries.

    We base and web some upcoming changes.

    Issue #205.

    Normalize how Shortcuts are formatted.

    This change covers Messaging and Notifications.

    Closes #213.

    Bump version number.

  • v5.53 2023-12-08

    Promote SPA.dumpInfoAboutElement() to lib/web.js.

    Issue #205.

    Make how often fake error messages show up on page load a tunable.

    Closes #217.

    Normalize how Shortcuts are formatted.

    This change is Jobs and JobCollections.

    Issue #213.

    Bump version number.

  • v5.52 2023-12-05

    Promote ONE_ITEM to a global constant.

    Issue #216.

    Update the Shortcut example to match the new recommendation.

    Issue #213.

    Normalize how Shortcuts are formatted.

    This change is MyNetwork and InvitationManager.

    Issue #213.

    Bump version number.

  • v5.51 2023-12-04

    Implement next/previous message for conversation pane.

    Issue #144.

    Remove some resets in Scroller.

    They do not seem to be needed any more.

    Closes #212.

    Normlize how Shortcuts are formatted, mostly in Feed.

    Issue #213.

    JSDoc: Update some references to the new (or correct) location.

    Closes #214.

    Update release notes.

    Bump version number.

  • v5.50 2023-12-03

    Implement moving to the Message box.

    Issue #144.

    Update release notes.

    Bump version number.

  • v5.49 2023-12-02

    Switch monitoring of the message box to a focus event.

    There are cases where the message box will get focus without setting the data-artdeco-is-focused attribute. This might be a bug in LinkedIn, but does not matter. It is not a good signal.

    Also work around a quirk in Scroller that is needed for other containers that constantly rebuild the elements being tracked. This causes a 'change' event for the old item then one for the new item. And that would result in nested event handlers. It turns out if the user navigates at the right pace, an outer handler could be removed, causing them all to be removed (same callback function after all), and then leave the focus in the message box, resulting in random navigation characters showing up. One Page's fix is another Page's problem.

    Issues #144, #212.

    Update release notes.

    Bump version number.

  • v5.48 2023-12-01

    Basic conversation card scrolling.

    Still has a focus problem where, at the beginning, keyboard navigation will cause focus to move to the message box. However, clicking once on a conversation card will prevent that until the site is reloaded. Definitely a problem to be addressed.

    Issue #144.

    Update release notes.

    Bump version number.

  • v5.46 2023-11-28

    Reset the tracking id on duplicate items.

    This helps with, but does not solve, the issue with duplicate items in a Scroller.

    Issue #204.

    Make use of the new TestCase.assertNoRaises() method.

    Issue #211.

    Bump version number.

  • v5.47 2023-11-28 Imported from URL
  • v5.46 2023-11-27

    Reset the tracking id on duplicate items.

    This helps with, but does not solve, the issue with duplicate items in a Scroller.

    Issue #204.

    Make use of the new TestCase.assertNoRaises() method.

    Issue #211.

    Bump version number.

  • v5.45 2023-11-26

    Use optional chaining in case the querySelector() fails.

    Retire SPADetails setup issues in favor of NH.base.issues.

    Issue #205.

    Normalize spacing around logger.{entered,leaving}() in Logger.

    This makes it easier to read the code.

    Issues #204, #208.

    Update release notes.

    Bump version number.

  • v5.44 2023-11-25

    Bump all libraries to the current version.

    We only need recent changes to lib/base, but might as well grab everything.

    Issue #205.

    Plug in using NH.base.issues.

    Issue #205.

    Replace logging duplicates to posting to the new issues listener.

    Issue #204.

    Ignore non-viewable items when checking for duplicates.

    For lazily loaded items, they all get the same uid and that stays persistent, even after they are loaded. On the other hand, this did end up stress testing the new issue message queue.

    Issue #204.

    Update release notes.

    Bump version number.

  • v5.43 2023-11-24

    Tweak log message grammar.

    Issue #144.

    Fix typo in selector.

    Amazingly it was working (sometimes), even with the typo.

    Issue #144.

    Reduce calls into Scroller by keeping result in a local variable.

    Issue #144.

    eslint: Explicitly configure newline-per-chained-call and fix-ups.

    Closes #203.

    Log detection of duplicate items in a Scroller.

    Factored out an inner loop to do this, as the surrounding function became too large.

    Issue #204.

    Update release notes.

    Bump version number.

  • v5.42 2023-11-23

    Detect when focus shows up in message box and act accordingly.

    I am not keen on the idea of moving focus back to the current conversation card, but not sure where else to put it.

    Issue #144.

    Update selectors for hide/show job card in JobCollections.

    I guess someone from the Job team moved over to the JobCollections team because now they use similar mark up.

    Closes #206.

    Update release notes.

    Bump version number.

  • v5.41 2023-11-22

    Remove errant log statement.

    Issue #144.

    Move control of the tablist monitor into Scroller activation.

    It turns out that having two services that control the same thing (current item) starting up at the same time is a bit of a pain. It works, but functions are effectively multi-threading and really making the logger upset that groups are exiting in the wrong order. This is purely a cosmetic issue.

    But, since it is easily fixed by this change, which also happens to reduce code size a tiny bit, it is worth doing.

    Issue #144.

    Update release notes.

    Bump version number.

  • v5.40 2023-11-20

    Validate uidCallback.

    This will help with silly mistakes when adding a new Scroller.

    Issue #144.

    Use this.id to ease custom naming in test methods.

    Add Scroller for Messaging view.

    No hotkeys yet, but the basics are here, including finding the active card on both page activate and changing the active Focused/Other tab.

    When a new conversation is selected (and this happens without LIT), the focus immediately moves to the Write a message... text area, which makes navigation tricky. The user would need to a nav-key TAB nav-key TAB sequence to move around.

    Need to review other pages to see if they have a similar problem and if we already have precedence on how to handle this.

    Issue #144.

    Update release notes.

    Bump version number.

  • v5.39 2023-11-19

    Implement moving to the message tablist.

    Issue #144.

    Update release notes.

    Bump version number.

  • v5.38 2023-11-18

    Monitor which messaging tab (Focused/Other) is currently active.

    Issue #144.

    Bump version number.

  • v5.37 2023-11-17

    Bump all libraries to the current version.

    This is also a good time to switch them all to the new URLs Greasy Fork is using.

    Issue #200.

    Update release notes.

    Bump version number.

  • v5.36 2023-11-16

    Enable GM.setValue() and GM.getValue().

    Issue #170.

    Update release notes.

    Bump version number.

  • v5.35 2023-11-14

    Tweak HTML in news content.

    This more closely matches what the markdown on GitHub and Greasy Fork use.

    Update release notes.

    Bump version number.

  • v5.34 2023-11-13

    Support an optional timeout on containers in Scroller.

    Issue #165.

    Switch the paginationScroller to using containeritems.

    The 1 second timeout may need tweaking after experience.

    This had to wait until Scroller supported timeouts in activating container click handlers. Otherwise, it could just wait forever. Not all pages handled by JobCollections will have pagination. It depends on both the page and the number of items that page may serve.

    Closes #177.

    Switch everything over to using the new devmode option.

    Closes #198.

    Remove old comment.

    Issue #173.

    Rewrite testParseSeq() as a TestCase.

    Issue #179.

    Update release notes.

    Bump version number.

  • v5.33 2023-11-12

    JSDoc: Correct outdated reference.

    Issue #141.

    Rename properties with underscores in them in Page subclasses.

    Issue #141.

    Verify a container exists before looking for items.

    Issue #165.

    Implement a simple (for now!) loadOptions().

    Issue #198.

    Update release notes.

    Bump version number.

  • v5.32 2023-11-10

    More renaming getters from old private _names to current names.

    Issue #141.

    Change terminology from 'base' to 'container' as appropriate.

    Issue #177.

    Rewrite testScroller() as a TestCase.

    Issue #179.

    Bump version number.

  • v5.31 2023-11-09

    Rename getters from old-style private _names to current names.

    This change is invasive enough to do stand-alone.

    Issue #141.

    Listen for clicks during the capture phase in Scroller.

    We want to make sure we see them before the web page may cancel it.

    Closes #161.

    Update release notes.

    Bump version number.

  • v5.30 2023-11-08

    style-nudge: Make a #private field static in Feed.

    This happens to be used in a string necessary early in the loading process. In order for it to be placed in the style-guide preferred location, it needed to be static.

    Issue #173.

    style-nudge: Right place #private methods in Page subclasses.

    Issue #173.

    style-nudge: Right place #private methods in SPA.

    Issue #173.

    Remove experimental support for w2ui.

    Issue #189.

    Bump version numbers.

  • v5.29 2023-11-07

    Bump versions of many libraries.

    Mostly this grabs new dev things, like better error messaging and test assertions.

    Issues #170, #185.

    Move loading and saving of Logger configs outside of testing.

    The lib/userscript variations will do sensible things when the {get,set}Value functions are not granted, which is currently the case. However, developers can turn them on for testing.

    This particular sequences, of saving on hidden and loading on visible, allows developers to switch to another tab that has the userscript manager UI, tweak the values there, and then load the new values when returning to the LinkedIn tab. At least, until we get an in-app UI built for this.

    Issues #145, #170.

    Simplify Feed.#onPostActivate().

    We really only care if the post still has the has-occluded-height attribute at this point. So, just check that directly rather than looping through the list of attribute changes.

    Also, since we now want to log inside the monitor, change it to an arrow function.

    Issue #150.

    Make item being viewable a criteria for reactivation.

    This comes closer to solve the special case for Feed. It still needs to handle the case where, here, the classes are properly assigned, but by the time this function leaves and Feed takes back over, all of the classes are explicitly reset by LinkedIn.

    Issue #150.

    style-nudge: Right place a #private field in Scroller.

    This was a recent addition. Missed because this is not yet a precommit hook.

    Issue #173.

    Retire the DummyService.

    No longer needed as we have real ones to test with.

    Issue #130.

    style-nudge: Right place most #private fields in Page subclasses.

    One needs to be changed to a static #private field, and that will be a separate change.

    Also took the opportunity to remove some unnecessary initializers which were holdovers from earlier days in the project.

    Issue #173.

    style-nudge: Right place #private fields in SPADetails.

    Issue #173.

    style-nudge: Right place #private fields in LinkedIn.

    Issue #173.

    style-nudge: Right place #private fields in SPA.

    Issue #173.

    Update release notes.

    Bump version numbers.

  • v5.28 2023-11-06

    style-nudge: Right place static #private fields in Page subclasses.

    Issue #173.

    Move news content out of LinkedIn to a global variable.

    As static #private fields, they needed to be moved to the correct location inside the class. Might as well make them global to the app.

    Issue #173.

    Wait for current item to reappear when Scroller is reactivated.

    Works well enough to remove equivalent code from three locations. To handle the one in Feed requires a bit more work.

    Not perfect, but a good start.

    Issue #150.

    Update release notes.

    Bump version numbers.

  • v5.27 2023-11-05

    Bump lib/userscript to version 3.

    This picks up a fix for using Greasemonkey.

    Closes #187.

    style-nudge: Right place a static #private field in LinkedIn.

    Issue #173.

    Bump lib/widget to version 2.

    Does not do anything yet, but it does allow me to act in developer mode with one less local change.

    Issue #185.

    Fix typo in the name of logging group.

    Include the unknown issues in the error message.

    Update release notes.

    Bump version numbers.

  • v5.26 2023-11-04

    Missed adding a known issue.

  • v5.25 2023-11-04

    style-nudge: Alphabetize #private properties in Page.

    Issue #173.

    Remove Page._refresh().

    Issue #150, #178.

    style-nudge: Right place static pubic methods in SPA.

    I had been putting this particular move off because I know these methods are going to be removed. But that is taking longer than hoped.

    Going ahead and doing this will allow a new (dumb) linting tool to be created.

    Issue #173.

    Bump lib/base to version 22.

    Use new simpleParseWords() function and retire similar static SPA method.

    Issues #130, #180.

    style-nudge: Alphabetize some public getters in Page subclasses.

    Issue #173.

    style-nudge: Organize public getters in SPADetails.

    Issue #173.

    style-nudge: Organizer getters in SPA.

    Issue #173.

    style-nudge: Organize public methods in LinkedIn.

    Issue #173.

    Experiment with using the w2ui library.

    Issue #185.

    Update release notes.

    Bump version numbers.

  • v5.24 2023-11-03

    Add missing '*' from a comment.

    Issue #173.

    style-nudge: Right place a getter in Scroller.

    Issue #173.

    style-nudge: Right place a property in AccordionTableWidget.

    Issue #173.

    style-nudge: Move a static #private property in Page.

    Issue #173.

    style-nudge: Right place a property in Global.

    Issue #173.

    style-nudge: Right place properties in VMKeyboardService.

    Issue #173.

    Migrate Notifications from refresh to onScrollerActivate.

    Issue #178.

    Update release notes.

    Bump version numbers.

  • v5.23 2023-11-02

    Implement s to focus on the Search messages input field.

    Issue #144.

    Move static public methods in all remaining class.

    Issue #173.

    Variable renaming from 'resultspage' to 'pagination'.

    Issue #177.

    Migrate InvitationManager from refresh to onScrollerActivate.

    Issue #178.

    Move saving Logger configs to when the page goes away.

    Since we are tracking counters, not just booleans, it makes sense to have it automatic rather than opening some future config screen.

    Issue #145.

    Update release notes.

    Bump version numbers.

  • v5.22 2023-11-01

    Bump lib/widget to version 1 and Widget from that library.

    Issue #167.

    Make all static _unique functions officially public.

    I am not a big fan of this, preferring that they stay private. However, there are a couple of issues:

    • The older version of eslint I am using cannot handle multiple static #private methods
    • Making them static #private arrow functions would require that they be defined before the static field that references it, violating the style guide.

    Just easier to do this for now.

    Issues #141, #173.

    Migrate MyNetwork from using refresh to onScrollerActivate.

    Issue #178.

    Bump version numbers.

  • v5.21 2023-10-31

    Implement N to compose a New message.

    Issue #144.

    Depend on lib/widget version 0.

    Also make use of the Info widget.

    The Widget base class is purposefully not exposed (at the moment), so we have to keep it duplicated until we migrate the new accordion over.

    Issue #167.

    style-nudge: Move public methods in Page.

    Issue #173.

    Make a #private method an arrow function.

    Issue #141.

    Move static #private methods in Global.

    Issue #173.

    Move the constructor() to the top of all remaining classes.

    Issue #173.

    Add styling for the keystrokes tab in the new info view.

    Issue #180.

    Add a colon (:) at the end of keystroke sequences.

    Issue #180.

    Update release notes.

    Bump version numbers.

  • v5.20 2023-10-30

    Move saving of Logger configs into closing the new info view.

    This is still behind a dev flag.

    Issue #145.

    style-nudge: Move public getters in Page.

    Issue #173.

    Implement l to load more conversations.

    Issue #144.

    Start refactoring widgets into their own library.

    Issue #167.

    Migrate Feed from using refresh to onScrollerActivate.

    Issue #178.

    Run shortcut key sequences through parseSeq() and adjust CSS.

    Issue #180.

    Update release notes (formatting as well as content).

    Bump version numbers.

  • v5.19 2023-10-29

    Move parseSeq from SPA to VMKeyboardService.

    Both currently use VM.shortcut facilities, so it makes sense to put them together.

    Issue #130.

    Switch Messaging to using containerItems for primary Scroller.

    Issue #165.

    Reflow the containerItems in Feed for consistency.

    This is how we ended up doing this for all other locations that do not fit on one line.

    Issue #165.

    Bump lib/web to version 1 and use functions from that library.

    Issue #167.

    Remove some unnecessary trailing semicolons.

    Issue #173.

    style-nudge: Move constructor() to the top of Page.

    Issue #173.

    Bump version numbers.

Show all script versions