Decaf mobile: an (almost) Javascript-free theme

This commit is contained in:
Zach Prezkuta 2013-01-26 12:52:21 -07:00
parent 8e62c8b27c
commit 488a38cd85
300 changed files with 11117 additions and 328 deletions

View file

@ -1935,6 +1935,36 @@ function build_querystring($params, $name=null) {
return $ret;
}
function explode_querystring($query) {
$arg_st = strpos($query, '?');
if($arg_st !== false) {
$base = substr($query, 0, $arg_st);
$arg_st += 1;
}
else {
$base = '';
$arg_st = 0;
}
$args = explode('&', substr($query, $arg_st));
foreach($args as $k=>$arg) {
if($arg === '')
unset($args[$k]);
}
$args = array_values($args);
if(!$base) {
$base = $args[0];
unset($args[0]);
$args = array_values($args);
}
return array(
'base' => $base,
'args' => $args,
);
}
/**
* Returns the complete URL of the current page, e.g.: http(s)://something.com/network
*

View file

@ -222,13 +222,13 @@ function contact_photo_menu($contact) {
$posts_link = $a->get_baseurl() . '/network/?cid=' . $contact['id'];
$menu = Array(
t("Poke") => $poke_link,
t("View Status") => $status_link,
t("View Profile") => $profile_link,
t("View Photos") => $photos_link,
t("Network Posts") => $posts_link,
t("Edit Contact") => $contact_url,
t("Send PM") => $pm_url,
'poke' => array(t("Poke"), $poke_link),
'status' => array(t("View Status"), $status_link),
'profile' => array(t("View Profile"), $profile_link),
'photos' => array(t("View Photos"), $photos_link),
'network' => array(t("Network Posts"), $posts_link),
'edit' => array(t("Edit Contact"), $contact_url),
'pm' => array(t("Send PM"), $pm_url),
);
@ -236,7 +236,7 @@ function contact_photo_menu($contact) {
call_hooks('contact_photo_menu', $args);
$o = "";
/* $o = "";
foreach($menu as $k=>$v){
if ($v!="") {
if(($k !== t("Network Posts")) && ($k !== t("Send PM")) && ($k !== t('Edit Contact')))
@ -245,7 +245,16 @@ function contact_photo_menu($contact) {
$o .= "<li><a href=\"$v\">$k</a></li>\n";
}
}
return $o;
return $o;*/
foreach($menu as $k=>$v){
if ($v[1]!="") {
if(($v[0] !== t("Network Posts")) && ($v[0] !== t("Send PM")) && ($v[0] !== t('Edit Contact')))
$menu[$k][2] = 1;
else
$menu[$k][2] = 0;
}
}
return $menu;
}}

View file

@ -1,4 +1,7 @@
<?php
require_once("include/contact_selectors.php");
/**
*
*/
@ -243,9 +246,7 @@ function prune_deadguys($arr) {
}
function populate_acl($user = null,$celeb = false) {
function get_acl_permissions($user = null) {
$allow_cid = $allow_gid = $deny_cid = $deny_gid = false;
if(is_array($user)) {
@ -265,6 +266,19 @@ function populate_acl($user = null,$celeb = false) {
$allow_cid = prune_deadguys($allow_cid);
return array(
'allow_cid' => $allow_cid,
'allow_gid' => $allow_gid,
'deny_cid' => $deny_cid,
'deny_gid' => $deny_gid,
);
}
function populate_acl($user = null,$celeb = false) {
$perms = get_acl_permissions($user);
// We shouldn't need to prune deadguys from the block list. Either way they can't get the message.
// Also no point enumerating groups and checking them, that will take place on delivery.
@ -311,10 +325,10 @@ function populate_acl($user = null,$celeb = false) {
'$showall'=> t("Visible to everybody"),
'$show' => t("show"),
'$hide' => t("don't show"),
'$allowcid' => json_encode($allow_cid),
'$allowgid' => json_encode($allow_gid),
'$denycid' => json_encode($deny_cid),
'$denygid' => json_encode($deny_gid),
'$allowcid' => json_encode($perms['allow_cid']),
'$allowgid' => json_encode($perms['allow_gid']),
'$denycid' => json_encode($perms['deny_cid']),
'$denygid' => json_encode($perms['deny_gid']),
));
@ -322,3 +336,238 @@ function populate_acl($user = null,$celeb = false) {
}
function construct_acl_data(&$a, $user) {
// Get group and contact information for html ACL selector
$acl_data = acl_lookup(&$a, 'html');
$user_defaults = get_acl_permissions($user);
if($acl_data['groups']) {
foreach($acl_data['groups'] as $key=>$group) {
// Add a "selected" flag to groups that are posted to by default
if($user_defaults['allow_gid'] &&
in_array($group['id'], $user_defaults['allow_gid']) && !in_array($group['id'], $user_defaults['deny_gid']) )
$acl_data['groups'][$key]['selected'] = 1;
else
$acl_data['groups'][$key]['selected'] = 0;
}
}
if($acl_data['contacts']) {
foreach($acl_data['contacts'] as $key=>$contact) {
// Add a "selected" flag to groups that are posted to by default
if($user_defaults['allow_cid'] &&
in_array($contact['id'], $user_defaults['allow_cid']) && !in_array($contact['id'], $user_defaults['deny_cid']) )
$acl_data['contacts'][$key]['selected'] = 1;
else
$acl_data['contacts'][$key]['selected'] = 0;
}
}
return $acl_data;
}
function acl_lookup(&$a, $out_type = 'json') {
if(!local_user())
return "";
$start = (x($_REQUEST,'start')?$_REQUEST['start']:0);
$count = (x($_REQUEST,'count')?$_REQUEST['count']:100);
$search = (x($_REQUEST,'search')?$_REQUEST['search']:"");
$type = (x($_REQUEST,'type')?$_REQUEST['type']:"");
// For use with jquery.autocomplete for private mail completion
if(x($_REQUEST,'query') && strlen($_REQUEST['query'])) {
if(! $type)
$type = 'm';
$search = $_REQUEST['query'];
}
if ($search!=""){
$sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'";
$sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')";
} else {
$sql_extra = $sql_extra2 = "";
}
// count groups and contacts
if ($type=='' || $type=='g'){
$r = q("SELECT COUNT(`id`) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra",
intval(local_user())
);
$group_count = (int)$r[0]['g'];
} else {
$group_count = 0;
}
if ($type=='' || $type=='c'){
$r = q("SELECT COUNT(`id`) AS c FROM `contact`
WHERE `uid` = %d AND `self` = 0
AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
AND `notify` != '' $sql_extra2" ,
intval(local_user())
);
$contact_count = (int)$r[0]['c'];
}
elseif ($type == 'm') {
// autocomplete for Private Messages
$r = q("SELECT COUNT(`id`) AS c FROM `contact`
WHERE `uid` = %d AND `self` = 0
AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
AND `network` IN ('%s','%s','%s') $sql_extra2" ,
intval(local_user()),
dbesc(NETWORK_DFRN),
dbesc(NETWORK_ZOT),
dbesc(NETWORK_DIASPORA)
);
$contact_count = (int)$r[0]['c'];
}
elseif ($type == 'a') {
// autocomplete for Contacts
$r = q("SELECT COUNT(`id`) AS c FROM `contact`
WHERE `uid` = %d AND `self` = 0
AND `pending` = 0 $sql_extra2" ,
intval(local_user())
);
$contact_count = (int)$r[0]['c'];
} else {
$contact_count = 0;
}
$tot = $group_count+$contact_count;
$groups = array();
$contacts = array();
if ($type=='' || $type=='g'){
$r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') as uids
FROM `group`,`group_member`
WHERE `group`.`deleted` = 0 AND `group`.`uid` = %d
AND `group_member`.`gid`=`group`.`id`
$sql_extra
GROUP BY `group`.`id`
ORDER BY `group`.`name`
LIMIT %d,%d",
intval(local_user()),
intval($start),
intval($count)
);
foreach($r as $g){
// logger('acl: group: ' . $g['name'] . ' members: ' . $g['uids']);
$groups[] = array(
"type" => "g",
"photo" => "images/twopeople.png",
"name" => $g['name'],
"id" => intval($g['id']),
"uids" => array_map("intval", explode(",",$g['uids'])),
"link" => ''
);
}
}
if ($type=='' || $type=='c'){
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 AND `notify` != ''
$sql_extra2
ORDER BY `name` ASC ",
intval(local_user())
);
}
elseif($type == 'm') {
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
AND `network` IN ('%s','%s','%s')
$sql_extra2
ORDER BY `name` ASC ",
intval(local_user()),
dbesc(NETWORK_DFRN),
dbesc(NETWORK_ZOT),
dbesc(NETWORK_DIASPORA)
);
}
elseif($type == 'a') {
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
WHERE `uid` = %d AND `pending` = 0
$sql_extra2
ORDER BY `name` ASC ",
intval(local_user())
);
}
else
$r = array();
if($type == 'm' || $type == 'a') {
$x = array();
$x['query'] = $search;
$x['photos'] = array();
$x['links'] = array();
$x['suggestions'] = array();
$x['data'] = array();
if(count($r)) {
foreach($r as $g) {
$x['photos'][] = $g['micro'];
$x['links'][] = $g['url'];
$x['suggestions'][] = $g['name'];
$x['data'][] = intval($g['id']);
}
}
echo json_encode($x);
killme();
}
if(count($r)) {
foreach($r as $g){
$contacts[] = array(
"type" => "c",
"photo" => $g['micro'],
"name" => $g['name'],
"id" => intval($g['id']),
"network" => $g['network'],
"link" => $g['url'],
"nick" => ($g['attag']) ? $g['attag'] : $g['nick'],
);
}
}
$items = array_merge($groups, $contacts);
if($out_type === 'html') {
$o = array(
'tot' => $tot,
'start' => $start,
'count' => $count,
'groups' => $groups,
'contacts' => $contacts,
);
return $o;
}
$o = array(
'tot' => $tot,
'start' => $start,
'count' => $count,
'items' => $items,
);
echo json_encode($o);
killme();
}

View file

