-
Notifications
You must be signed in to change notification settings - Fork 19
Saves
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.
You can add new saves from two different places:
- Popup UI Window
- Options Screen
- Click the Toolbar Icon to bring up the Popup UI Window and adjust the settings to your preference
- 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) - 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
- 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
- Click the
ADD SAVE
Button to bring up the Add Save Dialog and adjust the settings to your preference - Click the
SAVE
Button in the dialog when finished
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).
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.
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.
There are three types of saves you can choose from, based on how they match against the URL:
Pattern
Regular Expression
Exact
Saving a Pattern lets you match multiple URLs easily in two ways:
- As
Substring Patterns
- 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/
.
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.
^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:
- The
^
at the beginning indicates the URL must start withhttp
- The
?
after thes
indicates that the precedings
character is optional (i.e.http
orhttps
would both match) - We escaped the dots in the URL with a backslash character so we can match them literally as dots i.e
\.example
and\.com
- 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 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:
- Make sure you set the
Flavor
toECMAScript (JavaScript)
- 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
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.
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"
}
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] |
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 ) |
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) |
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) |
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 |
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) |
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) |
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 |
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 |