Skip to content
This repository has been archived by the owner on Dec 1, 2023. It is now read-only.

pinecone-router/middleware-views

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Views Middleware for Pinecone Router

GitHub tag (latest by date) npm bundle size Downloads from Jsdelivr NPM npm Changelog

A views middleware for Pinecone Router.

About

As of PineconeRouter v4 this middleware was replaced by the x-templates feature that is now built-in.

This will only work with PineconeRouter v3

Allows you to set the path for an HTML file (or multiple) and it'll be fetched and displayed inside the specified elements (#app by default).

Installation

CDN

Include the following <script> tag in the <head> of your document, before Pinecone Router:

<script src="https://cdn.jsdelivr.net/npm/pinecone-router-middleware-views@3.x.x/dist/views.min.js"></script>

or:

import 'https://cdn.jsdelivr.net/npm/pinecone-router-middleware-views@3.x.x/dist/views.min.js'

NPM

npm install pinecone-router-middleware-views
// load this middleware
import 'pinecone-router-middleware-views'
// load pinecone router
import PineconeRouter from 'pinecone-router'
// then load alpine.js
import Alpine from 'alpinejs'
// add the router as a plugin
Alpine.plugin(PineconeRouter)
// start alpine
Alpine.start()

Important: This must be added before loading Pinecone Router.

Usage

Demo

Add x-view to the routes with the value being the path to file.

That's it!

example:

<div x-data>
	<template x-route="/" x-view="/home.html"></template>
	<template x-route="/hello/:name" x-view="/hello.html"></template>
	<template x-route="notfound" x-view="/404.html"></template>
</div>

<div id="app" x-data>
	<!--this will be replaced by the content of the views.-->
</div>

hello.html:

<div>hello, <span x-text="$router.params.name"></span></div>

Notes:

View composition

You can have multiple views per route, and set the target for them individually: index.html

<template
	x-route="/login"
	x-view="['/authWrapper.html', {path:'/login.html', selector: '#content'}]"
></template>

authWrapper.html:

<div>
	<h1>Authenticate</h1>
	<div id="content"></div>
</div>

login.html:

<div>
	<h2>Login</h2>
	...
</div>

In the example above:

  • /authWrapper.html will be shown in the default target which is #app or whatever is default in the settings using the viewSelector property.
  • /login.html will be shown inside the element with the selector #content which is inside /authWrapper.html

You can say in this case authWrapper is used as a layout.

You can have more than 2 views and layouts just make sure to keep in mind that they're fetched and shown in order.

View Compositon feature was suggested @klausklapper

Events:

This middleware dispatch these events:

name recipient when is it dispatched
pinecone-start window when the page start loading
pinecone-end window when the page loading ends
fetch-error #app or whatever is default in settings when the fetch fail

The first two events can be used to show a loading bar or indicator

Loading bar Example:

Using nProgress:

<script src="https://unpkg.com/nprogress@0.2.0/nprogress.js"></script>
<link rel="stylesheet" href="https://unpkg.com/nprogress@0.2.0/nprogress.css" />
window.addEventListener('pinecone-start', () => nProgress.start())
window.addEventListener('pinecone-end', () => nProgress.done())

Supported versions

Version Pinecone Router Versions
3.x.x ^3.x.x
2.x.x 2.x.x
1.x.x ^1.0.0

Contributing:

Please refer to CONTRIBUTING.md

Versioning

This projects follow the Semantic Versioning guidelines.

License

Copyright (c) 2022 Rafik El Hadi Houari

Licensed under the MIT license, see LICENSE.md for details.