LinkedIn Tool

Minor enhancements to LinkedIn. Mostly just hotkeys.

queste sono le versioni di questo script in cui il codice è stato aggiornato Visualizza tutte le versioni.

  • v5.120 20/03/2026

    Update the Notifications page.

    While still a Style-1 page, it was out of date.

    The most interesting change is the new Filter focus.

    Closes #283.

    Update release notes.

    Bump version number.

  • v5.119 19/03/2026

    Update the Messages page.

    While still a Style-1 page, it was of date.

    The biggest UX change is the Focused/Other tablist was replaced with a filter. This removed the need to observe the tablist.

    This page is annoying in that many actions change the URL triggering the whole activation sequence. The biggest impact seems to be that composing a new message would get reset because the URL change was treated as a page load. Previously this seems to have been handled by a complicated observer. This was replaced by simply reseting the appropriate scroller to the empty item.

    The fact that browsers now seem to react differently when focused elements get their tabindex value removed would probably have made getting the previous method difficult to get working again.

    Outside of that, mostly selector updates.

    Closes #279.

    Simplify some variable references.

    Update release notes.

    Bump version number.

  • v5.118 19/03/2026

    Depend on the GreasyFork hosted version of the spa library.

    Settings on the library have been fixed.

    Issue #286.

  • v5.116 17/03/2026

    Implement a LinkedInStyleService to verify site styles.

    Also assigned initial values for acceptable styles on many pages.

    Closes #284.

    Update release notes.

    Bump version number.

  • v5.115 15/03/2026

    Tweak styling of list items in the Information view.

    The Style-2 pages set list-item: none, so lists, like on the News tab, have no bullet points.

    Issue #272.

    Update the JobCollections pages.

    While still a Style-1 page, there had been some minor changes over time.

    The biggest different is the removal of the thumbs up/down hotkeys and a new one to move to the new tab list of additional collections.

    Issue #278.

    Rename JobCollections to JobsCollections.

    Issue #278.

    Verify that a toolbar exists before getting values from it.

    Issue #282.

    Update the implementation of the JobView page.

    Issue #278.

    Rename JobView to JobsView.

    Closes #278.

    Update release notes.

    Bump version number.

  • v5.114 13/03/2026

    Factor out a common Scroller~uidCallback implementation.

    May be registered via a Scroller~How type or called from inside one as a starting point.

    Also removed older code while migrating to using this new function.

    Issue #270.

    Update the implementation of the Jobs view.

    Currently only the main page. Related sub-pages are not yet migrated.

    Issue #278.

    Incremental improvement for element selection.

    Fix typo in placeholder variable name.

    Extra logging.

    Update release notes.

    Bump version number.

  • v5.113 12/03/2026

    Update My Network to the latest layout change.

    Utilitized techniques similar to just used on Feed.

    Also make use of l to focus on the tab list similar to Invitation Manager.

    Issue #281.

    Incremental improvements for element selection.

    This is making use of some techniques just used for My Network.

    No longer need to specify if the clickable element is a button or a link, and the intermediate element has been seen to be either span or div.

    Closes #281.

    Update the implementation of the Invitation Manager view.

    This includes consolidating separate Sent/Received support.

    Closes #280.

    Implement the ability to pass in a human readable name for a page.

    The default is still naming the pages after name of the class. But, in certain circumstances, that may not be sufficient (aka, LinkedIn's "My Network" actually being called "Grow" and "Catch up"). Now such implementations can pass in a human readable variation.

    Change hotkeys to match LinkedIn's official keyboard shortcuts.

    Somewhere along the line, LinkedIn did natively implement something similar to LIT. It does inter-page navigation (the g then 'h` kestrokes) and intra-page next/previous items.

    It looks like less was implemented than LIT does. Also, with the latest site rollouts, "Style-2" pages do not appear to support them.

    Still, if they have it, LIT should use the same shortcuts for inter-page navigation.

    Update release notes.

    Bump version number.

  • v5.112 11/03/2026

    Only add a badge if the cloned menu item does not have one.

    Typically, the Home menu item would have a badge if the loaded page was a different Style-2 page, so we would end up with two badges on the new item.

    Also, remove some setting of internals as that happens in the calling functions when it fires an event.

    Closes #275.

    Rearrange code to be like functions closer together.

    Fix minor code formatting issue.

    Update Feed to the latest layout change.

    There are fewer named items to use, so must focus on layout.

    Posts and comments have similar structure, with the import bits being a header, status bar, and footer, and UI features are mostly consisent within those structures.

    And sometimes (e.g., Like, Reactions, Menu), the same selectors even work in both cases.

    Issue #281.

    Update release notes.

    Bump version number.

  • v5.111 10/03/2026

    Add a new dev-only hotkey for logging the activeElement.

    Changing focus to the Developer Tools window then back can sometimes cause enough logging to scroll details off the screen.

    Update selector for adding the Tool menu item.

    Issue #281.

    Remove errant debug code.

    Update Global to the latest layout change.

    Now, the only way to find elements to trigger involve bits that may be translated. Since it is easier to search for attributes vs text, use aria-label as the primary target.

    Issue #281.

    Update release notes.

    Bump version number.

  • v5.110 09/03/2026

    Make Style-2 sidebar selectors more precise.

    Some pages only have two columns. So far, that means the right hand "Aside" column is the one usually missing.

    Switching to explicitly using :nth-of-type(3) makes more sense. Updated the first column to match (although :first-child is equivalent).

    If we ever run across a page does not have that column, we will likely need to adjust.

    Issue #271.

    Fix typo in a comment.

    Finish updating the implementation for the My Network view.

    Handles both /grow/ and /catch-up/.* paths.

    Added support for common features such as Like, Comment and menu. Also added the message to the Engage feature.

    Also made all of the hotkey functions consistent, using the Feed as a guide.

    Closes #277.

    Update release notes.

    Bump version number.

  • v5.109 08/03/2026

    JSDoc: Add and correct @fires tags.

    Hoist componentkey as a global constant.

    This is so pervasive that is makes sense to have a constant to reduce spelling mistakes.

    JSDoc: Fix a typo in a @type tag.

    Update the implementation for the My Network view.

    Currently only handles the /mynetwork/grow/ path.

    Issue #277.

    Update release notes.

    Bump version number.

  • v5.108 06/03/2026

    Fix minor typo in a comment.

    Add a temporary work around involving delayed navbar detection.

    Issue #240.

    Update the implementation for the Feed view.

    For the hotkeys, it is mostly updates to element queries. But also took this opportunity to make implementations consistent.

    Retired view post as it no longer appears to be possible to generate the URL directly from the content provided.

    Make the X (togglePost) feature an async function as used in the equivalent Jobs page. This keeps focus on the toggled post. Related, was able to simplify J (nextPostPlus).

    Finally, uid computation for posts and comments is now different. While they both use the same attribute (componentkey), the value for posts gets additional processing as it changes internal values when toggled.

    Closes #276.

    Fix minor typo in the News tab.

    Update release notes.

    Bump version number.

  • v5.107 04/03/2026

    Process and expose the SPA instance passed in.

    It has been passed in for ages, but forgotten about.

    Update how error badges are handled.

    Badges are reset upon creation via cloning. And they each set up their own badge updating.

    Closes #275.

    Update release notes.

    Bump version number.

  • v5.106 03/03/2026

    Expose navbar to make it easier for Style-1 pages to find it.

    Issue #274.

    Update a couple of functions to use the new navbar property..

    Issue #274.

    Guard against a missing value for #navbar.

    Issue #274.

    Improve resilience of multiple styles of pages.

    Multiple things had to be none. None improved the situation indepedently.

    • Change the urlChangeMonitorSelector from a Style-1 only div to html
    • Remove Global.#navLinkClickHandler as Style-1 anchors specific and currently not necessary after the urlChangeMonitorSelector change
    • Force a call to Global.#navbarHandler() on page transitions
    • Do not track hybrid Style-1 iframe until it is not about:blank

    This is unlikely to be sufficient, but it addresses the currently known failure paths.

    Closes #274.

    Update release notes.

    Bump version number.

  • v5.105 27/02/2026

    Keep tabindex=-1 on the asides.

    Closes #273.

    Expand the scope of observing mutations for the navbar.

    This seems to help on initial page loads, when svg elements may still being added.

    Issue #274.

    Update release notes.

    Bump version number.

  • v5.104 25/02/2026

    Improve the selector for the sidebars.

    The use of main was not precise enough, and would grab the wrong element.

    Also fixed the issue of a missing join() in the declaration for the aside selector.

    Issue #271.

    Tweak the CSS for the Information view.

    The Style-2 pages have slightly different baseline CSS and this makes them look closer to being the same.

    There is still a minor difference in the tab labels, but both are still readable, and unsure which actually looks best.

    Since the goal is the replace this classic dialog with a new one, there does not seem much need to get them exact.

    Issue #272.

    Put a guard around grabbing the svg element for updating.

    Similar is done in #createMenuItemStyle2().

    Issue #271.

    Update release notes.

    Bump version number.

  • v5.103 24/02/2026

    Correct use of a logger.

    The Logger class should be more resilient, but this at least addresses the immediate annoyance.

    Issue #268.

    Switch LinkedIn.Style from UUIDs to Symbols.

    This allows for readable values while keeping us from using hard-coded strings.

    Issue #269.

    Handle both Style-1 and Style-2 layouts for Global hotkeys.

    Closes #271.

    Update release notes.

    Bump version number.

  • v5.102 23/02/2026

    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 23/02/2026

    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 21/02/2026

    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 17/02/2026

    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 14/02/2026

    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 11/02/2026

    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 04/03/2024

    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 26/02/2024

    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 25/02/2024

    Expose this.#globals via a getter.

    Issue #240.

    Add validation for clickConfig.

    Issue #241.

    Bump version number.

  • v5.94 23/02/2024

    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 19/02/2024

    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 18/02/2024

    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 16/02/2024

    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 14/02/2024

    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 12/02/2024

    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 08/02/2024

    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 02/02/2024

    JSDoc: Simplify the Page subclass constructor.

    Start refactoring constructor().

    Issue #234.

    Bump version number.

  • v5.86 31/01/2024

    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 29/01/2024

    Implement Withdrawn invitiation.

    Issue #233.

    Update release notes.

    Bump version number.

  • v5.84 27/01/2024

    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 24/01/2024

    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 21/01/2024

    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 17/01/2024

    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 14/01/2024

    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 11/01/2024

    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 09/01/2024

    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 07/01/2024

    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 06/01/2024

    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 05/01/2024

    Additional logging in JobCollections.

    Issue #218.

    Bump version number.

  • v5.74 04/01/2024

    Implement Apply, Follow, and Save features.

    Issue #160.

    Update release notes.

    Bump version number.

  • v5.73 03/01/2024

    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 02/01/2024

    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 01/01/2024

    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.

Mostra tutte le versioni dello script