diff --git a/content/modules/Admin.php b/content/modules/Admin.php index cb6a0a4..9152d78 100644 --- a/content/modules/Admin.php +++ b/content/modules/Admin.php @@ -66,14 +66,20 @@ $this->register('controller-page-list',function($page){ $pageList=[]; foreach($this->listPages() as $p){ - $pageList[]=['id'=>$p]; + $pname= substr($p, 0, strrpos($p, '.',-1)); + $pageList[]=['id'=>$pname]; } $page->setData('page-list',$pageList); }); $this->register('controller-page-edit',function($page){ $pname=$_GET['id']; $page->setData('page-id',$pname); - $page->setData('page',Conjuro::loadJson("content/pages/$pname")); + if (!isset($_GET['id'])){ + $page->setData('page',[]); + }else{ + $page->setData('layout-usage',m('Page')->do('measurePage',$pname)); + $page->setData('page',Conjuro::loadJson("content/pages/$pname.json")); + } }); $this->register('controller-user-list',function($page){ //$page->setData('users',$this->listUsers()); diff --git a/content/modules/Page.php b/content/modules/Page.php index 5eab0c1..99272fc 100644 --- a/content/modules/Page.php +++ b/content/modules/Page.php @@ -149,10 +149,31 @@ } +class PageMeasurer extends PageBase{ + public $sections=[]; + // Renders the page + public function showPage(){ + $this->sections=[]; + ob_start(); + include(self::getLayoutFile()); + $out = ob_get_clean(); + return $this->sections; + } + + // Renders a fragment + protected function showFragment($name){ + include self::filePath($name.".php"); + } + + public function showContent($name){ + $this->sections[$name]=$this->sections[$name]?$this->sections[$name]++:1; + } +} + return new class($conf) extends Module{ private $pages=[]; - private $page=""; + private $page=''; // Render current page public function showPage(){ @@ -197,6 +218,11 @@ return $this->page; } + private function measurePage($pageName){ + $page=new PageMeasurer($pageName,$this->conf); + return $page->showPage(); + } + public function init(){ $this->register("main",function(){ $this->showPage(); @@ -204,6 +230,9 @@ $this->register("showPage",function(){ $this->showPage(); }); + $this->register("measurePage",function($pageName){ + return $this->measurePage($pageName); + }); } } ?> \ No newline at end of file diff --git a/media/admin/style.css b/media/admin/style.css index c42a1ce..aca40ff 100644 --- a/media/admin/style.css +++ b/media/admin/style.css @@ -218,8 +218,11 @@ outline-offset: 1px; } -/* Admin title*/ +.small{ + font-size:0.9rem; +} +/* Admin title*/ .admin-title { float: left; } diff --git a/media/common.css b/media/common.css index 6d96cad..9f5f764 100644 --- a/media/common.css +++ b/media/common.css @@ -5,19 +5,3 @@ *{ box-sizing: border-box; } - -.right{ - text-align:right; -} - -.center{ - text-align:center; -} - -.small{ - font-size: 12px !important; -} - -.clear{ - clear: both; -} diff --git a/media/muWeb.js b/media/muWeb.js index 6e1a864..74de79e 100644 --- a/media/muWeb.js +++ b/media/muWeb.js @@ -69,15 +69,16 @@ var target, rows; if (!idBase) - idBase = "repeater"; + idBase = 'repeater'; function feed(data) { + target._data = data; clear(); rows = []; for (var i in data) { var d = data[i]; var r = template.cloneNode(true); - populate(r, d, idBase + ":" + i + "::", r); + populate(r, d, idBase + ':' + i + '::', r); r._repeater_data = d; r._repeater_index = i; rows.push(r); @@ -96,6 +97,7 @@ // == Configuration function setTemplate(templ) { template = templ + delete template.dataset.$; if (templ.parentElement) { target = templ.parentElement; templ.parentElement.removeChild(templ); @@ -124,15 +126,31 @@ if (dom.id && idBase) dom.id = idBase + dom.id; dom._tag = tag; - dom._data=data; + dom._data = data; // process dataset: for (var k in dom.dataset) { - var d = data[dom.dataset[k]]; - if (d === undefined) d = ""; - if (k == '#') - dom.innerText = d; + var d; + if (dom.dataset[k]) + d = data[dom.dataset[k]]; else - dom[k] = d; + d = data; + if (k == '$') { + let rpt = dom.parentElement._repeater; + if (!rpt) + rpt = dom.parentElement._repeater = repeater(dom, null, idBase); + if (d) + rpt.feed(d); + else + rpt.clear(); + } + else { + if (d === undefined) + d = ''; + if (k == '#') + dom.innerText = d; + else + dom[k] = d; + } } // go to childs for (var i in dom.children)