Annotate fields to be persisted on navigation away from the current page
Перейти к файлу
Dusty Greif 78ce055a01
Merge pull request #65 from github/dg/maintenance
Actions/Node Maintenance
2024-10-17 20:31:57 -04:00
.github/workflows Enable provenance when publishing 2024-10-17 09:35:47 -04:00
examples Keep the external script for test page by default 2024-01-25 19:48:39 -05:00
src Support `select` elements 2024-02-08 09:36:29 -05:00
test Support `select` elements 2024-02-08 09:36:29 -05:00
.gitignore
.node-version Use node 22 in actions 2024-10-17 09:34:43 -04:00
CODEOWNERS
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE
README.md Incorporate checkables into `storageFilter:` 2024-02-01 15:54:54 -05:00
karma.config.js
package-lock.json Run npm audit fix 2024-10-17 09:33:45 -04:00
package.json
tsconfig.json

README.md

Session Resume

Annotate fields to be persisted on navigation away from the current page. Fields will be automatically restored when the user revisits the page again in their current browser session (excludes separate tabs).

Not designed for persisted crash recovery.

Installation

$ npm install @github/session-resume

Usage

HTML

<form>
  <input id="new-comment" class="js-session-resumable"/>
</form>

JS

import {persistResumableFields, restoreResumableFields, setForm} from '@github/session-resume'

function getPageID() {
  return window.location.pathname
}

// Listen for all form submit events and to see if their default submission
// behavior is invoked.
window.addEventListener('submit', setForm, {capture: true})

// Resume field content on regular page loads.
window.addEventListener('pageshow', function() {
  restoreResumableFields(getPageID())
})

// Persist resumable fields when page is unloaded
window.addEventListener('pagehide', function() {
  persistResumableFields(getPageID())
})

restoreResumableFields(id: string, options)

The restoreResumableFields(id: string, options) function supports optional configurations:

  • storage: - Storage instance (defaults to window.sessionStorage)
  • keyPrefix: - string prepended onto the storage key (defaults to "session-resume")

persistResumableFields(id: string, options)

The persistResumableFields(id: string, options) function supports optional configurations:

  • storage: - Storage instance (defaults to window.sessionStorage)
  • storageFilter: - (field: HTMLInputElement | HTMLTextAreaElement) => boolean predicate to determine whether or not to store a field (defaults to (field) => field.checked !== field.defaultChecked) for checkbox and radio buttons, (field) => field.value !== field.defaultValue otherwise)
  • keyPrefix: - string prepended onto the storage key (defaults to "session-resume")
  • scope: - ParentNode used to query field elements (defaults to document)
  • selector: - string used to query field elements (defaults to ".js-session-resumable")
  • fields: - NodeList | Node[] provide field elements as an alternative to querying (defaults to options.scope.querySelectorAll(options.selector))

Note: When fields is specified, scope and selectors will be ignored.

Development

npm install
npm test

License

Distributed under the MIT license. See LICENSE for details.