put schemas in Comanche (this requires theme support (!))

This commit is contained in:
friendica 2014-02-27 20:48:10 -08:00
parent d2bc7c606a
commit 102521844b
6 changed files with 92 additions and 73 deletions

View File

@ -1678,10 +1678,11 @@ function current_theme(){
function current_theme_url($installing = false) { function current_theme_url($installing = false) {
global $a; global $a;
$t = current_theme(); $t = current_theme();
$uid = ''; $opts = '';
$uid = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : ''); $opts = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : '');
$opts .= ((x($a->layout,'schema')) ? '&schema=' . $a->layout['schema'] : '');
if(file_exists('view/theme/' . $t . '/php/style.php')) if(file_exists('view/theme/' . $t . '/php/style.php'))
return('view/theme/' . $t . '/php/style.pcss' . $uid); return('view/theme/' . $t . '/php/style.pcss' . $opts);
return('view/theme/' . $t . '/css/style.css'); return('view/theme/' . $t . '/css/style.css');
} }

View File

@ -6,7 +6,7 @@ Comanche is a markup language similar to bbcode with which to create elaborate a
Comanche primarily chooses what content will appear in various regions of the page. The various regions have names and these names can change depending on what layout template you choose. Comanche primarily chooses what content will appear in various regions of the page. The various regions have names and these names can change depending on what layout template you choose.
Currently there are two layout templates, unless your site provides additional layouts (TODO list all templates) Currently there are two layout templates, unless your site provides additional layouts.
default default
@ -42,6 +42,9 @@ To select a theme for your page, use the 'theme' tag.
This will select the theme named "apw". By default your channel's preferred theme will be used. This will select the theme named "apw". By default your channel's preferred theme will be used.
[theme=dark]redbasic[/theme]
This will select the theme named "redbasic" and load the "dark" theme schema for this theme.
**Regions** **Regions**
@ -60,6 +63,11 @@ Your webpage creation tools allow you to create menus and blocks, in addition to
This places the menu called "mymenu" at this location on the page, which must be inside a region. This places the menu called "mymenu" at this location on the page, which must be inside a region.
[menu=horizontal-menu]mymenu[/menu]
This places the menu called "mymenu" at this location on the page, which must be inside a region. Additionally it adds the CSS class "horizontal-menu" to this menu. This *may* result in a menu that looks different than the default menu style, *if* the css for the current theme defines a "horizontal-menu" class.
[block]contributors[/block] [block]contributors[/block]
This places a block named "contributors" in this region. This places a block named "contributors" in this region.
@ -92,6 +100,8 @@ The 'comment' tag is used to delimit comments. These comments will not appear on
**Complex Example** **Complex Example**
Please note that pasting this example into a layout page is not likely to do anything useful as the chosen names (layout, theme, regions, etc.) may not correspond to any existing webpage components.
[comment]use an existing page template which provides a banner region plus 3 columns beneath it[/comment] [comment]use an existing page template which provides a banner region plus 3 columns beneath it[/comment]
[layout]3-column-with-header[/layout] [layout]3-column-with-header[/layout]

View File

