Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
piconav
?piconav
is a tiny library that keeps the browser URL in sync with your JS state for Single Page Applications.
It also syncs the document
title, canonical URL and meta description.
It aims to allow Google indexing of SPA's to prevent the need for server side rendering / hydrating.
piconav
?As a fast way to add SPA URL navigation to my prototypes.
Route
).Clear API.
picnoav
to document their usage.document
title, canonical URL and meta description are outside the control of the JSX DOM so have to updated directly with the DOM API.SEO.
script
tag so there is no fetch
latency after your initial JS loads.piconav
?piconav
if you want to get something up and running quickly.piconav
is very simple.piconav
to your JS project.Install: yarn add piconav
or npm install piconav
.
nav.js
to add configuration and event handlers to piconav
.import {on, off} from "./../lib/piconav";
import {storeIns} from "./../stores/store";
const resetPrimaryScroll = () => {
document.querySelector("html").scrollTo(0, 0);
};
const {nav, navByBrowser, updateDoc} = on({
site: {
canonicalDomain: `https://example.com`
},
events: {
js: {
after: ({data}) => {
if (data !== null && "type" in data && data.type !== "home") {
resetPrimaryScroll();
}
}
},
browser: {
after: (url, params) => {
// You should update your store state to match the incoming `url` and `params`.
return storeIns.onBrowserNav(url, params);
}
}
}
});
export {
nav,
navByBrowser,
updateDoc
}
nav.js
to your store, map JS state to document
state.When the user navigates via browser:
events.browser.after(url, params)
is called.
updateDoc(navEvent)
soon after.When the user navigates via JS click:
nav(navEvent)
Example using a MobX store:
@observable curUrl = null;
nav(appSpecificData, src = "js") {
this.curUrl = {
url: "/a/b/c",
title: "A Title",
metaDesc: "A page description",
data: appSpecificData,
src
};
}
Note: src
is either js
or browser
.
E.g If curUrl
is set via the events.browser.after
function, src
will be "browser"
.
Using an observable to store curUrl
property allows updating both the JSX DOM and document
when state changes.
Updating document
when curUrl
changes:
const disposer = observe(storeIns, "curUrl", ({oldValue, newValue}) => {
const {url, title, metaDesc, data, src} = newValue;
const navEvent = {
url,
doc: {
title,
metaDesc
},
// This can be any object, and will be passed to `events.js.after` to allow custom logic.
data
};
if (src === "js") {
nav(navEvent);
return;
}
if (src === "browser") {
updateDoc(navEvent);
return;
}
});
Using observe
on curUrl
allows calling nav
and updateDoc
in a single place (instead of many call sites).
navByBrowser
on initial page load.This will call events.browser.after
which will set your JS state to match the current URL.
This should be done preferably before you mount your JSX components so the first JSX render is your page content and not empty components.
This is important so the Googlebot snapshots and indexes the correct HTML.
navByBrowser();
FAQs
JS SPA nav library.
We found that piconav demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.