(Comments)
In this tutorial, I will explain you how to build single page applications easily using cowhite.js.
Opensource code at github - https://github.com/cowhite/Cowhite.js.
Documentation at https://cowhitejs.readthedocs.io.
Download link of cowhite.js - https://github.com/cowhite/Cowhite.js/blob/master/cowhite.js. (Dont embed this link in website, instead download and use)
Cowhite.js is a small jquery library that we developed to make our work easier. We have built the following features in Cowhite.js:
1. Build single page applications(spa) 2. Submit forms 3. Button actions
Lets say we are building a single page application where we have the urls which when opened, load the main content without re-loading staticfiles etc. Let these pages be page1, page2 and page3. Then the urls will be of the format:
example.com#page1 example.com#page2 example.com#page3
To make this work, we need to add below html:
<div id='page1-section' class='each-section hide' > <p>Page 1 content here</p> </div> <div id='page2-section' class='each-section hide' > <p>Page 2 content here</p> </div> <div id='page3-section' class='each-section hide' > <p>Page 3 content here</p> </div>
Then, if you open the url http://yourdomain.com#page1, then the content inside page1-section will be visible.
In the previous example, we are simply switching between pages/sections and then the static content present inside each page/section is displayed. Here, we will show how to load data from remote url automatically, that is, without writing code for loading content.
<div id='page1-section' class='each-section hide' data-url="https://cowhitejs.cowhite.com/assets/data/items_list.html"> <div id='page1-content'></div> </div>
Whenever a page/section is loaded, it will look for data attribute "url", that is, data-url. And then will make an ajax call to that url and inserts the result into the html element with id "page1-content". Here page1 is the page name/hash name with section id as "page1-section". This is useful when you simply want to load some remote html when loading a page.
This is useful when the response is JSON/XML but not html. You need to write a callback and then add the data attribute data-callback to the section like below:
<div id='page1-section' class='each-section hide' data-callback="loadPage1Callback" data-url="https://marketing.cowhite.com/api/v1/items/"> <div id='page1-content'></div> </div>
Code for callback in javascript:
function loadPage1Callback(res){ var html = "", $page1ItemHtml = $("#page1-template"), page1ItemHtml; for(var i=0; i<res.results.length; i++){ page1ItemHtml = $page1ItemHtml.html().replace(/ITEM_ID/g, res.results[i].id).replace( /ITEM/g, res.results[i].name); html += page1ItemHtml; } if(!res.results.length){ html += "<div>No items yet.</div>" } $("#page1-content").html(html); }
There may be situation when you want to do things on your own when a particular page is loaded. Then we can use the events fired when a page is loaded.
If the page with hash "page1" is loaded, then the event fired is "page1-opened".
We can write html like this:
<div id='page1-section' class='each-section hide' > <div id='page1-content'></div> </div>
Write code in javascript that catches the event "page1-opened" that cowhite.js fired
$(document).on("page1-opened", function(){ // write code here // For example, you can make ajax call to some url and insert that response to the dom(any element as you wish) });
You can look more of the documentation at https://cowhitejs.readthedocs.io.
We develop web applications to our customers using python/django/angular.
Contact us at hello@cowhite.com
Comments