data-store.php

Basic data store utility -- unfinished
git clone git://git.finwo.net/lib/data-store.php
Log | Files | Refs

commit e605ea9462bb9810623bf7a07182e9aa2b9f544b
parent 3d307ce838948492cc1e4e10e3bc5a71d73e3d85
Author: finwo <finwo@pm.me>
Date:   Thu, 18 May 2017 15:05:23 +0200

Some progress on the management interface

Diffstat:
Mdocs/css/base.css | 2+-
Ddocs/css/collections.css | 19-------------------
Adocs/css/lists.css | 19+++++++++++++++++++
Mdocs/index.html | 25++++++++++++++++++++-----
Mdocs/js/data-source.js | 25++++++++++++++++++++++++-
5 files changed, 64 insertions(+), 26 deletions(-)

diff --git a/docs/css/base.css b/docs/css/base.css @@ -78,5 +78,5 @@ nav a:hover { display: none; } .view:target { - display: initial; + display: block; } diff --git a/docs/css/collections.css b/docs/css/collections.css @@ -1,19 +0,0 @@ -ul.collections { - list-style-type : none; - padding : 0; -} -ul.collections li a { - display : inline-block; - padding : 0.5em; - width : 100%; -} -ul.collections li a:hover { - background-color: rgba(0,0,0,0.1); -} -ul.collections li a.active { - background: #5AF; - color : #FFF; -} -ul.collections li + li { - border-top: 1px solid rgba(0,0,0,0.2); -} diff --git a/docs/css/lists.css b/docs/css/lists.css @@ -0,0 +1,19 @@ +ul.simple { + list-style-type : none; + padding : 0; +} +ul.simple li a { + display : inline-block; + padding : 0.5em; + width : 100%; +} +ul.simple li a:hover { + background-color: rgba(0,0,0,0.1); +} +ul.simple li a.active { + background: #5AF; + color : #FFF; +} +ul.simple li + li { + border-top: 1px solid rgba(0,0,0,0.2); +} diff --git a/docs/index.html b/docs/index.html @@ -5,7 +5,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="stylesheet" href="/css/base.css" /> <link rel="stylesheet" href="/css/grid.css" /> - <link rel="stylesheet" href="/css/collections.css" /> + <link rel="stylesheet" href="/css/lists.css" /> </head> <body> <nav class="shadow"> @@ -16,16 +16,31 @@ <div class="container"> <div> <div class="col-1-5 padded"> - <ul class="shadow collections" data-source="/api/collections"> - <li><a href="#{name}">{name}</a></li> + <ul class="shadow simple" data-source="/api/collections"> + <li><a href="#{name}" onclick="activate(this);">{name}</a></li> </ul> </div> - <div class="col-4-5 padded"> - WIP + <div class="col-4-5 padded" data-source="/api/collections"> + <ul id="{name}" class="view shadow simple" data-source="/api/data/{name}"> + <li class="padded">ITEM</li> + </ul> </div> </div> </div> <script src="/js/require.js"></script> <script src="/js/data-source.js"></script> + + <script> + function activate( el ) { + document.querySelectorAll('.active').forEach(function( entity ) { + entity.className = entity.className + .split(' ') + .filter(function(className) {return !!className.length;}) + .filter(function(className) {return className != 'active'}) + .join(' '); + }); + el.className += ' active'; + } + </script> </body> </html> diff --git a/docs/js/data-source.js b/docs/js/data-source.js @@ -1,4 +1,18 @@ require('data-source', ['ajax', 'domchange'], function(ajax, onDomChange) { + function listen( element, event, handler ) { + if ( typeof element == 'string' ) { + handler = event; + event = element; + element = null; + } + if ( !element && event == 'change' ) { + onDomChange(handler,10); + return; + } + var add = element.addEventListener || element.attachEvent; + add = add.bind(element); + add(event,handler); + } function render( template, data ) { if ( Array.isArray(data) ) { return data.map(render.bind(null,template)).join(''); @@ -10,8 +24,15 @@ require('data-source', ['ajax', 'domchange'], function(ajax, onDomChange) { document.querySelectorAll('[data-source]').forEach(process); return; } + if(!element.getAttribute) { + document.querySelectorAll('[data-source]').forEach(process); + return; + } var template = element.innerHTML, url = element.getAttribute('data-source'); + if ( url.indexOf('{') >= 0 ) { + return; + } element.innerHTML = ''; element.removeAttribute('data-source'); ajax(url) @@ -19,6 +40,8 @@ require('data-source', ['ajax', 'domchange'], function(ajax, onDomChange) { element.innerHTML = render(template,data); }) } - onDomChange(process,10); + + listen('change',process); + listen(document.body,'click',process); process(); });