Skip to content
sixcious edited this page Nov 1, 2024 · 73 revisions

Saving URLs lets you save your own custom settings for any of your favorite websites. The app will remember the settings you saved and will auto-activate itself using those settings.

Infy Scroll Only: Saved URLs will always have higher priority over Database URLs, so you can also use this feature to override a Database URL's settings.

Tip: Whenever you visit a Saved URL, you will always see a star icon appear in the top-right corner of the Popup UI Window as shown above. You can hover the icon to see more details about the Save, such as its ID.

Adding Saves

You can add new saves from two different places:

  1. Popup UI Window
  2. Options Screen

Adding Saves from the Popup UI Window

  1. Click the Toolbar Icon to bring up the Popup UI Window and adjust the settings to your preference
  2. Click the Star Button in the top-right corner to bring up the Save Dialog and enter a URL Pattern, then click the YES Button (the Star Button should now be filled in)
  3. Click the ACCEPT Button at the bottom to finalize the save

Note that you must click YES in the Save Dialog and then ACCEPT before closing the Popup UI Window

Adding Saves from the Options Screen

  1. Go to the Options Screen by right clicking the toolbar icon (Chrome/Edge) or by clicking the GEAR Icon in the Popup UI Window and click SAVES
  2. Click the ADD SAVE Button to bring up the Add Save Dialog and adjust the settings to your preference
  3. Click the SAVE Button in the dialog when finished

Saved URLs Should Always Be Unique

Most users won't need to worry about this, but if you are going to be saving multiple generic URLs, you ought to make sure that they are each unique. For example, instead of saving multiple URLs with the same regular expression of .*, you should save each one as a unique regular expression like .*[A]?, .*[B]?, and so on (The A and B can be any unique identifier text you wish to use).

Disabling or Enabling Saves

In the Options Screen's SAVES section, if you have at least one save, you will see an ENABLE SAVES Switch in the top-left part of the screen. If you wish, you can disable saves by turning this switch off. When you want to enable your saves again, you can come back to this screen and turn the switch on. You can use this option to disable your saves temporarily (without having to delete them) if you need to test something.

Syncing Saves

To keep your data as private as possible, the app only stores your saves locally on your device.

Infy Scroll Only: If you prefer to sync them online and don't mind sharing them publicly, please consider contributing to either the AP or IS Database.

Save Types

There are three types of saves you can choose from, based on how they match against the URL:

  1. Pattern
  2. Regular Expression
  3. Exact

Pattern

Saving a Pattern lets you match multiple URLs easily in two ways:

  1. As Substring Patterns
  2. Or as Wildcard Patterns

For example, you could save a Substring Pattern like www.example.com/pictures/ to match all URLs that have the characters www.example.com/pictures/ included anywhere in them (hence, as a substring). This allows you to easily shorten a URL to match multiple URLs. For example, say you're on https://www.google.com/search?q=my-search-term. You could shorten the URL to the substring https://www.google.com/search? to match all Google Search URLs.

If you include at least one * character, your pattern will be treated as a Wildcard Pattern. For example, you could save a Wildcard Pattern like *www.example.com/*/* to match both https://www.example.com/pictures/ and https://www.example.com/videos/.

Regular Expression

Save a regular expression for more fine-tuned matching and wildcard matching.

Important: When entering Regular Expressions, you must escape (prepend) the following special characters with a backslash character \ if you want to match them literally:

. ? \ ^ $ * + | ( ) [ ] { }

For example, if you wanted to match .com literally you would need to write it as \.com and not .com because . is a special regex character and is assumed to mean "any character" unless you escape it.

An Example Regular Expression

^https?://www\.example\.com/.*/

This Example Regular Expression will match any URL that is like https://www.example.com/*/.

Here are some notes explaining the regex:

  1. The ^ at the beginning indicates the URL must start with http
  2. The ? after the s indicates that the preceding s character is optional (i.e. http or https would both match)
  3. We escaped the dots in the URL with a backslash character so we can match them literally as dots i.e \.example and \.com
  4. Finally we then used the dot in .* as a regex special character (not escaped) so we can use the . to mean "any character" followed by the * (0 or more "any characters")
Regular Expression Practice

Regular Expressions can be quite complex. If you need help practicing regular expressions, the following website is very helpful: https://regex101.com.

