npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

visa-v

v1.0.1

Published

A micro library for frontend loading and manipulation of HTML views with scoped css and javascript.

Downloads

2

Readme

visa-V

A micro library for frontend loading and manipulation of HTML views with scoped css and javascript. It can load HTML views even without an http server, making it suitable for applications that are useing file:// protocol (e.g. Cordova).

Hello World Example

  • index.html
<html>
	<head></head>
	<body>
		<div id="root"></div>
		<script type="module">
			import './visa-V.js';

			var root = document.querySelector('#root');
			
			var layout = vV('path/to/layout.html',{
				title:'Hello World'
			});
			
			root.append(layout);
			
		</script>
	</body>
</html>
	
  • layout.html
	<template>
		<h1 data-el="title"></h1>
	</template>
	<script src="vhook.js">
		({
			init: function(){
				title.innerHTML = Param('title','No Message');
				
				Ready();
			}
		}).init();
	</script>

How to install

NPM

npm install visa-v
  • Then copy the vhook.js and place it at the top of your application folder so you can refernece it in your HTML views.

Traditional Way

  • Download the zip fle and add the <script src="path/to/visa-V.js"></script> to the head of your main html file.
  • Add the hook <script src="vhook.js"> /** Your code here **/ </script> as the last script tag in all of your view html files.

ESM Import

	import './visa-V.js';
  • Add the hook <script src="vhook.js"> /** Your code here **/ </script> as the last script tag in all of your view html files.

How to use

Loading an HTML View

Once visa-V is loaded you will have access to the function vV([path,param]);

Example:

var view = vV('path/to/view.html',{title:'Hello World'});

document.body.append(view);

The return value will be a div element with some few additional properties and methods. Method | Description ------------|------------- .ready() | Returns a promise that will resolve if the view is deemed ready. .clone() | Method to clone the view. .setArea([target,content]) | Method use to set the area of a view. The first parameter is the name of the targeted area, while the second parameter is the content to be rendered. .promise | The defered internal promise object used in the .ready() method .cloneData | property that contains the information needed to clone the view. .* | Custom user defined properties and methods.

Creating an HTML View

visa-V uses hidden iframes to load your HTML views and then passes the data to the caller via a post message hook. So in order for your views to work, you must reference vhook.js in all of your HTML views. Follow the template below so in order to call an HTML view using visa-V.

<template>
   <h1>Hello Wordl</h1>   
</template>

<script src="/path/to/vhook.js">
	/** Any code writen here will only execute within the scope of this HTML view **/

	//Call the Ready() function always after your HTML view is done and ready for consumption
	Ready();
</script>  

Alternate format for HTML views

Note that only the last javascript code block will be used for execution within the HTML view's scope.

Adding other external script tags will execute in the global scope.

<template>
   <h1>Hello Wordl</h1>   
</template>

<!-- Optional -->
<script src="3rd/party.js"></script>

<!-- vhook.js is required for the HTML views to work -->
<script src="path/to/vhook.js"></script>

<!-- Only the last javascript code block outside the <template> will be executed -->
<script>
	/** Any code writen here will only execute within the scope of this HTML view **/

	//Call the Ready() function always after your HTML view is done and ready for consumption
	Ready();
</script>  

When calling ESM import in HTML view use dynamic import()

<template>
   <h1>Hello Wordl</h1>   
</template>

<script src="/path/to/vhook.js">
	(async ()=>{

		let {something} = await import('libriary.js');

		something();

		//Call the Ready() function always after your HTML view is done and ready for consumption
		Ready();

	})();
</script>  

Injected features of an HTML view

The HTML view will be automatically injected with predefined functions and variables that will aid in creating user desired features.

Injected | Type | Description ---------|-------|------------- $param | Javascript Variable | An object variable that contains the 2nd paramter passed to the vV([path,params]) function. $doc | Javacript Variable | A reference dom element to the contents of the template Param([key,default]) | Javascript Function | A function that returns the value of the selected key in $param. The second paramter is returned as a default if the key does not exist. Ready() | Javascript Function | A function that triggers the "ready" event of the view, that will notify event listiners and resolve the .ready() function of the returned vV([path,params]) element.

Accessing view elements as javascript variables in your code block

visa-V will automatically inject HTML element from your template to your javascript code block using the attribute data-el="variable name".

<template>
   <h1 data-el="titleElement"></h1>   
</template>

<script src="path/to/vhook.js">
	/** Any code writen here will only execute within the scope of this HTML view **/
	
	//Access the element "titleElement" from the template
	titleElement.innerHTML = 'Hello World';
	
	//Call the Ready() function always after your HTML view is done and ready for consumption
	Ready();
</script>  

User defined publicly accessible methods on html views

Extend the $doc object in your HTML views to define a custom method that can later be use to dynamically manipulate its content.

view.html

<template>
   <h1 data-el="titleEl"></h1>   
</template>

<script src="path/to/vhook.js">
	/** Any code writen here will only execute within the scope of this HTML view **/
	
	
	$doc.setTitle = (titleText)=>{
	titleEl.innerHTML = titleText;
	}
	
	
	//Call the Ready() function always after your HTML view is done and ready for consumption
	Ready();
</script>  

index.html

<!DOCTYPE html>
<html lang="en">
	<head>
	  <meta charset="utf-8">
	  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 </head>
 <body>
   <div id="app"></div>
   
   <script type="module">
	import '/visa-V.js';

    var app = document.getElementById('app');
    
    var view = vV('path/to/view.html');
    
    app.append(view);
    
	view.setTitle('Hello World');
	
   </script>
 </body>
</html>

Apply scoped style stags

Add the attribute "scoped" to any style tag inside your HTML view and it will only affect everything within the style tag's parent element.

<template>
   <div>
   	<style scoped>
		h1{
			color: blue;
		}
	</style>
	
   	<h1>Hello World - This is Blue</h1>
	
	<div>
		<style scoped>
			h1{
				color: red;
			}
		</style>

		<h1>Hello World - This is Red</h1>
	</div>
	
	<h1>Hello World - This is also Blue</h1>
   </div>
</template>

<script src="path/to/vhook.js">
	/** Any code writen here will only execute within the scope of this HTML view **/
	

	//Call the Ready() function always after your HTML view is done and ready for consumption
	Ready();
</script>  

Cloning an HTML view

To prevent reloading the same HTML view repeatedly use the .clone() method.

The view must have a "ready" status in order to be cloned.

	
	var view = vV('path/to/view.html');
	
	view.ready().then(()=>{
		
		var view_A = view.clone();
		var view_B = view.clone();

		document.body.append(view_A);

		document.getElementById('#target').append(view_B);

		$('.stuff').each(function(){

			this.append(view.clone());
		});
		
	});
	

Debugging visa-V

Set the golbal varialble vVconfig.debug = 1; default is 0 to activate console logs.

Most of the issues you might encounter will be related to the correct path of the view. If you are serving your application from an http server, then you must use the http:// url of the view. But if you are running your application on file locally without an http server (e.g. Cordova applications), then you must use the relative file path of the view.