LinkedIn Tool

Minor enhancements to LinkedIn. Mostly just hotkeys.

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

  • v5.102 2026-02-23

    Readd the CSS class .global-nav__primary-item to the button.

    This was part of the original Style 1 that was not returned when it was brought back using cloneNode() plus edits.

    It actually solves a whole slew of layout issues noticed but not yet addressed.

    Closes #269.

    Rename a variable.

    Bump version number.

  • v5.101 2026-02-23

    Move page style determination until later in process.

    The way of detecting page style transitions does not handle all cases. There are times when we need to presume it is a fresh page reload, even if it is not.

    Issue #267.

    Bump version number.

  • v5.100 2026-02-21

    Depend on most recent version of lib/web.

    This is to pick up the recent enhancement to waitForSelector().

    Issue #267.

    Use optional chaining with this.#ourMenuItem.

    Issue #267.

    Start supporting multiple styles of pages.

    LinkedIn appears to be in the process of migrating how pages are rendered.

    This appears to be more drastic than previous in-page migrations where internal selectors for finding scrolling items had to be tweaked.

    Issue #267.

    Bump version number.

  • v5.99 2026-02-17

    Explicitly use the content context.

    Previously, at least ViolentMonkey, would inject into the page context.

    Recent changes (likely LinkedIn changed its CSP configuration) have disabled some features like 'unsafe-eval'. This blocks all uses of strings as code, which includes the use of Function() (which we extend).

    Issue #267.

    Factor out the new navbar selector for reuse.

    Issue #267.

    Improve selector for the new navbar.

    The previous one was too precise and was only valid for Feed.

    Issue #267.

  • v5.99 2026-02-14

    Update handling of the navigation bar due to bitrot.

    Everything has changed enough that issue #242 is also now obsolete.

    Issue #267. Closes #242.

    Bump version number.

  • v5.98 2026-02-11

    Remove Scroller parameter from the constructor.

    Issue #240.

    Make ElementFinder an explicit property of ClickConfig.

    This makes the API consistent with how base+selectors and containerItems are used in the What portion of the configuration.

    Issue #241.

    Acknowledge My Jobs page.

    Issue #260.

    Acknowledge a number a newly discovered pages.

    Issues #261, #262, #263, #264.

    Acknowledge Post analytics Page.

    Issue #265.

    Acknowledge Company Page.

    Issue #266.

    Bump version number.

    I stopped working on this project quite a while as I was no longer using LI.

    Pretty much everything broke.

    This is a collection of changes that were never pushed, but I want to get them out of the way before fixing the bitrot.

  • v5.97 2024-03-04

    Move Scroller assignment from ctor to setter.

    Issue #240.

    Refactor Scroller.#validateInstance().

    Was getting a bit long.

    Issue #241.

    Migrate most modules to use base.Exception.

    Issue #259.

    Update release notes.

    Bump version number.

  • v5.96 2024-02-26

    Use optional chaining with this.#scroller.

    Upcoming changing will make this field optional (e.g., secondary Scrollers).

    Issue #240.

    Use a setter to assign the managed Scroller.

    Issue #240.

    Handle the selectorArray option in Scroller.click().

    Issue #241.

    Add clickConfig to MyNetwork.

    Issue #241.

    Depend on most recent version of lib/base.

    This is to grab the new Exception class.

    Issue #259.

    Update release notes.

    Bump version number.

  • v5.95 2024-02-25

    Expose this.#globals via a getter.

    Issue #240.

    Add validation for clickConfig.

    Issue #241.

    Bump version number.

  • v5.94 2024-02-23

    Stop using name as an identifier as it shadows a global.

    This change addresses local variable.

    Issue #238.

    Implement setter to take the LinkedIn instance.

    Issue #240.

    Acknowledge a number a newly discovered pages.

    Also changed markdown styling for the page names in the comments.

    Issues #244, #255, #256, #257.

    Support an ElementFinder function in Scroller.click().

    Issue #241.

    Initial migration work in Notification for Scroller.click().

    Issue #241.

    Update release notes.

    Bump version number.

  • v5.93 2024-02-19

    JSDoc: Spelling error.

    Consistently name items using navbar rather than navBar.

    Issue #240.

    Add a feature flag for using the new Scroller.click() method.

    Issue #241.

    Bump version number.

  • v5.92 2024-02-18

    Rename self to myself to avoid shadowing a global.

    Issue #238.

    Rename ScrollerService to LinkedInScrollerService.

    Alas, it will no longer be generic.

    Issue #240.

    If no current item, simply click activeElement.

    Issue #241.

    Bump version number.

  • v5.91 2024-02-16

    Migrate to using Service() from lib/base.

    Issue #167.

    Wrap Scroller.name in double quotes in the bug message.

    Makes it a little bit easier to read. E.g., for "Events events" was...

    Issue #241.

    Support the Your events collection.

    Issue #236.

    Implement Share current event.

    Issue #236.

    Acknowledge My Network Events page.

    Issue #253.

    JSDoc: Add missing word.

    Make a log statement a bit more precise.

    Issue #240.

    Fire a resize event each time the navbar changes size.

    Issue #240.

    Update release notes.

    Bump version number.

  • v5.90 2024-02-14

    Bump version of lib/base.js being used.

    This will expose the version of Service there.

    Issue #167.

    Implement n/p secondary navigation within collections.

    Issue #236.

    Use the logger from the Scroller instead of the global logger.

    Stop using event as a local name as it shadows a global.

    Issue #238.

    Fix typo in comment.

    Allow changing top/bottom margins in Scroller.

    We now know that the values sometimes need to change after being initialized.

    Issue #240.

    Add exception list for bugging about unsupported pages.

    Issue #244.

    Post error if Scroller.click() called without being configured.

    Issue #241.

    Update release notes.

    Bump version number.

  • v5.89 2024-02-12

    Migrate primary Scroller setup to base class.

    Issue #234.

    Support primary navigation.

    Issue #236.

    eslint: Rename a local variable that shadows a browser global.

    Issue #238.

    Migrate Service to lib/base.

    Issue #167.

    Define a clickConfig property for Scroller.

    Issue #241.

    TIL: Array.from() takes a mapping function.

    Expose a shallow copy of the current active Pages.

    Issue #244.

    Notify via an error condition whenever an unknown page is visited.

    Issue #244.

    Rework My Network to use the terms collection and individual.

    Individual is not quite right either, since it could be a person, group, event, etc. But, they are not always *card*s, either.

    Issue #245.

    Update release notes.

    Bump version number.

  • v5.88 2024-02-08

    White space around logging intro/outro.

    Fix spelling of property and remove some logging.

    Initial Events support.

    Does nothing more than exist.

    Issue #236.

    Fix two cases where a global was accidentally being used.

    Issue #238.

    Stop logging what each mutation record type is.

    It does not matter at this point, and nothing is being done with that information.

    Issue #239.

    Stow away a pointer to the actual current item element.

    Amusingly, this is how Scroller initially worked before changing to item ids.

    Issue #239.

    Add a monitor to Scroller for the current item staying connected.

    We can capture more state if we see it in other places.

    Issue #239.

    Simple variable rename.

    Issue #240.

    Attach a ResizeObserver to the global nav bar.

    First step in plumbing through detecting changes.

    Issue #240.

    Skeleton for new Scroller.click() method.

    Issue #241.

    Wait for the For Business menu item to show up.

    Identified by the --divider subclass, on some pages, this item gets added later. Actually, the entire navbar content gets rebuilt, causing us to have to reconnect the LIT menu button.

    If this pans out, we can make it the official item, simplifying this code.

    Issue #242.

    Normalize vertical white space around logging {intro,outro}s.

    Closes #243.

    Update release notes.

    Bump version number.

  • v5.87 2024-02-02

    JSDoc: Simplify the Page subclass constructor.

    Start refactoring constructor().

    Issue #234.

    Bump version number.

  • v5.86 2024-01-31

    Minor tweaks to comments.

    Hoist allowReactivation() to base class.

    Closes #228.

    Initial refactoring of the InvitationManager* classes.

    The idea seems to work. Some details will be tricky due to how #private variables work in JavaScript, but those can be worked around.

    Issue #234.

    Bump version number.

  • v5.85 2024-01-29

    Implement Withdrawn invitiation.

    Issue #233.

    Update release notes.

    Bump version number.

  • v5.84 2024-01-27

    Fine tune the pageReadySelector.

    Issue #157.

    Enable reactivation of active pages when revisiting the same page.

    Not experienced any drawbacks. Does not seem to work all the time, but those are likely Page specific issues to be investigated.

    Issue #218.

    Additional tweaks after renaming InvitationManagerReceivedInvites.

    Issue #233.

    Handle the Sent Invites page.

    Essentially a direct copy of the Received Invites page with a number of shortcuts removed that do not make sense in this context.

    Issue #233.

    Update release notes.

    Bump version number.

  • v5.83 2024-01-24

    Invites no longer have menu items.

    Tweak selector to work on both Received/Sent invites.

    Issue #157.

    Rename InvitationManager to InvitationManagerReceivedInvites.

    Issue #233.

    White space around logging intro/outro.

    Migrate InvitationManagerReceivedInvites to containerItems.

    This allows removal of a bunch of custom code.

    Closes #176.

    Bump version number.

  • v5.82 2024-01-21

    Implement l to focus on the tab list.

    Issue #157.

    JSDoc: Update to reflect new approach for impelmenting Services.

    Issue #227.

    Implement J/K for toggle/navigate combo in JobCollections.

    Closes #231.

    Simplify Feed.nextPostPlus() based learning from JobCollections.

    Additional logging about 'focus' events.

    Issue #232.

    Create new Scroller.focus() method.

    This combines shine() and show(), often called together, along with the actual setting of the focus.

    This does not work yet, as after calling this, something resets the focused element back to document.body.

    Issue #232.

    Update release notes.

    Bump version number.

  • v5.81 2024-01-17

    Migrate LinkedInToolbarService from inheritance to messaging.

    Issue #227.

    Add feature flag enableScrollerChangesFocus.

    Not connected to anything yet.

    Issue #232.

    Update release notes.

    Bump version number.

  • v5.80 2024-01-14

    Move the URL monitoring into a click handler.

    Since #gotoNavLink() calls click() this handles both key stroke navigation and old-fashioned clicking with the mouse.

    Issue #218.

    Migrate VMKeyboardService from inheritance to messaging.

    Issue #227.

    Expose Scroller.name.

    Issue #230.

    Bump library versions.

    Really only need lib/base, to pick up the Logger stack trace fix, but might as well bump lib/widget while in here.

    Issue #226.

    Disable reactivation on the details Scroller.

    Because the other Scrollers were disabled, the details one always gets to be set as the #lastScroller. So the first/last actions always worked on it rather than the job cards.

    Closes #230.

    Update release notes.

    Bump version number.

  • v5.79 2024-01-11

    Migrate ScrollerService from inheritance to messaging.

    Issue #227.

    The HTML on the Jobs page changed, so tweaks in response.

    Closes #229.

    Update release notes.

    Bump version number.

  • v5.78 2024-01-09

    Implement Next/Previous/change for pagination navigation.

    Issue #209.

    Rearrange how saved options are loaded.

    Not sure why, but the previous arrangement was not working well.

    Factor out listing the names of active pages.

    Method is getting a little long.

    Issue #218.

    Add temp option to control reactiving currently active pages.

    Issue #218.

    Migrate Service from abstract methods to dispatching.

    Also, tests.

    Issue #227.

    Update release notes.

    Bump version number.

  • v5.77 2024-01-07

    Basic navigation.

    Issue #209.

    Tweak a logging statement.

    Modify ScrollerService to make reactivation optional.

    Issue #218.

    Tune some ScrollerServices to disable reactivation (if active).

    Issue #218.

    Update release notes.

    Bump version number.

  • v5.76 2024-01-06

    Initial SearchResultsPeople support.

    Does nothing but exist.

    Issue #209.

    Improve quality of a random debug logging statement.

    Promote gentlyScrollIntoView() to a full fledged method.

    Need to add more logging and that was going to make #scrollToCurrentItem() too long.

    Issue #218.

    Update release notes.

    Bump version number.

  • v5.75 2024-01-05

    Additional logging in JobCollections.

    Issue #218.

    Bump version number.

  • v5.74 2024-01-04

    Implement Apply, Follow, and Save features.

    Issue #160.

    Update release notes.

    Bump version number.

  • v5.73 2024-01-03

    Update the names for JobCollections Scrollers.

    Tune the pageReadySelector.

    Found a job view where the initial value was not sufficient. Likely no harm in going with both initial candidate selectors.

    Issue #160.

    Implement m to show more/less details.

    At least one cosmetic issue, but not unique to this page.

    Issue #160.

    Call SPA.activate() when the URL does not change.

    Due to how activate() is current written, this is a no-op.

    Issue #218.

    Update release notes.

    Bump version number.

  • v5.72 2024-01-02

    Update release notes.

    Implement n/p for navigating inside some cards.

    Not many options really, just More jobs.

    Issue #160.

    Update release notes.

    Bump version number.

  • v5.71 2024-01-01

    Call getBoundingClientRect() again after (maybe) scrolling.

    It turns out that the result of item.getBoundingClientRect() is not a live object, so after scrolling the bottom of the item into view, we need to refetch the value to see if the top went out of view.

    Adding this one line pushed the length of the method over the configured limit, so also moved this else condition into a separate nested function.

    Since doing that, also rid of the single property destructuring assignment const {item} = this; and replaced it with a traditional assignment of const item = this.item.

    Closes #225.

    Use latest version of lib/web.

    Issue #221.

    Additional monitoring for Global.gotoNavLink().

    Now track and indicate whether the URL actually changed.

    Also switched from otrot2() to otmot() as it will allow us to exit the function sooner if a change is detected.

    Issue #218.

    Additional logging in SPA.activate().

    Issue #218.

    Bump version number.

  • v5.70 2023-12-31

    Implement basic navigation.

    Issue #160.

    Update release notes.

    Bump version number.

  • v5.69 2023-12-30

    Bump all library versions to the latest one.

    Most of these are releases with just additional/updated testing. We really only need lib/web, but makes sense to update all of them at once.

    Issue #221.

    Additional logging in Page.activate().

    Issue #218.

    Factor out common code into a new LinkedInToolbarService class.

    Closes #224.

    Bump version number.

  • v5.68 2023-12-29

    Initial JobView support.

    Does nothing but exist.

    Did notice a pattern similar to what happens with Profile, so will factor that out in a bit.

    Issue #160.

    Update release notes.

    Bump version number.

  • 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.

Show all script versions