Here are two important things to keep in mind when using it:

  1. Make sure you set the Flavor to ECMAScript (JavaScript)
  2. Normally, you also need to escape the forward slash / character with a \ (i.e. https?:\/\/, but you don't have to escape those forward slash characters in the app because it uses the RegExp Constructor instead of the Literal / Slash method to compile your regular expressions, which doesn't require this character to be escaped

Exact

This is used to match an exact URL (single URL) or, more commonly, when using the Increment URL action and when you manually changed the selection in the URL to increment. In the latter case, the app will actually remember the URL as a "pattern" and ignore the selection you selected, so it will match against multiple URLs. For example, say you wanted to save a URL like https://www.example.com/page1/section1 and the app pre-selected the second 1, but you wanted to increment the first 1 instead. You can paste in the URL exactly like this, and the app will know that it should auto-activate on any URL that is like https://www.example.com/page?/section1 where the ? can be any number.

Save Format

Saves are stored as an array [] of objects {} in JSON format.

Here's an example of a save:

{
  "id": 1,
  "action": "next",
  "append": "element",
  "nextLink": "[rel='next']",
  "pageElement": "body > *",
  "url": "^https://www\\.example\\.com"
}

Save Keys and Values

Metadata

Key Type Examples Description
id Number 1 The id of the save, sequenced in the order of creation
date String "2022-12-22T16:09:42.920Z" The date the save was created or last updated (Optional)
action String "next" "prev" "increment"
"click" "list"
The action to perform
append String "page" "iframe" "element"
"media" "none" "ajax"
The append mode to use [Infy Scroll Only]
url String "https://www.example.com"
"*example.com*"
"^https?://www\\.example\\.com"
The URL to activate on; either a pattern, regular expression (regex), or exact url
type String "pattern" "regex" "exact" The type of url you are saving (Optional, defaults to regex if omitted)
name String "My Save" The name or title of the save (Optional)
comment String "My comment." A comment or note about the save (Optional)
spa String "^https://www\\.example\\.com" If this is an SPA, the URL pattern to match as a regular expression; usually the origin/domain of the site (Optional) [Infy Scroll Only]
spaf String "^https://www\\.example\\.com" Like spa, but specifically only if the browser is Firefox, due to Firefox not supporting the Navigation API (Optional) [Infy Scroll Only]

Next Link Action

Note: Prev Link properties are the same as next link, just replace "next" with "prev" if needed.

Key Type Examples Description
nextLink String "[rel='next']"
"//*[@rel='next']"
The Next Link Path (Selector or XPath)
nextLinkType String "selector"
"xpath"
The Next Link Path's type (Optional, as the path type will be auto detected if this is omitted)
nextLinkProperty Array ["href"] The property (can be a single property or multiple nested ones) of the next link element that contains the link (Optional, defaults to ["href"]) [May be removed in the future]
nextLinkKeyword Boolean
String
true
"self attribute equals next>"
If the save uses keywords to find the next link, this can be a Boolean (e.g. true) to indicate to use the globally defined keywords or a String to target a specific keyword in the format of "relationship type subtype keyword" (Optional, defaults to false)

Click Element Action

Key Type Examples Description
clickElement String "body > button"
"//body/button"
The Click Element Path (Selector or XPath)
clickElementType String "selector" "xpath" The Click Element Path's type (Optional, as the path type will be auto detected if this is omitted)
clickElementPosition Number 1000 If the Click Element is to be detected manually, this is the number of pixels from the bottom of the page to the element's position (Optional) (Infy Scroll Only)

Increment URL Action

Key Type Examples Description
interval Number 1 The amount to increment by, can be a negative number to decrement
selectionStart Number 30 The selection's starting position in the URL (Applies only to Exact Saves)
selectionEnd Number 0 The selection's ending position in the URL (from right to left) (Applies only to Exact Saves)
selectionStrategy String "smart" "lastnumber"
"firstnumber" "custom"
The strategy to select the part of the URL to increment (Applies only to Pattern/Regex Saves)
selectionCustom
base Number
String
10 16 "date"
"decimal" "roman" "custom"
The selection's base type, can be a base number between 1-36, or a string for more complex bases (10 is the default and represents regular decimal numbers)
baseCase String "lowercase" "uppercase" If incrementing bases that include letters, indicates whether they should be lowercase or uppercase in the URL (Optional, applies only when base is 11-36)
errorSkip Number 10 The maximum number of times to skip past pages that return error codes, such as 404 or redirects (Optional, defaults to 0)
shuffleURLs Boolean true Whether to shuffle the next URLs (Optional, defaults to false)

URL List Action

Key Type Examples Description
list Array ["https://www.ex.com/1", "https://www.ex.com/2"] The array of URL strings the list comprises of

Append Modes

Key Type Examples Description
iframePageOne Boolean true false Indicates whether to load page 1 in an iframe in the Iframe append mode
iframeResize Boolean true false Indicates whether to use the iframe resizer library or not to resize the iframes in the Iframe append mode
iframeDelay Number 1000 0 The delay in ms to await after loading the AJAX Iframe initially; for example, a delay may be useful on some sites if the click element cannot be clicked immediately upon loading the iframe
pageElement String "body > *"
"//body/*"
The Page Element Path (Selector or XPath)
pageElementIframe String "trim" "import" The Page Element Iframe append mode to use, if selected (Optional)
pageElementType String "selector" "xpath" The Page Element Path Type (Optional, as it will be auto-detected)
insertBefore String "//divider" The Insert Before Path (Selector or XPath) (Optional)
mediaType String "image" "video" "audio" The type of media to append in the Media append mode
ajaxMode String "iframe" "native" The AJAX mode to use when using the AJAX append mode (Optional, defaults to "iframe" if omitted)

AJAX Native Append Mode

The native AJAX append mode is extremely experimental and has several unlisted keys not found in the UI. Note that this append mode will be significantly changed in the future and these keys may be changed or removed.

Key Type Examples Description
removeElement String "ul > .ghostnodes" The Remove Element Path; the elements to remove in the AJAX Native Append Mode (Optional)
disableScrollElement String "//*" The Disable Scroll Element Path; the elements to disable scrolling for in the AJAX Native Append Mode (Optional)

Scroll Options

Saves can store any of the global infinite scroll options as well. Important: These fields are intentionally not exposed in the UI because they may be updated or removed in the future.

Key Type Examples Description
scrollDetection String "io" "sl" The Scroll Detection API to use (Intersection Observer or Scroll Listener)
scrollBehavior String "instant" "smooth" The Scroll Behavior to use when Infy scrolls to a page programatically
scrollUpdateAddress Boolean true false Indicates whether to update the address bar (URL) when the current page is scrolled into view
scrollUpdateTitle Boolean true false Indicates whether to update the document title when the current page is scrolled into view
appendThreshold Number 500 The number of pixels from the bottom of the content before Infy will start to append the next page
appendDelay Number 2000 The number of milliseconds to wait after appending a page before the next page is allowed to be appended
pageDivider String "yes" "no" "element" Indicates whether or not a page divider will appear on the page
pageDividerAlign String "left" "center" "right" The page divider alignment or orientation
pageDividerButtons Boolean true false Indicates whether to show page navigation buttons inside the page divider
pageOverlay Boolean true false Indicates whether to show the page overlay that shows the current page number
showIcon Boolean true false Indicates whether to show the SVG infinity icon inside the page divider, loading section, or overlay
showLoading Boolean true false Indicates whether to show the infinity animation when loading a page
pageLimit Number 5 The maximum number of pages that are allowed on the screen
color String "#55555F" The hex color of Infy-specific appended items, such as the page divider and infinity icon
cssGrid String "modify" If the page element is a css grid, modifies the grid to allow the page divider to not break it

Extra Options

Saves can also store any of the global Extra options. Important: These fields are intentionally not exposed in the UI because they may be updated or removed in the future.

Key Type Examples Description
customScriptsEnabled Boolean true false Enables Infy's own custom scripts for a select number of websites
resizeMediaEnabled Boolean true false Resizes all media elements if they are bigger than the screen width
linksNewTabEnabled Boolean true false Makes all links open in a new tab (starting only with page 2)
linksNewTabOneEnabled Boolean true false Makes all links open in a new tab (starting with page 1)
scrollIframeEnabled Boolean true false Scrolls the hidden AJAX Iframe or Element Iframe to allow media elements to lazy load
customEventsEnabled Boolean true false Triggers custom events, allowing your custom scripts to listen for them
debugEnabled Boolean true false Enables Debug Mode, allowing you to see a debug overlay and hidden iframes