@ -1,6 +1,7 @@
<?php
require_once("include/bbcode.php");
require_once("include/acl_selectors.php");
// Note: the code in 'item_extract_images' and 'item_redir_and_replace_images'
@ -704,6 +705,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$o = replace_macros($page_template, array(
'$baseurl' => $a->get_baseurl($ssl_state),
'$return_path' => $a->query_string,
'$live_update' => $live_update_div,
'$remove' => t('remove'),
'$mode' => $mode,
@ -908,7 +910,7 @@ function format_like($cnt,$arr,$type,$id) {
$str .= sprintf( t(', and %d other people'), $total - MAX_LIKERS );
}
$str = (($type === 'like') ? sprintf( t('%s like this.'), $str) : sprintf( t('%s don\'t like this.'), $str));
$o .= "\t" . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>';
$o .= "\t" . '<div class="wall-item-' . $type . '-expanded" id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>';
}
return $o;
}}
@ -962,8 +964,6 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) {
));
$tpl = get_markup_template("jot.tpl");
$jotplugins = '';
$jotnets = '';
@ -994,10 +994,31 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) {
if($notes_cid)
$jotnets .= '<input type="hidden" name="contact_allow[]" value="' . $notes_cid .'" />';
// Private/public post links for the non-JS ACL form
$private_post = 1;
if($_REQUEST['public'])
$private_post = 0;
$query_str = $a->query_string;
if(strpos($query_str, 'public=1') !== false)
$query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
// I think $a->query_string may never have ? in it, but I could be wrong
// It looks like it's from the index.php?q=[etc] rewrite that the web
// server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
if(strpos($query_str, '?') === false)
$public_post_link = '?public=1';
else
$public_post_link = '&public=1';
// $tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
$tpl = get_markup_template("jot.tpl");
$o .= replace_macros($tpl,array(
'$return_path' => $a->query_string,
'$return_path' => $query_str,
'$action' => $a->get_baseurl(true) . '/item',
'$share' => (x($x,'button') ? $x['button'] : t('Share')),
'$upload' => t('Upload photo'),
@ -1033,14 +1054,22 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) {
'$jotnets' => $jotnets,
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
'$lockstate' => $x['lockstate'],
'$acl' => $x['acl'],
'$bang' => $x['bang'],
'$profile_uid' => $x['profile_uid'],
'$preview' => ((feature_enabled($x['profile_uid'],'preview')) ? t('Preview') : ''),
'$jotplugins' => $jotplugins,
'$sourceapp' => t($a->sourcename),
'$cancel' => t('Cancel'),
'$rand_num' => random_digits(12)
'$rand_num' => random_digits(12),
// ACL permissions box
'$acl' => $x['acl'],
'$acl_data' => $x['acl_data'],
'$group_perms' => t('Post to Groups'),
'$contact_perms' => t('Post to Contacts'),
'$private' => t('Private post'),
'$is_private' => $private_post,
'$public_link' => $public_post_link,
));

View file

@ -3874,6 +3874,34 @@ function drop_item($id,$interactive = true) {
if((local_user() == $item['uid']) || ($cid) || (! $interactive)) {
// Check if we should do HTML-based delete confirmation
if($_REQUEST['confirm']) {
// <form> can't take arguments in its "action" parameter
// so add any arguments as hidden inputs
$query = explode_querystring($a->query_string);
$inputs = array();
foreach($query['args'] as $arg) {
if(strpos($arg, 'confirm=') === false) {
$arg_parts = explode('=', $arg);
$inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
}
}
return replace_macros(get_markup_template('confirm.tpl'), array(
'$method' => 'get',
'$message' => t('Do you really want to delete this item?'),
'$extra_inputs' => $inputs,
'$confirm' => t('Yes'),
'$confirm_url' => $query['base'],
'$confirm_name' => 'confirmed',
'$cancel' => t('Cancel'),
));
}
// Now check how the user responded to the confirmation query
if($_REQUEST['canceled']) {
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
}
logger('delete item: ' . $item['id'], LOGGER_DEBUG);
// delete the item

View file

@ -8,8 +8,6 @@ function nav(&$a) {
*
*/
$ssl_state = ((local_user()) ? true : false);
if(!(x($a->page,'nav')))
$a->page['nav'] = '';
@ -19,6 +17,35 @@ function nav(&$a) {
$a->page['nav'] .= '<div id="panel" style="display: none;"></div>' ;
$nav_info = nav_info($a);
/**
* Build the page
*/
$tpl = get_markup_template('nav.tpl');
$a->page['nav'] .= replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
'$langselector' => lang_selector(),
'$sitelocation' => $nav_info['sitelocation'],
'$nav' => $nav_info['nav'],
'$banner' => $nav_info['banner'],
'$emptynotifications' => t('Nothing new here'),
'$userinfo' => $nav_info['userinfo'],
'$sel' => $a->nav_sel,
'$apps' => $a->apps,
'$clear_notifs' => t('Clear notifications')
));
call_hooks('page_header', $a->page['nav']);
}
function nav_info(&$a) {
$ssl_state = ((local_user()) ? true : false);
/**
*
* Our network is distributed, and as you visit friends some of the
@ -152,6 +179,9 @@ function nav(&$a) {
}
$nav['navigation'] = array('navigation/', t('Navigation'), "", t('Site map'));
/**
*
* Provide a banner/logo/whatever
@ -164,23 +194,15 @@ function nav(&$a) {
$banner .= '<a href="http://friendica.com"><img id="logo-img" src="images/friendica-32.png" alt="logo" /></a><span id="logo-text"><a href="http://friendica.com">Friendica</a></span>';
$tpl = get_markup_template('nav.tpl');
$a->page['nav'] .= replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
'$langselector' => lang_selector(),
'$sitelocation' => $sitelocation,
'$nav' => $nav,
'$banner' => $banner,
'$emptynotifications' => t('Nothing new here'),
'$userinfo' => $userinfo,
'$sel' => $a->nav_sel,
'$apps' => $a->apps,
));
call_hooks('page_header', $a->page['nav']);
return array(
'sitelocation' => $sitelocation,
'nav' => $nav,
'banner' => $banner,
'userinfo' => $userinfo,
);
}
/*
* Set a menu item in navbar as selected
*

View file

@ -259,15 +259,15 @@ class Template {
public function replace($s, $r) {
$this->r = $r;
// remove comments block
$s = preg_replace('/{#(.*?\s*?)*?#}/', "", $s);
$s = $this->_build_nodes($s);
$s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s);
if ($s == Null)
$this->_preg_error();
// remove comments block
$s = preg_replace('/{#[^#]*#}/', "", $s);
// replace strings recursively (limit to 10 loops)
$os = "";
$count = 0;

View file

@ -4,193 +4,7 @@
require_once("include/acl_selectors.php");
function acl_init(&$a){
if(!local_user())
return "";
$start = (x($_REQUEST,'start')?$_REQUEST['start']:0);
$count = (x($_REQUEST,'count')?$_REQUEST['count']:100);
$search = (x($_REQUEST,'search')?$_REQUEST['search']:"");
$type = (x($_REQUEST,'type')?$_REQUEST['type']:"");
// For use with jquery.autocomplete for private mail completion
if(x($_REQUEST,'query') && strlen($_REQUEST['query'])) {
if(! $type)
$type = 'm';
$search = $_REQUEST['query'];
}
if ($search!=""){
$sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'";
$sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')";
} else {
$sql_extra = $sql_extra2 = "";
}
// count groups and contacts
if ($type=='' || $type=='g'){
$r = q("SELECT COUNT(`id`) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra",
intval(local_user())
);
$group_count = (int)$r[0]['g'];
} else {
$group_count = 0;
}
if ($type=='' || $type=='c'){
$r = q("SELECT COUNT(`id`) AS c FROM `contact`
WHERE `uid` = %d AND `self` = 0
AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
AND `notify` != '' $sql_extra2" ,
intval(local_user())
);
$contact_count = (int)$r[0]['c'];
}
elseif ($type == 'm') {
// autocomplete for Private Messages
$r = q("SELECT COUNT(`id`) AS c FROM `contact`
WHERE `uid` = %d AND `self` = 0
AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
AND `network` IN ('%s','%s','%s') $sql_extra2" ,
intval(local_user()),
dbesc(NETWORK_DFRN),
dbesc(NETWORK_ZOT),
dbesc(NETWORK_DIASPORA)
);
$contact_count = (int)$r[0]['c'];
}
elseif ($type == 'a') {
// autocomplete for Contacts
$r = q("SELECT COUNT(`id`) AS c FROM `contact`
WHERE `uid` = %d AND `self` = 0
AND `pending` = 0 $sql_extra2" ,
intval(local_user())
);
$contact_count = (int)$r[0]['c'];
} else {
$contact_count = 0;
}
$tot = $group_count+$contact_count;
$groups = array();
$contacts = array();
if ($type=='' || $type=='g'){
$r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') as uids
FROM `group`,`group_member`
WHERE `group`.`deleted` = 0 AND `group`.`uid` = %d
AND `group_member`.`gid`=`group`.`id`
$sql_extra
GROUP BY `group`.`id`
ORDER BY `group`.`name`
LIMIT %d,%d",
intval(local_user()),
intval($start),
intval($count)
);
foreach($r as $g){
// logger('acl: group: ' . $g['name'] . ' members: ' . $g['uids']);
$groups[] = array(
"type" => "g",
"photo" => "images/twopeople.png",
"name" => $g['name'],
"id" => intval($g['id']),
"uids" => array_map("intval", explode(",",$g['uids'])),
"link" => ''
);
}
}
if ($type=='' || $type=='c'){
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 AND `notify` != ''
$sql_extra2
ORDER BY `name` ASC ",
intval(local_user())
);
}
elseif($type == 'm') {
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
AND `network` IN ('%s','%s','%s')
$sql_extra2
ORDER BY `name` ASC ",
intval(local_user()),
dbesc(NETWORK_DFRN),
dbesc(NETWORK_ZOT),
dbesc(NETWORK_DIASPORA)
);
}
elseif($type == 'a') {
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
WHERE `uid` = %d AND `pending` = 0
$sql_extra2
ORDER BY `name` ASC ",
intval(local_user())
);
}
else
$r = array();
if($type == 'm' || $type == 'a') {
$x = array();
$x['query'] = $search;
$x['photos'] = array();
$x['links'] = array();
$x['suggestions'] = array();
$x['data'] = array();
if(count($r)) {
foreach($r as $g) {
$x['photos'][] = $g['micro'];
$x['links'][] = $g['url'];
$x['suggestions'][] = $g['name'];
$x['data'][] = intval($g['id']);
}
}
echo json_encode($x);
killme();
}
if(count($r)) {
foreach($r as $g){
$contacts[] = array(
"type" => "c",
"photo" => $g['micro'],
"name" => $g['name'],
"id" => intval($g['id']),
"network" => $g['network'],
"link" => $g['url'],
"nick" => ($g['attag']) ? $g['attag'] : $g['nick'],
);
}
}
$items = array_merge($groups, $contacts);
$o = array(
'tot' => $tot,
'start' => $start,
'count' => $count,
'items' => $items,
);
echo json_encode($o);
killme();
acl_lookup($a);
}

View file

@ -225,6 +225,36 @@ function contacts_content(&$a) {
if($cmd === 'drop') {
// Check if we should do HTML-based delete confirmation
if($_REQUEST['confirm']) {
// <form> can't take arguments in its "action" parameter
// so add any arguments as hidden inputs
$query = explode_querystring($a->query_string);
$inputs = array();
foreach($query['args'] as $arg) {
if(strpos($arg, 'confirm=') === false) {
$arg_parts = explode('=', $arg);
$inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
}
}
$a->page['aside'] = '';
return replace_macros(get_markup_template('confirm.tpl'), array(
'$method' => 'get',
'$message' => t('Do you really want to delete this contact?'),
'$extra_inputs' => $inputs,
'$confirm' => t('Yes'),
'$confirm_url' => $query['base'],
'$confirm_name' => 'confirmed',
'$cancel' => t('Cancel'),
));
}
// Now check how the user responded to the confirmation query
if($_REQUEST['canceled']) {
goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
}
require_once('include/Contact.php');
terminate_friendship($a->user,$a->contact,$orig_record[0]);
@ -239,6 +269,10 @@ function contacts_content(&$a) {
}
}
$_SESSION['return_url'] = $a->query_string;
if((x($a->data,'contact')) && (is_array($a->data['contact']))) {
$contact_id = $a->data['contact']['id'];
@ -405,8 +439,6 @@ function contacts_content(&$a) {
$ignored = false;
$all = false;
$_SESSION['return_url'] = $a->query_string;
if(($a->argc == 2) && ($a->argv[1] === 'all')) {
$sql_extra = '';
$all = true;

View file

@ -112,8 +112,9 @@ function display_content(&$a, $update = 0) {
'acl' => populate_acl($a->user, $celeb),
'bang' => '',
'visitor' => 'block',
'profile_uid' => local_user()
);
'profile_uid' => local_user(),
'acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
);
$o .= status_editor($a,$x,0,true);
}

View file

@ -85,16 +85,19 @@ function editpost_content(&$a) {
}
}
if($mail_enabled) {
// I don't think there's any need for the $jotnets when editing the post,
// and including them makes it difficult for the JS-free theme, so let's
// disable them
/* if($mail_enabled) {
$selected = (($pubmail_enabled) ? ' checked="checked" ' : '');
$jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . ' value="1" /> '
. t("Post to Email") . '</div>';
}
}*/
call_hooks('jot_tool', $jotplugins);
call_hooks('jot_networks', $jotnets);
//call_hooks('jot_networks', $jotnets);
//$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));

View file

@ -923,10 +923,12 @@ function item_content(&$a) {
require_once('include/security.php');
$o = '';
if(($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
require_once('include/items.php');
drop_item($a->argv[2]);
$o = drop_item($a->argv[2]);
}
return $o;
}
/**

View file

@ -105,6 +105,10 @@ function like_content(&$a) {
}
// See if we've been passed a return path to redirect to
$return_path = ((x($_REQUEST,'return')) ? $_REQUEST['return'] : '');
$r = q("SELECT * FROM `item` WHERE `verb` = '%s' AND `deleted` = 0
AND `contact-id` = %d AND ( `parent` = '%s' OR `parent-uri` = '%s' OR `thr-parent` = '%s') LIMIT 1",
dbesc($activity),
@ -137,7 +141,9 @@ function like_content(&$a) {
// proc_run('php',"include/notifier.php","like","$post_id"); // $post_id isn't defined here!
$like_item_id = $like_item['id'];
proc_run('php',"include/notifier.php","like","$like_item_id");
return;
like_content_return($a->get_baseurl(), $return_path);
return; // NOTREACHED
}
$uri = item_new_uri($a->get_hostname(),$owner_uid);
@ -221,11 +227,29 @@ EOT;
proc_run('php',"include/notifier.php","like","$post_id");
killme();
like_content_return($a->get_baseurl(), $return_path);
killme(); // NOTREACHED
// return; // NOTREACHED
}
// Decide how to return. If we were called with a 'return' argument,
// then redirect back to the calling page. If not, just quietly end
function like_content_return($baseurl, $return_path) {
if($return_path) {
$rand = '_=' . time();
if(strpos($return_path, '?')) $rand = "&$rand";
else $rand = "?$rand";
goaway($baseurl . "/" . $return_path . $rand);
}
killme();
}
function store_diaspora_like_retract_sig($activity, $item, $like_item, $contact) {
// Note that we can only create a signature for a user of the local server. We don't have
// a key for remote users. That is ok, because if a remote user is "unlike"ing a post, it

View file

@ -1,5 +1,7 @@
<?php
require_once("include/text.php");
function manage_post(&$a) {
@ -68,6 +70,10 @@ function manage_post(&$a) {
unset($_SESSION['return_url']);
if(x($_SESSION,'submanage'))
unset($_SESSION['submanage']);
if(x($_SESSION,'sysmsg'))
unset($_SESSION['sysmsg']);
if(x($_SESSION,'sysmsg_info'))
unset($_SESSION['sysmsg_info']);
require_once('include/security.php');
authenticate_success($r[0],true,true);
@ -91,27 +97,18 @@ function manage_content(&$a) {
return;
}
$o = '<h3>' . t('Manage Identities and/or Pages') . '</h3>';
$o .= '<div id="identity-manage-desc">' . t('Toggle between different identities or community/group pages which share your account details or which you have been granted "manage" permissions') . '</div>';
$o .= '<div id="identity-manage-choose">' . t('Select an identity to manage: ') . '</div>';
$o .= '<div id="identity-selector-wrapper">' . "\r\n";
$o .= '<form action="manage" method="post" >' . "\r\n";
$o .= '<select name="identity" size="4" onchange="this.form.submit();" >' . "\r\n";
foreach($a->identities as $rr) {
$selected = (($rr['nickname'] === $a->user['nickname']) ? ' selected="selected" ' : '');
$o .= '<option ' . $selected . 'value="' . $rr['uid'] . '">' . $rr['username'] . ' (' . $rr['nickname'] . ')</option>' . "\r\n";
$identities = $a->identities;
foreach($identities as $key=>$id) {
$identities[$key]['selected'] = (($id['nickname'] === $a->user['nickname']) ? ' selected="selected" ' : '');
}
$o .= '</select>' . "\r\n";
$o .= '<div id="identity-select-break"></div>' . "\r\n";
// $o .= '<input id="identity-submit" type="submit" name="submit" value="' . t('Submit') . '" />';
$o .= '</div></form>' . "\r\n";
$o = replace_macros(get_markup_template('manage.tpl'), array(
'$title' => t('Manage Identities and/or Pages'),
'$desc' => t('Toggle between different identities or community/group pages which share your account details or which you have been granted "manage" permissions'),
'$choose' => t('Select an identity to manage: '),
'$identities' => $identities,
'$submit' => t('Submit'),
));
return $o;

View file

@ -82,6 +82,8 @@ function message_post(&$a) {
$a->argc = 2;
$a->argv[1] = 'new';
}
else
goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
}
@ -185,6 +187,36 @@ function message_content(&$a) {
if(($a->argc == 3) && ($a->argv[1] === 'drop' || $a->argv[1] === 'dropconv')) {
if(! intval($a->argv[2]))
return;
// Check if we should do HTML-based delete confirmation
if($_REQUEST['confirm']) {
// <form> can't take arguments in its "action" parameter
// so add any arguments as hidden inputs
$query = explode_querystring($a->query_string);
$inputs = array();
foreach($query['args'] as $arg) {
if(strpos($arg, 'confirm=') === false) {
$arg_parts = explode('=', $arg);
$inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
}
}
//$a->page['aside'] = '';
return replace_macros(get_markup_template('confirm.tpl'), array(
'$method' => 'get',
'$message' => t('Do you really want to delete this message?'),
'$extra_inputs' => $inputs,
'$confirm' => t('Yes'),
'$confirm_url' => $query['base'],
'$confirm_name' => 'confirmed',
'$cancel' => t('Cancel'),
));
}
// Now check how the user responded to the confirmation query
if($_REQUEST['canceled']) {
goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
}
$cmd = $a->argv[1];
if($cmd === 'drop') {
$r = q("DELETE FROM `mail` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@ -194,7 +226,8 @@ function message_content(&$a) {
if($r) {
info( t('Message deleted.') . EOL );
}
goaway($a->get_baseurl(true) . '/message' );
//goaway($a->get_baseurl(true) . '/message' );
goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
}
else {
$r = q("SELECT `parent-uri`,`convid` FROM `mail` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@ -224,7 +257,8 @@ function message_content(&$a) {
if($r)
info( t('Conversation removed.') . EOL );
}
goaway($a->get_baseurl(true) . '/message' );
//goaway($a->get_baseurl(true) . '/message' );
goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
}
}
@ -304,6 +338,9 @@ function message_content(&$a) {
return $o;
}
$_SESSION['return_url'] = $a->query_string;
if($a->argc == 1) {
// list messages

27
mod/navigation.php Normal file
View file

@ -0,0 +1,27 @@
<?php
require_once("include/nav.php");
function navigation_content(&$a) {
$nav_info = nav_info($a);
/**
* Build the page
*/
$tpl = get_markup_template('navigation.tpl');
return replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
'$langselector' => lang_selector(),
'$sitelocation' => $nav_info['sitelocation'],
'$nav' => $nav_info['nav'],
'$banner' => $nav_info['banner'],
'$emptynotifications' => t('Nothing new here'),
'$userinfo' => $nav_info['userinfo'],
'$sel' => $a->nav_sel,
'$apps' => $a->apps,
'$clear_notifs' => t('Clear notifications')
));
}

View file

@ -560,10 +560,12 @@ function network_content(&$a, $update = 0) {
'default_location' => $a->user['default-location'],
'nickname' => $a->user['nickname'],
'lockstate' => ((($group) || ($cid) || ($nets) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'),
'default_perms' => get_acl_permissions($a->user),
'acl' => populate_acl((($group || $cid || $nets) ? $def_acl : $a->user), $celeb),
'bang' => (($group || $cid || $nets) ? '!' : ''),
'visitor' => 'block',
'profile_uid' => local_user()
'profile_uid' => local_user(),
'acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
);
$o .= status_editor($a,$x);

View file

@ -60,8 +60,8 @@ function notes_content(&$a,$update = false) {
'bang' => '',
'visitor' => 'block',
'profile_uid' => local_user(),
'button' => t('Save')
'button' => t('Save'),
'acl_data' => '',
);
$o .= status_editor($a,$x,$a->contact['id']);

View file

@ -166,6 +166,11 @@ function photos_post(&$a) {
return; // NOTREACHED
}
// Check if the user has responded to a delete confirmation query
if($_REQUEST['canceled']) {
goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
}
$newalbum = notags(trim($_POST['albumname']));
if($newalbum != $album) {
q("UPDATE `photo` SET `album` = '%s' WHERE `album` = '%s' AND `uid` = %d",
@ -181,6 +186,25 @@ function photos_post(&$a) {
if($_POST['dropalbum'] == t('Delete Album')) {
// Check if we should do HTML-based delete confirmation
if($_REQUEST['confirm']) {
$drop_url = $a->query_string;
$extra_inputs = array(
array('name' => 'albumname', 'value' => $_POST['albumname']),
);
$a->page['content'] = replace_macros(get_markup_template('confirm.tpl'), array(
'$method' => 'post',
'$message' => t('Do you really want to delete this photo album and all its photos?'),
'$extra_inputs' => $extra_inputs,
'$confirm' => t('Delete Album'),
'$confirm_url' => $drop_url,
'$confirm_name' => 'dropalbum', // Needed so that confirmation will bring us back into this if statement
'$cancel' => t('Cancel'),
));
$a->error = 1; // Set $a->error so the other module functions don't execute
return;
}
$res = array();
// get the list of photos we are about to delete
@ -242,10 +266,32 @@ function photos_post(&$a) {
return; // NOTREACHED
}
// Check if the user has responded to a delete confirmation query for a single photo
if(($a->argc > 2) && $_REQUEST['canceled']) {
goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
}
if(($a->argc > 2) && (x($_POST,'delete')) && ($_POST['delete'] == t('Delete Photo'))) {
// same as above but remove single photo
// Check if we should do HTML-based delete confirmation
if($_REQUEST['confirm']) {
$drop_url = $a->query_string;
$a->page['content'] = replace_macros(get_markup_template('confirm.tpl'), array(
'$method' => 'post',
'$message' => t('Do you really want to delete this photo?'),
'$extra_inputs' => array(),
'$confirm' => t('Delete Photo'),
'$confirm_url' => $drop_url,
'$confirm_name' => 'delete', // Needed so that confirmation will bring us back into this if statement
'$cancel' => t('Cancel'),
));
$a->error = 1; // Set $a->error so the other module functions don't execute
return;
}
if($visitor) {
$r = q("SELECT `id`, `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d AND `resource-id` = '%s' LIMIT 1",
intval($visitor),
@ -284,7 +330,7 @@ function photos_post(&$a) {
}
}
goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
goaway($a->get_baseurl() . '/photos/' . $a->data['user']['nickname']);
return; // NOTREACHED
}
@ -1024,8 +1070,10 @@ function photos_content(&$a) {
call_hooks('photo_upload_form',$ret);
$default_upload = '<input id="photos-upload-choose" type="file" name="userfile" /> <div class="photos-upload-submit-wrapper" >
<input type="submit" name="submit" value="' . t('Submit') . '" id="photos-upload-submit" /> </div>';
$default_upload_box = replace_macros(get_markup_template('photos_default_uploader_box.tpl'), array());
$default_upload_submit = replace_macros(get_markup_template('photos_default_uploader_submit.tpl'), array(
'$submit' => t('Submit'),
));
$usage_message = '';
$limit = service_class_fetch($a->data['user']['uid'],'photo_upload_limit');
@ -1038,6 +1086,25 @@ function photos_content(&$a) {
}
// Private/public post links for the non-JS ACL form
$private_post = 1;
if($_REQUEST['public'])
$private_post = 0;
$query_str = $a->query_string;
if(strpos($query_str, 'public=1') !== false)
$query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
// I think $a->query_string may never have ? in it, but I could be wrong
// It looks like it's from the index.php?q=[etc] rewrite that the web
// server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
if(strpos($query_str, '?') === false)
$public_post_link = '?public=1';
else
$public_post_link = '&public=1';
$tpl = get_markup_template('photos_upload.tpl');
if($a->theme['template_engine'] === 'internal') {
@ -1060,9 +1127,20 @@ function photos_content(&$a) {
'$albumselect' => $albumselect_e,
'$permissions' => t('Permissions'),
'$aclselect' => $aclselect_e,
'$uploader' => $ret['addon_text'],
'$default' => (($ret['default_upload']) ? $default_upload : ''),
'$uploadurl' => $ret['post_url']
'$alt_uploader' => $ret['addon_text'],
'$default_upload_box' => (($ret['default_upload']) ? $default_upload_box : ''),
'$default_upload_submit' => (($ret['default_upload']) ? $default_upload_submit : ''),
'$uploadurl' => $ret['post_url'],
// ACL permissions box
'$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
'$group_perms' => t('Show to Groups'),
'$contact_perms' => t('Show to Contacts'),
'$private' => t('Private Photo'),
'$public' => t('Public Photo'),
'$is_private' => $private_post,
'$return_path' => $query_str,
'$public_link' => $public_post_link,
));
@ -1372,6 +1450,24 @@ function photos_content(&$a) {
if(($cmd === 'edit') && ($can_post)) {
$edit_tpl = get_markup_template('photo_edit.tpl');
// Private/public post links for the non-JS ACL form
$private_post = 1;
if($_REQUEST['public'])
$private_post = 0;
$query_str = $a->query_string;
if(strpos($query_str, 'public=1') !== false)
$query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
// I think $a->query_string may never have ? in it, but I could be wrong
// It looks like it's from the index.php?q=[etc] rewrite that the web
// server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
if(strpos($query_str, '?') === false)
$public_post_link = '?public=1';
else
$public_post_link = '&public=1';
if($a->theme['template_engine'] === 'internal') {
$album_e = template_escape($ph[0]['album']);
$caption_e = template_escape($ph[0]['desc']);
@ -1400,7 +1496,17 @@ function photos_content(&$a) {
'$help_tags' => t('Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'),
'$item_id' => ((count($linked_items)) ? $link_item['id'] : 0),
'$submit' => t('Submit'),
'$delete' => t('Delete Photo')
'$delete' => t('Delete Photo'),
// ACL permissions box
'$acl_data' => construct_acl_data($a, $ph[0]), // For non-Javascript ACL selector
'$group_perms' => t('Show to Groups'),
'$contact_perms' => t('Show to Contacts'),
'$private' => t('Private photo'),
'$public' => t('Public photo'),
'$is_private' => $private_post,
'$return_path' => $query_str,
'$public_link' => $public_post_link,
));
}
@ -1418,9 +1524,10 @@ function photos_content(&$a) {
$likebuttons = replace_macros($like_tpl,array(
'$id' => $link_item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
'$nolike' => (feature_enabled(local_user(), 'dislike') ? t("I don't like this \x28toggle\x29") : ''),
'$share' => t('Share'),
'$wait' => t('Please wait')
'$wait' => t('Please wait'),
'$return_path' => $a->query_string,
));
}

View file

@ -198,7 +198,8 @@ function profile_content(&$a, $update = 0) {
'acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
'bang' => '',
'visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
'profile_uid' => $a->profile['profile_uid']
'profile_uid' => $a->profile['profile_uid'],
'acl_data' => ( $is_owner ? construct_acl_data($a, $a->user) : '' ), // For non-Javascript ACL selector
);
$o .= status_editor($a,$x);

View file

@ -1012,6 +1012,25 @@ function settings_content(&$a) {
require_once('include/group.php');
$group_select = mini_group_select(local_user(),$a->user['def_gid']);
// Private/public post links for the non-JS ACL form
$private_post = 1;
if($_REQUEST['public'])
$private_post = 0;
$query_str = $a->query_string;
if(strpos($query_str, 'public=1') !== false)
$query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
// I think $a->query_string may never have ? in it, but I could be wrong
// It looks like it's from the index.php?q=[etc] rewrite that the web
// server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
if(strpos($query_str, '?') === false)
$public_post_link = '?public=1';
else
$public_post_link = '&public=1';
$o .= replace_macros($stpl, array(
'$ptitle' => t('Account Settings'),
@ -1046,6 +1065,17 @@ function settings_content(&$a) {
'$blockwall'=> $blockwall, // array('blockwall', t('Allow friends to post to your profile page:'), !$blockwall, ''),
'$blocktags'=> $blocktags, // array('blocktags', t('Allow friends to tag your posts:'), !$blocktags, ''),
// ACL permissions box
'$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
'$group_perms' => t('Show to Groups'),
'$contact_perms' => t('Show to Contacts'),
'$private' => t('Default Private Post'),
'$public' => t('Default Public Post'),
'$is_private' => $private_post,
'$return_path' => $query_str,
'$public_link' => $public_post_link,
'$settings_perms' => t('Default Permissions for New Posts'),
'$group_select' => $group_select,

View file

@ -28,6 +28,16 @@ function starred_init(&$a) {
intval($message_id)
);
// See if we've been passed a return path to redirect to
$return_path = ((x($_REQUEST,'return')) ? $_REQUEST['return'] : '');
if($return_path) {
$rand = '_=' . time();
if(strpos($return_path, '?')) $rand = "&$rand";
else $rand = "?$rand";
goaway($a->get_baseurl() . "/" . $return_path . $rand);
}
// the json doesn't really matter, it will either be 0 or 1
echo json_encode($starred);

View file

@ -9,10 +9,38 @@ function suggest_init(&$a) {
return;
if(x($_GET,'ignore') && intval($_GET['ignore'])) {
q("insert into gcign ( uid, gcid ) values ( %d, %d ) ",
intval(local_user()),
intval($_GET['ignore'])
);
// Check if we should do HTML-based delete confirmation
if($_REQUEST['confirm']) {
// <form> can't take arguments in its "action" parameter
// so add any arguments as hidden inputs
$query = explode_querystring($a->query_string);
$inputs = array();
foreach($query['args'] as $arg) {
if(strpos($arg, 'confirm=') === false) {
$arg_parts = explode('=', $arg);
$inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
}
}
$a->page['content'] = replace_macros(get_markup_template('confirm.tpl'), array(
'$method' => 'get',
'$message' => t('Do you really want to delete this suggestion?'),
'$extra_inputs' => $inputs,
'$confirm' => t('Yes'),
'$confirm_url' => $query['base'],
'$confirm_name' => 'confirmed',
'$cancel' => t('Cancel'),
));
$a->error = 1; // Set $a->error so the other module functions don't execute
return;
}
// Now check how the user responded to the confirmation query
if(!$_REQUEST['canceled']) {
q("insert into gcign ( uid, gcid ) values ( %d, %d ) ",
intval(local_user()),
intval($_GET['ignore'])
);
}
}
}
@ -56,6 +84,7 @@ function suggest_content(&$a) {
'$name' => $rr['name'],
'$photo' => $rr['photo'],
'$ignlnk' => $a->get_baseurl() . '/suggest?ignore=' . $rr['id'],
'$ignid' => $rr['id'],
'$conntxt' => t('Connect'),
'$connlnk' => $connlnk,
'$ignore' => t('Ignore/Hide')

View file

@ -588,7 +588,7 @@ class Item extends BaseObject {
$qcomment = (($qc) ? explode("\n",$qc) : null);
}
$comment_box = replace_macros($template,array(
'$return_path' => '',
'$return_path' => $a->query_string,
'$threaded' => $this->is_threaded(),
// '$jsreload' => (($conv->get_mode() === 'display') ? $_SESSION['return_url'] : ''),
'$jsreload' => '',

View file

@ -7,7 +7,7 @@
<input type="hidden" name="type" value="$type" />
<input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" />
<input type="hidden" name="return" value="$return_path" />
{#<!--<input type="hidden" name="return" value="$return_path" />-->#}
<input type="hidden" name="jsreload" value="$jsreload" />
<input type="hidden" name="preview" id="comment-preview-inp-$id" value="0" />
<input type="hidden" name="post_id_random" value="$rand_num" />

14
view/confirm.tpl Normal file
View file

@ -0,0 +1,14 @@
<center>
<form action="$confirm_url" id="confirm-form" method="$method">
<span id="confirm-message">$message</span>
{{ for $extra_inputs as $input }}
<input type="hidden" name="$input.name" value="$input.value" />
{{ endfor }}
<input class="confirm-button" id="confirm-submit-button" type="submit" name="$confirm_name" value="$confirm" />
<input class="confirm-button" id="confirm-cancel-button" type="submit" name="canceled" value="$cancel" />
</form>
</center>

View file

@ -11,7 +11,13 @@
<span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">menu</span>
<div class="contact-photo-menu" id="contact-photo-menu-$contact.id">
<ul>
$contact.photo_menu
{{ for $contact.photo_menu as $c }}
{{ if $c.2 }}
<li><a target="redir" href="$c.1">$c.0</a></li>
{{ else }}
<li><a href="$c.1">$c.0</a></li>
{{ endif }}
{{ endfor }}
</ul>
</div>
{{ endif }}

View file

@ -1,5 +1,7 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
<a href="#" class="icon like" title="$likethis" onclick="dolike($id,'like'); return false"></a>
{{ if $nolike }}
<a href="#" class="icon dislike" title="$nolike" onclick="dolike($id,'dislike'); return false"></a>
{{ endif }}
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div>

17
view/manage.tpl Normal file
View file

@ -0,0 +1,17 @@
<h3>$title</h3>
<div id="identity-manage-desc">$desc</div>
<div id="identity-manage-choose">$choose</div>
<div id="identity-selector-wrapper">
<form action="manage" method="post" >
<select name="identity" size="4" onchange="this.form.submit();" >
{{ for $identities as $id }}
<option $id.selected value="$id.uid">$id.username ($id.nickname)</option>
{{ endfor }}
</select>
<div id="identity-select-break"></div>
{#<!--<input id="identity-submit" type="submit" name="submit" value="$submit" />-->#}
</div></form>

103
view/navigation.tpl Normal file
View file

@ -0,0 +1,103 @@
{#
# LOGIN/REGISTER
#}
<center>
{# Use nested if's since the Friendica template engine doesn't support AND or OR in if statements #}
{{ if $nav.login }}
<div id="navigation-login-wrapper" >
{{ else }}
{{ if $nav.register }}
<div id="navigation-login-wrapper" >
{{ endif }}
{{ endif }}
{{ if $nav.login }}<a id="navigation-login-link" class="navigation-link $nav.login.2" href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a><br/> {{ endif }}
{{ if $nav.register }}<a id="navigation-register-link" class="navigation-link $nav.register.2 $sel.register" href="$nav.register.0" title="$nav.register.3" >$nav.register.1</a><br/>{{ endif }}
{{ if $nav.login }}
</div>
{{ else }}
{{ if $nav.register }}
</div>
{{ endif }}
{{ endif }}
{#
# NETWORK/HOME
#}
{{ if $nav.network }}
<div id="navigation-network-wrapper" >
{{ else }}
{{ if $nav.home }}
<div id="navigation-network-wrapper" >
{{ else }}
{{ if $nav.community }}
<div id="navigation-network-wrapper" >
{{ endif }}
{{ endif }}
{{ endif }}
{{ if $nav.network }}
<a id="navigation-network-link" class="navigation-link navigation-commlink $nav.network.2 $sel.network" href="$nav.network.0" title="$nav.network.3" >$nav.network.1</a><br/>
<a class="navigation-link navigation-commlink" href="$nav.net_reset.0" title="$nav.net_reset.3">$nav.net_reset.1</a><br/>
{{ endif }}
{{ if $nav.home }}
<a id="navigation-home-link" class="navigation-link navigation-commlink $nav.home.2 $sel.home" href="$nav.home.0" title="$nav.home.3" >$nav.home.1</a><br/>
{{ endif }}
{{ if $nav.community }}
<a id="navigation-community-link" class="navigation-link navigation-commlink $nav.community.2 $sel.community" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a><br/>
{{ endif }}
{{ if $nav.network }}
</div>
{{ else }}
{{ if $nav.home }}
</div>
{{ else }}
{{ if $nav.community }}
</div>
{{ endif }}
{{ endif }}
{{ endif }}
{#
# PRIVATE MESSAGES
#}
{{ if $nav.messages }}
<div id="navigation-messages-wrapper">
<a id="navigation-messages-link" class="navigation-link navigation-commlink $nav.messages.2 $sel.messages" href="$nav.messages.0" title="$nav.messages.3" >$nav.messages.1</a><br/>
</div>
{{ endif }}
{#
# CONTACTS
#}
<div id="navigation-contacts-wrapper">
{{ if $nav.contacts }}<a id="navigation-contacts-link" class="navigation-link $nav.contacts.2" href="$nav.contacts.0" title="$nav.contacts.3" >$nav.contacts.1</a><br/>{{ endif }}
<a id="navigation-directory-link" class="navigation-link $nav.directory.2" href="$nav.directory.0" title="$nav.directory.3" >$nav.directory.1</a><br/>
{{ if $nav.introductions }}
<a id="navigation-notify-link" class="navigation-link navigation-commlink $nav.introductions.2 $sel.introductions" href="$nav.introductions.0" title="$nav.introductions.3" >$nav.introductions.1</a><br/>
{{ endif }}
</div>
{#
# NOTIFICATIONS
#}
{{ if $nav.notifications }}
<div id="navigation-notifications-wrapper">
<a id="navigation-notifications-link" class="navigation-link navigation-commlink" href="$nav.notifications.0" rel="#navigation-notifications-menu" title="$nav.notifications.1">$nav.notifications.1</a><br/>
</div>
{{ endif }}
{#
# MISCELLANEOUS
#}
<div id="navigation-misc-wrapper">
{{ if $nav.settings }}<a id="navigation-settings-link" class="navigation-link $nav.settings.2" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a><br/>{{ endif }}
{{ if $nav.manage }}<a id="navigation-manage-link" class="navigation-link navigation-commlink $nav.manage.2 $sel.manage" href="$nav.manage.0" title="$nav.manage.3">$nav.manage.1</a><br/>{{ endif }}
{{ if $nav.profiles }}<a id="navigation-profiles-link" class="navigation-link $nav.profiles.2" href="$nav.profiles.0" title="$nav.profiles.3" >$nav.profiles.1</a><br/>{{ endif }}
{{ if $nav.admin }}<a id="navigation-admin-link" class="navigation-link $nav.admin.2" href="$nav.admin.0" title="$nav.admin.3" >$nav.admin.1</a><br/>{{ endif }}
<a id="navigation-search-link" class="navigation-link $nav.search.2" href="$nav.search.0" title="$nav.search.3" >$nav.search.1</a><br/>
{{ if $nav.apps }}<a id="navigation-apps-link" class="navigation-link $nav.apps.2" href="$nav.apps.0" title="$nav.apps.3" >$nav.apps.1</a><br/>{{ endif }}
{{ if $nav.help }} <a id="navigation-help-link" class="navigation-link $nav.help.2" target="friendica-help" href="$nav.help.0" title="$nav.help.3" >$nav.help.1</a><br/>{{ endif }}
</div>
{{ if $nav.logout }}<a id="navigation-logout-link" class="navigation-link $nav.logout.2" href="$nav.logout.0" title="$nav.logout.3" >$nav.logout.1</a><br/>{{ endif }}
</center>

View file

@ -0,0 +1 @@
<input id="photos-upload-choose" type="file" name="userfile" />

View file

@ -0,0 +1,3 @@
<div class="photos-upload-submit-wrapper" >
<input type="submit" name="submit" value="$submit" id="photos-upload-submit" />
</div>

View file

@ -39,9 +39,10 @@
<div id="photos-upload-spacer"></div>
$uploader
$alt_uploader
$default
$default_upload_box
$default_upload_submit
<div class="photos-upload-end" ></div>
</form>

View file

@ -3,7 +3,7 @@
<input type="hidden" name="type" value="$type" />
<input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" />
<input type="hidden" name="return" value="$return_path" />
{#<!--<input type="hidden" name="return" value="$return_path" />-->#}
<input type="hidden" name="jsreload" value="$jsreload" />
<input type="hidden" name="preview" id="comment-preview-inp-$id" value="0" />
<input type="hidden" name="post_id_random" value="$rand_num" />

View file

@ -3,7 +3,7 @@
<input type="hidden" name="type" value="$type" />
<input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" />
<input type="hidden" name="return" value="$return_path" />
{#<!--<input type="hidden" name="return" value="$return_path" />-->#}
<input type="hidden" name="jsreload" value="$jsreload" />
<input type="hidden" name="preview" id="comment-preview-inp-$id" value="0" />
<input type="hidden" name="post_id_random" value="$rand_num" />

View file

@ -0,0 +1,31 @@
Photo album display?
- The "lock" icon for private items
- change it to black?
- when clicked, the popup window displays poorly
- Edit photo page: bottom buttons are off-center in Dolphin Mini
- BB code buttons for status updates
- Get "add contact" back on contacts page
- Allow creating a new private message
- Admin: access to more pages than summary?
- Find a way to show embedded videos at the normal size for tablets that can handle it
- Need to find a way to deal with freakin annoying elements that don't respect screen width limits.
Specifically, need to find a way to keep them from forcing a horizontal scroll bar to show up and
making the rest of the body text overflow the item's borders that is screen-width sensitive (it's
annoying to have a 300px truncated code block on a 1024px wide screen). At least the following cause problems:
- code blocks
- blockquote blocks
- #reallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongtags
- Needs to be faster!
- Reduce DOM elements (~2400 for 10 items, ~8400 for 40 items)
- Sometimes, when "Permission denied", wrong login page is shown

View file

@ -0,0 +1,29 @@
<a name="acl-wrapper-target"></a>
<div id="acl-wrapper">
<div id="acl-public-switch">
<a href="$return_path#acl-wrapper-target" {{ if $is_private == 1 }}class="acl-public-switch-selected"{{ endif }} >$private</a>
<a href="$return_path$public_link#acl-wrapper-target" {{ if $is_private == 0 }}class="acl-public-switch-selected"{{ endif }} >$public</a>
</div>
<div id="acl-list">
<div id="acl-list-content">
<div id="acl-html-groups" class="acl-html-select-wrapper">
$group_perms<br />
<select name="group_allow[]" multiple {{ if $is_private == 0 }}disabled{{ endif }} id="acl-html-group-select" class="acl-html-select" size=7>
{{ for $acl_data.groups as $group }}
<option value="$group.id" {{ if $is_private == 1 }}{{ if $group.selected }}selected{{ endif }}{{ endif }}>$group.name</option>
{{ endfor }}
</select>
</div>
<div id="acl-html-contacts" class="acl-html-select-wrapper">
$contact_perms<br />
<select name="contact_allow[]" multiple {{ if $is_private == 0 }}disabled{{ endif }} id="acl-html-contact-select" class="acl-html-select" size=7>
{{ for $acl_data.contacts as $contact }}
<option value="$contact.id" {{ if $is_private == 1 }}{{ if $contact.selected }}selected{{ endif }}{{ endif }}>$contact.name ($contact.networkName)</option>
{{ endfor }}
</select>
</div>
</div>
</div>
<span id="acl-fields"></span>
</div>

View file

@ -0,0 +1,23 @@
<div id="acl-wrapper">
<input id="acl-search">
<a href="#" id="acl-showall">$showall</a>
<div id="acl-list">
<div id="acl-list-content">
</div>
</div>
<span id="acl-fields"></span>
</div>
<div class="acl-list-item" rel="acl-template" style="display:none">
<img data-src="{0}"><p>{1}</p>
<a href="#" class='acl-button-show'>$show</a>
<a href="#" class='acl-button-hide'>$hide</a>
</div>
{#<!--<script>
window.allowCID = $allowcid;
window.allowGID = $allowgid;
window.denyCID = $denycid;
window.denyGID = $denygid;
window.aclInit = "true";
</script>-->#}

View file

@ -0,0 +1,31 @@
<h4><a href="$admurl">$admtxt</a></h4>
<ul class='admin linklist'>
<li class='admin button $admin.site.2'><a href='$admin.site.0'>$admin.site.1</a></li>
<li class='admin button $admin.users.2'><a href='$admin.users.0'>$admin.users.1</a><span id='pending-update' title='$h_pending'></span></li>
<li class='admin button $admin.plugins.2'><a href='$admin.plugins.0'>$admin.plugins.1</a></li>
<li class='admin button $admin.themes.2'><a href='$admin.themes.0'>$admin.themes.1</a></li>
<li class='admin button $admin.dbsync.2'><a href='$admin.dbsync.0'>$admin.dbsync.1</a></li>
</ul>
{{ if $admin.update }}
<ul class='admin linklist'>
<li class='admin button $admin.update.2'><a href='$admin.update.0'>$admin.update.1</a></li>
<li class='admin button $admin.update.2'><a href='https://kakste.com/profile/inthegit'>Important Changes</a></li>
</ul>
{{ endif }}
{{ if $admin.plugins_admin }}<h4>$plugadmtxt</h4>{{ endif }}
<ul class='admin linklist'>
{{ for $admin.plugins_admin as $l }}
<li class='admin button $l.2'><a href='$l.0'>$l.1</a></li>
{{ endfor }}
</ul>
<h4>$logtxt</h4>
<ul class='admin linklist'>
<li class='admin button $admin.logs.2'><a href='$admin.logs.0'>$admin.logs.1</a></li>
</ul>

View file

@ -0,0 +1,61 @@
<div id='adminpage'>
<h1>$title - $page</h1>
<form action="$baseurl/admin/site" method="post">
<input type='hidden' name='form_security_token' value='$form_security_token'>
{{ inc field_input.tpl with $field=$sitename }}{{ endinc }}
{{ inc field_textarea.tpl with $field=$banner }}{{ endinc }}
{{ inc field_select.tpl with $field=$language }}{{ endinc }}
{{ inc field_select.tpl with $field=$theme }}{{ endinc }}
{{ inc field_select.tpl with $field=$theme_mobile }}{{ endinc }}
{{ inc field_select.tpl with $field=$ssl_policy }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
<h3>$registration</h3>
{{ inc field_input.tpl with $field=$register_text }}{{ endinc }}
{{ inc field_select.tpl with $field=$register_policy }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$no_multi_reg }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$no_openid }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$no_regfullname }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
<h3>$upload</h3>
{{ inc field_input.tpl with $field=$maximagesize }}{{ endinc }}
{{ inc field_input.tpl with $field=$maximagelength }}{{ endinc }}
{{ inc field_input.tpl with $field=$jpegimagequality }}{{ endinc }}
<h3>$corporate</h3>
{{ inc field_input.tpl with $field=$allowed_sites }}{{ endinc }}
{{ inc field_input.tpl with $field=$allowed_email }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$block_public }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$force_publish }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$no_community_page }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$ostatus_disabled }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }}
{{ inc field_input.tpl with $field=$global_directory }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$thread_allow }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$newuser_private }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
<h3>$advanced</h3>
{{ inc field_checkbox.tpl with $field=$no_utf }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$verifyssl }}{{ endinc }}
{{ inc field_input.tpl with $field=$proxy }}{{ endinc }}
{{ inc field_input.tpl with $field=$proxyuser }}{{ endinc }}
{{ inc field_input.tpl with $field=$timeout }}{{ endinc }}
{{ inc field_input.tpl with $field=$delivery_interval }}{{ endinc }}
{{ inc field_input.tpl with $field=$poll_interval }}{{ endinc }}
{{ inc field_input.tpl with $field=$maxloadavg }}{{ endinc }}
{{ inc field_input.tpl with $field=$abandon_days }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
</form>
</div>

View file

@ -0,0 +1,98 @@
<script>
function confirm_delete(uname){
return confirm( "$confirm_delete".format(uname));
}
function confirm_delete_multi(){
return confirm("$confirm_delete_multi");
}
{#/*function selectall(cls){
$j("."+cls).attr('checked','checked');
return false;
}*/#}
</script>
<div id='adminpage'>
<h1>$title - $page</h1>
<form action="$baseurl/admin/users" method="post">
<input type='hidden' name='form_security_token' value='$form_security_token'>
<h3>$h_pending</h3>
{{ if $pending }}
<table id='pending'>
<thead>
<tr>
{{ for $th_pending as $th }}<th>$th</th>{{ endfor }}
<th></th>
<th></th>
</tr>
</thead>
<tbody>
{{ for $pending as $u }}
<tr>
<td class="created">$u.created</td>
<td class="name">$u.name</td>
<td class="email">$u.email</td>
<td class="checkbox"><input type="checkbox" class="pending_ckbx" id="id_pending_$u.hash" name="pending[]" value="$u.hash" /></td>
<td class="tools">
<a href="$baseurl/regmod/allow/$u.hash" title='$approve'><span class='tool like'></span></a>
<a href="$baseurl/regmod/deny/$u.hash" title='$deny'><span class='tool dislike'></span></a>
</td>
</tr>
{{ endfor }}
</tbody>
</table>
{#<!--<div class='selectall'><a href='#' onclick="return selectall('pending_ckbx');">$select_all</a></div>-->#}
<div class="submit"><input type="submit" name="page_users_deny" value="$deny"/> <input type="submit" name="page_users_approve" value="$approve" /></div>
{{ else }}
<p>$no_pending</p>
{{ endif }}
<h3>$h_users</h3>
{{ if $users }}
<table id='users'>
<thead>
<tr>
<th></th>
{{ for $th_users as $th }}<th>$th</th>{{ endfor }}
<th></th>
<th></th>
</tr>
</thead>
<tbody>
{{ for $users as $u }}
<tr>
<td><img src="$u.micro" alt="$u.nickname" title="$u.nickname"></td>
<td class='name'><a href="$u.url" title="$u.nickname" >$u.name</a></td>
<td class='email'>$u.email</td>
<td class='register_date'>$u.register_date</td>
<td class='login_date'>$u.login_date</td>
<td class='lastitem_date'>$u.lastitem_date</td>
<td class='login_date'>$u.page_flags {{ if $u.is_admin }}($siteadmin){{ endif }}</td>
<td class="checkbox">
{{ if $u.is_admin }}
&nbsp;
{{ else }}
<input type="checkbox" class="users_ckbx" id="id_user_$u.uid" name="user[]" value="$u.uid"/></td>
{{ endif }}
<td class="tools">
{{ if $u.is_admin }}
&nbsp;
{{ else }}
<a href="$baseurl/admin/users/block/$u.uid?t=$form_security_token" title='{{ if $u.blocked }}$unblock{{ else }}$block{{ endif }}'><span class='icon block {{ if $u.blocked==0 }}dim{{ endif }}'></span></a>
<a href="$baseurl/admin/users/delete/$u.uid?t=$form_security_token" title='$delete' onclick="return confirm_delete('$u.name')"><span class='icon drop'></span></a>
{{ endif }}
</td>
</tr>
{{ endfor }}
</tbody>
</table>
{#<!--<div class='selectall'><a href='#' onclick="return selectall('users_ckbx');">$select_all</a></div>-->#}
<div class="submit"><input type="submit" name="page_users_block" value="$block/$unblock" /> <input type="submit" name="page_users_delete" value="$delete" onclick="return confirm_delete_multi()" /></div>
{{ else }}
NO USERS?!?
{{ endif }}
</form>
</div>

View file

@ -0,0 +1,15 @@
<div id="photo-album-edit-wrapper">
<form name="photo-album-edit-form" id="photo-album-edit-form" action="photos/$nickname/album/$hexalbum" method="post" >
<input id="photo-album-edit-form-confirm" type="hidden" name="confirm" value="1" />
<label id="photo-album-edit-name-label" for="photo-album-edit-name" >$nametext</label>
<input type="text" size="64" name="albumname" value="$album" >
<div id="photo-album-edit-name-end"></div>
<input id="photo-album-edit-submit" type="submit" name="submit" value="$submit" />
<input id="photo-album-edit-drop" type="submit" name="dropalbum" value="$dropsubmit" onclick="return confirmDelete(function(){remove('photo-album-edit-form-confirm');});" />
</form>
</div>
<div id="photo-album-edit-end" ></div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

View file

@ -0,0 +1,12 @@
{#<!--<div id="categories-sidebar" class="widget">
<h3>$title</h3>
<div id="nets-desc">$desc</div>
<ul class="categories-ul">
<li class="tool"><a href="$base" class="categories-link categories-all{{ if $sel_all }} categories-selected{{ endif }}">$all</a></li>
{{ for $terms as $term }}
<li class="tool"><a href="$base?f=&category=$term.name" class="categories-link{{ if $term.selected }} categories-selected{{ endif }}">$term.name</a></li>
{{ endfor }}
</ul>
</div>-->#}

View file

@ -0,0 +1,79 @@
{#<!-- <script>
$(document).ready( function () {
$(document).mouseup(function(e) {
var container = $("#comment-edit-wrapper-$id");
if( container.has(e.target).length === 0) {
commentClose(document.getElementById('comment-edit-text-$id'),$id);
cmtBbClose($id);
}
});
});
</script>-->#}
<div class="comment-wwedit-wrapper $indent" id="comment-edit-wrapper-$id" style="display: block;" >
<a name="comment-wwedit-wrapper-pos"></a>
<form class="comment-edit-form $indent" id="comment-edit-form-$id" action="item" method="post" >
{#<!-- <span id="hide-commentbox-$id" class="hide-commentbox fakelink" onclick="showHideCommentBox($id);">$comment</span>
<form class="comment-edit-form" style="display: none;" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;">-->#}
<input type="hidden" name="type" value="$type" />
<input type="hidden" name="source" value="$sourceapp" />
<input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" />
<input type="hidden" name="return" value="$return_path#comment-wwedit-wrapper-pos" />
<input type="hidden" name="jsreload" value="$jsreload" />
<input type="hidden" name="preview" id="comment-preview-inp-$id" value="0" />
<input type="hidden" name="post_id_random" value="$rand_num" />
{#<!--<div class="comment-edit-photo" id="comment-edit-photo-$id" >-->#}
<a class="comment-edit-photo comment-edit-photo-link" id="comment-edit-photo-$id" href="$mylink" title="$mytitle"><img class="my-comment-photo" src="$myphoto" alt="$mytitle" title="$mytitle" /></a>
{#<!--</div>-->#}
{#<!--<div class="comment-edit-photo-end"></div>-->#}
{#<!--<ul class="comment-edit-bb-$id">
<li><a class="editicon boldbb shadow"
style="cursor: pointer;" title="$edbold"
onclick="insertFormatting('$comment','b', $id);"></a></li>
<li><a class="editicon italicbb shadow"
style="cursor: pointer;" title="$editalic"
onclick="insertFormatting('$comment','i', $id);"></a></li>
<li><a class="editicon underlinebb shadow"
style="cursor: pointer;" title="$eduline"
onclick="insertFormatting('$comment','u', $id);"></a></li>
<li><a class="editicon quotebb shadow"
style="cursor: pointer;" title="$edquote"
onclick="insertFormatting('$comment','quote', $id);"></a></li>
<li><a class="editicon codebb shadow"
style="cursor: pointer;" title="$edcode"
onclick="insertFormatting('$comment','code', $id);"></a></li>-->#}
{#<!-- <li><a class="editicon imagebb shadow"
style="cursor: pointer;" title="$edimg"
onclick="insertFormatting('$comment','img', $id);"></a></li>
<li><a class="editicon urlbb shadow"
style="cursor: pointer;" title="$edurl"
onclick="insertFormatting('$comment','url', $id);"></a></li>
<li><a class="editicon videobb shadow"
style="cursor: pointer;" title="$edvideo"
onclick="insertFormatting('$comment','video', $id);"></a></li>-->#}
{#<!--</ul> -->#}
{#<!--<div class="comment-edit-bb-end"></div>-->#}
{#<!-- <textarea id="comment-edit-text-$id" class="comment-edit-text-empty" name="body" onFocus="commentOpen(this,$id);cmtBbOpen($id);" onBlur="commentClose(this,$id);cmtBbClose($id);" >$comment</textarea>-->#}
<textarea id="comment-edit-text-$id" class="comment-edit-text-full" name="body" ></textarea>
{#<!--{{ if $qcomment }}
<select id="qcomment-select-$id" name="qcomment-$id" class="qcomment" onchange="qCommentInsert(this,$id);" >
<option value=""></option>
{{ for $qcomment as $qc }}
<option value="$qc">$qc</option>
{{ endfor }}
</select>
{{ endif }}-->#}
<div class="comment-edit-text-end"></div>
<div class="comment-edit-submit-wrapper" id="comment-edit-submit-wrapper-$id" >
<input type="submit" id="comment-edit-submit-$id" class="comment-edit-submit" name="submit" value="$submit" />
{#<!--<span onclick="preview_comment($id);" id="comment-edit-preview-link-$id" class="preview-link fakelink">$preview</span>
<div id="comment-edit-preview-$id" class="comment-edit-preview" style="display:none;"></div>-->#}
</div>
{#<!--<div class="comment-edit-end"></div>-->#}
</form>
</div>

View file

@ -0,0 +1,6 @@
<ul class="tabs">
{{ for $tabs as $tab }}
<li id="$tab.id"><a href="$tab.url" class="tab button $tab.sel"{{ if $tab.title }} title="$tab.title"{{ endif }}>$tab.label</a></li>
{{ endfor }}
<div id="tabs-end"></div>
</ul>

View file

@ -0,0 +1,12 @@
{#<!--<div id="contact-block">
<h4 class="contact-block-h4">$contacts</h4>
{{ if $micropro }}
<a class="allcontact-link" href="viewcontacts/$nickname">$viewcontacts</a>
<div class='contact-block-content'>
{{ for $micropro as $m }}
$m
{{ endfor }}
</div>
{{ endif }}
</div>
<div class="clear"></div>-->#}

View file

@ -0,0 +1,93 @@
<h2>$header</h2>
<div id="contact-edit-wrapper" >
$tab_str
<div id="contact-edit-drop-link-wrapper" >
<a href="contacts/$contact_id/drop?confirm=1" class="icon drophide" id="contact-edit-drop-link" onclick="id=this.id;return confirmDelete(function(){changeHref(id, 'contacts/$contact_id/drop')});" title="$delete" {#onmouseover="imgbright(this);" onmouseout="imgdull(this);"#}></a>
</div>
<div id="contact-edit-drop-link-end"></div>
<div class="vcard">
<div class="fn">$name</div>
<div id="profile-photo-wrapper"><img class="photo" style="width: 175px; height: 175px;" src="$photo" alt="$name" /></div>
</div>
<div id="contact-edit-nav-wrapper" >
<div id="contact-edit-links">
<ul>
<li><div id="contact-edit-rel">$relation_text</div></li>
<li><div id="contact-edit-nettype">$nettype</div></li>
{{ if $lost_contact }}
<li><div id="lost-contact-message">$lost_contact</div></li>
{{ endif }}
{{ if $insecure }}
<li><div id="insecure-message">$insecure</div></li>
{{ endif }}
{{ if $blocked }}
<li><div id="block-message">$blocked</div></li>
{{ endif }}
{{ if $ignored }}
<li><div id="ignore-message">$ignored</div></li>
{{ endif }}
{{ if $archived }}
<li><div id="archive-message">$archived</div></li>
{{ endif }}
<li>&nbsp;</li>
{{ if $common_text }}
<li><div id="contact-edit-common"><a href="$common_link">$common_text</a></div></li>
{{ endif }}
{{ if $all_friends }}
<li><div id="contact-edit-allfriends"><a href="allfriends/$contact_id">$all_friends</a></div></li>
{{ endif }}
<li><a href="network/?cid=$contact_id" id="contact-edit-view-recent">$lblrecent</a></li>
{{ if $lblsuggest }}
<li><a href="fsuggest/$contact_id" id="contact-edit-suggest">$lblsuggest</a></li>
{{ endif }}
</ul>
</div>
</div>
<div id="contact-edit-nav-end"></div>
<form action="contacts/$contact_id" method="post" >
<input type="hidden" name="contact_id" value="$contact_id">
{{ if $poll_enabled }}
<div id="contact-edit-poll-wrapper">
<div id="contact-edit-last-update-text">$lastupdtext <span id="contact-edit-last-updated">$last_update</span></div>
<span id="contact-edit-poll-text">$updpub $poll_interval</span> <span id="contact-edit-update-now" class="button"><a id="update_now_link" href="contacts/$contact_id/update" >$udnow</a></span>
</div>
{{ endif }}
<div id="contact-edit-end" ></div>
{{inc field_checkbox.tpl with $field=$hidden }}{{endinc}}
<div id="contact-edit-info-wrapper">
<h4>$lbl_info1</h4>
<textarea id="contact-edit-info" rows="8"{# cols="35"#} name="info">$info</textarea>
<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
</div>
<div id="contact-edit-info-end"></div>
<div id="contact-edit-profile-select-text">
<h4>$lbl_vis1</h4>
<p>$lbl_vis2</p>
</div>
$profile_select
<div id="contact-edit-profile-select-end"></div>
<input class="contact-edit-submit" type="submit" name="submit" value="$submit" />
</form>
</div>

View file

View file

@ -0,0 +1,38 @@
<div class="contact-entry-wrapper" id="contact-entry-wrapper-$contact.id" >
<div class="contact-entry-photo-wrapper" >
<div class="contact-entry-photo mframe" id="contact-entry-photo-$contact.id"
{#onmouseover="if (typeof t$contact.id != 'undefined') clearTimeout(t$contact.id);"
onmouseout="t$contact.id=setTimeout('closeMenu(\'contact-photo-menu-$contact.id\');',200)"#} >
{#<!-- <a href="$contact.url" title="$contact.img_hover" /><img src="$contact.thumb" $contact.sparkle alt="$contact.name" /></a>-->#}
{#<!--<span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">-->#}
<a href="$contact.photo_menu.edit.1" title="$contact.photo_menu.edit.0">
<img src="$contact.thumb" $contact.sparkle alt="$contact.name" />
</a>
{#<!--</span>-->#}
{#<!-- {{ if $contact.photo_menu }}
<span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">menu</span>
<div class="contact-photo-menu" id="contact-photo-menu-$contact.id">
<ul>
{{ for $contact.photo_menu as $c }}
{{ if $c.2 }}
<li><a target="redir" href="$c.1">$c.0</a></li>
{{ else }}
<li><a href="$c.1">$c.0</a></li>
{{ endif }}
{{ endfor }}
</ul>
</div>
{{ endif }}-->#}
</div>
</div>
<div class="contact-entry-photo-end" ></div>
<div class="contact-entry-name" id="contact-entry-name-$contact.id" >$contact.name</div><br />
{{ if $contact.alt_text }}<div class="contact-entry-details" id="contact-entry-rel-$contact.id" >$contact.alt_text</div>{{ endif }}
<div class="contact-entry-network" id="contact-entry-network-$contact.id" >$contact.network</div>
<div class="contact-entry-end" ></div>
</div>

View file

@ -0,0 +1,4 @@
{#<!--
<script src="$baseurl/library/jquery_ac/friendica.complete.min.js" ></script>
-->#}

View file

@ -0,0 +1,5 @@
{#<!--
<script>
window.autocompleteType = 'contacts-head';
</script>
-->#}

View file

@ -0,0 +1,28 @@
<h1>$header{{ if $total }} ($total){{ endif }}</h1>
{{ if $finding }}<h4>$finding</h4>{{ endif }}
<div id="contacts-search-wrapper">
<form id="contacts-search-form" action="$cmd" method="get" >
<span class="contacts-search-desc">$desc</span>
<input type="text" name="search" id="contacts-search" class="search-input" onfocus="this.select();" value="$search" />
<input type="submit" name="submit" id="contacts-search-submit" value="$submit" />
</form>
</div>
<div id="contacts-search-end"></div>
$tabs
<div id="contacts-display-wrapper">
{{ for $contacts as $contact }}
{{ inc contact_template.tpl }}{{ endinc }}
{{ endfor }}
</div>
<div id="contact-edit-end"></div>
$paginate

View file

@ -0,0 +1,2 @@
$follow_widget

View file

@ -0,0 +1,29 @@
$live_update
{{ for $threads as $thread }}
<div id="tread-wrapper-$thread.id" class="tread-wrapper">
{{ for $thread.items as $item }}
{{if $item.comment_firstcollapsed}}
<div class="hide-comments-outer">
<span id="hide-comments-total-$thread.id" class="hide-comments-total">$thread.num_comments</span> <span id="hide-comments-$thread.id" class="hide-comments fakelink" onclick="showHideComments($thread.id);">$thread.hide_text</span>
</div>
<div id="collapsed-comments-$thread.id" class="collapsed-comments" style="display: none;">
{{endif}}
{{if $item.comment_lastcollapsed}}</div>{{endif}}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
</div>
{{ endfor }}
<div id="conversation-end"></div>
{#<!--{{ if $dropping }}
<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();">
<div id="item-delete-selected-icon" class="icon drophide" title="$dropping" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div>
<div id="item-delete-selected-desc" >$dropping</div>
</div>
<div id="item-delete-selected-end"></div>
{{ endif }}-->#}

View file

@ -0,0 +1,27 @@
<h1>$title</h1>
<p id="cropimage-desc">
$desc
</p>
<div id="cropimage-wrapper">
<img src="$image_url" id="croppa" class="imgCrop" alt="$title" />
</div>
<div id="cropimage-preview-wrapper" >
<div id="previewWrap" ></div>
</div>
<form action="profile_photo/$resource" id="crop-image-form" method="post" />
<input type='hidden' name='form_security_token' value='$form_security_token'>
<input type="hidden" name="cropfinal" value="1" />
<input type="hidden" name="xstart" id="x1" />
<input type="hidden" name="ystart" id="y1" />
<input type="hidden" name="xfinal" id="x2" />
<input type="hidden" name="yfinal" id="y2" />
<input type="hidden" name="height" id="height" />
<input type="hidden" name="width" id="width" />
<div id="crop-image-submit-wrapper" >
<input type="submit" name="submit" value="$done" />
</div>
</form>

View file

@ -0,0 +1,4 @@
{#<!-- <script type="text/javascript" src="library/cropper/lib/prototype.js" language="javascript"></script>
<script type="text/javascript" src="library/cropper/lib/scriptaculous.js?load=effects,builder,dragdrop" language="javascript"></script>
<script type="text/javascript" src="library/cropper/cropper.js" language="javascript"></script>
<script type="text/javascript" language="javascript">initCrop();</script>-->#}

View file

@ -0,0 +1 @@
<link rel="stylesheet" href="library/cropper/cropper.css" type="text/css" />

View file

@ -0,0 +1,44 @@
<!DOCTYPE html >
<html>
<head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo $a->get_baseurl() ?>";</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head>
<body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>>
<?php if(x($page,'nav')) echo $page['nav']; ?>
<?php if( $a->module === 'home' ) { ?>
<center>
<div class="login-button">
<a href="login" class="login-button-link"><img class="login-button-image" src="images/friendica-1600.png" title="Click to log in"></a>
</div>
</center>
<?php } elseif ( $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {
?>
<div class='section-wrapper'>
<section><?php if(x($page,'content')) echo $page['content']; ?>
</section>
</div>
<footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
<?php } else { ?>
<div class='main-container'>
<!-- <div class='main-content-container'>-->
<div class='section-wrapper'>
<?php if( ($a->module === 'settings' || $a->module === 'message' || $a->module === 'profile') && x($page,'aside')) echo $page['aside']; ?>
<section><?php if(x($page,'content')) echo $page['content']; ?>
<div id="page-footer"></div>
</section>
</div>
<right_aside><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></right_aside>
<?php if( ($a->module === 'contacts') && x($page,'aside')) echo $page['aside']; ?>
<footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
<!-- </div>-->
</div>
<?php } ?>
<?php if(x($page,'end')) echo $page['end']; ?>
</body>
</html>

View file

@ -0,0 +1,4 @@
{#<!--<script>
window.autoCompleteType = 'display-head';
</script>
-->#}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,24 @@
<!--[if IE]>
<script type="text/javascript" src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
{#<!--<script type="text/javascript" src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce.js" ></script>
<script type="text/javascript">
tinyMCE.init({ mode : "none"});
</script>-->#}
{#<!--<script type="text/javascript" src="$baseurl/js/jquery.js" ></script>
<script type="text/javascript">var $j = jQuery.noConflict();</script>
<script type="text/javascript" src="$baseurl/view/theme/decaf-mobile/js/jquery.divgrow-1.3.1.f1.js" ></script>
<script type="text/javascript" src="$baseurl/js/jquery.textinputs.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/decaf-mobile/js/fk.autocomplete.js" ></script>-->#}
{#<!--<script type="text/javascript" src="$baseurl/library/fancybox/jquery.fancybox-1.3.4.pack.js"></script>-->#}
{#<!--<script type="text/javascript" src="$baseurl/library/tiptip/jquery.tipTip.minified.js"></script>-->#}
{#<!--<script type="text/javascript" src="$baseurl/library/jgrowl/jquery.jgrowl_minimized.js"></script>
<script type="text/javascript" src="$baseurl/view/theme/decaf-mobile/js/acl.js" ></script>
<script type="text/javascript" src="$baseurl/js/webtoolkit.base64.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/decaf-mobile/js/main.js" ></script>-->#}
<script type="text/javascript" src="$baseurl/view/theme/decaf-mobile/js/theme.js"></script>
<!--<script type="text/javascript" src="$baseurl/view/theme/decaf-mobile/js/jquery.package.js" ></script>
<script type="text/javascript">var $j = jQuery.noConflict();</script>
<script type="text/javascript" src="$baseurl/view/theme/decaf-mobile/js/decaf-mobile.package.js" ></script>-->

View file

@ -0,0 +1,4 @@
{#<!--<script language="javascript" type="text/javascript"
src="$baseurl/library/fullcalendar/fullcalendar.min.js"></script>
-->#}

View file

@ -0,0 +1,6 @@
<link rel='stylesheet' type='text/css' href='$baseurl/library/fullcalendar/fullcalendar.css' />
{#<!--
<script language="javascript" type="text/javascript">
window.aclType = 'event_head';
</script>
-->#}

View file

@ -0,0 +1,6 @@
<div class='field checkbox' id='div_id_$field.0'>
<label id='label_id_$field.0' for='id_$field.0'>$field.1</label>
<input type="checkbox" name='$field.0' id='id_$field.0' value="1" {{ if $field.2 }}checked="checked"{{ endif }}><br />
<span class='field_help' id='help_id_$field.0'>$field.3</span>
</div>

View file

@ -0,0 +1,6 @@
<div class='field input' id='wrapper_$field.0'>
<label for='id_$field.0'>$field.1</label><br />
<input name='$field.0' id='id_$field.0' value="$field.2">
<span class='field_help'>$field.3</span>
</div>

View file

@ -0,0 +1,6 @@
<div class='field input openid' id='wrapper_$field.0'>
<label for='id_$field.0'>$field.1</label><br />
<input name='$field.0' id='id_$field.0' value="$field.2">
<span class='field_help'>$field.3</span>
</div>

View file

@ -0,0 +1,6 @@
<div class='field password' id='wrapper_$field.0'>
<label for='id_$field.0'>$field.1</label><br />
<input type='password' name='$field.0' id='id_$field.0' value="$field.2">
<span class='field_help'>$field.3</span>
</div>

View file

@ -0,0 +1,9 @@
<div class='field select'>
<label for='id_$field.0'>$field.1</label>
<select name='$field.0' id='id_$field.0' {#{{ if $field.5 }}onchange="previewTheme(this);"{{ endif }}#} >
{{ for $field.4 as $opt=>$val }}<option value="$opt" {{ if $opt==$field.2 }}selected="selected"{{ endif }}>$val</option>{{ endfor }}
</select>
<span class='field_help'>$field.3</span>
<div id="theme-preview"></div>
</div>

View file

@ -0,0 +1,14 @@
{#<!-- <div class='field yesno'>
<label for='id_$field.0'>$field.1</label>
<div class='onoff' id="id_$field.0_onoff">
<input type="hidden" name='$field.0' id='id_$field.0' value="$field.2">
<a href="#" class='off'>
{{ if $field.4 }}$field.4.0{{ else }}OFF{{ endif }}
</a>
<a href="#" class='on'>
{{ if $field.4 }}$field.4.1{{ else }}ON{{ endif }}
</a>
</div>
<span class='field_help'>$field.3</span>
</div>-->#}
{{ inc field_checkbox.tpl }}{{ endinc }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

View file

@ -0,0 +1,12 @@
<div class="widget{{ if $class }} $class{{ endif }}">
{#<!-- {{if $title}}<h3>$title</h3>{{endif}}-->#}
{{if $desc}}<div class="desc">$desc</div>{{endif}}
<ul class="tabs links-widget">
{{ for $items as $item }}
<li class="tool"><a href="$item.url" class="tab {{ if $item.selected }}selected{{ endif }}">$item.label</a></li>
{{ endfor }}
<div id="tabs-end"></div>
</ul>
</div>

View file

@ -0,0 +1,9 @@
<div class="group-delete-wrapper button" id="group-delete-wrapper-$id" >
<a href="group/drop/$id?t=$form_security_token"
onclick="return confirmDelete();"
id="group-delete-icon-$id"
class="icon drophide group-delete-icon"
{#onmouseover="imgbright(this);"
onmouseout="imgdull(this);"#} ></a>
</div>
<div class="group-delete-end"></div>

View file

@ -0,0 +1,33 @@
<div class="widget" id="group-sidebar">
<h3>$title</h3>
<div id="sidebar-group-list">
<ul id="sidebar-group-ul">
{{ for $groups as $group }}
<li class="sidebar-group-li">
{{ if $group.cid }}
<input type="checkbox"
class="{{ if $group.selected }}ticked{{ else }}unticked {{ endif }} action"
{#onclick="contactgroupChangeMember('$group.id','$group.cid');return true;"#}
{{ if $group.ismember }}checked="checked"{{ endif }}
/>
{{ endif }}
{{ if $group.edit }}
<a class="groupsideedit" href="$group.edit.href" title="$edittext"><span id="edit-sidebar-group-element-$group.id" class="group-edit-icon iconspacer small-pencil"></span></a>
{{ endif }}
<a id="sidebar-group-element-$group.id" class="sidebar-group-element {{ if $group.selected }}group-selected{{ endif }}" href="$group.href">$group.text</a>
</li>
{{ endfor }}
</ul>
</div>
<div id="sidebar-new-group">
<a href="group/new">$createtext</a>
</div>
{{ if $ungrouped }}
<div id="sidebar-ungrouped">
<a href="nogroup">$ungrouped</a>
</div>
{{ endif }}
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

View file

@ -0,0 +1,29 @@
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
{#<!--<meta content='width=device-width, minimum-scale=1 maximum-scale=1' name='viewport'>
<meta content='True' name='HandheldFriendly'>
<meta content='320' name='MobileOptimized'>-->#}
<meta name="viewport" content="width=device-width; initial-scale = 1.0; maximum-scale=1.0; user-scalable=no" />
{#<!--<meta name="viewport" content="width=100%; initial-scale=1; maximum-scale=1; minimum-scale=1; user-scalable=no;" />-->#}
<base href="$baseurl/" />
<meta name="generator" content="$generator" />
{#<!--<link rel="stylesheet" href="$baseurl/library/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />
<link rel="stylesheet" href="$baseurl/library/tiptip/tipTip.css" type="text/css" media="screen" />
<link rel="stylesheet" href="$baseurl/library/jgrowl/jquery.jgrowl.css" type="text/css" media="screen" />-->#}
<link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
<link rel="shortcut icon" href="$baseurl/images/friendica-32.png" />
<link rel="search"
href="$baseurl/opensearch"
type="application/opensearchdescription+xml"
title="Search in Friendica" />
<script>
window.delItem = "$delitem";
{#/* window.commentEmptyText = "$comment";
window.showMore = "$showmore";
window.showFewer = "$showfewer";
var updateInterval = $update_interval;
var localUser = {{ if $local_user }}$local_user{{ else }}false{{ endif }};*/#}
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show more