@ -57,6 +57,13 @@ function comanche_parser(&$a,$s) {
if($cnt) if($cnt)
$a->page['template'] = trim($matches[1]); $a->page['template'] = trim($matches[1]);
$cnt = preg_match("/\[theme=(.*?)\](.*?)\[\/theme\]/ism", $s, $matches);
if($cnt) {
$a->layout['schema'] = trim($matches[1]);
$a->layout['theme'] = trim($matches[2]);
}
$cnt = preg_match("/\[theme\](.*?)\[\/theme\]/ism", $s, $matches); $cnt = preg_match("/\[theme\](.*?)\[\/theme\]/ism", $s, $matches);
if($cnt) if($cnt)
$a->layout['theme'] = trim($matches[1]); $a->layout['theme'] = trim($matches[1]);

View File

@ -613,7 +613,7 @@ function widget_suggestedchats($arr) {
$h = get_observer_hash(); $h = get_observer_hash();
if(! $h) if(! $h)
return; return;
$r = q("select *, count(xchat_url) as total from xchat group by xchat_url order by total desc, xchat_desc"); $r = q("select *, count(xchat_url) as total from xchat group by xchat_url order by total desc, xchat_desc limit 24");
for($x = 0; $x < count($r); $x ++) for($x = 0; $x < count($r); $x ++)
$r[$x]['xchat_url'] = zid($r[$x]['xchat_url']); $r[$x]['xchat_url'] = zid($r[$x]['xchat_url']);

View File

@ -28,76 +28,71 @@ function layouts_content(&$a) {
return; return;
} }
// Get the observer, check their permissions
$observer = $a->get_observer();
$ob_hash = (($observer) ? $observer['xchan_hash'] : '');
$perms = get_all_perms($owner,$ob_hash);
if(! $perms['write_pages']) {
notice( t('Permission denied.') . EOL);
return;
}
$tabs = array(
array(
'label' => t('Layout Help'),
'url' => 'help/Comanche',
'sel' => '',
'title' => t('Help with this feature'),
'id' => 'layout-help-tab',
));
$o .= replace_macros(get_markup_template('common_tabs.tpl'),array('$tabs' => $tabs));
// Get the observer, check their permissions
$observer = $a->get_observer();
$ob_hash = (($observer) ? $observer['xchan_hash'] : '');
$perms = get_all_perms($owner,$ob_hash);
if(! $perms['write_pages']) {
notice( t('Permission denied.') . EOL);
return;
}
// if(local_user() && local_user() == $owner) {
// $a->set_widget('design',design_tools());
// }
$tabs = array(
array(
'label' => t('Layout Help'),
'url' => 'help/Comanche',
'sel' => '',
'title' => t('Help with this feature'),
'id' => 'layout-help-tab',
));
$o .= replace_macros(get_markup_template('common_tabs.tpl'),array('$tabs' => $tabs)); // Create a status editor (for now - we'll need a WYSIWYG eventually) to create pages
// Nickname is set to the observers xchan, and profile_uid to the owners. This lets you post pages at other people's channels.
require_once ('include/conversation.php');
$x = array(
'webpage' => ITEM_PDL,
'is_owner' => true,
'nickname' => $a->profile['channel_address'],
'lockstate' => (($group || $cid || $channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
'bang' => (($group || $cid) ? '!' : ''),
'visitor' => 'none',
'nopreview' => 1,
'ptlabel' => t('Layout Name'),
'profile_uid' => intval($owner),
);
$o .= status_editor($a,$x);
// Get a list of blocks. We can't display all them because endless scroll makes that unusable, so just list titles and an edit link.
// TODO - this should be replaced with pagelist_widget
$r = q("select * from item_id where uid = %d and service = 'PDL' order by sid asc",
intval($owner)
);
$pages = null;
if($r) {
$pages = array();
foreach($r as $rr) {
$pages[$rr['iid']][] = array('url' => $rr['iid'],'title' => $rr['sid']);
}
}
// Create a status editor (for now - we'll need a WYSIWYG eventually) to create pages //Build the base URL for edit links
// Nickname is set to the observers xchan, and profile_uid to the owners. This lets you post pages at other people's channels. $url = z_root() . "/editlayout/" . $which;
require_once ('include/conversation.php');
$x = array(
'webpage' => ITEM_PDL,
'is_owner' => true,
'nickname' => $a->profile['channel_address'],
'lockstate' => (($group || $cid || $channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
'bang' => (($group || $cid) ? '!' : ''),
'visitor' => 'none',
'nopreview' => 1,
'ptlabel' => t('Layout Name'),
'profile_uid' => intval($owner),
);
$o .= status_editor($a,$x); return $o . replace_macros(get_markup_template("webpagelist.tpl"), array(
//Get a list of blocks. We can't display all them because endless scroll makes that unusable, so just list titles and an edit link.
//TODO - this should be replaced with pagelist_widget
$r = q("select * from item_id where uid = %d and service = 'PDL' order by sid asc",
intval($owner)
);
$pages = null;
if($r) {
$pages = array();
foreach($r as $rr) {
$pages[$rr['iid']][] = array('url' => $rr['iid'],'title' => $rr['sid']);
}
}
//Build the base URL for edit links
$url = z_root() . "/editlayout/" . $which;
// This isn't pretty, but it works. Until I figure out what to do with the UI, it's Good Enough(TM).
return $o . replace_macros(get_markup_template("webpagelist.tpl"), array(
'$baseurl' => $url, '$baseurl' => $url,
'$edit' => t('Edit'), '$edit' => t('Edit'),
'$pages' => $pages, '$pages' => $pages,
@ -105,7 +100,7 @@ $r = q("select * from item_id where uid = %d and service = 'PDL' order by sid as
'$view' => t('View'), '$view' => t('View'),
'$preview' => '1', '$preview' => '1',
)); ));
} }

View File

@ -37,10 +37,16 @@ if(! $a->install) {
} }
// Now load the scheme. If a value is changed above, we'll keep the settings // Now load the scheme. If a value is changed above, we'll keep the settings
// If not, we'll keep those defined by the schema // If not, we'll keep those defined by the schema
// Setting $scheme to '' wasn't working for some reason, so we'll check it's // Setting $schema to '' wasn't working for some reason, so we'll check it's
// not --- like the mobile theme does instead. // not --- like the mobile theme does instead.
// Allow layouts to over-ride the schema
if($_REQUEST['schema'])
$schema = $_REQUEST['schema'];
if (($schema) && ($schema != '---')) { if (($schema) && ($schema != '---')) {
// Check it exists, because this setting gets distributed to clones // Check it exists, because this setting gets distributed to clones