Merge remote branch 'upstream/master'

This commit is contained in:
Michael Vogel 2012-09-02 17:50:25 +02:00
commit f6818ab243
166 changed files with 11715 additions and 6974 deletions

View file

@ -11,7 +11,7 @@ require_once('include/cache.php');
require_once('library/Mobile_Detect/Mobile_Detect.php'); require_once('library/Mobile_Detect/Mobile_Detect.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '3.0.1421' ); define ( 'FRIENDICA_VERSION', '3.0.1449' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1154 ); define ( 'DB_UPDATE_VERSION', 1154 );
@ -253,6 +253,7 @@ define ( 'ACTIVITY_TAG', NAMESPACE_ACTIVITY_SCHEMA . 'tag' );
define ( 'ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite' ); define ( 'ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite' );
define ( 'ACTIVITY_POKE', NAMESPACE_ZOT . '/activity/poke' ); define ( 'ACTIVITY_POKE', NAMESPACE_ZOT . '/activity/poke' );
define ( 'ACTIVITY_MOOD', NAMESPACE_ZOT . '/activity/mood' );
define ( 'ACTIVITY_OBJ_COMMENT', NAMESPACE_ACTIVITY_SCHEMA . 'comment' ); define ( 'ACTIVITY_OBJ_COMMENT', NAMESPACE_ACTIVITY_SCHEMA . 'comment' );
define ( 'ACTIVITY_OBJ_NOTE', NAMESPACE_ACTIVITY_SCHEMA . 'note' ); define ( 'ACTIVITY_OBJ_NOTE', NAMESPACE_ACTIVITY_SCHEMA . 'note' );
@ -354,6 +355,19 @@ if(! class_exists('App')) {
public $category; public $category;
// Allow themes to control internal parameters
// by changing App values in theme.php
//
// Possibly should make these part of the plugin
// system, but it seems like overkill to invoke
// all the plugin machinery just to change a couple
// of values
public $sourcename = '';
public $videowidth = 425;
public $videoheight = 350;
public $force_max_items = 0;
public $theme_thread_allow = true;
private $scheme; private $scheme;
private $hostname; private $hostname;
private $baseurl; private $baseurl;
@ -458,6 +472,7 @@ if(! class_exists('App')) {
$this->argc = count($this->argv); $this->argc = count($this->argv);
if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) { if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) {
$this->module = str_replace(".", "_", $this->argv[0]); $this->module = str_replace(".", "_", $this->argv[0]);
$this->module = str_replace("-", "_", $this->module);
} }
else { else {
$this->argc = 1; $this->argc = 1;
@ -465,16 +480,6 @@ if(! class_exists('App')) {
$this->module = 'home'; $this->module = 'home';
} }
/**
* Special handling for the webfinger/lrdd host XRD file
*/
if($this->cmd === '.well-known/host-meta') {
$this->argc = 1;
$this->argv = array('hostxrd');
$this->module = 'hostxrd';
}
/** /**
* See if there is any page number information, and initialise * See if there is any page number information, and initialise
* pagination * pagination
@ -722,9 +727,13 @@ if(! function_exists('check_config')) {
// than the currently visited url, store the current value accordingly. // than the currently visited url, store the current value accordingly.
// "Radically different" ignores common variations such as http vs https // "Radically different" ignores common variations such as http vs https
// and www.example.com vs example.com. // and www.example.com vs example.com.
// We will only change the url to an ip address if there is no existing setting
if((! x($url)) || (! link_compare($url,$a->get_baseurl()))) if(! x($url))
$url = set_config('system','url',$a->get_baseurl()); $url = set_config('system','url',$a->get_baseurl());
if((! link_compare($url,$a->get_baseurl())) && (! preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$a->get_hostname)))
$url = set_config('system','url',$a->get_baseurl());
if($build != DB_UPDATE_VERSION) { if($build != DB_UPDATE_VERSION) {
$stored = intval($build); $stored = intval($build);
@ -887,6 +896,10 @@ if(! function_exists('login')) {
$tpl = get_markup_template("logout.tpl"); $tpl = get_markup_template("logout.tpl");
} }
else { else {
$a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"),array(
'$baseurl' => $a->get_baseurl(true)
));
$tpl = get_markup_template("login.tpl"); $tpl = get_markup_template("login.tpl");
$_SESSION['return_url'] = $a->query_string; $_SESSION['return_url'] = $a->query_string;
} }
@ -1454,6 +1467,9 @@ if(! function_exists('proc_run')) {
$args[$x] = escapeshellarg($args[$x]); $args[$x] = escapeshellarg($args[$x]);
$cmdline = implode($args," "); $cmdline = implode($args," ");
if(get_config('system','proc_windows'))
proc_close(proc_open('start /b ' . $cmdline,array(),$foo));
else
proc_close(proc_open($cmdline." &",array(),$foo)); proc_close(proc_open($cmdline." &",array(),$foo));
} }
} }

View file

@ -606,7 +606,7 @@ CREATE TABLE IF NOT EXISTS `item_id` (
-- Table structure for table `locks` -- Table structure for table `locks`
-- --
CREATE TABLE `locks` ( CREATE TABLE IF NOT EXISTS `locks` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(128) NOT NULL, `name` char(128) NOT NULL,
`locked` tinyint(1) NOT NULL DEFAULT '0', `locked` tinyint(1) NOT NULL DEFAULT '0',

View file

@ -6,6 +6,8 @@ Groups and Privacy
Groups are merely collections of friends. But Friendica uses these to unlock some very powerful features. Groups are merely collections of friends. But Friendica uses these to unlock some very powerful features.
**Setting Up Groups**
To create a group, visit your Friendica "Contacts" page and select "Create a new group". Give the group a name. To create a group, visit your Friendica "Contacts" page and select "Create a new group". Give the group a name.
This brings you to a page where you can select the group members. This brings you to a page where you can select the group members.
@ -14,6 +16,8 @@ You will have two boxes on this page. The top box is the roster of current group
If you click on a photo of a person who isn't in the group, they will be put into the group. If you click on a photo of a person who is in the group, they will be removed from it. If you click on a photo of a person who isn't in the group, they will be put into the group. If you click on a photo of a person who is in the group, they will be removed from it.
**Access Control**
Once you have created a group, you may use it in any access control list. This is the little lock icon beneath the status update box on your home page. If you click this you can select who can see and who can *not* see the post you are about to make. These can be individual people or groups. Once you have created a group, you may use it in any access control list. This is the little lock icon beneath the status update box on your home page. If you click this you can select who can see and who can *not* see the post you are about to make. These can be individual people or groups.
On your "Network" page you will find posts and conversation from everybody in your network. You may select an individual group on this page to show conversations pertaining only to members of that group. On your "Network" page you will find posts and conversation from everybody in your network. You may select an individual group on this page to show conversations pertaining only to members of that group.
@ -22,28 +26,40 @@ But wait, there's more...
If you look carefully when visiting a group from your Network page, the lock icon under the status update box has an exclamation mark next to it. This is meant to draw attention to that lock. Click the lock. You will see that since you are only viewing a certain group of people, your status updates while on that screen default to only being seen by that same group of people. This is how you keep your future employers from seeing what you write to your drinking buddies. You can over-ride this setting, but this makes it easy to separate your conversations into different friend circles. If you look carefully when visiting a group from your Network page, the lock icon under the status update box has an exclamation mark next to it. This is meant to draw attention to that lock. Click the lock. You will see that since you are only viewing a certain group of people, your status updates while on that screen default to only being seen by that same group of people. This is how you keep your future employers from seeing what you write to your drinking buddies. You can over-ride this setting, but this makes it easy to separate your conversations into different friend circles.
**Default Post Privacy**
By default, Friendica assumes that you want all of your posts to be private. Therefore, when you sign up, Friendica creates a group for you that it will automatically add all of your contacts to. All of your posts are restricted to that group by default.
Note that this behavior can be overridden by your site admin, in which case your posts will be "public" (i.e. visible to the entire Internet) by default.
If you want your posts to be "public" by default, you can change your default post permissions on your Settings page. You also have the option there to change which groups you post to by default, or to change which group your new contacts get placed into by default.
**Privacy Concerns To Be Aware Of**
These private conversations work best when your friends are Friendica members. We know who else can see the conversations - nobody, *unless* your friends cut and paste the messages and send them to others. These private conversations work best when your friends are Friendica members. We know who else can see the conversations - nobody, *unless* your friends cut and paste the messages and send them to others.
This is a trust issue you need to be aware of. No software in the world can prevent your friends from leaking your confidential and trusted communications. Only a wise choice of friends. This is a trust issue you need to be aware of. No software in the world can prevent your friends from leaking your confidential and trusted communications. Only a wise choice of friends.
But it isn't as clear cut when dealing with status.net, identi.ca and other network providers. You are encouraged to be **very** cautious when other network members are in a group because it's entirely possible for your private messages to end up in a public newsfeed. If you look at the Contact Edit page for any person, we will tell you whether or not they are members of an insecure network where you should exercise caution. But it isn't as clear cut when dealing with status.net, identi.ca and other network providers. You are encouraged to be **very** cautious when other network members are in a group because it's entirely possible for your private messages to end up in a public newsfeed. If you look at the Contact Edit page for any person, we will tell you whether or not they are members of an insecure network where you should exercise caution.
On your "Settings" page, you may create a set of default permissions which apply to every post that you create.
Once you have created a post, you can not change the permissions assigned. Within seconds it has been delivered to lots of people - and perhaps everybody it was addressed to. If you mistakenly created a message and wish you could take it back, the best you can do is to delete it. We will send out a delete notification to everybody who received the message - and this should wipe out the message with the same speed it was initially propagated. In most cases it will be completely wiped from the Internet - in under a minute. Again, this applies to Friendica networks. Once a message spreads to other networks, it may not be removed quickly and in some cases it may not be removed at all. Once you have created a post, you can not change the permissions assigned. Within seconds it has been delivered to lots of people - and perhaps everybody it was addressed to. If you mistakenly created a message and wish you could take it back, the best you can do is to delete it. We will send out a delete notification to everybody who received the message - and this should wipe out the message with the same speed it was initially propagated. In most cases it will be completely wiped from the Internet - in under a minute. Again, this applies to Friendica networks. Once a message spreads to other networks, it may not be removed quickly and in some cases it may not be removed at all.
In case you haven't yet figured this out, we are encouraging you to encourage your friends to use Friendica - because all these privacy features work much better within a privacy-aware network. Many of the other social networks Friendica can connect to have no privacy controls. In case you haven't yet figured this out, we are encouraging you to encourage your friends to use Friendica - because all these privacy features work much better within a privacy-aware network. Many of the other social networks Friendica can connect to have no privacy controls.
Profiles, Privacy, and Photos Profiles, Photos, and Privacy
============================= =============================
The decentralised nature of Friendica (many websites exchanging information rather than one website which controls everything) has some implications with privacy as it relates to people on other sites. There are things you should be aware of, so you can decide best how to interact privately. The decentralised nature of Friendica (many websites exchanging information rather than one website which controls everything) has some implications with privacy as it relates to people on other sites. There are things you should be aware of, so you can decide best how to interact privately.
**Photos**
Sharing photos privately is a problem. We can only share them __privately__ with Friendica members. In order to share with other people, we need to prove who they are. We can prove the identity of Friendica members, as we have a mechanism to do so. Your friends on other networks will be blocked from viewing these private photos because we cannot prove that they should be allowed to see them. Sharing photos privately is a problem. We can only share them __privately__ with Friendica members. In order to share with other people, we need to prove who they are. We can prove the identity of Friendica members, as we have a mechanism to do so. Your friends on other networks will be blocked from viewing these private photos because we cannot prove that they should be allowed to see them.
Our developers are working on solutions to allow access to your friends - no matter what network they are on. However we take privacy seriously and don't behave like some networks that __pretend__ your photos are private, but make them available to others without proof of identity. Our developers are working on solutions to allow access to your friends - no matter what network they are on. However we take privacy seriously and don't behave like some networks that __pretend__ your photos are private, but make them available to others without proof of identity.
**Profiles**
Your profile and "wall" may also be visited by your friends from other networks, and you can block access to these by web visitors that Friendica doesn't know. Be aware that this could include some of your friends on other networks. Your profile and "wall" may also be visited by your friends from other networks, and you can block access to these by web visitors that Friendica doesn't know. Be aware that this could include some of your friends on other networks.
This may produce undesired results when posting a long status message to (for instance) Twitter and even Facebook. When Friendica sends a post to these networks which exceeds the service length limit, we truncate it and provide a link to the original. The original is a link back to your Friendica profile. As Friendica cannot prove who they are, it may not be possible for these people to view your post in full. This may produce undesired results when posting a long status message to (for instance) Twitter and even Facebook. When Friendica sends a post to these networks which exceeds the service length limit, we truncate it and provide a link to the original. The original is a link back to your Friendica profile. As Friendica cannot prove who they are, it may not be possible for these people to view your post in full.

View file

@ -2,7 +2,7 @@ This is your Network Tab. If you get lost, you can <a href="help/network">click
This is a bit like the Newsfeed at Facebook or the Stream at Diaspora. It's where all the posts from your contacts, groups, and feeds will appear. If you're new, you won't see anything in this page, unless you posted your status in the last step. If you've already added a few friends, you'll be able to see their posts. Here, you can comment, like, or dislike posts, or click on somebody's name to visit their profile page where you can write on their wall. This is a bit like the Newsfeed at Facebook or the Stream at Diaspora. It's where all the posts from your contacts, groups, and feeds will appear. If you're new, you won't see anything in this page, unless you posted your status in the last step. If you've already added a few friends, you'll be able to see their posts. Here, you can comment, like, or dislike posts, or click on somebody's name to visit their profile page where you can write on their wall.
Now we need to fill it up, the first step, is to <a href="help/peopleyouknow"> add people you already know from Facebook</a>. Now we need to fill it up, the first step, is to <a href="help/makingnewfriends"> make some new friends</a>.
<iframe src="network" width="950" height="600"></iframe> <iframe src="network" width="950" height="600"></iframe>

View file

@ -1,13 +0,0 @@
This is your connector settings page. If you get lost, you can <a href="help/network">click this link</a> to bring yourself back here.
This is the bit that makes Friendica unique. You can connect to <i>anybody on the internet</i> from your Friendica account using this page! The available connectors varies depending on which plugins you have installed, but for now, we'll walk you through Facebook. Note that not all servers have the Facebook connector installed. If you can't find it in the list below, don't worry, we'll look at ways of connecting to more people in the following pages.
The biggest of all social networks is Facebook. Fortunately, this connector is really easy. Scroll down the page, and click Facebook Connector Settings. Enter your Facebook user name and password and let the application (the connector) do everything the options suggest. You can <a href="https://github.com/friendica/friendica/wiki/How-to:-Friendica%E2%80%99s-Facebook-connector" target="_blank">fine tune this</a> or experiment with the other connectors too. If you need help, you can always ask at <a href="http://helpers.pyxis.uberspace.de/profile/helpers" target="_blank">Friendica Support</a> or <a href="help/Connectors" target="_blank">see the instructions here</a>.
When you're ready, we can move on to <a href="help/makingnewfriends">making new friends</a>.
<iframe src="settings/connectors" width="950" height="600"></iframe>

View file

@ -247,7 +247,7 @@ class Photo {
if($this->is_imagick()) { if($this->is_imagick()) {
$this->image->setFirstIterator(); $this->image->setFirstIterator();
do { do {
$this->image->rotateImage(new ImagickPixel(), $degrees); $this->image->rotateImage(new ImagickPixel(), -$degrees); // ImageMagick rotates in the opposite direction of imagerotate()
} while ($this->image->nextImage()); } while ($this->image->nextImage());
return; return;
} }

View file

@ -394,7 +394,10 @@ function probe_url($url, $mode = PROBE_NORMAL) {
} }
if($link['@attributes']['rel'] === 'diaspora-public-key') { if($link['@attributes']['rel'] === 'diaspora-public-key') {
$diaspora_key = base64_decode(unamp($link['@attributes']['href'])); $diaspora_key = base64_decode(unamp($link['@attributes']['href']));
if(strstr($diaspora_key,'RSA '))
$pubkey = rsatopem($diaspora_key); $pubkey = rsatopem($diaspora_key);
else
$pubkey = $diaspora_key;
$diaspora = true; $diaspora = true;
} }
} }

View file

@ -755,6 +755,15 @@
$ret = api_format_items($r,$user_info); $ret = api_format_items($r,$user_info);
// We aren't going to try to figure out at the item, group, and page
// level which items you've seen and which you haven't. If you're looking
// at the network timeline just mark everything seen.
$r = q("UPDATE `item` SET `unseen` = 0
WHERE `unseen` = 1 AND `uid` = %d",
intval($user_info['uid'])
);
$data = array('$statuses' => $ret); $data = array('$statuses' => $ret);
switch($type){ switch($type){

View file

@ -8,65 +8,6 @@ require_once("include/bbcode.php");
require_once("include/markdownify/markdownify.php"); require_once("include/markdownify/markdownify.php");
function get_bb_tag_pos($s, $name, $occurance = 1) {
if($occurance < 1)
$occurance = 1;
$start_open = -1;
for($i = 1; $i <= $occurance; $i++) {
if( $start_open !== false)
$start_open = strpos($s, '[' . $name, $start_open + 1); // allow [name= type tags
}
if( $start_open === false)
return false;
$start_equal = strpos($s, '=', $start_open);
$start_close = strpos($s, ']', $start_open);
if( $start_close === false)
return false;
$start_close++;
$end_open = strpos($s, '[/' . $name . ']', $start_close);
if( $end_open === false)
return false;
$res = array( 'start' => array('open' => $start_open, 'close' => $start_close),
'end' => array('open' => $end_open, 'close' => $end_open + strlen('[/' . $name . ']')) );
if( $start_equal !== false)
$res['start']['equal'] = $start_equal + 1;
return $res;
}
function bb_tag_preg_replace($pattern, $replace, $name, $s) {
$string = $s;
$occurance = 1;
$pos = get_bb_tag_pos($string, $name, $occurance);
while($pos !== false && $occurance < 1000) {
$start = substr($string, 0, $pos['start']['open']);
$subject = substr($string, $pos['start']['open'], $pos['end']['close'] - $pos['start']['open']);
$end = substr($string, $pos['end']['close']);
if($end === false)
$end = '';
$subject = preg_replace($pattern, $replace, $subject);
$string = $start . $subject . $end;
$occurance++;
$pos = get_bb_tag_pos($string, $name, $occurance);
}
return $string;
}
// we don't want to support a bbcode specific markdown interpreter // we don't want to support a bbcode specific markdown interpreter
// and the markdown library we have is pretty good, but provides HTML output. // and the markdown library we have is pretty good, but provides HTML output.
// So we'll use that to convert to HTML, then convert the HTML back to bbcode, // So we'll use that to convert to HTML, then convert the HTML back to bbcode,
@ -196,6 +137,14 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
// The bbcode parser now handles youtube-links (and the other stuff) correctly. // The bbcode parser now handles youtube-links (and the other stuff) correctly.
// Additionally the html code is now fixed so that lists are now working. // Additionally the html code is now fixed so that lists are now working.
/**
* Transform #tags, strip off the [url] and replace spaces with underscore
*/
$Text = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match',
'return \'#\'. str_replace(\' \', \'_\', $match[2]);'
), $Text);
// Converting images with size parameters to simple images. Markdown doesn't know it. // Converting images with size parameters to simple images. Markdown doesn't know it.
$Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text);
@ -213,6 +162,22 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
$md = new Markdownify(false, false, false); $md = new Markdownify(false, false, false);
$Text = $md->parseString($Text); $Text = $md->parseString($Text);
// The Markdownify converter converts underscores '_' in URLs to '\_', which
// messes up the URL. Manually fix these
$count = 1;
$pos = bb_find_open_close($Text, '[', ']', $count);
while($pos !== false) {
$start = substr($Text, 0, $pos['start']);
$subject = substr($Text, $pos['start'], $pos['end'] - $pos['start'] + 1);
$end = substr($Text, $pos['end'] + 1);
$subject = str_replace('\_', '_', $subject);
$Text = $start . $subject . $end;
$count++;
$pos = bb_find_open_close($Text, '[', ']', $count);
}
// If the text going into bbcode() has a plain URL in it, i.e. // If the text going into bbcode() has a plain URL in it, i.e.
// with no [url] tags around it, it will come out of parseString() // with no [url] tags around it, it will come out of parseString()
// looking like: <http://url.com>, which gets removed by strip_tags(). // looking like: <http://url.com>, which gets removed by strip_tags().

View file

@ -64,6 +64,89 @@ function bb_unspacefy_and_trim($st) {
return $unspacefied; return $unspacefied;
} }
function bb_find_open_close($s, $open, $close, $occurance = 1) {
if($occurance < 1)
$occurance = 1;
$start_pos = -1;
for($i = 1; $i <= $occurance; $i++) {
if( $start_pos !== false)
$start_pos = strpos($s, $open, $start_pos + 1);
}
if( $start_pos === false)
return false;
$end_pos = strpos($s, $close, $start_pos);
if( $end_pos === false)
return false;
$res = array( 'start' => $start_pos, 'end' => $end_pos );
return $res;
}
function get_bb_tag_pos($s, $name, $occurance = 1) {
if($occurance < 1)
$occurance = 1;
$start_open = -1;
for($i = 1; $i <= $occurance; $i++) {
if( $start_open !== false)
$start_open = strpos($s, '[' . $name, $start_open + 1); // allow [name= type tags
}
if( $start_open === false)
return false;
$start_equal = strpos($s, '=', $start_open);
$start_close = strpos($s, ']', $start_open);
if( $start_close === false)
return false;
$start_close++;
$end_open = strpos($s, '[/' . $name . ']', $start_close);
if( $end_open === false)
return false;
$res = array( 'start' => array('open' => $start_open, 'close' => $start_close),
'end' => array('open' => $end_open, 'close' => $end_open + strlen('[/' . $name . ']')) );
if( $start_equal !== false)
$res['start']['equal'] = $start_equal + 1;
return $res;
}
function bb_tag_preg_replace($pattern, $replace, $name, $s) {
$string = $s;
$occurance = 1;
$pos = get_bb_tag_pos($string, $name, $occurance);
while($pos !== false && $occurance < 1000) {
$start = substr($string, 0, $pos['start']['open']);
$subject = substr($string, $pos['start']['open'], $pos['end']['close'] - $pos['start']['open']);
$end = substr($string, $pos['end']['close']);
if($end === false)
$end = '';
$subject = preg_replace($pattern, $replace, $subject);
$string = $start . $subject . $end;
$occurance++;
$pos = get_bb_tag_pos($string, $name, $occurance);
}
return $string;
}
if(! function_exists('bb_extract_images')) { if(! function_exists('bb_extract_images')) {
function bb_extract_images($body) { function bb_extract_images($body) {
@ -340,9 +423,14 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
$Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img src="$1" alt="' . t('Image/photo') . '" />', $Text); $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img src="$1" alt="' . t('Image/photo') . '" />', $Text);
$Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism",'<br/><img src="' .$a->get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />', $Text);
$Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism",'<br/><img src="' .$a->get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . '$1' . ' ' . t('Encrypted content') . '" /><br />', $Text);
// Try to Oembed // Try to Oembed
if ($tryoembed) { if ($tryoembed) {
$Text = preg_replace("/\[video\](.*?\.(ogg|ogv|oga|ogm|webm|mp4))\[\/video\]/ism", '<video src="$1" controls="controls" width="425" height="350"><a href="$1">$1</a></video>', $Text); $Text = preg_replace("/\[video\](.*?\.(ogg|ogv|oga|ogm|webm|mp4))\[\/video\]/ism", '<video src="$1" controls="controls" width="' . $a->videowidth . '" height="' . $a->videoheight . '"><a href="$1">$1</a></video>', $Text);
$Text = preg_replace("/\[audio\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mp3))\[\/audio\]/ism", '<audio src="$1" controls="controls"><a href="$1">$1</a></audio>', $Text); $Text = preg_replace("/\[audio\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mp3))\[\/audio\]/ism", '<audio src="$1" controls="controls"><a href="$1">$1</a></audio>', $Text);
$Text = preg_replace_callback("/\[video\](.*?)\[\/video\]/ism", 'tryoembed', $Text); $Text = preg_replace_callback("/\[video\](.*?)\[\/video\]/ism", 'tryoembed', $Text);
@ -356,7 +444,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
if ($tryoembed) if ($tryoembed)
$Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<iframe src="$1" width="425" height="350"><a href="$1">$1</a></iframe>', $Text); $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<iframe src="$1" width="' . $a->videowidth . '" height="' . $a->videoheight . '"><a href="$1">$1</a></iframe>', $Text);
else else
$Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<a href="$1">$1</a>', $Text); $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<a href="$1">$1</a>', $Text);
@ -372,7 +460,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
$Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text);
if ($tryoembed) if ($tryoembed)
$Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '<iframe width="425" height="350" src="http://www.youtube.com/embed/$1" frameborder="0" ></iframe>', $Text); $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '<iframe width="' . $a->videowidth . '" height="' . $a->videoheight . '" src="http://www.youtube.com/embed/$1" frameborder="0" ></iframe>', $Text);
else else
$Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", "http://www.youtube.com/watch?v=$1", $Text); $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", "http://www.youtube.com/watch?v=$1", $Text);
@ -386,7 +474,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
$Text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text); $Text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text);
if ($tryoembed) if ($tryoembed)
$Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", '<iframe width="425" height="350" src="http://player.vimeo.com/video/$1" frameborder="0" ></iframe>', $Text); $Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", '<iframe width="' . $a->videowidth . '" height="' . $a->videoheight . '" src="http://player.vimeo.com/video/$1" frameborder="0" ></iframe>', $Text);
else else
$Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", "http://vimeo.com/$1", $Text); $Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", "http://vimeo.com/$1", $Text);
@ -424,6 +512,8 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
$Text = preg_replace('/\[\&amp\;([#a-z0-9]+)\;\]/','&$1;',$Text); $Text = preg_replace('/\[\&amp\;([#a-z0-9]+)\;\]/','&$1;',$Text);
$Text = preg_replace('/\&\#039\;/','\'',$Text);
$Text = preg_replace('/\&quot\;/','"',$Text);
// fix any escaped ampersands that may have been converted into links // fix any escaped ampersands that may have been converted into links
$Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text); $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text);

View file

@ -68,7 +68,7 @@ function get_config($family, $key, $instore = false) {
); );
if(count($ret)) { if(count($ret)) {
// manage array value // manage array value
$val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
$a->config[$family][$key] = $val; $a->config[$family][$key] = $val;
return $val; return $val;
} }
@ -162,7 +162,7 @@ function get_pconfig($uid,$family, $key, $instore = false) {
); );
if(count($ret)) { if(count($ret)) {
$val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
$a->config[$uid][$family][$key] = $val; $a->config[$uid][$family][$key] = $val;
return $val; return $val;
} }

View file

@ -1,5 +1,8 @@
<?php <?php
require_once("include/bbcode.php");
// Note: the code in 'item_extract_images' and 'item_redir_and_replace_images' // Note: the code in 'item_extract_images' and 'item_redir_and_replace_images'
// is identical to the code in mod/message.php for 'item_extract_images' and // is identical to the code in mod/message.php for 'item_extract_images' and
// 'item_redir_and_replace_images' // 'item_redir_and_replace_images'
@ -51,19 +54,27 @@ function item_redir_and_replace_images($body, $images, $cid) {
$origbody = $body; $origbody = $body;
$newbody = ''; $newbody = '';
for($i = 0; $i < count($images); $i++) { $cnt = 1;
$search = '/\[url\=(.*?)\]\[!#saved_image' . $i . '#!\]\[\/url\]' . '/is'; $pos = get_bb_tag_pos($origbody, 'url', 1);
while($pos !== false && $cnt < 1000) {
$search = '/\[url\=(.*?)\]\[!#saved_image([0-9]*)#!\]\[\/url\]' . '/is';
$replace = '[url=' . z_path() . '/redir/' . $cid $replace = '[url=' . z_path() . '/redir/' . $cid
. '?f=1&url=' . '$1' . '][!#saved_image' . $i . '#!][/url]' ; . '?f=1&url=' . '$1' . '][!#saved_image' . '$2' .'#!][/url]';
$img_end = strpos($origbody, '[!#saved_image' . $i . '#!][/url]') + strlen('[!#saved_image' . $i . '#!][/url]'); $newbody .= substr($origbody, 0, $pos['start']['open']);
$process_part = substr($origbody, 0, $img_end); $subject = substr($origbody, $pos['start']['open'], $pos['end']['close'] - $pos['start']['open']);
$origbody = substr($origbody, $img_end); $origbody = substr($origbody, $pos['end']['close']);
if($origbody === false)
$origbody = '';
$process_part = preg_replace($search, $replace, $process_part); $subject = preg_replace($search, $replace, $subject);
$newbody = $newbody . $process_part; $newbody .= $subject;
$cnt++;
$pos = get_bb_tag_pos($origbody, 'url', 1);
} }
$newbody = $newbody . $origbody; $newbody .= $origbody;
$cnt = 0; $cnt = 0;
foreach($images as $image) { foreach($images as $image) {
@ -205,6 +216,20 @@ function localize_item(&$item){
$item['body'] = sprintf($txt, $A, $B). "\n\n\n" . $Bphoto; $item['body'] = sprintf($txt, $A, $B). "\n\n\n" . $Bphoto;
} }
if (stristr($item['verb'],ACTIVITY_MOOD)) {
$verb = urldecode(substr($item['verb'],strpos($item['verb'],'#')+1));
if(! $verb)
return;
$Aname = $item['author-name'];
$Alink = $item['author-link'];
$A = '[url=' . zrl($Alink) . ']' . $Aname . '[/url]';
$txt = t('%1$s is currently %2$s');
$item['body'] = sprintf($txt, $A, t($verb));
}
if ($item['verb']===ACTIVITY_TAG){ if ($item['verb']===ACTIVITY_TAG){
$r = q("SELECT * from `item`,`contact` WHERE $r = q("SELECT * from `item`,`contact` WHERE
`item`.`contact-id`=`contact`.`id` AND `item`.`uri`='%s';", `item`.`contact-id`=`contact`.`id` AND `item`.`uri`='%s';",
@ -279,10 +304,10 @@ function localize_item(&$item){
} }
// add zrl's to public images // add zrl's to public images
if(preg_match_all('/\[url=(.*?)\/photos\/(.*?)\/image\/(.*?)\]\[img(.*?)\]h(.*?)\[\/img\]\[\/url\]/is',$item['body'],$matches,PREG_SET_ORDER)) { $photo_pattern = "/\[url=(.*?)\/photos\/(.*?)\/image\/(.*?)\]\[img(.*?)\]h(.*?)\[\/img\]\[\/url\]/is";
foreach($matches as $mtch) { if(preg_match($photo_pattern,$item['body'])) {
$item['body'] = str_replace($mtch[0],'[url=' . zrl($mtch[1] . '/photos/' . $mtch[2] . '/image/' . $mtch[3] ,true) . '][img' . $mtch[4] . ']h' . $mtch[5] . '[/img][/url]',$item['body']); $photo_replace = '[url=' . zrl('$1' . '/photos/' . '$2' . '/image/' . '$3' ,true) . '][img' . '$4' . ']h' . '$5' . '[/img][/url]';
} $item['body'] = bb_tag_preg_replace($photo_pattern, $photo_replace, 'url', $item['body']);
} }
// add sparkle links to appropriate permalinks // add sparkle links to appropriate permalinks
@ -299,6 +324,359 @@ function localize_item(&$item){
} }
/**
* Count the total of comments on this item and its desendants
*/
function count_descendants($item) {
$total = count($item['children']);
if($total > 0) {
foreach($item['children'] as $child) {
if($child['verb'] === ACTIVITY_LIKE || $child['verb'] === ACTIVITY_DISLIKE) {
$total --;
}
$total += count_descendants($child);
}
}
return $total;
}
/**
* Recursively prepare a thread for HTML
*/
function prepare_threads_body($a, $items, $cmnt_tpl, $page_writeable, $mode, $profile_owner, $alike, $dlike, $thread_level=1) {
$result = array();
$wall_template = 'wall_thread.tpl';
$wallwall_template = 'wallwall_thread.tpl';
$items_seen = 0;
$nb_items = count($items);
$total_children = $nb_items;
foreach($items as $item) {
if($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
// Don't count it as a visible item
$nb_items--;
$total_children --;
}
if($item['verb'] === ACTIVITY_LIKE || $item['verb'] === ACTIVITY_DISLIKE) {
$nb_items --;
$total_children --;
}
}
foreach($items as $item) {
// prevent private email reply to public conversation from leaking.
if($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
continue;
}
if($item['verb'] === ACTIVITY_LIKE || $item['verb'] === ACTIVITY_DISLIKE) {
continue;
}
$items_seen++;
$comment = '';
$template = $wall_template;
$commentww = '';
$sparkle = '';
$owner_url = $owner_photo = $owner_name = '';
$buttons = '';
$dropping = false;
$star = false;
$isstarred = "unstarred";
$photo = $item['photo'];
$thumb = $item['thumb'];
$indent = '';
$osparkle = '';
$lastcollapsed = false;
$firstcollapsed = false;
$total_children += count_descendants($item);
$toplevelpost = (($item['id'] == $item['parent']) ? true : false);
$item_writeable = (($item['writable'] || $item['self']) ? true : false);
$show_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
$lock = ((($item['private'] == 1) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
|| strlen($item['deny_cid']) || strlen($item['deny_gid']))))
? t('Private Message')
: false);
$redirect_url = $a->get_baseurl($ssl_state) . '/redir/' . $item['cid'] ;
$shareable = ((($profile_owner == local_user()) && ($item['private'] != 1)) ? true : false);
if(local_user() && link_compare($a->contact['url'],$item['author-link']))
$edpost = array($a->get_baseurl($ssl_state)."/editpost/".$item['id'], t("Edit"));
else
$edpost = false;
if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
$dropping = true;
$drop = array(
'dropping' => $dropping,
'select' => t('Select'),
'delete' => t('Delete'),
);
$filer = (($profile_owner == local_user()) ? t("save to folder") : false);
$diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true);
$profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
if($item['author-link'] && (! $item['author-name']))
$profile_name = $item['author-link'];
$sp = false;
$profile_link = best_link_url($item,$sp);
if($profile_link === 'mailbox')
$profile_link = '';
if($sp)
$sparkle = ' sparkle';
else
$profile_link = zrl($profile_link);
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
$profile_avatar = $a->contacts[$normalised]['thumb'];
else
$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $a->get_cached_avatar_image($thumb));
$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate);
$location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate));
$tags=array();
foreach(explode(',',$item['tag']) as $tag){
$tag = trim($tag);
if ($tag!="") $tags[] = bbcode($tag);
}
$like = ((x($alike,$item['uri'])) ? format_like($alike[$item['uri']],$alike[$item['uri'] . '-l'],'like',$item['uri']) : '');
$dislike = ((x($dlike,$item['uri'])) ? format_like($dlike[$item['uri']],$dlike[$item['uri'] . '-l'],'dislike',$item['uri']) : '');
if($toplevelpost) {
if((! $item['self']) && ($mode !== 'profile')) {
if($item['wall']) {
// On the network page, I am the owner. On the display page it will be the profile owner.
// This will have been stored in $a->page_contact by our calling page.
// Put this person as the wall owner of the wall-to-wall notice.
$owner_url = zrl($a->page_contact['url']);
$owner_photo = $a->page_contact['thumb'];
$owner_name = $a->page_contact['name'];
$template = $wallwall_template;
$commentww = 'ww';
}
else if($item['owner-link']) {
$owner_linkmatch = (($item['owner-link']) && link_compare($item['owner-link'],$item['author-link']));
$alias_linkmatch = (($item['alias']) && link_compare($item['alias'],$item['author-link']));
$owner_namematch = (($item['owner-name']) && $item['owner-name'] == $item['author-name']);
if((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) {
// The author url doesn't match the owner (typically the contact)
// and also doesn't match the contact alias.
// The name match is a hack to catch several weird cases where URLs are
// all over the park. It can be tricked, but this prevents you from
// seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn
// well that it's the same Bob Smith.
// But it could be somebody else with the same name. It just isn't highly likely.
$owner_url = $item['owner-link'];
$owner_photo = $item['owner-avatar'];
$owner_name = $item['owner-name'];
$template = $wallwall_template;
$commentww = 'ww';
// If it is our contact, use a friendly redirect link
if((link_compare($item['owner-link'],$item['url']))
&& ($item['network'] === NETWORK_DFRN)) {
$owner_url = $redirect_url;
$osparkle = ' sparkle';
}
else
$owner_url = zrl($owner_url);
}
}
}
if($profile_owner == local_user()) {
$isstarred = (($item['starred']) ? "starred" : "unstarred");
$star = array(
'do' => t("add star"),
'undo' => t("remove star"),
'toggle' => t("toggle star status"),
'classdo' => (($item['starred']) ? "hidden" : ""),
'classundo' => (($item['starred']) ? "" : "hidden"),
'starred' => t('starred'),
'tagger' => t("add tag"),
'classtagger' => "",
);
}
} else {
$indent = 'comment';
// Collapse comments
if(($nb_items > 2) || ($thread_level > 2)) {
if($items_seen == 1) {
$firstcollapsed = true;
}
if($thread_level > 2) {
if($items_seen == $nb_items)
$lastcollapsed = true;
}
else if($items_seen == ($nb_items - 2)) {
$lastcollapsed = true;
}
}
}
if(intval(get_config('system','thread_allow')) && $a->theme_thread_allow) {
$comments_threaded = true;
}
else {
$comments_threaded = false;
}
if($page_writeable) {
$buttons = array(
'like' => array( t("I like this \x28toggle\x29"), t("like")),
'dislike' => array( t("I don't like this \x28toggle\x29"), t("dislike")),
);
if ($shareable) $buttons['share'] = array( t('Share this'), t('share'));
if($show_comment_box) {
$qc = $qcomment = null;
if(in_array('qcomment',$a->plugins)) {
$qc = ((local_user()) ? get_pconfig(local_user(),'qcomment','words') : null);
$qcomment = (($qc) ? explode("\n",$qc) : null);
}
$comment = replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$threaded' => $comments_threaded,
'$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''),
'$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'),
'$id' => $item['item_id'],
'$parent' => $item['item_id'],
'$qcomment' => $qcomment,
'$profile_uid' => $profile_owner,
'$mylink' => $a->contact['url'],
'$mytitle' => t('This is you'),
'$myphoto' => $a->contact['thumb'],
'$comment' => t('Comment'),
'$submit' => t('Submit'),
'$edbold' => t('Bold'),
'$editalic' => t('Italic'),
'$eduline' => t('Underline'),
'$edquote' => t('Quote'),
'$edcode' => t('Code'),
'$edimg' => t('Image'),
'$edurl' => t('Link'),
'$edvideo' => t('Video'),
'$preview' => t('Preview'),
'$indent' => $indent,
'$sourceapp' => t($a->sourcename),
'$ww' => (($mode === 'network') ? $commentww : '')
));
}
}
if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
$indent .= ' shiny';
localize_item($item);
$body = prepare_body($item,true);
$tmp_item = array(
// collapse comments in template. I don't like this much...
'comment_firstcollapsed' => $firstcollapsed,
'comment_lastcollapsed' => $lastcollapsed,
// template to use to render item (wall, walltowall, search)
'template' => $template,
'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
'tags' => $tags,
'body' => template_escape($body),
'text' => strip_tags(template_escape($body)),
'id' => $item['item_id'],
'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
'olinktitle' => sprintf( t('View %s\'s profile @ %s'), $owner_name, ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])),
'to' => t('to'),
'wall' => t('Wall-to-Wall'),
'vwall' => t('via Wall-To-Wall:'),
'profile_url' => $profile_link,
'item_photo_menu' => item_photo_menu($item),
'name' => template_escape($profile_name),
'thumb' => $profile_avatar,
'osparkle' => $osparkle,
'sparkle' => $sparkle,
'title' => template_escape($item['title']),
'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
'ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
'lock' => $lock,
'location' => template_escape($location),
'indent' => $indent,
'owner_url' => $owner_url,
'owner_photo' => $owner_photo,
'owner_name' => template_escape($owner_name),
'plink' => get_plink($item),
'edpost' => $edpost,
'isstarred' => $isstarred,
'star' => $star,
'filer' => $filer,
'drop' => $drop,
'vote' => $buttons,
'like' => $like,
'dislike' => $dislike,
'comment' => $comment,
'previewing' => $previewing,
'wait' => t('Please wait'),
'thread_level' => $thread_level,
);
$arr = array('item' => $item, 'output' => $tmp_item);
call_hooks('display_item', $arr);
$item_result = $arr['output'];
if($firstcollapsed) {
$item_result['num_comments'] = sprintf( tt('%d comment','%d comments',$total_children),$total_children );
$item_result['hide_text'] = t('show more');
}
$item_result['children'] = array();
if(count($item['children'])) {
$item_result['children'] = prepare_threads_body($a, $item['children'], $cmnt_tpl, $page_writeable, $mode, $profile_owner, $alike, $dlike, ($thread_level + 1));
}
$item_result['private'] = $item['private'];
$item_result['toplevel'] = ($toplevelpost ? 'toplevel_item' : '');
/*
* I don't like this very much...
*/
if(get_config('system','thread_allow') && $a->theme_thread_allow) {
$item_result['flatten'] = false;
$item_result['threaded'] = true;
}
else {
$item_result['flatten'] = true;
$item_result['threaded'] = false;
if(!$toplevelpost) {
$item_result['comment'] = false;
}
}
$result[] = $item_result;
}
return $result;
}
/** /**
* "Render" a conversation or list of items for HTML display. * "Render" a conversation or list of items for HTML display.
* There are two major forms of display: * There are two major forms of display:
@ -348,6 +726,9 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$page_writeable = false; $page_writeable = false;
} }
$page_dropping = ((local_user() && local_user() == $profile_owner) ? true : false);
if($update) if($update)
$return_url = $_SESSION['return_url']; $return_url = $_SESSION['return_url'];
else else
@ -373,6 +754,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$threads = array(); $threads = array();
$threadsid = -1; $threadsid = -1;
$page_template = get_markup_template("conversation.tpl");
if($items && count($items)) { if($items && count($items)) {
if($mode === 'network-new' || $mode === 'search' || $mode === 'community') { if($mode === 'network-new' || $mode === 'search' || $mode === 'community') {
@ -467,6 +850,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
'title' => template_escape($item['title']), 'title' => template_escape($item['title']),
'body' => template_escape($body), 'body' => template_escape($body),
'text' => strip_tags(template_escape($body)), 'text' => strip_tags(template_escape($body)),
'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
'ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), 'ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
'location' => template_escape($location), 'location' => template_escape($location),
'indent' => '', 'indent' => '',
@ -485,6 +869,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
'conv' => (($preview) ? '' : array('href'=> $a->get_baseurl($ssl_state) . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))), 'conv' => (($preview) ? '' : array('href'=> $a->get_baseurl($ssl_state) . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))),
'previewing' => $previewing, 'previewing' => $previewing,
'wait' => t('Please wait'), 'wait' => t('Please wait'),
'thread_level' => 1,
); );
$arr = array('item' => $item, 'output' => $tmp_item); $arr = array('item' => $item, 'output' => $tmp_item);
@ -499,371 +884,33 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
else else
{ {
// Normal View // Normal View
$page_template = get_markup_template("threaded_conversation.tpl");
// get all the topmost parents
// this shouldn't be needed, as we should have only them in ou array
// But for now, this array respects the old style, just in case
// Figure out how many comments each parent has $threads = array();
// (Comments all have gravity of 6)
// Store the result in the $comments array
$comments = array();
foreach($items as $item) { foreach($items as $item) {
if((intval($item['gravity']) == 6) && ($item['id'] != $item['parent'])) {
if(! x($comments,$item['parent']))
$comments[$item['parent']] = 1;
else
$comments[$item['parent']] += 1;
} elseif(! x($comments,$item['parent']))
$comments[$item['parent']] = 0; // avoid notices later on
}
// map all the like/dislike activities for each parent item
// Store these in the $alike and $dlike arrays
foreach($items as $item) {
like_puller($a,$item,$alike,'like'); like_puller($a,$item,$alike,'like');
like_puller($a,$item,$dlike,'dislike'); like_puller($a,$item,$dlike,'dislike');
}
$comments_collapsed = false; if($item['id'] == $item['parent']) {
$comments_seen = 0; $threads[] = $item;
$comment_lastcollapsed = false;
$comment_firstcollapsed = false;
$blowhard = 0;
$blowhard_count = 0;
foreach($items as $item) {
$comment = '';
$template = $tpl;
$commentww = '';
$sparkle = '';
$owner_url = $owner_photo = $owner_name = '';
// We've already parsed out like/dislike for special treatment. We can ignore them now
if(((activity_match($item['verb'],ACTIVITY_LIKE))
|| (activity_match($item['verb'],ACTIVITY_DISLIKE)))
&& ($item['id'] != $item['parent']))
continue;
$toplevelpost = (($item['id'] == $item['parent']) ? true : false);
// Take care of author collapsing and comment collapsing
// (author collapsing is currently disabled)
// If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
// If there are more than two comments, squash all but the last 2.
if($toplevelpost) {
$item_writeable = (($item['writable'] || $item['self']) ? true : false);
$comments_seen = 0;
$comments_collapsed = false;
$comment_lastcollapsed = false;
$comment_firstcollapsed = false;
$threadsid++;
$threads[$threadsid]['id'] = $item['item_id'];
$threads[$threadsid]['private'] = $item['private'];
$threads[$threadsid]['items'] = array();
}
else {
// prevent private email reply to public conversation from leaking.
if($item['network'] === NETWORK_MAIL && local_user() != $item['uid'])
continue;
$comments_seen ++;
$comment_lastcollapsed = false;
$comment_firstcollapsed = false;
}
$override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
$show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false);
if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
if (!$comments_collapsed){
$threads[$threadsid]['num_comments'] = sprintf( tt('%d comment','%d comments',$comments[$item['parent']]),$comments[$item['parent']] );
$threads[$threadsid]['hide_text'] = t('show more');
$comments_collapsed = true;
$comment_firstcollapsed = true;
}
}
if(($comments[$item['parent']] > 2) && ($comments_seen == ($comments[$item['parent']] - 1))) {
$comment_lastcollapsed = true;
}
$redirect_url = $a->get_baseurl($ssl_state) . '/redir/' . $item['cid'] ;
$lock = ((($item['private'] == 1) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
|| strlen($item['deny_cid']) || strlen($item['deny_gid']))))
? t('Private Message')
: false);
// Top-level wall post not written by the wall owner (wall-to-wall)
// First figure out who owns it.
$osparkle = '';
if(($toplevelpost) && (! $item['self']) && ($mode !== 'profile')) {
if($item['wall']) {
// On the network page, I am the owner. On the display page it will be the profile owner.
// This will have been stored in $a->page_contact by our calling page.
// Put this person as the wall owner of the wall-to-wall notice.
$owner_url = zrl($a->page_contact['url']);
$owner_photo = $a->page_contact['thumb'];
$owner_name = $a->page_contact['name'];
$template = $wallwall;
$commentww = 'ww';
}
if((! $item['wall']) && $item['owner-link']) {
$owner_linkmatch = (($item['owner-link']) && link_compare($item['owner-link'],$item['author-link']));
$alias_linkmatch = (($item['alias']) && link_compare($item['alias'],$item['author-link']));
$owner_namematch = (($item['owner-name']) && $item['owner-name'] == $item['author-name']);
if((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) {
// The author url doesn't match the owner (typically the contact)
// and also doesn't match the contact alias.
// The name match is a hack to catch several weird cases where URLs are
// all over the park. It can be tricked, but this prevents you from
// seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn
// well that it's the same Bob Smith.
// But it could be somebody else with the same name. It just isn't highly likely.
$owner_url = $item['owner-link'];
$owner_photo = $item['owner-avatar'];
$owner_name = $item['owner-name'];
$template = $wallwall;
$commentww = 'ww';
// If it is our contact, use a friendly redirect link
if((link_compare($item['owner-link'],$item['url']))
&& ($item['network'] === NETWORK_DFRN)) {
$owner_url = $redirect_url;
$osparkle = ' sparkle';
}
else
$owner_url = zrl($owner_url);
}
}
}
$likebuttons = '';
$shareable = ((($profile_owner == local_user()) && ($item['private'] != 1)) ? true : false);
if($page_writeable) {
/* if($toplevelpost) { */
$likebuttons = array(
'like' => array( t("I like this \x28toggle\x29"), t("like")),
'dislike' => array( t("I don't like this \x28toggle\x29"), t("dislike")),
);
if ($shareable) $likebuttons['share'] = array( t('Share this'), t('share'));
/* } */
$qc = $qcomment = null;
if(in_array('qcomment',$a->plugins)) {
$qc = ((local_user()) ? get_pconfig(local_user(),'qcomment','words') : null);
$qcomment = (($qc) ? explode("\n",$qc) : null);
}
if(($show_comment_box) || (($show_comment_box == false) && ($override_comment_box == false) && ($item['last-child']))) {
$comment = replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''),
'$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'),
'$id' => $item['item_id'],
'$parent' => $item['parent'],
'$qcomment' => $qcomment,
'$profile_uid' => $profile_owner,
'$mylink' => $a->contact['url'],
'$mytitle' => t('This is you'),
'$myphoto' => $a->contact['thumb'],
'$comment' => t('Comment'),
'$submit' => t('Submit'),
'$edbold' => t('Bold'),
'$editalic' => t('Italic'),
'$eduline' => t('Underline'),
'$edquote' => t('Quote'),
'$edcode' => t('Code'),
'$edimg' => t('Image'),
'$edurl' => t('Link'),
'$edvideo' => t('Video'),
'$preview' => t('Preview'),
'$ww' => (($mode === 'network') ? $commentww : '')
));
} }
} }
if(local_user() && link_compare($a->contact['url'],$item['author-link'])) $threads = prepare_threads_body($a, $threads, $cmnt_tpl, $page_writeable, $mode, $profile_owner, $alike, $dlike);
$edpost = array($a->get_baseurl($ssl_state)."/editpost/".$item['id'], t("Edit"));
else
$edpost = false;
$drop = '';
$dropping = false;
if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
$dropping = true;
$drop = array(
'dropping' => $dropping,
'select' => t('Select'),
'delete' => t('Delete'),
);
$star = false;
$filer = false;
$isstarred = "unstarred";
if ($profile_owner == local_user()) {
if($toplevelpost) {
$isstarred = (($item['starred']) ? "starred" : "unstarred");
$star = array(
'do' => t("add star"),
'undo' => t("remove star"),
'toggle' => t("toggle star status"),
'classdo' => (($item['starred']) ? "hidden" : ""),
'classundo' => (($item['starred']) ? "" : "hidden"),
'starred' => t('starred'),
'tagger' => t("add tag"),
'classtagger' => "",
);
}
$filer = t("save to folder");
}
$photo = $item['photo'];
$thumb = $item['thumb'];
// Post was remotely authored.
$diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true);
$profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
if($item['author-link'] && (! $item['author-name']))
$profile_name = $item['author-link'];
$sp = false;
$profile_link = best_link_url($item,$sp);
if($profile_link === 'mailbox')
$profile_link = '';
if($sp)
$sparkle = ' sparkle';
else
$profile_link = zrl($profile_link);
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
$profile_avatar = $a->contacts[$normalised]['thumb'];
else
$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $a->get_cached_avatar_image($thumb));
$like = ((x($alike,$item['uri'])) ? format_like($alike[$item['uri']],$alike[$item['uri'] . '-l'],'like',$item['uri']) : '');
$dislike = ((x($dlike,$item['uri'])) ? format_like($dlike[$item['uri']],$dlike[$item['uri'] . '-l'],'dislike',$item['uri']) : '');
$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate);
$location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate));
$indent = (($toplevelpost) ? '' : ' comment');
if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
$indent .= ' shiny';
//
localize_item($item);
$tags=array();
foreach(explode(',',$item['tag']) as $tag){
$tag = trim($tag);
if ($tag!="") $tags[] = bbcode($tag);
}
// Build the HTML
$body = prepare_body($item,true);
//$tmp_item = replace_macros($template,
$tmp_item = array(
// collapse comments in template. I don't like this much...
'comment_firstcollapsed' => $comment_firstcollapsed,
'comment_lastcollapsed' => $comment_lastcollapsed,
// template to use to render item (wall, walltowall, search)
'template' => $template,
'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
'tags' => $tags,
'body' => template_escape($body),
'text' => strip_tags(template_escape($body)),
'id' => $item['item_id'],
'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
'olinktitle' => sprintf( t('View %s\'s profile @ %s'), $owner-name, ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])),
'to' => t('to'),
'wall' => t('Wall-to-Wall'),
'vwall' => t('via Wall-To-Wall:'),
'profile_url' => $profile_link,
'item_photo_menu' => item_photo_menu($item),
'name' => template_escape($profile_name),
'thumb' => $profile_avatar,
'osparkle' => $osparkle,
'sparkle' => $sparkle,
'title' => template_escape($item['title']),
'ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
'lock' => $lock,
'location' => template_escape($location),
'indent' => $indent,
'owner_url' => $owner_url,
'owner_photo' => $owner_photo,
'owner_name' => template_escape($owner_name),
'plink' => get_plink($item),
'edpost' => $edpost,
'isstarred' => $isstarred,
'star' => $star,
'filer' => $filer,
'drop' => $drop,
'vote' => $likebuttons,
'like' => $like,
'dislike' => $dislike,
'comment' => $comment,
'previewing' => $previewing,
'wait' => t('Please wait'),
);
$arr = array('item' => $item, 'output' => $tmp_item);
call_hooks('display_item', $arr);
$threads[$threadsid]['items'][] = $arr['output'];
}
} }
} }
$page_template = get_markup_template("conversation.tpl");
$o = replace_macros($page_template, array( $o = replace_macros($page_template, array(
'$baseurl' => $a->get_baseurl($ssl_state), '$baseurl' => $a->get_baseurl($ssl_state),
'$mode' => $mode, '$mode' => $mode,
'$user' => $a->user, '$user' => $a->user,
'$threads' => $threads, '$threads' => $threads,
'$dropping' => ($dropping?t('Delete Selected Items'):False), '$dropping' => ($page_dropping?t('Delete Selected Items'):False),
)); ));
return $o; return $o;
@ -1163,7 +1210,7 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) {
'$bang' => $x['bang'], '$bang' => $x['bang'],
'$profile_uid' => $x['profile_uid'], '$profile_uid' => $x['profile_uid'],
'$preview' => t('Preview'), '$preview' => t('Preview'),
'$mobileapp' => t('Friendica mobile web'), '$sourceapp' => t($a->sourcename),
)); ));
@ -1176,12 +1223,55 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) {
} }
function get_item_children($arr, $parent) {
$children = array();
foreach($arr as $item) {
if($item['id'] != $item['parent']) {
if(get_config('system','thread_allow')) {
// Fallback to parent-uri if thr-parent is not set
$thr_parent = $item['thr-parent'];
if($thr_parent == '')
$thr_parent = $item['parent-uri'];
if($thr_parent == $parent['uri']) {
$item['children'] = get_item_children($arr, $item);
$children[] = $item;
}
}
else if($item['parent'] == $parent['id']) {
$children[] = $item;
}
}
}
return $children;
}
function sort_item_children($items) {
$result = $items;
usort($result,'sort_thr_created_rev');
foreach($result as $k => $i) {
if(count($result[$k]['children'])) {
$result[$k]['children'] = sort_item_children($result[$k]['children']);
}
}
return $result;
}
function add_children_to_list($children, &$arr) {
foreach($children as $y) {
$arr[] = $y;
if(count($y['children']))
add_children_to_list($y['children'], $arr);
}
}
function conv_sort($arr,$order) { function conv_sort($arr,$order) {
if((!(is_array($arr) && count($arr)))) if((!(is_array($arr) && count($arr))))
return array(); return array();
$parents = array(); $parents = array();
$children = array();
foreach($arr as $x) foreach($arr as $x)
if($x['id'] == $x['parent']) if($x['id'] == $x['parent'])
@ -1194,21 +1284,22 @@ function conv_sort($arr,$order) {
if(count($parents)) if(count($parents))
foreach($parents as $i=>$_x) foreach($parents as $i=>$_x)
$parents[$i]['children'] = array(); $parents[$i]['children'] = get_item_children($arr, $_x);
foreach($arr as $x) { /*foreach($arr as $x) {
if($x['id'] != $x['parent']) { if($x['id'] != $x['parent']) {
$p = find_thread_parent_index($parents,$x); $p = find_thread_parent_index($parents,$x);
if($p !== false) if($p !== false)
$parents[$p]['children'][] = $x; $parents[$p]['children'][] = $x;
} }
} }*/
if(count($parents)) { if(count($parents)) {
foreach($parents as $k => $v) { foreach($parents as $k => $v) {
if(count($parents[$k]['children'])) { if(count($parents[$k]['children'])) {
$y = $parents[$k]['children']; $parents[$k]['children'] = sort_item_children($parents[$k]['children']);
/*$y = $parents[$k]['children'];
usort($y,'sort_thr_created_rev'); usort($y,'sort_thr_created_rev');
$parents[$k]['children'] = $y; $parents[$k]['children'] = $y;*/
} }
} }
} }
@ -1218,8 +1309,9 @@ function conv_sort($arr,$order) {
foreach($parents as $x) { foreach($parents as $x) {
$ret[] = $x; $ret[] = $x;
if(count($x['children'])) if(count($x['children']))
foreach($x['children'] as $y) add_children_to_list($x['children'], $ret);
$ret[] = $y; /*foreach($x['children'] as $y)
$ret[] = $y;*/
} }
} }

View file

@ -102,6 +102,37 @@ function diaspora_dispatch($importer,$msg) {
return $ret; return $ret;
} }
function diaspora_handle_from_contact($contact_id) {
$handle = False;
logger("diaspora_handle_from_contact: contact id is " . $contact_id, LOGGER_DEBUG);
$r = q("SELECT network, addr, self, url, nick FROM contact WHERE id = %d",
intval($contact_id)
);
if($r) {
$contact = $r[0];
logger("diaspora_handle_from_contact: contact 'self' = " . $contact['self'] . " 'url' = " . $contact['url'], LOGGER_DEBUG);
if($contact['network'] === NETWORK_DIASPORA) {
$handle = $contact['addr'];
// logger("diaspora_handle_from_contact: contact id is a Diaspora person, handle = " . $handle, LOGGER_DEBUG);
}
elseif(($contact['network'] === NETWORK_DFRN) || ($contact['self'] == 1)) {
$baseurl_start = strpos($contact['url'],'://') + 3;
$baseurl_length = strpos($contact['url'],'/profile') - $baseurl_start; // allows installations in a subdirectory--not sure how Diaspora will handle
$baseurl = substr($contact['url'], $baseurl_start, $baseurl_length);
$handle = $contact['nick'] . '@' . $baseurl;
// logger("diaspora_handle_from_contact: contact id is a DFRN person, handle = " . $handle, LOGGER_DEBUG);
}
}
return $handle;
}
function diaspora_get_contact_by_handle($uid,$handle) { function diaspora_get_contact_by_handle($uid,$handle) {
$r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `addr` = '%s' LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `addr` = '%s' LIMIT 1",
dbesc(NETWORK_DIASPORA), dbesc(NETWORK_DIASPORA),
@ -1282,7 +1313,7 @@ function diaspora_comment($importer,$xml,$msg) {
// the existence of parent_author_signature means the parent_author or owner // the existence of parent_author_signature means the parent_author or owner
// is already relaying. // is already relaying.
proc_run('php','include/notifier.php','comment',$message_id); proc_run('php','include/notifier.php','comment-import',$message_id);
} }
$myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0 ", $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0 ",
@ -1319,7 +1350,7 @@ function diaspora_comment($importer,$xml,$msg) {
'verb' => ACTIVITY_POST, 'verb' => ACTIVITY_POST,
'otype' => 'item', 'otype' => 'item',
'parent' => $conv_parent, 'parent' => $conv_parent,
'parent_uri' => $parent_uri
)); ));
// only send one notification // only send one notification
@ -1867,7 +1898,7 @@ EOT;
// is already relaying. The parent_item['origin'] indicates the message was created on our system // is already relaying. The parent_item['origin'] indicates the message was created on our system
if(($parent_item['origin']) && (! $parent_author_signature)) if(($parent_item['origin']) && (! $parent_author_signature))
proc_run('php','include/notifier.php','comment',$message_id); proc_run('php','include/notifier.php','comment-import',$message_id);
return; return;
} }
@ -1993,7 +2024,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
// is already relaying. // is already relaying.
logger('diaspora_signed_retraction: relaying relayable_retraction'); logger('diaspora_signed_retraction: relaying relayable_retraction');
proc_run('php','include/notifier.php','relayable_retraction',$r[0]['id']); proc_run('php','include/notifier.php','drop',$r[0]['id']);
} }
} }
} }
@ -2153,12 +2184,6 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
} }
} }
*/ */
/**
* Transform #tags, strip off the [url] and replace spaces with underscore
*/
$body = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match',
'return \'#\'. str_replace(\' \', \'_\', $match[2]);'
), $body);
//if(strlen($title)) //if(strlen($title))
// $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body; // $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body;
@ -2257,12 +2282,13 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
// $theiraddr = $contact['addr']; // $theiraddr = $contact['addr'];
if($item['thr-parent']) { // Diaspora doesn't support threaded comments
/*if($item['thr-parent']) {
$p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1", $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1",
dbesc($item['thr-parent']) dbesc($item['thr-parent'])
); );
} }
else { else {*/
// The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
// return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent. // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
// The only item with `parent` and `id` as the parent id is the parent item. // The only item with `parent` and `id` as the parent id is the parent item.
@ -2270,7 +2296,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
intval($item['parent']), intval($item['parent']),
intval($item['parent']) intval($item['parent'])
); );
} //}
if(count($p)) if(count($p))
$parent = $p[0]; $parent = $p[0];
else else
@ -2332,13 +2358,13 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$body = $item['body']; $body = $item['body'];
$text = html_entity_decode(bb2diaspora($body)); $text = html_entity_decode(bb2diaspora($body));
// Diaspora doesn't support threaded comments
if($item['thr-parent']) { /*if($item['thr-parent']) {
$p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1", $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1",
dbesc($item['thr-parent']) dbesc($item['thr-parent'])
); );
} }
else { else {*/
// The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
// return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent. // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
// The only item with `parent` and `id` as the parent id is the parent item. // The only item with `parent` and `id` as the parent id is the parent item.
@ -2346,7 +2372,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
intval($item['parent']), intval($item['parent']),
intval($item['parent']) intval($item['parent'])
); );
} //}
if(count($p)) if(count($p))
$parent = $p[0]; $parent = $p[0];
else else
@ -2367,7 +2393,6 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$like = true; $like = true;
$target_type = ( $parent['uri'] === $parent['parent-uri'] ? 'Post' : 'Comment'); $target_type = ( $parent['uri'] === $parent['parent-uri'] ? 'Post' : 'Comment');
// $target_type = (strpos($parent['type'], 'comment') ? 'Comment' : 'Post');
// $positive = (($item['deleted']) ? 'false' : 'true'); // $positive = (($item['deleted']) ? 'false' : 'true');
$positive = 'true'; $positive = 'true';
@ -2381,7 +2406,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
// fetch the original signature if the relayable was created by a Diaspora // fetch the original signature if the relayable was created by a Diaspora
// or DFRN user. Relayables for other networks are not supported. // or DFRN user. Relayables for other networks are not supported.
$r = q("select * from sign where " . $sql_sign_id . " = %d limit 1", /* $r = q("select * from sign where " . $sql_sign_id . " = %d limit 1",
intval($item['id']) intval($item['id'])
); );
if(count($r)) { if(count($r)) {
@ -2397,7 +2422,25 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
// function is called // function is called
logger('diaspora_send_relay: original author signature not found, cannot send relayable'); logger('diaspora_send_relay: original author signature not found, cannot send relayable');
return; return;
} }*/
/* Since the author signature is only checked by the parent, not by the relay recipients,
* I think it may not be necessary for us to do so much work to preserve all the original
* signatures. The important thing that Diaspora DOES need is the original creator's handle.
* Let's just generate that and forget about all the original author signature stuff.
*
* Note: this might be more of an problem if we want to support likes on comments for older
* versions of Diaspora (diaspora-pistos), but since there are a number of problems with
* doing that, let's ignore it for now.
*
* Currently, only DFRN contacts are supported. StatusNet shouldn't be hard, but it hasn't
* been done yet
*/
$handle = diaspora_handle_from_contact($item['contact-id']);
if(! $handle)
return;
if($relay_retract) if($relay_retract)
$sender_signed_text = $item['guid'] . ';' . $target_type; $sender_signed_text = $item['guid'] . ';' . $target_type;

View file

@ -1,5 +1,7 @@
<?php <?php
require_once('include/email.php');
function notification($params) { function notification($params) {
logger('notification: entry', LOGGER_DEBUG); logger('notification: entry', LOGGER_DEBUG);
@ -324,7 +326,7 @@ function notification($params) {
// If so, create the record of it and use a message-id smtp header. // If so, create the record of it and use a message-id smtp header.
if(!$r) { if(!$r) {
logger("norify_id:" . intval($notify_id). ", parent: " . intval($params['parent']) . "uid: " . logger("notify_id:" . intval($notify_id). ", parent: " . intval($params['parent']) . "uid: " .
intval($params['uid']), LOGGER_DEBUG); intval($params['uid']), LOGGER_DEBUG);
$r = q("insert into `notify-threads` (`notify-id`, `master-parent-item`, `receiver-uid`, `parent-item`) $r = q("insert into `notify-threads` (`notify-id`, `master-parent-item`, `receiver-uid`, `parent-item`)
values(%d,%d,%d,%d)", values(%d,%d,%d,%d)",
@ -495,6 +497,7 @@ class enotify {
$multipartMessageBody, // message body $multipartMessageBody, // message body
$messageHeader // message headers $messageHeader // message headers
); );
logger("notification: enotify::send header " . 'To: ' . $params['toEmail'] . "\n" . $messageHeader, LOGGER_DEBUG);
logger("notification: enotify::send returns " . $res, LOGGER_DEBUG); logger("notification: enotify::send returns " . $res, LOGGER_DEBUG);
} }
} }

View file

@ -580,6 +580,7 @@ function get_atom_elements($feed,$item) {
$res['body'] = escape_tags($res['body']); $res['body'] = escape_tags($res['body']);
} }
// this tag is obsolete but we keep it for really old sites // this tag is obsolete but we keep it for really old sites
$allow = $item->get_item_tags(NAMESPACE_DFRN,'comment-allow'); $allow = $item->get_item_tags(NAMESPACE_DFRN,'comment-allow');
@ -930,6 +931,8 @@ function item_store($arr,$force_parent = false) {
$arr['origin'] = ((x($arr,'origin')) ? intval($arr['origin']) : 0 ); $arr['origin'] = ((x($arr,'origin')) ? intval($arr['origin']) : 0 );
$arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid()); $arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid());
$arr['thr-parent'] = $arr['parent-uri'];
if($arr['parent-uri'] === $arr['uri']) { if($arr['parent-uri'] === $arr['uri']) {
$parent_id = 0; $parent_id = 0;
$parent_deleted = 0; $parent_deleted = 0;
@ -955,7 +958,6 @@ function item_store($arr,$force_parent = false) {
// and re-attach to the conversation parent. // and re-attach to the conversation parent.
if($r[0]['uri'] != $r[0]['parent-uri']) { if($r[0]['uri'] != $r[0]['parent-uri']) {
$arr['thr-parent'] = $arr['parent-uri'];
$arr['parent-uri'] = $r[0]['parent-uri']; $arr['parent-uri'] = $r[0]['parent-uri'];
$z = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `parent-uri` = '%s' AND `uid` = %d $z = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `parent-uri` = '%s' AND `uid` = %d
ORDER BY `id` ASC LIMIT 1", ORDER BY `id` ASC LIMIT 1",
@ -997,7 +999,6 @@ function item_store($arr,$force_parent = false) {
if($force_parent) { if($force_parent) {
logger('item_store: $force_parent=true, reply converted to top-level post.'); logger('item_store: $force_parent=true, reply converted to top-level post.');
$parent_id = 0; $parent_id = 0;
$arr['thr-parent'] = $arr['parent-uri'];
$arr['parent-uri'] = $arr['uri']; $arr['parent-uri'] = $arr['uri'];
$arr['gravity'] = 0; $arr['gravity'] = 0;
} }
@ -2141,7 +2142,7 @@ function local_delivery($importer,$data) {
} }
} }
if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) { if(($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) {
logger('local_delivery: Updating photo for ' . $importer['name']); logger('local_delivery: Updating photo for ' . $importer['name']);
require_once("Photo.php"); require_once("Photo.php");
$photo_failure = false; $photo_failure = false;
@ -2199,7 +2200,7 @@ function local_delivery($importer,$data) {
} }
} }
if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) { if(($name_updated) && (strlen($new_name)) && ($name_updated > $importer['name-date'])) {
$r = q("select * from contact where uid = %d and id = %d limit 1", $r = q("select * from contact where uid = %d and id = %d limit 1",
intval($importer['importer_uid']), intval($importer['importer_uid']),
intval($importer['id']) intval($importer['id'])
@ -2464,6 +2465,7 @@ function local_delivery($importer,$data) {
$is_a_remote_delete = false; $is_a_remote_delete = false;
// POSSIBLE CLEANUP --> Why select so many fields when only forum_mode and wall are used?
$r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`, $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`,
`contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item`
LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
@ -2782,12 +2784,14 @@ function local_delivery($importer,$data) {
$parent = 0; $parent = 0;
if($posted_id) { if($posted_id) {
$r = q("SELECT `parent` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", $r = q("SELECT `parent`, `parent-uri` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($posted_id), intval($posted_id),
intval($importer['importer_uid']) intval($importer['importer_uid'])
); );
if(count($r)) if(count($r)) {
$parent = $r[0]['parent']; $parent = $r[0]['parent'];
$parent_uri = $r[0]['parent-uri'];
}
if(! $is_like) { if(! $is_like) {
$r1 = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `uid` = %d AND `parent` = %d", $r1 = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `uid` = %d AND `parent` = %d",
@ -2827,7 +2831,7 @@ function local_delivery($importer,$data) {
'verb' => ACTIVITY_POST, 'verb' => ACTIVITY_POST,
'otype' => 'item', 'otype' => 'item',
'parent' => $parent, 'parent' => $parent,
'parent_uri' => $parent_uri,
)); ));
} }
@ -2976,6 +2980,7 @@ function local_delivery($importer,$data) {
'verb' => ACTIVITY_POST, 'verb' => ACTIVITY_POST,
'otype' => 'item', 'otype' => 'item',
'parent' => $conv_parent, 'parent' => $conv_parent,
'parent_uri' => $parent_uri
)); ));
@ -3065,7 +3070,8 @@ function local_delivery($importer,$data) {
$datarray['uid'] = $importer['importer_uid']; $datarray['uid'] = $importer['importer_uid'];
$datarray['contact-id'] = $importer['id']; $datarray['contact-id'] = $importer['id'];
if(! link_compare($datarray['owner-link'],$contact['url'])) {
if(! link_compare($datarray['owner-link'],$importer['url'])) {
// The item owner info is not our contact. It's OK and is to be expected if this is a tgroup delivery, // The item owner info is not our contact. It's OK and is to be expected if this is a tgroup delivery,
// but otherwise there's a possible data mixup on the sender's system. // but otherwise there's a possible data mixup on the sender's system.
// the tgroup delivery code called from item_store will correct it if it's a forum, // the tgroup delivery code called from item_store will correct it if it's a forum,
@ -3334,7 +3340,6 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
else else
$body = $item['body']; $body = $item['body'];
$o = "\r\n\r\n<entry>\r\n"; $o = "\r\n\r\n<entry>\r\n";
if(is_array($author)) if(is_array($author))
@ -3344,7 +3349,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
if(strlen($item['owner-name'])) if(strlen($item['owner-name']))
$o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']); $o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || ($item['thr-parent'])) { if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) {
$parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']); $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
$o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['parent']) . '" />' . "\r\n"; $o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['parent']) . '" />' . "\r\n";
} }
@ -3705,8 +3710,9 @@ function drop_item($id,$interactive = true) {
// check if logged in user is either the author or owner of this item // check if logged in user is either the author or owner of this item
if((local_user() == $item['uid']) || (remote_user() == $item['contact-id'])) { if((local_user() == $item['uid']) || (remote_user() == $item['contact-id']) || (! $interactive)) {
logger('delete item: ' . $item['id'], LOGGER_DEBUG);
// delete the item // delete the item
$r = q("UPDATE `item` SET `deleted` = 1, `title` = '', `body` = '', `edited` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1", $r = q("UPDATE `item` SET `deleted` = 1, `title` = '', `body` = '', `edited` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1",

View file

@ -854,6 +854,10 @@ function scale_external_images($s, $include_link = true, $scale_replace = false)
} }
} }
} }
// replace the special char encoding
$s = htmlspecialchars($s,ENT_QUOTES,'UTF-8');
return $s; return $s;
} }

View file

@ -18,6 +18,31 @@ require_once('include/html2plain.php');
* us by hosting providers. * us by hosting providers.
*/ */
/*
* The notifier is typically called with:
*
* proc_run('php', "include/notifier.php", COMMAND, ITEM_ID);
*
* where COMMAND is one of the following:
*
* activity (in diaspora.php, dfrn_confirm.php, profiles.php)
* comment-import (in diaspora.php, items.php)
* comment-new (in item.php)
* drop (in diaspora.php, items.php, photos.php)
* edit_post (in item.php)
* event (in events.php)
* expire (in items.php)
* like (in like.php, poke.php)
* mail (in message.php)
* suggest (in fsuggest.php)
* tag (in photos.php, poke.php, tagger.php)
* tgroup (in items.php)
* wall-new (in photos.php, item.php)
*
* and ITEM_ID is the id of the item in the database that needs to be sent to others.
*/
function notifier_run($argv, $argc){ function notifier_run($argv, $argc){
global $a, $db; global $a, $db;

View file

@ -12,7 +12,9 @@ function oembed_replacecb($matches){
function oembed_fetch_url($embedurl){ function oembed_fetch_url($embedurl){
$txt = Cache::get($embedurl); $a = get_app();
$txt = Cache::get($a->videowidth . $embedurl);
// These media files should now be caught in bbcode.php // These media files should now be caught in bbcode.php
// left here as a fallback in case this is called from another source // left here as a fallback in case this is called from another source
@ -38,7 +40,7 @@ function oembed_fetch_url($embedurl){
$entries = $xpath->query("//link[@type='application/json+oembed']"); $entries = $xpath->query("//link[@type='application/json+oembed']");
foreach($entries as $e){ foreach($entries as $e){
$href = $e->getAttributeNode("href")->nodeValue; $href = $e->getAttributeNode("href")->nodeValue;
$txt = fetch_url($href . '&maxwidth=425'); $txt = fetch_url($href . '&maxwidth=' . $a->videowidth);
break; break;
} }
} }
@ -47,7 +49,7 @@ function oembed_fetch_url($embedurl){
if ($txt==false || $txt==""){ if ($txt==false || $txt==""){
// try oohembed service // try oohembed service
$ourl = "http://oohembed.com/oohembed/?url=".urlencode($embedurl).'&maxwidth=425'; $ourl = "http://oohembed.com/oohembed/?url=".urlencode($embedurl).'&maxwidth=' . $a->videowidth;
$txt = fetch_url($ourl); $txt = fetch_url($ourl);
} }
@ -55,7 +57,7 @@ function oembed_fetch_url($embedurl){
if ($txt[0]!="{") $txt='{"type":"error"}'; if ($txt[0]!="{") $txt='{"type":"error"}';
//save in cache //save in cache
Cache::set($embedurl,$txt); Cache::set($a->videowidth . $embedurl,$txt);
} }
@ -114,7 +116,7 @@ function oembed_format_object($j){
if (isset($j->provider_name)) $ret.=" on ".$j->provider_name; if (isset($j->provider_name)) $ret.=" on ".$j->provider_name;
} else { } else {
// add <a> for html2bbcode conversion // add <a> for html2bbcode conversion
$ret .= "<a href='$embedurl' rel='oembed'/>"; $ret .= "<a href='$embedurl' rel='oembed'></a>";
} }
$ret.="<br style='clear:left'></span>"; $ret.="<br style='clear:left'></span>";
return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret)); return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret));

View file

@ -9,6 +9,9 @@ function uninstall_plugin($plugin){
dbesc($plugin) dbesc($plugin)
); );
// define THISPLUGIN, make life easy to plugin devs :-)
define("THISPLUGIN", 'addon/' . $plugin . '/' . $plugin . '.php');
@include_once('addon/' . $plugin . '/' . $plugin . '.php'); @include_once('addon/' . $plugin . '/' . $plugin . '.php');
if(function_exists($plugin . '_uninstall')) { if(function_exists($plugin . '_uninstall')) {
$func = $plugin . '_uninstall'; $func = $plugin . '_uninstall';
@ -18,9 +21,11 @@ function uninstall_plugin($plugin){
if (! function_exists('install_plugin')){ if (! function_exists('install_plugin')){
function install_plugin($plugin) { function install_plugin($plugin) {
// silently fail if plugin was removed // silently fail if plugin was removed
// define THISPLUGIN, make life easy to plugin devs :-)
define("THISPLUGIN", 'addon/' . $plugin . '/' . $plugin . '.php');
if(! file_exists('addon/' . $plugin . '/' . $plugin . '.php')) if(! file_exists('addon/' . $plugin . '/' . $plugin . '.php'))
return false; return false;
logger("Addons: installing " . $plugin); logger("Addons: installing " . $plugin);
@ -78,6 +83,9 @@ function reload_plugins() {
$fname = 'addon/' . $pl . '/' . $pl . '.php'; $fname = 'addon/' . $pl . '/' . $pl . '.php';
// define THISPLUGIN, make life easy to plugin devs :-)
define("THISPLUGIN", $fname);
if(file_exists($fname)) { if(file_exists($fname)) {
$t = @filemtime($fname); $t = @filemtime($fname);
foreach($installed as $i) { foreach($installed as $i) {
@ -163,6 +171,8 @@ function call_hooks($name, &$data = null) {
if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) { if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
foreach($a->hooks[$name] as $hook) { foreach($a->hooks[$name] as $hook) {
// define THISPLUGIN, make life easy to plugin devs :-)
define("THISPLUGIN", $hook[0]);
@include_once($hook[0]); @include_once($hook[0]);
if(function_exists($hook[1])) { if(function_exists($hook[1])) {
$func = $hook[1]; $func = $hook[1];

View file

@ -63,7 +63,7 @@
if ($b[0]=="$") $b = $this->_get_var($b); if ($b[0]=="$") $b = $this->_get_var($b);
$val = ($a == $b); $val = ($a == $b);
} else if (strpos($args[2],"!=")>0){ } else if (strpos($args[2],"!=")>0){
list($a,$b) = explode("!=",$args[2]); list($a,$b) = array_map("trim", explode("!=",$args[2]));
$a = $this->_get_var($a); $a = $this->_get_var($a);
if ($b[0]=="$") $b = $this->_get_var($b); if ($b[0]=="$") $b = $this->_get_var($b);
$val = ($a != $b); $val = ($a != $b);
@ -134,6 +134,26 @@
} }
/**
* DEBUG node
*
* {{ debug $var [$var [$var [...]]] }}{{ enddebug }}
*
* replace node with <pre>var_dump($var, $var, ...);</pre>
*/
private function _replcb_debug($args){
$vars = array_map('trim', explode(" ",$args[2]));
$vars[] = $args[1];
$ret = "<pre>";
foreach ($vars as $var){
$ret .= htmlspecialchars(var_export( $this->_get_var($var), true ));
$ret .= "\n";
}
$ret .= "</pre>";
return $ret;
}
private function _replcb_node($m) { private function _replcb_node($m) {
$node = $this->nodes[$m[1]]; $node = $this->nodes[$m[1]];
if (method_exists($this, "_replcb_".$node[1])){ if (method_exists($this, "_replcb_".$node[1])){

View file

@ -70,7 +70,7 @@ function notags($string) {
if(! function_exists('escape_tags')) { if(! function_exists('escape_tags')) {
function escape_tags($string) { function escape_tags($string) {
return(htmlspecialchars($string)); return(htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false));
}} }}
@ -504,6 +504,10 @@ function get_tags($s) {
$s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s); $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s);
// ignore anything in a bbtag
$s = preg_replace('/\[(.*?)\]/sm','',$s);
// Match full names against @tags including the space between first and last // Match full names against @tags including the space between first and last
// We will look these up afterward to see if they are full names or not recognisable. // We will look these up afterward to see if they are full names or not recognisable.
@ -723,6 +727,39 @@ function get_poke_verbs() {
return $arr; return $arr;
} }
function get_mood_verbs() {
// index is present tense verb
// value is array containing past tense verb, translation of present, translation of past
$arr = array(
'happy' => t('happy'),
'sad' => t('sad'),
'mellow' => t('mellow'),
'tired' => t('tired'),
'perky' => t('perky'),
'angry' => t('angry'),
'stupefied' => t('stupified'),
'puzzled' => t('puzzled'),
'interested' => t('interested'),
'bitter' => t('bitter'),
'cheerful' => t('cheerful'),
'alive' => t('alive'),
'annoyed' => t('annoyed'),
'anxious' => t('anxious'),
'cranky' => t('cranky'),
'disturbed' => t('disturbed'),
'frustrated' => t('frustrated'),
'motivated' => t('motivated'),
'relaxed' => t('relaxed'),
'surprised' => t('surprised'),
);
call_hooks('mood_verbs', $arr);
return $arr;
}
/** /**
* *
* Function: smilies * Function: smilies

View file

@ -277,6 +277,20 @@ function create_user($arr) {
require_once('include/group.php'); require_once('include/group.php');
group_add($newuid, t('Friends')); group_add($newuid, t('Friends'));
if(! get_config('system', 'newuser_public')) {
$r = q("SELECT id FROM `group` WHERE uid = %d AND name = '%s'",
intval($newuid),
dbesc(t('Friends'))
);
if($r) {
q("UPDATE user SET def_gid = %d, allow_gid = '%s' WHERE uid = %d",
intval($r[0]['id']),
dbesc("<" . $r[0]['id'] . ">"),
intval($newuid)
);
}
}
} }
// if we have no OpenID photo try to look up an avatar // if we have no OpenID photo try to look up an avatar

View file

@ -275,7 +275,7 @@ aStates[249]="|'Adan|'Ataq|Abyan|Al Bayda'|Al Hudaydah|Al Jawf|Al Mahrah|Al Mahw
aStates[250]="|Kosovo|Montenegro|Serbia|Vojvodina"; aStates[250]="|Kosovo|Montenegro|Serbia|Vojvodina";
aStates[251]="|Central|Copperbelt|Eastern|Luapula|Lusaka|North-Western|Northern|Southern|Western"; aStates[251]="|Central|Copperbelt|Eastern|Luapula|Lusaka|North-Western|Northern|Southern|Western";
aStates[252]="|Bulawayo|Harare|ManicalandMashonaland Central|Mashonaland East|Mashonaland West|Masvingo|Matabeleland North|Matabeleland South|Midlands"; aStates[252]="|Bulawayo|Harare|ManicalandMashonaland Central|Mashonaland East|Mashonaland West|Masvingo|Matabeleland North|Matabeleland South|Midlands";
aStates[253]="|Self Hosted|Private Server|Architects Of Sleep|DFRN|Distributed Friend Network|Free-Beer.ch|Foojbook|Free-Haven|Friendica.eu|Friendika.me.4.it|Friendika - I Ask Questions|Frndc.com|Hikado|Hipatia|Hungerfreunde|Kaluguran Community|Kak Ste|Karl.Markx.pm|Loozah Social Club|MyFriendica.net|MyFriendNetwork|Oi!|OpenMindSpace|Optimistisch|Recolutionari.es|Sparkling Network|SPRACI|Styliztique|Sysfu Social Club|Trevena|theshi.re|Tumpambae|Uzmiac|Other"; aStates[253]="|Self Hosted|Private Server|Architects Of Sleep|DFRN|Distributed Friend Network|ErrLock|Free-Beer.ch|Foojbook|Free-Haven|Friendica.eu|Friendika.me.4.it|Friendika - I Ask Questions|Frndc.com|Hikado|Hipatia|Hungerfreunde|Kaluguran Community|Kak Ste|Karl.Markx.pm|Loozah Social Club|MyFriendica.net|MyFriendNetwork|Oi!|OpenMindSpace|Optimistisch|Recolutionari.es|SilverLips|Sparkling Network|SPRACI|Styliztique|Sysfu Social Club|Trevena|theshi.re|Tumpambae|Uzmiac|Other";
/* /*
* gArCountryInfo * gArCountryInfo
* (0) Country name * (0) Country name

View file

@ -280,8 +280,7 @@
//}); //});
// add a new thread // add a new thread
$('.toplevel_item',data).each(function() {
$('.tread-wrapper',data).each(function() {
var ident = $(this).attr('id'); var ident = $(this).attr('id');
if($('#' + ident).length == 0 && profile_page == 1) { if($('#' + ident).length == 0 && profile_page == 1) {

2
js/main.min.js vendored

File diff suppressed because one or more lines are too long

14
mod/_well_known.php Normal file
View file

@ -0,0 +1,14 @@
<?php
require_once("hostxrd.php");
function _well_known_init(&$a){
if ($a->argc > 1) {
switch($a->argv[1]) {
case "host-meta":
hostxrd_init($a);
break;
}
}
http_status_exit(404);
killme();
}

View file

@ -237,7 +237,10 @@ function admin_page_site_post(&$a){
$banner = ((x($_POST,'banner')) ? trim($_POST['banner']) : false); $banner = ((x($_POST,'banner')) ? trim($_POST['banner']) : false);
$language = ((x($_POST,'language')) ? notags(trim($_POST['language'])) : ''); $language = ((x($_POST,'language')) ? notags(trim($_POST['language'])) : '');
$theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme'])) : ''); $theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme'])) : '');
$theme_mobile = ((x($_POST,'theme_mobile')) ? notags(trim($_POST['theme_mobile'])) : '');
$maximagesize = ((x($_POST,'maximagesize')) ? intval(trim($_POST['maximagesize'])) : 0); $maximagesize = ((x($_POST,'maximagesize')) ? intval(trim($_POST['maximagesize'])) : 0);
$maximagelength = ((x($_POST,'maximagelength')) ? intval(trim($_POST['maximagelength'])) : MAX_IMAGE_LENGTH);
$jpegimagequality = ((x($_POST,'jpegimagequality')) ? intval(trim($_POST['jpegimagequality'])) : JPEG_QUALITY);
$register_policy = ((x($_POST,'register_policy')) ? intval(trim($_POST['register_policy'])) : 0); $register_policy = ((x($_POST,'register_policy')) ? intval(trim($_POST['register_policy'])) : 0);
@ -250,6 +253,8 @@ function admin_page_site_post(&$a){
$block_public = ((x($_POST,'block_public')) ? True : False); $block_public = ((x($_POST,'block_public')) ? True : False);
$force_publish = ((x($_POST,'publish_all')) ? True : False); $force_publish = ((x($_POST,'publish_all')) ? True : False);
$global_directory = ((x($_POST,'directory_submit_url')) ? notags(trim($_POST['directory_submit_url'])) : ''); $global_directory = ((x($_POST,'directory_submit_url')) ? notags(trim($_POST['directory_submit_url'])) : '');
$thread_allow = ((x($_POST,'thread_allow')) ? True : False);
$newuser_public = ((x($_POST,'newuser_public')) ? True : False);
$no_multi_reg = ((x($_POST,'no_multi_reg')) ? True : False); $no_multi_reg = ((x($_POST,'no_multi_reg')) ? True : False);
$no_openid = !((x($_POST,'no_openid')) ? True : False); $no_openid = !((x($_POST,'no_openid')) ? True : False);
$no_regfullname = !((x($_POST,'no_regfullname')) ? True : False); $no_regfullname = !((x($_POST,'no_regfullname')) ? True : False);
@ -324,7 +329,14 @@ function admin_page_site_post(&$a){
} }
set_config('system','language', $language); set_config('system','language', $language);
set_config('system','theme', $theme); set_config('system','theme', $theme);
if ( $theme_mobile === '---' ) {
del_config('system','mobile-theme');
} else {
set_config('system','mobile-theme', $theme_mobile);
}
set_config('system','maximagesize', $maximagesize); set_config('system','maximagesize', $maximagesize);
set_config('system','max_image_length', $maximagelength);
set_config('system','jpeg_quality', $jpegimagequality);
set_config('config','register_policy', $register_policy); set_config('config','register_policy', $register_policy);
set_config('system','account_abandon_days', $abandon_days); set_config('system','account_abandon_days', $abandon_days);
@ -342,6 +354,8 @@ function admin_page_site_post(&$a){
} else { } else {
set_config('system','directory_submit_url', $global_directory); set_config('system','directory_submit_url', $global_directory);
} }
set_config('system','thread_allow', $thread_allow);
set_config('system','newuser_public', $newuser_public);
set_config('system','block_extended_register', $no_multi_reg); set_config('system','block_extended_register', $no_multi_reg);
set_config('system','no_openid', $no_openid); set_config('system','no_openid', $no_openid);
@ -384,12 +398,17 @@ function admin_page_site(&$a) {
/* Installed themes */ /* Installed themes */
$theme_choices = array(); $theme_choices = array();
$theme_choices_mobile = array();
$theme_choices_mobile["---"] = t("Don't apply a special theme for mobile devices.");
$files = glob('view/theme/*'); $files = glob('view/theme/*');
if($files) { if($files) {
foreach($files as $file) { foreach($files as $file) {
$f = basename($file); $f = basename($file);
$theme_name = ((file_exists($file . '/experimental')) ? sprintf("%s - \x28Experimental\x29", $f) : $f); $theme_name = ((file_exists($file . '/experimental')) ? sprintf("%s - \x28Experimental\x29", $f) : $f);
$theme_choices[$f] = $theme_name; $theme_choices[$f] = $theme_name;
if (file_exists($file . '/mobile')) {
$theme_choices_mobile[$f] = $theme_name;
}
} }
} }
@ -431,8 +450,11 @@ function admin_page_site(&$a) {
'$banner' => array('banner', t("Banner/Logo"), $banner, ""), '$banner' => array('banner', t("Banner/Logo"), $banner, ""),
'$language' => array('language', t("System language"), get_config('system','language'), "", $lang_choices), '$language' => array('language', t("System language"), get_config('system','language'), "", $lang_choices),
'$theme' => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"), $theme_choices), '$theme' => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"), $theme_choices),
'$theme_mobile' => array('theme_mobile', t("Mobile system theme"), get_config('system','mobile-theme'), t("Theme for mobile devices"), $theme_choices_mobile),
'$ssl_policy' => array('ssl_policy', t("SSL link policy"), (string) intval(get_config('system','ssl_policy')), t("Determines whether generated links should be forced to use SSL"), $ssl_choices), '$ssl_policy' => array('ssl_policy', t("SSL link policy"), (string) intval(get_config('system','ssl_policy')), t("Determines whether generated links should be forced to use SSL"), $ssl_choices),
'$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")), '$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
'$maximagelength' => array('maximagelength', t("Maximum image length"), get_config('system','max_image_length'), t("Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.")),
'$jpegimagequality' => array('jpegimagequality', t("JPEG image quality"), get_config('system','jpeg_quality'), t("Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality.")),
'$register_policy' => array('register_policy', t("Register policy"), $a->config['register_policy'], "", $register_choices), '$register_policy' => array('register_policy', t("Register policy"), $a->config['register_policy'], "", $register_choices),
'$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES, 'UTF-8'), t("Will be displayed prominently on the registration page.")), '$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES, 'UTF-8'), t("Will be displayed prominently on the registration page.")),
@ -442,6 +464,8 @@ function admin_page_site(&$a) {
'$block_public' => array('block_public', t("Block public"), get_config('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently logged in.")), '$block_public' => array('block_public', t("Block public"), get_config('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently logged in.")),
'$force_publish' => array('publish_all', t("Force publish"), get_config('system','publish_all'), t("Check to force all profiles on this site to be listed in the site directory.")), '$force_publish' => array('publish_all', t("Force publish"), get_config('system','publish_all'), t("Check to force all profiles on this site to be listed in the site directory.")),
'$global_directory' => array('directory_submit_url', t("Global directory update URL"), get_config('system','directory_submit_url'), t("URL to update the global directory. If this is not set, the global directory is completely unavailable to the application.")), '$global_directory' => array('directory_submit_url', t("Global directory update URL"), get_config('system','directory_submit_url'), t("URL to update the global directory. If this is not set, the global directory is completely unavailable to the application.")),
'$thread_allow' => array('thread_allow', t("Allow threaded items"), get_config('system','thread_allow'), t("Allow infinite level threading for items on this site.")),
'$newuser_public' => array('newuser_public', t("No default permissions for new users"), get_config('system','newuser_public'), t("New users will have no private permissions set for their posts by default, making their posts public until they change it.")),
'$no_multi_reg' => array('no_multi_reg', t("Block multiple registrations"), get_config('system','block_extended_register'), t("Disallow users to register additional accounts for use as pages.")), '$no_multi_reg' => array('no_multi_reg', t("Block multiple registrations"), get_config('system','block_extended_register'), t("Disallow users to register additional accounts for use as pages.")),
'$no_openid' => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), t("OpenID support for registration and logins.")), '$no_openid' => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), t("OpenID support for registration and logins.")),

View file

@ -698,6 +698,7 @@ function render_content(&$a, $items, $mode, $update, $preview = false) {
'$edurl' => t('Link'), '$edurl' => t('Link'),
'$edvideo' => t('Video'), '$edvideo' => t('Video'),
'$preview' => t('Preview'), '$preview' => t('Preview'),
'$sourceapp' => t($a->sourcename),
'$ww' => (($mode === 'network') ? $commentww : '') '$ww' => (($mode === 'network') ? $commentww : '')
)); ));
} }

View file

@ -113,8 +113,9 @@ function display_content(&$a) {
); );
} }
$items = conv_sort($r,"`commented`");
$o .= conversation($a,$r,'display', false); $o .= conversation($a,$items,'display', false);
} }
else { else {

View file

@ -132,7 +132,7 @@ function editpost_content(&$a) {
'$profile_uid' => $_SESSION['uid'], '$profile_uid' => $_SESSION['uid'],
'$preview' => t('Preview'), '$preview' => t('Preview'),
'$jotplugins' => $jotplugins, '$jotplugins' => $jotplugins,
'$mobileapp' => t('Friendica mobile web'), '$sourceapp' => t($a->sourcename),
)); ));
return $o; return $o;

View file

@ -60,7 +60,7 @@ function install_post(&$a) {
return; return;
break; break;
case 4; case 4:
$urlpath = $a->get_path(); $urlpath = $a->get_path();
$dbhost = notags(trim($_POST['dbhost'])); $dbhost = notags(trim($_POST['dbhost']));
$dbuser = notags(trim($_POST['dbuser'])); $dbuser = notags(trim($_POST['dbuser']));
@ -155,11 +155,11 @@ function install_content(&$a) {
} }
if(x($a->data,'txt') && strlen($a->data['txt'])) { if(x($a->data,'txt') && strlen($a->data['txt'])) {
$tpl = get_markup_template('install.tpl');
$db_return_text .= manual_config($a); $db_return_text .= manual_config($a);
} }
if ($db_return_text!="") { if ($db_return_text!="") {
$tpl = get_markup_template('install.tpl');
return replace_macros($tpl, array( return replace_macros($tpl, array(
'$title' => $install_title, '$title' => $install_title,
'$pass' => "", '$pass' => "",

View file

@ -79,6 +79,7 @@ function item_post(&$a) {
// if this isn't the real parent of the conversation, find it // if this isn't the real parent of the conversation, find it
if($r !== false && count($r)) { if($r !== false && count($r)) {
$parid = $r[0]['parent']; $parid = $r[0]['parent'];
$parent_uri = $r[0]['uri'];
if($r[0]['id'] != $r[0]['parent']) { if($r[0]['id'] != $r[0]['parent']) {
$r = q("SELECT * FROM `item` WHERE `id` = `parent` AND `parent` = %d LIMIT 1", $r = q("SELECT * FROM `item` WHERE `id` = `parent` AND `parent` = %d LIMIT 1",
intval($parid) intval($parid)
@ -96,7 +97,7 @@ function item_post(&$a) {
$parent = $r[0]['id']; $parent = $r[0]['id'];
// multi-level threading - preserve the info but re-parent to our single level threading // multi-level threading - preserve the info but re-parent to our single level threading
if(($parid) && ($parid != $parent)) //if(($parid) && ($parid != $parent))
$thr_parent = $parent_uri; $thr_parent = $parent_uri;
if($parent_item['contact-id'] && $uid) { if($parent_item['contact-id'] && $uid) {
@ -438,6 +439,7 @@ function item_post(&$a) {
$body = bb_translate_video($body); $body = bb_translate_video($body);
/** /**
* Fold multi-line [code] sequences * Fold multi-line [code] sequences
*/ */
@ -446,6 +448,8 @@ function item_post(&$a) {
$body = scale_external_images($body,false); $body = scale_external_images($body,false);
/** /**
* Look for any tags and linkify them * Look for any tags and linkify them
*/ */
@ -541,6 +545,10 @@ function item_post(&$a) {
$uri = item_new_uri($a->get_hostname(),$profile_uid); $uri = item_new_uri($a->get_hostname(),$profile_uid);
// Fallback so that we alway have a thr-parent
if(!$thr_parent)
$thr_parent = $uri;
$datarray = array(); $datarray = array();
$datarray['uid'] = $profile_uid; $datarray['uid'] = $profile_uid;
$datarray['type'] = $post_type; $datarray['type'] = $post_type;
@ -600,7 +608,7 @@ function item_post(&$a) {
if($preview) { if($preview) {
require_once('include/conversation.php'); require_once('include/conversation.php');
$o = conversation($a,array(array_merge($contact_record,$datarray)),'search',false,true); $o = conversation($a,array(array_merge($contact_record,$datarray)),'search', false);
logger('preview: ' . $o); logger('preview: ' . $o);
echo json_encode(array('preview' => $o)); echo json_encode(array('preview' => $o));
killme(); killme();
@ -740,6 +748,7 @@ function item_post(&$a) {
'verb' => ACTIVITY_POST, 'verb' => ACTIVITY_POST,
'otype' => 'item', 'otype' => 'item',
'parent' => $parent, 'parent' => $parent,
'parent_uri' => $parent_item['uri']
)); ));
} }

View file

@ -351,6 +351,7 @@ function message_content(&$a) {
'$body' => template_escape($rr['body']), '$body' => template_escape($rr['body']),
'$to_name' => template_escape($rr['name']), '$to_name' => template_escape($rr['name']),
'$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A')), '$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A')),
'$ago' => relative_date($rr['mailcreated']),
'$seen' => $rr['mailseen'], '$seen' => $rr['mailseen'],
'$count' => sprintf( tt('%d message', '%d messages', $rr['count']), $rr['count']), '$count' => sprintf( tt('%d message', '%d messages', $rr['count']), $rr['count']),
)); ));
@ -443,6 +444,7 @@ function message_content(&$a) {
'delete' => t('Delete message'), 'delete' => t('Delete message'),
'to_name' => template_escape($message['name']), 'to_name' => template_escape($message['name']),
'date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'],'D, d M Y - g:i A'), 'date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'],'D, d M Y - g:i A'),
'ago' => relative_date($message['created']),
); );
$seen = $message['seen']; $seen = $message['seen'];

142
mod/mood.php Normal file
View file

@ -0,0 +1,142 @@
<?php
require_once('include/security.php');
require_once('include/bbcode.php');
require_once('include/items.php');
function mood_init(&$a) {
if(! local_user())
return;
$uid = local_user();
$verb = notags(trim($_GET['verb']));
if(! $verb)
return;
$verbs = get_mood_verbs();
if(! in_array($verb,$verbs))
return;
$activity = ACTIVITY_MOOD . '#' . urlencode($verb);
$parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : 0);
logger('mood: verb ' . $verb, LOGGER_DEBUG);
if($parent) {
$r = q("select uri, private, allow_cid, allow_gid, deny_cid, deny_gid
from item where id = %d and parent = %d and uid = %d limit 1",
intval($parent),
intval($parent),
intval($uid)
);
if(count($r)) {
$parent_uri = $r[0]['uri'];
$private = $r[0]['private'];
$allow_cid = $r[0]['allow_cid'];
$allow_gid = $r[0]['allow_gid'];
$deny_cid = $r[0]['deny_cid'];
$deny_gid = $r[0]['deny_gid'];
}
}
else {
$private = 0;
$allow_cid = $a->user['allow_cid'];
$allow_gid = $a->user['allow_gid'];
$deny_cid = $a->user['deny_cid'];
$deny_gid = $a->user['deny_gid'];
}
$poster = $a->contact;
$uri = item_new_uri($a->get_hostname(),$uid);
$action = sprintf( t('%1$s is currently %2$s'), '[url=' . $poster['url'] . ']' . $poster['name'] . '[/url]' , $verbs[$verb]);
$arr = array();
$arr['uid'] = $uid;
$arr['uri'] = $uri;
$arr['parent-uri'] = (($parent_uri) ? $parent_uri : $uri);
$arr['type'] = 'activity';
$arr['wall'] = 1;
$arr['contact-id'] = $poster['id'];
$arr['owner-name'] = $poster['name'];
$arr['owner-link'] = $poster['url'];
$arr['owner-avatar'] = $poster['thumb'];
$arr['author-name'] = $poster['name'];
$arr['author-link'] = $poster['url'];
$arr['author-avatar'] = $poster['thumb'];
$arr['title'] = '';
$arr['allow_cid'] = $allow_cid;
$arr['allow_gid'] = $allow_gid;
$arr['deny_cid'] = $deny_cid;
$arr['deny_gid'] = $deny_gid;
$arr['last-child'] = 1;
$arr['visible'] = 1;
$arr['verb'] = $activity;
$arr['private'] = $private;
$arr['origin'] = 1;
$arr['body'] = $action;
$item_id = item_store($arr);
if($item_id) {
q("UPDATE `item` SET `plink` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
dbesc($a->get_baseurl() . '/display/' . $poster['nickname'] . '/' . $item_id),
intval($uid),
intval($item_id)
);
proc_run('php',"include/notifier.php","tag","$item_id");
}
call_hooks('post_local_end', $arr);
proc_run('php',"include/notifier.php","like","$post_id");
return;
}
function mood_content(&$a) {
if(! local_user()) {
notice( t('Permission denied.') . EOL);
return;
}
$parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0');
$verbs = get_mood_verbs();
$shortlist = array();
foreach($verbs as $k => $v)
if($v !== 'NOTRANSLATION')
$shortlist[] = array($k,$v);
$tpl = get_markup_template('mood_content.tpl');
$o = replace_macros($tpl,array(
'$title' => t('Mood'),
'$desc' => t('Set your current mood and tell your friends'),
'$verbs' => $shortlist,
'$parent' => $parent,
'$submit' => t('Submit'),
));
return $o;
}

View file

@ -577,8 +577,13 @@ function network_content(&$a, $update = 0) {
$a->set_pager_total($r[0]['total']); $a->set_pager_total($r[0]['total']);
} }
} }
$itemspage_network = get_pconfig(local_user(),'system','itemspage_network'); $itemspage_network = get_pconfig(local_user(),'system','itemspage_network');
$a->set_pager_itemspage(((intval($itemspage_network)) ? $itemspage_network : 40)); $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40);
if(($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network))
$itemspage_network = $a->force_max_items;
$a->set_pager_itemspage($itemspage_network);
$pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
} }

View file

@ -3,7 +3,7 @@
function newmember_content(&$a) { function newmember_content(&$a) {
$o = '<h3>' . t('Welcome to Friendica') . '</h3>'; $o = '<h1>' . t('Welcome to Friendica') . '</h1>';
$o .= '<h3>' . t('New Member Checklist') . '</h3>'; $o .= '<h3>' . t('New Member Checklist') . '</h3>';
@ -11,39 +11,77 @@ function newmember_content(&$a) {
$o .= t('We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page. A link to this page will be visible from your home page for two weeks after your initial registration and then will quietly disappear.'); $o .= t('We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page. A link to this page will be visible from your home page for two weeks after your initial registration and then will quietly disappear.');
$o .= '<h4>' . t('Getting Started') . '</h4>';
$o .= '<ul>'; $o .= '<ul>';
$o .= '<li>' . '<a target="newmember" href="help/guide">' . t('On your <em>Quick Start</em> page - find a brief introduction to your profile and network tabs, connect to Facebook, make some new connections, and find some groups to join.') . '</a></li>' . EOL; $o .= '<li> ' . '<a target="newmember" href="help/guide">' . t('Friendica Walk-Through') . '</a><br />' . t('On your <em>Quick Start</em> page - find a brief introduction to your profile and network tabs, make some new connections, and find some groups to join.') . '</li>' . EOL;
$o .= '<li>' . '<a target="newmember" href="settings">' . t('On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web.') . '</a></li>' . EOL; $o .= '</ul>';
$o .= '<li>' . '<a target="newmember" href="settings">' . t('Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you.') . '</a></li>' . EOL; $o .= '<h4>' . t('Settings') . '</h4>';
$o .= '<li>' . '<a target="newmember" href="profile_photo">' . t('Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not.') . '</a></li>' . EOL; $o .= '<ul>';
$o .= '<li>' . '<a target="newmember" href="settings">' . t('Go to Your Settings') . '</a><br />' . t('On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web.') . '</li>' . EOL;
$o .= '<li>' . t('Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you.') . '</li>' . EOL;
$o .= '</ul>';
$o .= '<h4>' . t('Profile') . '</h4>';
$o .= '<ul>';
$o .= '<li>' . '<a target="newmember" href="profile_photo">' . t('Upload Profile Photo') . '</a><br />' . t('Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not.') . '</li>' . EOL;
$o .= '<li>' . '<a target="newmember" href="profiles">' . t('Edit Your Profile') . '</a><br />' . t('Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors.') . '</li>' . EOL;
$o .= '<li>' . '<a target="newmember" href="profiles">' . t('Profile Keywords') . '</a><br />' . t('Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships.') . '</li>' . EOL;
$o .= '</ul>';
$o .= '<h4>' . t('Connecting') . '</h4>';
$o .= '<ul>';
if(in_array('facebook', $a->plugins)) if(in_array('facebook', $a->plugins))
$o .= '<li>' . '<a target="newmember" href="facebook">' . t("Authorise the Facebook Connector if you currently have a Facebook account and we will \x28optionally\x29 import all your Facebook friends and conversations.") . '</a></li>' . EOL; $o .= '<li>' . '<a target="newmember" href="facebook">' . t('Facebook') . '</a><br />' . t("Authorise the Facebook Connector if you currently have a Facebook account and we will \x28optionally\x29 import all your Facebook friends and conversations.") . '</li>' . EOL;
else else
$o .= '<li>' . '<a target="newmember" href="help/Installing-Connectors">' . t("<em>If</em> this is your own personal server, installing the Facebook addon may ease your transition to the free social web.") . '</a></li>' . EOL; $o .= '<li>' . '<a target="newmember" href="help/Installing-Connectors">' . t('Facebook') . '</a><br />' . t("<em>If</em> this is your own personal server, installing the Facebook addon may ease your transition to the free social web.") . '</li>' . EOL;
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
if(! $mail_disabled) if(! $mail_disabled)
$o .= '<li>' . '<a target="newmember" href="settings/connectors">' . t('Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX') . '</a></li>' . EOL; $o .= '<li>' . '<a target="newmember" href="settings/connectors">' . t('Importing Emails') . '</a><br />' . t('Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX') . '</li>' . EOL;
$o .= '<li>' . '<a target="newmember" href="profiles">' . t('Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors.') . '</a></li>' . EOL; $o .= '<li>' . '<a target="newmember" href="contacts">' . t('Go to Your Contacts Page') . '</a><br />' . t('Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Add New Contact</em> dialog.') . '</li>' . EOL;
$o .= '<li>' . '<a target="newmember" href="profiles">' . t('Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships.') . '</a></li>' . EOL; $o .= '<li>' . '<a target="newmember" href="directory">' . t("Go to Your Site's Directory") . '</a><br />' . t('The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested.') . '</li>' . EOL;
$o .= '<li>' . '<a target="newmember" href="contacts">' . t('Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Add New Contact</em> dialog.') . '</a></li>' . EOL; $o .= '<li>' . '<a target="newmember" href="contacts">' . t('Finding New People') . '</a><br />' . t("On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours.") . '</li>' . EOL;
$o .= '<li>' . '<a target="newmember" href="directory">' . t('The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested.') . '</a></li>' . EOL; $o .= '</ul>';
$o .= '<li>' . '<a target="newmember" href="contacts">' . t("On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours.") . '</a></li>' . EOL; $o .= '<h4>' . t('Groups') . '</h4>';
$o .= '<li>' . '<a target="newmember" href="contacts">' . t('Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page.') . '</a></li>' . EOL; $o .= '<ul>';
$o .= '<li>' . '<a target="newmember" href="help">' . t('Our <strong>help</strong> pages may be consulted for detail on other program features and resources.') . '</a></li>' . EOL; $o .= '<li>' . '<a target="newmember" href="contacts">' . t('Group Your Contacts') . '</a><br />' . t('Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page.') . '</li>' . EOL;
if(! get_config('system', 'newuser_public')) {
$o .= '<li>' . '<a target="newmember" href="help/Groups-and-Privacy">' . t("Why Aren't My Posts Public?") . '</a><br />' . t("Friendica respects your privacy. By default, your posts will only show up to people you've added as friends. For more information, see the help section from the link above.") . '</li>' . EOL;
}
$o .= '</ul>';
$o .= '<h4>' . t('Getting Help') . '</h4>';
$o .= '<ul>';
$o .= '<li>' . '<a target="newmember" href="help">' . t('Go to the Help Section') . '</a><br />' . t('Our <strong>help</strong> pages may be consulted for detail on other program features and resources.') . '</li>' . EOL;
$o .= '</ul>';
$o .= '</div>'; $o .= '</div>';

View file

@ -129,9 +129,13 @@ function notes_content(&$a,$update = false) {
intval(local_user()), intval(local_user()),
dbesc($parents_str) dbesc($parents_str)
); );
}
$o .= conversation($a,$r,'notes',$update); if(count($r)) {
$items = conv_sort($r,"`commented`");
$o .= conversation($a,$items,'notes',$update);
}
}
$o .= paginate($a); $o .= paginate($a);

View file

@ -1324,6 +1324,7 @@ function photos_content(&$a) {
'$comment' => t('Comment'), '$comment' => t('Comment'),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$preview' => t('Preview'), '$preview' => t('Preview'),
'$sourceapp' => t($a->sourcename),
'$ww' => '' '$ww' => ''
)); ));
} }
@ -1363,6 +1364,7 @@ function photos_content(&$a) {
'$myphoto' => $contact['thumb'], '$myphoto' => $contact['thumb'],
'$comment' => t('Comment'), '$comment' => t('Comment'),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$sourceapp' => t($a->sourcename),
'$ww' => '' '$ww' => ''
)); ));
} }
@ -1394,6 +1396,7 @@ function photos_content(&$a) {
'$myphoto' => $contact['thumb'], '$myphoto' => $contact['thumb'],
'$comment' => t('Comment'), '$comment' => t('Comment'),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$sourceapp' => t($a->sourcename),
'$ww' => '' '$ww' => ''
)); ));
} }

View file

@ -73,7 +73,7 @@ function poke_init(&$a) {
$poster = $a->contact; $poster = $a->contact;
$uri = item_new_uri($a->get_hostname(),$owner_uid); $uri = item_new_uri($a->get_hostname(),$uid);
$arr = array(); $arr = array();

View file

@ -1,9 +1,10 @@
<?php <?php
function profile_init(&$a) {
require_once('include/contact_widgets.php'); require_once('include/contact_widgets.php');
function profile_init(&$a) {
if(! x($a->page,'aside')) if(! x($a->page,'aside'))
$a->page['aside'] = ''; $a->page['aside'] = '';
@ -242,7 +243,13 @@ function profile_content(&$a, $update = 0) {
$a->set_pager_total($r[0]['total']); $a->set_pager_total($r[0]['total']);
} }
} }
$a->set_pager_itemspage(40);
$itemspage_network = get_pconfig(local_user(),'system','itemspage_network');
$itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40);
if(($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network))
$itemspage_network = $a->force_max_items;
$a->set_pager_itemspage($itemspage_network);
$pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));

View file

@ -48,10 +48,15 @@ function profiles_post(&$a) {
$name = notags(trim($_POST['name'])); $name = notags(trim($_POST['name']));
if(! strlen($name)) {
$name = '[No Name]';
}
if($orig[0]['name'] != $name) if($orig[0]['name'] != $name)
$namechanged = true; $namechanged = true;
$pdesc = notags(trim($_POST['pdesc'])); $pdesc = notags(trim($_POST['pdesc']));
$gender = notags(trim($_POST['gender'])); $gender = notags(trim($_POST['gender']));
$address = notags(trim($_POST['address'])); $address = notags(trim($_POST['address']));

View file

@ -755,7 +755,7 @@ function settings_content(&$a) {
'$theme' => array('theme', t('Display Theme:'), $theme_selected, '', $themes), '$theme' => array('theme', t('Display Theme:'), $theme_selected, '', $themes),
'$ajaxint' => array('browser_update', t("Update browser every xx seconds"), $browser_update, t('Minimum of 10 seconds, no maximum')), '$ajaxint' => array('browser_update', t("Update browser every xx seconds"), $browser_update, t('Minimum of 10 seconds, no maximum')),
'$itemspage_network' => array('itemspage_network', t("Number of items to display on the network page:"), $itemspage_network, t('Maximum of 100 items')), '$itemspage_network' => array('itemspage_network', t("Number of items to display per page:"), $itemspage_network, t('Maximum of 100 items')),
'$nosmile' => array('nosmile', t("Don't show emoticons"), $nosmile, ''), '$nosmile' => array('nosmile', t("Don't show emoticons"), $nosmile, ''),
'$theme_config' => $theme_config, '$theme_config' => $theme_config,

File diff suppressed because it is too large Load diff

View file

@ -6,6 +6,7 @@
autoDimensions: false, autoDimensions: false,
onStart: function(){ onStart: function(){
var theme = $("#id_theme :selected").val(); var theme = $("#id_theme :selected").val();
var theme_mobile = $("#id_theme_mobile :selected").val();
$("#cnftheme").attr('href',"$baseurl/admin/themes/"+theme); $("#cnftheme").attr('href',"$baseurl/admin/themes/"+theme);
}, },
onComplete: function(){ onComplete: function(){
@ -44,6 +45,7 @@
{{ inc field_textarea.tpl with $field=$banner }}{{ endinc }} {{ inc field_textarea.tpl with $field=$banner }}{{ endinc }}
{{ inc field_select.tpl with $field=$language }}{{ endinc }} {{ inc field_select.tpl with $field=$language }}{{ endinc }}
{{ inc field_select.tpl with $field=$theme }}{{ 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 }} {{ inc field_select.tpl with $field=$ssl_policy }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
@ -60,6 +62,8 @@
<h3>$upload</h3> <h3>$upload</h3>
{{ inc field_input.tpl with $field=$maximagesize }}{{ endinc }} {{ 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> <h3>$corporate</h3>
{{ inc field_input.tpl with $field=$allowed_sites }}{{ endinc }} {{ inc field_input.tpl with $field=$allowed_sites }}{{ endinc }}
@ -71,6 +75,8 @@
{{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }}
{{ inc field_input.tpl with $field=$global_directory }}{{ 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_public }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>

View file

@ -3,7 +3,7 @@
<div id="birthday-wrapper" style="display: none;" ><div id="birthday-title">$event_title</div> <div id="birthday-wrapper" style="display: none;" ><div id="birthday-title">$event_title</div>
<div id="birthday-title-end"></div> <div id="birthday-title-end"></div>
{{ for $events as $event }} {{ for $events as $event }}
<div class="birthday-list" id="birthday-$event.id"></a> <a href="$event.link">$event.title</a> $event.date </div> <div class="birthday-list" id="birthday-$event.id"> <a href="$event.link">$event.title</a> $event.date </div>
{{ endfor }} {{ endfor }}
</div> </div>
{{ endif }} {{ endif }}

View file

@ -1,5 +1,10 @@
<div class="comment-wwedit-wrapper" id="comment-edit-wrapper-$id" style="display: block;"> <div class="comment-wwedit-wrapper" id="comment-edit-wrapper-$id" style="display: block;">
<form class="comment-edit-form" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;"> {{ if $threaded }}
<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;">
{{ else }}
<form class="comment-edit-form" style="display: block;" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;">
{{ endif }}
<input type="hidden" name="type" value="$type" /> <input type="hidden" name="type" value="$type" />
<input type="hidden" name="profile_uid" value="$profile_uid" /> <input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" /> <input type="hidden" name="parent" value="$parent" />

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
<div id="event-wrapper" style="display: none;" ><div id="event-title">$event_title</div> <div id="event-wrapper" style="display: none;" ><div id="event-title">$event_title</div>
<div id="event-title-end"></div> <div id="event-title-end"></div>
{{ for $events as $event }} {{ for $events as $event }}
<div class="event-list" id="event-$event.id"></a> <a href="events/$event.link">$event.title</a> $event.date </div> <div class="event-list" id="event-$event.id"> <a href="events/$event.link">$event.title</a> $event.date </div>
{{ endfor }} {{ endfor }}
</div> </div>
{{ endif }} {{ endif }}

View file

@ -39,7 +39,9 @@
$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty"); $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
$("#mod-cmnt-wrap-" + id).show(); $("#mod-cmnt-wrap-" + id).show();
openMenu("comment-edit-submit-wrapper-" + id); openMenu("comment-edit-submit-wrapper-" + id);
return true;
} }
return false;
} }
function commentClose(obj,id) { function commentClose(obj,id) {
if(obj.value == '') { if(obj.value == '') {
@ -48,7 +50,9 @@
$("#comment-edit-text-" + id).addClass("comment-edit-text-empty"); $("#comment-edit-text-" + id).addClass("comment-edit-text-empty");
$("#mod-cmnt-wrap-" + id).hide(); $("#mod-cmnt-wrap-" + id).hide();
closeMenu("comment-edit-submit-wrapper-" + id); closeMenu("comment-edit-submit-wrapper-" + id);
return true;
} }
return false;
} }
@ -96,6 +100,15 @@
} }
} }
function showHideCommentBox(id) {
if( $('#comment-edit-form-' + id).is(':visible')) {
$('#comment-edit-form-' + id).hide();
}
else {
$('#comment-edit-form-' + id).show();
}
}
</script> </script>

20
view/mood_content.tpl Normal file
View file

@ -0,0 +1,20 @@
<h3>$title</h3>
<div id="mood-desc">$desc</div>
<form action="mood" method="get">
<br />
<br />
<input id="mood-parent" type="hidden" value="$parent" name="parent" />
<select name="verb" id="mood-verb-select" >
{{ for $verbs as $v }}
<option value="$v.0">$v.1</option>
{{ endfor }}
</select>
<br />
<br />
<input type="submit" name="submit" value="$submit" />
</form>

View file

@ -23,7 +23,7 @@
</div> </div>
<div class="wall-item-author"> <div class="wall-item-author">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id" >$item.name</span></a> <a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id" >$item.name</span></a>
<div class="wall-item-ago" id="wall-item-ago-$item.id">$item.ago</div> <div class="wall-item-ago" id="wall-item-ago-$item.id" title="$item.localtime">$item.ago</div>
</div> </div>
<div class="wall-item-content" id="wall-item-content-$item.id" > <div class="wall-item-content" id="wall-item-content-$item.id" >

View file

@ -49,7 +49,7 @@ background: #444;
color: #99CCFF; color: #99CCFF;
} }
.wall-item-photo-menu li a { .wall-item-photo-menu li a, .contact-photo-menu {
color: #CCCCCC; background-color: #333333; color: #CCCCCC; background-color: #333333;
} }

View file

@ -28,7 +28,8 @@ background: #444;
} }
.wall-item-tools { background-color: #444444; background-image: none;} .wall-item-tools { background-color: #444444; background-image: none;}
.comment-wwedit-wrapper{ background-color: #333333; } .comment-wwedit-wrapper{ background-color: #444444; }
.toplevel_item > .wall-item-comment-wrapper > .comment-wwedit-wrapper{ background-color: #333333; }
.comment-edit-preview{ color: #000000; } .comment-edit-preview{ color: #000000; }
.wall-item-content-wrapper.comment { background-color: #444444; border: 0px;} .wall-item-content-wrapper.comment { background-color: #444444; border: 0px;}
.photo-top-album-name{ background-color: #333333; } .photo-top-album-name{ background-color: #333333; }
@ -49,7 +50,7 @@ background: #444;
color: #99CCFF; color: #99CCFF;
} }
.wall-item-photo-menu li a { .wall-item-photo-menu li a, .contact-photo-menu {
color: #CCCCCC; background-color: #333333; color: #CCCCCC; background-color: #333333;
} }

View file

@ -39,6 +39,7 @@
{{ inc field_checkbox.tpl with $field=$ostatus_disabled }}{{ 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=$diaspora_enabled }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$thread_allow }}{{ endinc }}
{{ inc field_input.tpl with $field=$global_directory }}{{ endinc }} {{ inc field_input.tpl with $field=$global_directory }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>

View file

@ -0,0 +1,125 @@
{{if $item.comment_firstcollapsed}}
<div class="hide-comments-outer">
<span id="hide-comments-total-$item.id" class="hide-comments-total">$item.num_comments</span> <span id="hide-comments-$item.id" class="hide-comments fakelink" onclick="showHideComments($item.id);">$item.hide_text</span>
</div>
<div id="collapsed-comments-$item.id" class="collapsed-comments" style="display: none;">
{{endif}}
<div id="tread-wrapper-$item.id" class="tread-wrapper $item.toplevel">
{{ if $item.indent }}{{ else }}
<div class="wall-item-decor">
<img id="like-rotator-$item.id" class="like-rotator" src="images/rotator.gif" alt="$item.wait" title="$item.wait" style="display: none;" />
</div>
{{ endif }}
<div class="wall-item-container $item.indent">
<div class="wall-item-item">
<div class="wall-item-info">
<div class="contact-photo-wrapper"
onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')"
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="contact-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="contact-photo$item.sparkle" id="wall-item-photo-$item.id" alt="$item.name" />
</a>
<a href="#" rel="#wall-item-photo-menu-$item.id" class="contact-photo-menu-button icon s16 menu" id="wall-item-photo-menu-button-$item.id">menu</a>
<ul class="contact-menu menu-popup" id="wall-item-photo-menu-$item.id">
$item.item_photo_menu
</ul>
</div>
</div>
<div class="wall-item-actions-author">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle">$item.name</span></a>
<span class="wall-item-ago">-
{{ if $item.plink }}<a class="link$item.sparkle" title="$item.plink.title" href="$item.plink.href" style="color: #999">$item.ago</a>{{ else }} $item.ago {{ endif }}
{{ if $item.lock }} - <span class="fakelink" style="color: #999" onclick="lockview(event,$item.id);">$item.lock</span> {{ endif }}
</span>
</div>
<div class="wall-item-content">
{{ if $item.title }}<h2><a href="$item.plink.href">$item.title</a></h2>{{ endif }}
$item.body
</div>
</div>
<div class="wall-item-bottom">
<div class="wall-item-links">
</div>
<div class="wall-item-tags">
{{ for $item.tags as $tag }}
<span class='tag'>$tag</span>
{{ endfor }}
</div>
</div>
<div class="wall-item-bottom">
<div class="">
</div>
<div class="wall-item-actions">
<div class="wall-item-actions-social">
{{ if $item.vote }}
<a href="#" id="like-$item.id" class="icon like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false">$item.vote.like.1</a>
<a href="#" id="dislike-$item.id" class="icon dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ endif }}
{{ if $item.vote.share }}
<a href="#" id="share-$item.id" class="icon recycle" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>
{{ endif }}
{{ if $item.star }}
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item icon $item.isstarred" title="$item.star.toggle">
<img src="images/star_dummy.png" class="icon star" alt="$item.star.do" /> </a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item icon tagged" title="$item.star.tagger"></a>
{{ endif }}
{{ if $item.filer }}
<a href="#" id="filer-$item.id" onclick="itemFiler($item.id); return false;" class="filer-item icon file-as" title="$item.star.filer"></a>
{{ endif }}
{{ if $item.plink }}<a class="icon link" title="$item.plink.title" href="$item.plink.href">$item.plink.title</a>{{ endif }}
</div>
<div class="wall-item-actions-tools">
{{ if $item.drop.dropping }}
<input type="checkbox" title="$item.drop.select" name="itemselected[]" class="item-select" value="$item.id" />
<a href="item/drop/$item.id" onclick="return confirmDelete();" class="icon drop" title="$item.drop.delete">$item.drop.delete</a>
{{ endif }}
{{ if $item.edpost }}
<a class="icon pencil" href="$item.edpost.0" title="$item.edpost.1"></a>
{{ endif }}
</div>
<div class="wall-item-location">$item.location&nbsp;</div>
</div>
</div>
<div class="wall-item-bottom">
<div class="wall-item-links"></div>
<div class="wall-item-like" id="wall-item-like-$item.id">$item.like</div>
<div class="wall-item-dislike" id="wall-item-dislike-$item.id">$item.dislike</div>
</div>
</div>
{{ if $item.threaded }}
{{ if $item.comment }}
<div class="wall-item-comment-wrapper $item.indent" >
$item.comment
</div>
{{ endif }}
{{ endif }}
{{ if $item.flatten }}
<div class="wall-item-comment-wrapper" >
$item.comment
</div>
{{ endif }}
{{ for $item.children as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
</div>
{{if $item.comment_lastcollapsed}}</div>{{endif}}

View file

@ -0,0 +1,125 @@
{{if $item.comment_firstcollapsed}}
<div class="hide-comments-outer">
<span id="hide-comments-total-$item.id" class="hide-comments-total">$item.num_comments</span> <span id="hide-comments-$item.id" class="hide-comments fakelink" onclick="showHideComments($item.id);">$item.hide_text</span>
</div>
<div id="collapsed-comments-$item.id" class="collapsed-comments" style="display: none;">
{{endif}}
<div id="tread-wrapper-$item.id" class="tread-wrapper $item.toplevel">
{{ if $item.indent }}{{ else }}
<div class="wall-item-decor">
<img id="like-rotator-$item.id" class="like-rotator" src="images/rotator.gif" alt="$item.wait" title="$item.wait" style="display: none;" />
</div>
{{ endif }}
<div class="wall-item-container $item.indent">
<div class="wall-item-item">
<div class="wall-item-info">
<div class="contact-photo-wrapper"
onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')"
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="contact-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="contact-photo$item.sparkle" id="wall-item-photo-$item.id" alt="$item.name" />
</a>
<a href="#" rel="#wall-item-photo-menu-$item.id" class="contact-photo-menu-button icon s16 menu" id="wall-item-photo-menu-button-$item.id">menu</a>
<ul class="contact-menu menu-popup" id="wall-item-photo-menu-$item.id">
$item.item_photo_menu
</ul>
</div>
</div>
<div class="wall-item-actions-author">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle">$item.name</span></a>
<span class="wall-item-ago">-
{{ if $item.plink }}<a class="link$item.sparkle" title="$item.plink.title" href="$item.plink.href" style="color: #999">$item.ago</a>{{ else }} $item.ago {{ endif }}
{{ if $item.lock }} - <span class="fakelink" style="color: #999" onclick="lockview(event,$item.id);">$item.lock</span> {{ endif }}
</span>
</div>
<div class="wall-item-content">
{{ if $item.title }}<h2><a href="$item.plink.href">$item.title</a></h2>{{ endif }}
$item.body
</div>
</div>
<div class="wall-item-bottom">
<div class="wall-item-links">
</div>
<div class="wall-item-tags">
{{ for $item.tags as $tag }}
<span class='tag'>$tag</span>
{{ endfor }}
</div>
</div>
<div class="wall-item-bottom">
<div class="">
</div>
<div class="wall-item-actions">
<div class="wall-item-actions-social">
{{ if $item.vote }}
<a href="#" id="like-$item.id" class="icon like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false">$item.vote.like.1</a>
<a href="#" id="dislike-$item.id" class="icon dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ endif }}
{{ if $item.vote.share }}
<a href="#" id="share-$item.id" class="icon recycle" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>
{{ endif }}
{{ if $item.star }}
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item icon $item.isstarred" title="$item.star.toggle">
<img src="images/star_dummy.png" class="icon star" alt="$item.star.do" /> </a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item icon tagged" title="$item.star.tagger"></a>
{{ endif }}
{{ if $item.filer }}
<a href="#" id="filer-$item.id" onclick="itemFiler($item.id); return false;" class="filer-item icon file-as" title="$item.star.filer"></a>
{{ endif }}
{{ if $item.plink }}<a class="icon link" title="$item.plink.title" href="$item.plink.href">$item.plink.title</a>{{ endif }}
</div>
<div class="wall-item-actions-tools">
{{ if $item.drop.dropping }}
<input type="checkbox" title="$item.drop.select" name="itemselected[]" class="item-select" value="$item.id" />
<a href="item/drop/$item.id" onclick="return confirmDelete();" class="icon drop" title="$item.drop.delete">$item.drop.delete</a>
{{ endif }}
{{ if $item.edpost }}
<a class="icon pencil" href="$item.edpost.0" title="$item.edpost.1"></a>
{{ endif }}
</div>
<div class="wall-item-location">$item.location&nbsp;</div>
</div>
</div>
<div class="wall-item-bottom">
<div class="wall-item-links"></div>
<div class="wall-item-like" id="wall-item-like-$item.id">$item.like</div>
<div class="wall-item-dislike" id="wall-item-dislike-$item.id">$item.dislike</div>
</div>
</div>
{{ if $item.threaded }}
{{ if $item.comment }}
<div class="wall-item-comment-wrapper $item.indent" >
$item.comment
</div>
{{ endif }}
{{ endif }}
{{ if $item.flatten }}
<div class="wall-item-comment-wrapper" >
$item.comment
</div>
{{ endif }}
{{ for $item.children as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
</div>
{{if $item.comment_lastcollapsed}}</div>{{endif}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -43,6 +43,58 @@
is_visible="true" is_visible="true"
teeth="10" teeth="10"
phi="10" /> phi="10" />
<inkscape:path-effect
effect="gears"
id="path-effect4050-9"
is_visible="true"
teeth="10"
phi="10" />
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-8">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-4" />
</filter>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-7">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-9" />
</filter>
<inkscape:path-effect
effect="gears"
id="path-effect4050-9-1"
is_visible="true"
teeth="10"
phi="10" />
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-8-9">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-4-4" />
</filter>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-7-3">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-9-2" />
</filter>
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -51,26 +103,28 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0" inkscape:pageopacity="0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1.9403009" inkscape:zoom="2.7164213"
inkscape:cx="127.81563" inkscape:cx="79.895323"
inkscape:cy="128.63003" inkscape:cy="76.322411"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
showguides="true" showguides="true"
inkscape:guide-bbox="true" inkscape:guide-bbox="true"
inkscape:snap-global="false" inkscape:snap-global="false"
inkscape:window-width="1065" inkscape:window-width="1148"
inkscape:window-height="742" inkscape:window-height="452"
inkscape:window-x="40" inkscape:window-x="0"
inkscape:window-y="50" inkscape:window-y="24"
inkscape:window-maximized="0" inkscape:window-maximized="0"
width="0px" width="0px"
height="0px" height="0px"
fit-margin-top="0" fit-margin-top="0"
fit-margin-left="0" fit-margin-left="0"
fit-margin-right="0" fit-margin-right="0"
fit-margin-bottom="0"> fit-margin-bottom="0"
inkscape:showpageshadow="false"
showborder="true">
<inkscape:grid <inkscape:grid
type="xygrid" type="xygrid"
id="grid4016" id="grid4016"
@ -107,7 +161,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title /> <dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -117,7 +171,7 @@
id="layer1" id="layer1"
transform="translate(0,-852.36218)"> transform="translate(0,-852.36218)">
<rect <rect
transform="matrix(1,0,0,0.84848485,44,217.14578)" transform="matrix(2.5239206,0,0,0.84848485,21.386213,217.14578)"
inkscape:export-ydpi="90" inkscape:export-ydpi="90"
inkscape:export-xdpi="90" inkscape:export-xdpi="90"
inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons.png" inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons.png"
@ -2109,5 +2163,61 @@
d="m -0.00914477,2.3011918 2.83893857,-2.12898488 11.8211932,0 0,14.04031008 L 13.73679,14.984131 13.640962,1.0093271 3.4856425,0.91349949 1.1272469,2.7572384 12,2.7572384 12,16 -0.00914477,16 z M 8.2958276,12.045759 c -1.8631354,-1.086398 0.045759,-2.6807932 0.045759,-3.6707932 0,-0.99 -0.6423808,-2.2112618 -2.2457592,-2.1833105 C 4.4924492,6.2196066 3.8500685,7.0875 3.8500685,8.4166667 c 0,1.3291666 2.1768916,1.6857063 -0.1958961,3.6876733 z" d="m -0.00914477,2.3011918 2.83893857,-2.12898488 11.8211932,0 0,14.04031008 L 13.73679,14.984131 13.640962,1.0093271 3.4856425,0.91349949 1.1272469,2.7572384 12,2.7572384 12,16 -0.00914477,16 z M 8.2958276,12.045759 c -1.8631354,-1.086398 0.045759,-2.6807932 0.045759,-3.6707932 0,-0.99 -0.6423808,-2.2112618 -2.2457592,-2.1833105 C 4.4924492,6.2196066 3.8500685,7.0875 3.8500685,8.4166667 c 0,1.3291666 2.1768916,1.6857063 -0.1958961,3.6876733 z"
style="fill:#1a1a1a" /> style="fill:#1a1a1a" />
</g> </g>
<g
id="g4021">
<rect
ry="6"
rx="6"
y="18.790752"
x="470.35715"
height="44.285713"
width="44.285713"
id="rect196-0"
style="fill:#1a1a1a;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter4064-7)"
transform="matrix(0.43114968,0,0,0.43114968,-113.62924,933.71148)" />
<path
transform="matrix(0.26322611,0,0,0.26322611,-27.639493,937.40175)"
inkscape:original-d="M 484.55417,49.762303 492.5,40.933609 504.27158,48.879434"
inkscape:path-effect="#path-effect4050-9"
inkscape:connector-curvature="0"
id="path4072-5"
d="m 484.90604,52.679071 c 0,0 -0.72327,1.028211 -2.88202,1.697409 -0.63474,-0.494653 -1.23439,-1.034334 -1.79294,-1.613646 0.43889,-2.217071 1.3855,-3.044283 1.3855,-3.044283 l 2.04237,-1.648571 c -0.73879,-0.915258 -1.3342,-1.946011 -1.75793,-3.043257 l -2.44847,0.945549 c 0,0 -1.18951,0.40671 -3.32932,-0.320779 -0.22277,-0.773276 -0.39067,-1.56235 -0.50204,-2.359331 1.65823,-1.535673 2.91028,-1.648499 2.91028,-1.648499 l 2.62132,-0.133248 c -0.0597,-1.174706 0.0645,-2.358577 0.36658,-3.495332 l -2.53663,-0.674208 c 0,0 -1.20139,-0.37014 -2.50493,-2.216441 0.2743,-0.756533 0.60227,-1.4936 0.98062,-2.20383 2.24419,-0.267701 3.32343,0.376954 3.32343,0.376954 l 2.19901,1.432971 c 0.64217,-0.985455 1.43848,-1.870246 2.35108,-2.612309 l -1.65589,-2.03644 c 0,0 -0.75438,-1.005609 -0.72373,-3.265497 0.66659,-0.45082 1.36515,-0.854347 2.08871,-1.206542 1.97294,1.102524 2.46715,2.258424 2.46715,2.258424 l 0.93675,2.451844 c 1.09876,-0.419794 2.26306,-0.667544 3.43754,-0.731472 l -0.14265,-2.620822 c 0,0 -0.0192,-1.25697 1.3339,-3.067245 0.80426,0.02709 1.6066,0.111239 2.39899,0.251604 0.94809,2.051624 0.66849,3.277254 0.66849,3.277254 l -0.6833,2.534196 c 1.13566,0.306213 2.22322,0.790136 3.21097,1.428761 l 1.42508,-2.204138 c 0,0 0.72327,-1.028211 2.88202,-1.697409 0.63474,0.494653 1.23439,1.034334 1.79294,1.613646 -0.43889,2.217071 -1.3855,3.044283 -1.3855,3.044283 l -2.04237,1.648571 c 0.73879,0.915258 1.3342,1.946011 1.75793,3.043257 l 2.44847,-0.945549 c 0,0 1.18951,-0.40671 3.32932,0.320779 0.22277,0.773276 0.39067,1.56235 0.50204,2.359331 -1.65823,1.535673 -2.91028,1.648499 -2.91028,1.648499 l -2.62132,0.133248 c 0.0597,1.174706 -0.0645,2.358577 -0.36658,3.495332 l 2.53663,0.674208 c 0,0 1.20139,0.37014 2.50493,2.216441 -0.2743,0.756533 -0.60227,1.4936 -0.98062,2.20383 -2.24419,0.267701 -3.32343,-0.376954 -3.32343,-0.376954 l -2.19901,-1.432971 c -0.64217,0.985455 -1.43848,1.870246 -2.35108,2.612309 l 1.65589,2.03644 c 0,0 0.75438,1.005609 0.72373,3.265497 -0.66659,0.45082 -1.36515,0.854347 -2.08871,1.206542 -1.97294,-1.102524 -2.46715,-2.258424 -2.46715,-2.258424 l -0.93675,-2.451844 c -1.09876,0.419794 -2.26306,0.667544 -3.43754,0.731472 l 0.14265,2.620822 c 0,0 0.0192,1.25697 -1.3339,3.067245 -0.80426,-0.02709 -1.6066,-0.111239 -2.39899,-0.251604 -0.94809,-2.051624 -0.66849,-3.277254 -0.66849,-3.277254 l 0.6833,-2.534196 c -1.13566,-0.306213 -2.22322,-0.790136 -3.21097,-1.428761 l -1.42508,2.204138"
style="fill:none;stroke:#d3d7cf;stroke-width:1.66475451;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter4064-8)" />
<path
style="fill:none;stroke:#f2f2f2;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 4.1190936,170.87651 1.316683,1.26576 1.7540206,0.003 5.5819788,-5.57043 3.523532,0.006 2.853557,-2.81689 0.0014,-1.68321 -1.169094,-1.16909 -2.365502,2.3822 -2.63185,-0.005 0.09078,-2.55314 2.365531,-2.36552 -1.277858,-1.27786 -1.648714,0.0359 -2.8505569,2.8535 0.00598,3.45613 -5.5530909,5.58201 z"
id="path4208-6"
inkscape:connector-curvature="0"
transform="matrix(0.55525134,-9.5997878e-4,-9.5997878e-4,0.55525134,88.473928,863.40819)"
sodipodi:nodetypes="cccccccccccccccccc" />
</g>
<g
id="g4016">
<rect
ry="6"
rx="6"
y="18.790752"
x="470.35715"
height="44.285713"
width="44.285713"
id="rect196-0-0"
style="fill:#2e2f2e;stroke:#d3d7cf;stroke-width:2.05356860000000019;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter4064-7-3);fill-opacity:1"
transform="matrix(0.43114968,0,0,0.43114968,-91.3641,933.9484)" />
<path
transform="matrix(0.26322611,0,0,0.26322611,-5.37436,937.63865)"
inkscape:original-d="M 484.55417,49.762303 492.5,40.933609 504.27158,48.879434"
inkscape:path-effect="#path-effect4050-9-1"
inkscape:connector-curvature="0"
id="path4072-5-1"
d="m 484.90604,52.679071 c 0,0 -0.72327,1.028211 -2.88202,1.697409 -0.63474,-0.494653 -1.23439,-1.034334 -1.79294,-1.613646 0.43889,-2.217071 1.3855,-3.044283 1.3855,-3.044283 l 2.04237,-1.648571 c -0.73879,-0.915258 -1.3342,-1.946011 -1.75793,-3.043257 l -2.44847,0.945549 c 0,0 -1.18951,0.40671 -3.32932,-0.320779 -0.22277,-0.773276 -0.39067,-1.56235 -0.50204,-2.359331 1.65823,-1.535673 2.91028,-1.648499 2.91028,-1.648499 l 2.62132,-0.133248 c -0.0597,-1.174706 0.0645,-2.358577 0.36658,-3.495332 l -2.53663,-0.674208 c 0,0 -1.20139,-0.37014 -2.50493,-2.216441 0.2743,-0.756533 0.60227,-1.4936 0.98062,-2.20383 2.24419,-0.267701 3.32343,0.376954 3.32343,0.376954 l 2.19901,1.432971 c 0.64217,-0.985455 1.43848,-1.870246 2.35108,-2.612309 l -1.65589,-2.03644 c 0,0 -0.75438,-1.005609 -0.72373,-3.265497 0.66659,-0.45082 1.36515,-0.854347 2.08871,-1.206542 1.97294,1.102524 2.46715,2.258424 2.46715,2.258424 l 0.93675,2.451844 c 1.09876,-0.419794 2.26306,-0.667544 3.43754,-0.731472 l -0.14265,-2.620822 c 0,0 -0.0192,-1.25697 1.3339,-3.067245 0.80426,0.02709 1.6066,0.111239 2.39899,0.251604 0.94809,2.051624 0.66849,3.277254 0.66849,3.277254 l -0.6833,2.534196 c 1.13566,0.306213 2.22322,0.790136 3.21097,1.428761 l 1.42508,-2.204138 c 0,0 0.72327,-1.028211 2.88202,-1.697409 0.63474,0.494653 1.23439,1.034334 1.79294,1.613646 -0.43889,2.217071 -1.3855,3.044283 -1.3855,3.044283 l -2.04237,1.648571 c 0.73879,0.915258 1.3342,1.946011 1.75793,3.043257 l 2.44847,-0.945549 c 0,0 1.18951,-0.40671 3.32932,0.320779 0.22277,0.773276 0.39067,1.56235 0.50204,2.359331 -1.65823,1.535673 -2.91028,1.648499 -2.91028,1.648499 l -2.62132,0.133248 c 0.0597,1.174706 -0.0645,2.358577 -0.36658,3.495332 l 2.53663,0.674208 c 0,0 1.20139,0.37014 2.50493,2.216441 -0.2743,0.756533 -0.60227,1.4936 -0.98062,2.20383 -2.24419,0.267701 -3.32343,-0.376954 -3.32343,-0.376954 l -2.19901,-1.432971 c -0.64217,0.985455 -1.43848,1.870246 -2.35108,2.612309 l 1.65589,2.03644 c 0,0 0.75438,1.005609 0.72373,3.265497 -0.66659,0.45082 -1.36515,0.854347 -2.08871,1.206542 -1.97294,-1.102524 -2.46715,-2.258424 -2.46715,-2.258424 l -0.93675,-2.451844 c -1.09876,0.419794 -2.26306,0.667544 -3.43754,0.731472 l 0.14265,2.620822 c 0,0 0.0192,1.25697 -1.3339,3.067245 -0.80426,-0.02709 -1.6066,-0.111239 -2.39899,-0.251604 -0.94809,-2.051624 -0.66849,-3.277254 -0.66849,-3.277254 l 0.6833,-2.534196 c -1.13566,-0.306213 -2.22322,-0.790136 -3.21097,-1.428761 l -1.42508,2.204138"
style="fill:none;stroke:#d3d7cf;stroke-width:1.66475451;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter4064-8-9)" />
<path
style="fill:none;stroke:#f2f2f2;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 4.1190936,170.87651 1.316683,1.26576 1.7540206,0.003 5.5819788,-5.57043 3.523532,0.006 2.853557,-2.81689 0.0014,-1.68321 -1.169094,-1.16909 -2.365502,2.3822 -2.63185,-0.005 0.09078,-2.55314 2.365531,-2.36552 -1.277858,-1.27786 -1.648714,0.0359 -2.8505569,2.8535 0.00598,3.45613 -5.5530909,5.58201 z"
id="path4208-6-0"
inkscape:connector-curvature="0"
transform="matrix(0.55525134,-9.5997878e-4,-9.5997878e-4,0.55525134,110.73906,863.64511)"
sodipodi:nodetypes="cccccccccccccccccc" />
</g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 129 KiB

View file

@ -90,7 +90,7 @@ nav .nav-link{display:inline-block;width:22px;height:22px;overflow:hidden;margin
#nav-home-link{background-position:-44px -132px;}#nav-home-link:hover{background-position:-66px -132px;} #nav-home-link{background-position:-44px -132px;}#nav-home-link:hover{background-position:-66px -132px;}
#nav-intro-link{background-position:0px -88px;}#nav-intro-link:hover{background-position:-22px -88px;} #nav-intro-link{background-position:0px -88px;}#nav-intro-link:hover{background-position:-22px -88px;}
#nav-login-link,#nav-logout-link{background-position:0 -88px;}#nav-login-link:hover,#nav-logout-link:hover{background-position:-22px -88px;} #nav-login-link,#nav-logout-link{background-position:0 -88px;}#nav-login-link:hover,#nav-logout-link:hover{background-position:-22px -88px;}
#nav-manage-link{background-position:0px -22px;}#nav-manage-link:hover{background-position:-22px -22px;} #nav-manage-link{background-position:-88px -88px;}#nav-manage-link:hover{background-position:-110px -88px;}
#nav-messages-link{background-position:-44px -88px;}#nav-messages-link:hover{background-position:-66px -88px;} #nav-messages-link{background-position:-44px -88px;}#nav-messages-link:hover{background-position:-66px -88px;}
#nav-notify-link,#nav-notifications-linkmenu{background-position:-44px -110px;} #nav-notify-link,#nav-notifications-linkmenu{background-position:-44px -110px;}
#nav-notify-link:hover{background-position:-66px -110px;} #nav-notify-link:hover{background-position:-66px -110px;}

View file

@ -542,9 +542,9 @@ nav .nav-link {
} }
} }
#nav-manage-link { #nav-manage-link {
background-position: 0px -22px; background-position: -88px -88px;
&:hover { &:hover {
background-position: -22px -22px; background-position: -110px -88px;
} }
} }
#nav-messages-link { #nav-messages-link {

View file

@ -2,27 +2,30 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<base href="$baseurl/" /> <base href="$baseurl/" />
<meta name="generator" content="$generator" /> <meta name="generator" content="$generator" />
<link rel="shortcut icon" href="$baseurl/images/friendica-32.png" />
<link rel="search" href="$baseurl/opensearch"
type="application/opensearchdescription+xml" title="Search in Friendica" />
<link rel="stylesheet" href="$baseurl/library/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" /> <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/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" href="$baseurl/library/jgrowl/jquery.jgrowl.css" type="text/css" media="screen" />
<link rel="stylesheet" type="text/css" href="$stylesheet" media="all" /> <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" />
<!--[if IE]> <!--[if IE]>
<script type="text/javascript" src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <script type="text/javascript" src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript" src="$baseurl/js/jquery.js"></script> <script type="text/javascript" src="$baseurl/js/jquery.js"></script>
<script type="text/javascript" src="$baseurl/js/acl.js"></script>
<script type="text/javascript" src="$baseurl/js/main.js"></script>
<script type="text/javascript" src="$baseurl/js/jquery.textinputs.js"></script> <script type="text/javascript" src="$baseurl/js/jquery.textinputs.js"></script>
<script type="text/javascript" src="$baseurl/js/fk.autocomplete.js"></script> <script type="text/javascript" src="$baseurl/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/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/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/library/jgrowl/jquery.jgrowl_minimized.js"></script>
<script type="text/javascript" src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script> <script type="text/javascript" src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
<script type="text/javascript" src="$baseurl/js/acl.js"></script>
<script type="text/javascript" src="$baseurl/js/webtoolkit.base64.js"></script> <script type="text/javascript" src="$baseurl/js/webtoolkit.base64.js"></script>
<!-- in dispy-dark --> <script type="text/javascript" src="$baseurl/js/main.js"></script>
<!-- in dispy -->
<script> <script>
var updateInterval = $update_interval; var updateInterval = $update_interval;
var localUser = {{ if $local_user }}$local_user{{ else }}false{{ endif }}; var localUser = {{ if $local_user }}$local_user{{ else }}false{{ endif }};
@ -47,6 +50,7 @@
} }
} }
function commentInsert(obj,id) { function commentInsert(obj,id) {
var tmpStr = $("#comment-edit-text-" + id).val(); var tmpStr = $("#comment-edit-text-" + id).val();
if(tmpStr == '$comment') { if(tmpStr == '$comment') {
@ -90,4 +94,15 @@
$('#hide-comments-' + id).html('$showfewer'); $('#hide-comments-' + id).html('$showfewer');
} }
} }
function showHideCommentBox(id) {
if( $('#comment-edit-form-' + id).is(':visible')) {
$('#comment-edit-form-' + id).hide();
}
else {
$('#comment-edit-form-' + id).show();
}
}
</script> </script>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,8 +1,6 @@
<form id="profile-jot-form" action="$action" method="post"> <form id="profile-jot-form" action="$action" method="post">
<div id="jot"> <div id="jot">
<div id="profile-jot-desc" class="jothidden">&#160;</div> <div id="profile-jot-desc" class="jothidden">&#160;</div>
<input name="title" id="jot-title" type="text" placeholder="$placeholdertitle" value="$title" class="jothidden" style="display:none" />
<div id="character-counter" class="grey jothidden"></div>
<input type="hidden" name="type" value="$ptyp" /> <input type="hidden" name="type" value="$ptyp" />
<input type="hidden" name="profile_uid" value="$profile_uid" /> <input type="hidden" name="profile_uid" value="$profile_uid" />
@ -11,11 +9,13 @@
<input type="hidden" name="coord" id="jot-coord" value="" /> <input type="hidden" name="coord" id="jot-coord" value="" />
<input type="hidden" name="post_id" value="$post_id" /> <input type="hidden" name="post_id" value="$post_id" />
<input type="hidden" name="preview" id="jot-preview" value="0" /> <input type="hidden" name="preview" id="jot-preview" value="0" />
<div id="jot-title-wrap"><input name="title" id="jot-title" type="text" placeholder="$placeholdertitle" value="$title" class="jothidden" style="display:none" /></div>
<div id="character-counter" class="grey jothidden"></div>
<div id="jot-category-wrap"><input name="category" id="jot-category" type="text" placeholder="$placeholdercategory" value="$category" class="jothidden" style="display:none" /></div> <div id="jot-category-wrap"><input name="category" id="jot-category" type="text" placeholder="$placeholdercategory" value="$category" class="jothidden" style="display:none" /></div>
<textarea rows="5" cols="64" class="profile-jot-text" id="profile-jot-text" name="body">{{ if $content }}$content{{ else }}$share{{ endif }} <textarea rows="5" cols="64" class="profile-jot-text" id="profile-jot-text" name="body">{{ if $content }}$content{{ else }}$share{{ endif }}
</textarea> </textarea>
<div id="profile-jot-submit-wrapper" class="jothidden">
<div id="jot-tools" class="jothidden" style="display:none"> <div id="jot-tools" class="jothidden" style="display:none">
<div id="profile-jot-submit-wrapper" class="jothidden"> <div id="profile-jot-submit-wrapper" class="jothidden">
@ -68,6 +68,9 @@
$jotnets $jotnets
</div> </div>
</div> </div>
</div>
<div id="profile-jot-end"></div>
</form> </form>
</div>
{{ if $content }}<script>initEditor();</script>{{ endif }} {{ if $content }}<script>initEditor();</script>{{ endif }}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -14,9 +14,9 @@
height="200" height="200"
id="svg3403" id="svg3403"
version="1.1" version="1.1"
inkscape:version="0.48+devel r" inkscape:version="0.48.3.1 r9886"
sodipodi:docname="icons.svg" sodipodi:docname="icons.svg"
inkscape:export-filename="/var/www3/kisikew.org/portal/pub/fd/view/theme/dispy/icons.png" inkscape:export-filename="/var/www3/kisikew.org/portal/pub/fd/view/theme/dispy/light/icons.png"
inkscape:export-xdpi="90" inkscape:export-xdpi="90"
inkscape:export-ydpi="90"> inkscape:export-ydpi="90">
<defs <defs
@ -43,6 +43,58 @@
is_visible="true" is_visible="true"
teeth="10" teeth="10"
phi="10" /> phi="10" />
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-7-3">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-9-2" />
</filter>
<inkscape:path-effect
effect="gears"
id="path-effect4050-9-1"
is_visible="true"
teeth="10"
phi="10" />
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-8-9">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-4-4" />
</filter>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-7-3-9">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-9-2-0" />
</filter>
<inkscape:path-effect
effect="gears"
id="path-effect4050-9-1-5"
is_visible="true"
teeth="10"
phi="10" />
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4064-8-9-6">
<feBlend
inkscape:collect="always"
mode="lighten"
in2="BackgroundImage"
id="feBlend4066-4-4-7" />
</filter>
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -52,18 +104,18 @@
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1.9403009" inkscape:zoom="1.9403009"
inkscape:cx="64.725266" inkscape:cx="76.608548"
inkscape:cy="108.36719" inkscape:cy="117.37905"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
showguides="true" showguides="true"
inkscape:guide-bbox="true" inkscape:guide-bbox="true"
inkscape:snap-global="false" inkscape:snap-global="false"
inkscape:window-width="1065" inkscape:window-width="1148"
inkscape:window-height="742" inkscape:window-height="792"
inkscape:window-x="40" inkscape:window-x="0"
inkscape:window-y="50" inkscape:window-y="24"
inkscape:window-maximized="0"> inkscape:window-maximized="0">
<inkscape:grid <inkscape:grid
type="xygrid" type="xygrid"
@ -101,7 +153,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title /> <dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -1482,7 +1534,7 @@
id="path4166" /> id="path4166" />
</g> </g>
<rect <rect
transform="matrix(1,0,0,0.84848485,44,217.14578)" transform="matrix(1.9980186,0,0,0.84848485,44,217.14578)"
inkscape:export-ydpi="90" inkscape:export-ydpi="90"
inkscape:export-xdpi="90" inkscape:export-xdpi="90"
inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons.png" inkscape:export-filename="/home/fabio/public_html/f9k-tre/icons.png"
@ -2186,5 +2238,59 @@
d="m -0.00914477,2.3011918 2.83893857,-2.12898488 11.8211932,0 0,14.04031008 L 13.73679,14.984131 13.640962,1.0093271 3.4856425,0.91349949 1.1272469,2.7572384 12,2.7572384 12,16 -0.00914477,16 z M 8.2958276,12.045759 c -1.8631354,-1.086398 0.045759,-2.6807932 0.045759,-3.6707932 0,-0.99 -0.6423808,-2.2112618 -2.2457592,-2.1833105 C 4.4924492,6.2196066 3.8500685,7.0875 3.8500685,8.4166667 c 0,1.3291666 2.1768916,1.6857063 -0.1958961,3.6876733 z" d="m -0.00914477,2.3011918 2.83893857,-2.12898488 11.8211932,0 0,14.04031008 L 13.73679,14.984131 13.640962,1.0093271 3.4856425,0.91349949 1.1272469,2.7572384 12,2.7572384 12,16 -0.00914477,16 z M 8.2958276,12.045759 c -1.8631354,-1.086398 0.045759,-2.6807932 0.045759,-3.6707932 0,-0.99 -0.6423808,-2.2112618 -2.2457592,-2.1833105 C 4.4924492,6.2196066 3.8500685,7.0875 3.8500685,8.4166667 c 0,1.3291666 2.1768916,1.6857063 -0.1958961,3.6876733 z"
style="fill:#1a1a1a" /> style="fill:#1a1a1a" />
</g> </g>
<g
transform="translate(-21.97338,-0.48160397)"
id="g4016">
<rect
ry="6"
rx="6"
y="18.790752"
x="470.35715"
height="44.285713"
width="44.285713"
id="rect196-0-0"
style="fill:#2e2f2e;fill-opacity:1;stroke:#d3d7cf;stroke-width:2.0535686;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter4064-7-3)"
transform="matrix(0.43114968,0,0,0.43114968,-91.3641,933.9484)" />
<path
transform="matrix(0.26322611,0,0,0.26322611,-5.37436,937.63865)"
inkscape:original-d="M 484.55417,49.762303 492.5,40.933609 504.27158,48.879434"
inkscape:path-effect="#path-effect4050-9-1"
inkscape:connector-curvature="0"
id="path4072-5-1"
d="m 484.90604,52.679071 c 0,0 -0.72327,1.028211 -2.88202,1.697409 -0.63474,-0.494653 -1.23439,-1.034334 -1.79294,-1.613646 0.43889,-2.217071 1.3855,-3.044283 1.3855,-3.044283 l 2.04237,-1.648571 c -0.73879,-0.915258 -1.3342,-1.946011 -1.75793,-3.043257 l -2.44847,0.945549 c 0,0 -1.18951,0.40671 -3.32932,-0.320779 -0.22277,-0.773276 -0.39067,-1.56235 -0.50204,-2.359331 1.65823,-1.535673 2.91028,-1.648499 2.91028,-1.648499 l 2.62132,-0.133248 c -0.0597,-1.174706 0.0645,-2.358577 0.36658,-3.495332 l -2.53663,-0.674208 c 0,0 -1.20139,-0.37014 -2.50493,-2.216441 0.2743,-0.756533 0.60227,-1.4936 0.98062,-2.20383 2.24419,-0.267701 3.32343,0.376954 3.32343,0.376954 l 2.19901,1.432971 c 0.64217,-0.985455 1.43848,-1.870246 2.35108,-2.612309 l -1.65589,-2.03644 c 0,0 -0.75438,-1.005609 -0.72373,-3.265497 0.66659,-0.45082 1.36515,-0.854347 2.08871,-1.206542 1.97294,1.102524 2.46715,2.258424 2.46715,2.258424 l 0.93675,2.451844 c 1.09876,-0.419794 2.26306,-0.667544 3.43754,-0.731472 l -0.14265,-2.620822 c 0,0 -0.0192,-1.25697 1.3339,-3.067245 0.80426,0.02709 1.6066,0.111239 2.39899,0.251604 0.94809,2.051624 0.66849,3.277254 0.66849,3.277254 l -0.6833,2.534196 c 1.13566,0.306213 2.22322,0.790136 3.21097,1.428761 l 1.42508,-2.204138 c 0,0 0.72327,-1.028211 2.88202,-1.697409 0.63474,0.494653 1.23439,1.034334 1.79294,1.613646 -0.43889,2.217071 -1.3855,3.044283 -1.3855,3.044283 l -2.04237,1.648571 c 0.73879,0.915258 1.3342,1.946011 1.75793,3.043257 l 2.44847,-0.945549 c 0,0 1.18951,-0.40671 3.32932,0.320779 0.22277,0.773276 0.39067,1.56235 0.50204,2.359331 -1.65823,1.535673 -2.91028,1.648499 -2.91028,1.648499 l -2.62132,0.133248 c 0.0597,1.174706 -0.0645,2.358577 -0.36658,3.495332 l 2.53663,0.674208 c 0,0 1.20139,0.37014 2.50493,2.216441 -0.2743,0.756533 -0.60227,1.4936 -0.98062,2.20383 -2.24419,0.267701 -3.32343,-0.376954 -3.32343,-0.376954 l -2.19901,-1.432971 c -0.64217,0.985455 -1.43848,1.870246 -2.35108,2.612309 l 1.65589,2.03644 c 0,0 0.75438,1.005609 0.72373,3.265497 -0.66659,0.45082 -1.36515,0.854347 -2.08871,1.206542 -1.97294,-1.102524 -2.46715,-2.258424 -2.46715,-2.258424 l -0.93675,-2.451844 c -1.09876,0.419794 -2.26306,0.667544 -3.43754,0.731472 l 0.14265,2.620822 c 0,0 0.0192,1.25697 -1.3339,3.067245 -0.80426,-0.02709 -1.6066,-0.111239 -2.39899,-0.251604 -0.94809,-2.051624 -0.66849,-3.277254 -0.66849,-3.277254 l 0.6833,-2.534196 c -1.13566,-0.306213 -2.22322,-0.790136 -3.21097,-1.428761 l -1.42508,2.204138"
style="fill:none;stroke:#d3d7cf;stroke-width:1.66475451;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter4064-8-9)" />
<path
style="fill:none;stroke:#f2f2f2;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 4.1190936,170.87651 1.316683,1.26576 1.7540206,0.003 5.5819788,-5.57043 3.523532,0.006 2.853557,-2.81689 0.0014,-1.68321 -1.169094,-1.16909 -2.365502,2.3822 -2.63185,-0.005 0.09078,-2.55314 2.365531,-2.36552 -1.277858,-1.27786 -1.648714,0.0359 -2.8505569,2.8535 0.00598,3.45613 -5.5530909,5.58201 z"
id="path4208-6-0"
inkscape:connector-curvature="0"
transform="matrix(0.55525134,-9.5997878e-4,-9.5997878e-4,0.55525134,110.73906,863.64511)"
sodipodi:nodetypes="cccccccccccccccccc" />
</g>
<rect
transform="matrix(0.43114968,0,0,0.43114968,-91.46425,933.55802)"
style="fill:#1a1a1a;fill-opacity:1;stroke:#d3d7cf;stroke-width:2.05356860000000019;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter4064-7-3-9)"
id="rect196-0-0-7"
width="44.285713"
height="44.285713"
x="470.35715"
y="18.790752"
rx="6"
ry="6" />
<path
style="fill:none;stroke:#d3d7cf;stroke-width:1.66475451;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter4064-8-9-6)"
d="m 484.90604,52.679071 c 0,0 -0.72327,1.028211 -2.88202,1.697409 -0.63474,-0.494653 -1.23439,-1.034334 -1.79294,-1.613646 0.43889,-2.217071 1.3855,-3.044283 1.3855,-3.044283 l 2.04237,-1.648571 c -0.73879,-0.915258 -1.3342,-1.946011 -1.75793,-3.043257 l -2.44847,0.945549 c 0,0 -1.18951,0.40671 -3.32932,-0.320779 -0.22277,-0.773276 -0.39067,-1.56235 -0.50204,-2.359331 1.65823,-1.535673 2.91028,-1.648499 2.91028,-1.648499 l 2.62132,-0.133248 c -0.0597,-1.174706 0.0645,-2.358577 0.36658,-3.495332 l -2.53663,-0.674208 c 0,0 -1.20139,-0.37014 -2.50493,-2.216441 0.2743,-0.756533 0.60227,-1.4936 0.98062,-2.20383 2.24419,-0.267701 3.32343,0.376954 3.32343,0.376954 l 2.19901,1.432971 c 0.64217,-0.985455 1.43848,-1.870246 2.35108,-2.612309 l -1.65589,-2.03644 c 0,0 -0.75438,-1.005609 -0.72373,-3.265497 0.66659,-0.45082 1.36515,-0.854347 2.08871,-1.206542 1.97294,1.102524 2.46715,2.258424 2.46715,2.258424 l 0.93675,2.451844 c 1.09876,-0.419794 2.26306,-0.667544 3.43754,-0.731472 l -0.14265,-2.620822 c 0,0 -0.0192,-1.25697 1.3339,-3.067245 0.80426,0.02709 1.6066,0.111239 2.39899,0.251604 0.94809,2.051624 0.66849,3.277254 0.66849,3.277254 l -0.6833,2.534196 c 1.13566,0.306213 2.22322,0.790136 3.21097,1.428761 l 1.42508,-2.204138 c 0,0 0.72327,-1.028211 2.88202,-1.697409 0.63474,0.494653 1.23439,1.034334 1.79294,1.613646 -0.43889,2.217071 -1.3855,3.044283 -1.3855,3.044283 l -2.04237,1.648571 c 0.73879,0.915258 1.3342,1.946011 1.75793,3.043257 l 2.44847,-0.945549 c 0,0 1.18951,-0.40671 3.32932,0.320779 0.22277,0.773276 0.39067,1.56235 0.50204,2.359331 -1.65823,1.535673 -2.91028,1.648499 -2.91028,1.648499 l -2.62132,0.133248 c 0.0597,1.174706 -0.0645,2.358577 -0.36658,3.495332 l 2.53663,0.674208 c 0,0 1.20139,0.37014 2.50493,2.216441 -0.2743,0.756533 -0.60227,1.4936 -0.98062,2.20383 -2.24419,0.267701 -3.32343,-0.376954 -3.32343,-0.376954 l -2.19901,-1.432971 c -0.64217,0.985455 -1.43848,1.870246 -2.35108,2.612309 l 1.65589,2.03644 c 0,0 0.75438,1.005609 0.72373,3.265497 -0.66659,0.45082 -1.36515,0.854347 -2.08871,1.206542 -1.97294,-1.102524 -2.46715,-2.258424 -2.46715,-2.258424 l -0.93675,-2.451844 c -1.09876,0.419794 -2.26306,0.667544 -3.43754,0.731472 l 0.14265,2.620822 c 0,0 0.0192,1.25697 -1.3339,3.067245 -0.80426,-0.02709 -1.6066,-0.111239 -2.39899,-0.251604 -0.94809,-2.051624 -0.66849,-3.277254 -0.66849,-3.277254 l 0.6833,-2.534196 c -1.13566,-0.306213 -2.22322,-0.790136 -3.21097,-1.428761 l -1.42508,2.204138"
id="path4072-5-1-7"
inkscape:connector-curvature="0"
inkscape:path-effect="#path-effect4050-9-1-5"
inkscape:original-d="M 484.55417,49.762303 492.5,40.933609 504.27158,48.879434"
transform="matrix(0.26322611,0,0,0.26322611,-5.4745096,937.24827)" />
<path
sodipodi:nodetypes="cccccccccccccccccc"
transform="matrix(0.55525134,-9.5997878e-4,-9.5997878e-4,0.55525134,110.63891,863.25473)"
inkscape:connector-curvature="0"
id="path4208-6-0-2"
d="m 4.1190936,170.87651 1.316683,1.26576 1.7540206,0.003 5.5819788,-5.57043 3.523532,0.006 2.853557,-2.81689 0.0014,-1.68321 -1.169094,-1.16909 -2.365502,2.3822 -2.63185,-0.005 0.09078,-2.55314 2.365531,-2.36552 -1.277858,-1.27786 -1.648714,0.0359 -2.8505569,2.8535 0.00598,3.45613 -5.5530909,5.58201 z"
style="fill:none;stroke:#f2f2f2;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 128 KiB

View file

@ -90,7 +90,7 @@ nav .nav-link{display:inline-block;width:22px;height:22px;overflow:hidden;margin
#nav-home-link{background-position:-44px -132px;}#nav-home-link:hover{background-position:-66px -132px;} #nav-home-link{background-position:-44px -132px;}#nav-home-link:hover{background-position:-66px -132px;}
#nav-intro-link{background-position:0px -88px;}#nav-intro-link:hover{background-position:-22px -88px;} #nav-intro-link{background-position:0px -88px;}#nav-intro-link:hover{background-position:-22px -88px;}
#nav-login-link,#nav-logout-link{background-position:0 -88px;}#nav-login-link:hover,#nav-logout-link:hover{background-position:-22px -88px;} #nav-login-link,#nav-logout-link{background-position:0 -88px;}#nav-login-link:hover,#nav-logout-link:hover{background-position:-22px -88px;}
#nav-manage-link{background-position:0px -22px;}#nav-manage-link:hover{background-position:-22px -22px;} #nav-manage-link{background-position:-88px -88px;}#nav-manage-link:hover{background-position:-110px -88px;}
#nav-messages-link{background-position:-44px -88px;}#nav-messages-link:hover{background-position:-66px -88px;} #nav-messages-link{background-position:-44px -88px;}#nav-messages-link:hover{background-position:-66px -88px;}
#nav-notify-link,#nav-notifications-linkmenu{background-position:-44px -110px;} #nav-notify-link,#nav-notifications-linkmenu{background-position:-44px -110px;}
#nav-notify-link:hover{background-position:-66px -110px;} #nav-notify-link:hover{background-position:-66px -110px;}

View file

@ -543,9 +543,9 @@ nav .nav-link {
} }
} }
#nav-manage-link { #nav-manage-link {
background-position: 0px -22px; background-position: -88px -88px;
&:hover { &:hover {
background-position: -22px -22px; background-position: -110px -88px;
} }
} }
#nav-messages-link { #nav-messages-link {

View file

@ -0,0 +1,115 @@
{{if $item.comment_firstcollapsed}}
<div class="hide-comments-outer">
<span id="hide-comments-total-$item.id" class="hide-comments-total">$item.num_comments</span> <span id="hide-comments-$item.id" class="hide-comments fakelink" onclick="showHideComments($item.id);">$item.hide_text</span>
</div>
<div id="collapsed-comments-$item.id" class="collapsed-comments" style="display: none;">
{{endif}}
<div id="tread-wrapper-$item.id" class="tread-wrapper $item.toplevel">
<a name="$item.id" ></a>
<div class="wall-item-outside-wrapper $item.indent$item.previewing" id="wall-item-outside-wrapper-$item.id" >
<div class="wall-item-content-wrapper $item.indent" id="wall-item-content-wrapper-$item.id" >
<div class="wall-item-info" id="wall-item-info-$item.id">
<div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$item.id"
onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')"
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" />
</a>
<span onclick="openClose('wall-item-photo-menu-$item.id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$item.id">menu</span>
<div class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
<ul>
$item.item_photo_menu
</ul>
</div>
</div>
<div class="wall-item-photo-end"></div>
<div class="wall-item-location" id="wall-item-location-$item.id">
{{ if $item.location }}<span class="icon globe"></span>$item.location {{ endif }}
</div>
<div class="wall-item-author">
<a href="$item.profile_url" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id">$item.name</span></a>
</div>
<div class="wall-item-ago" id="wall-item-ago-$item.id">
$item.ago
</div>
</div>
<div class="wall-item-tools" id="wall-item-tools-$item.id">
<div class="wall-item-lock-wrapper">
{{ if $item.lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$item.lock" onclick="lockview(event,$item.id);" /></div>
{{ else }}<div class="wall-item-lock"></div>{{ endif }}
</div>
<ul class="wall-item-subtools1">
{{ if $item.star }}
<li>
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item icon $item.isstarred" title="$item.star.toggle"></a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item icon tagged" title="$item.star.tagger"></a>
</li>
{{ endif }}
{{ if $item.vote }}
<li class="wall-item-like-buttons" id="wall-item-like-buttons-$item.id">
<a href="#" class="icon like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false"></a>
<a href="#" class="icon dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ if $item.vote.share }}
<a href="#" id="share-$item.id"
class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>{{ endif }}
<img id="like-rotator-$item.id" class="like-rotator" src="images/rotator.gif" alt="$item.wait" title="$item.wait" style="display: none;" />
</li>
{{ endif }}
</ul><br style="clear:left;" />
<ul class="wall-item-subtools2">
{{ if $item.filer }}
<li><a href="#" id="filer-$item.id" onclick="itemFiler($item.id); return false;" class="filer-item icon file-as" title="$item.filer"></a></li>
{{ endif }}
{{ if $item.plink }}
<li class="wall-item-links-wrapper$item.sparkle"><a href="$item.plink.href" title="$item.plink.title" target="external-link" class="icon remote-link"></a></li>
{{ endif }}
{{ if $item.edpost }}
<li><a class="editpost icon pencil" href="$item.edpost.0" title="$item.edpost.1"></a></li>
{{ endif }}
<li class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$item.id">
{{ if $item.drop.dropping }}<div><a href="item/drop/$item.id" onclick="return confirmDelete();" class="icon drophide" title="$item.drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div>{{ endif }}
{{ if $item.drop.dropping }}<div><input type="checkbox" onclick="checkboxhighlight(this);" title="$item.drop.select" class="item-select" name="itemselected[]" value="$item.id" /></div>{{ endif }}
</li>
</ul>
<div class="wall-item-delete-end"></div>
</div>
<div class="wall-item-content" id="wall-item-content-$item.id">
<div class="wall-item-title" id="wall-item-title-$item.id">$item.title</div>
<div class="wall-item-title-end"></div>
<div class="wall-item-body" id="wall-item-body-$item.id">
$item.body
<div class="body-tag">
{{ for $item.tags as $tag }}
<span class='tag'>$tag</span>
{{ endfor }}
</div>
</div>
</div>
</div>
<div class="wall-item-wrapper-end"></div>
<div class="wall-item-like $item.indent" id="wall-item-like-$item.id">$item.like</div>
<div class="wall-item-dislike $item.indent" id="wall-item-dislike-$item.id">$item.dislike</div>
<div class="wall-item-comment-separator"></div>
{{ if $item.threaded }}
{{ if $item.comment }}
<div class="wall-item-comment-wrapper $item.indent" >
$item.comment
</div>
{{ endif }}
{{ endif }}
{{ if $item.flatten }}
<div class="wall-item-comment-wrapper" >
$item.comment
</div>
{{ endif }}
<div class="wall-item-outside-wrapper-end $item.indent" ></div>
</div>
{{ for $item.children as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
</div>
{{if $item.comment_lastcollapsed}}</div>{{endif}}

View file

@ -0,0 +1,121 @@
{{if $item.comment_firstcollapsed}}
<div class="hide-comments-outer">
<span id="hide-comments-total-$item.id" class="hide-comments-total">$item.num_comments</span> <span id="hide-comments-$item.id" class="hide-comments fakelink" onclick="showHideComments($item.id);">$item.hide_text</span>
</div>
<div id="collapsed-comments-$item.id" class="collapsed-comments" style="display: none;">
{{endif}}
<div id="tread-wrapper-$item.id" class="tread-wrapper $item.toplevel">
<a name="$item.id" ></a>
<div class="wall-item-outside-wrapper $item.indent$item.previewing wallwall" id="wall-item-outside-wrapper-$item.id" >
<div class="wall-item-content-wrapper $item.indent" id="wall-item-content-wrapper-$item.id" >
<div class="wall-item-info wallwall" id="wall-item-info-$item.id">
<div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$item.id" >
<a href="$item.owner_url" target="redir" title="$item.olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$item.id">
<img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" /></a>
</div>
<div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$item.wall" /></div>
<div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$item.id"
onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')"
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" /></a>
<span onclick="openClose('wall-item-photo-menu-$item.id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$item.id">menu</span>
<div class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
<ul>
$item.item_photo_menu
</ul>
</div>
</div>
<div class="wall-item-photo-end"></div>
<div class="wall-item-location" id="wall-item-location-$item.id">
{{ if $item.location }}<span class="icon globe"></span>$item.location {{ endif }}
</div>
<div class="wall-item-author">
<a href="$item.profile_url" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id">$item.name</span></a>
</div>
<div class="wall-item-ago" id="wall-item-ago-$item.id">
$item.ago
</div>
</div>
<div class="wall-item-tools" id="wall-item-tools-$item.id">
<div class="wall-item-lock-wrapper">
{{ if $item.lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$item.lock" onclick="lockview(event,$item.id);" /></div>
{{ else }}<div class="wall-item-lock"></div>{{ endif }}
</div>
<ul class="wall-item-subtools1">
{{ if $item.star }}
<li>
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item icon $item.isstarred" title="$item.star.toggle"></a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item icon tagged" title="$item.star.tagger"></a>
</li>
{{ endif }}
{{ if $item.vote }}
<li class="wall-item-like-buttons" id="wall-item-like-buttons-$item.id">
<a href="#" class="icon like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false"></a>
<a href="#" class="icon dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ if $item.vote.share }}
<a href="#" id="share-$item.id"
class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>{{ endif }}
<img id="like-rotator-$item.id" class="like-rotator" src="images/rotator.gif" alt="$item.wait" title="$item.wait" style="display: none;" />
</li>
{{ endif }}
</ul><br style="clear:left;" />
<ul class="wall-item-subtools2">
{{ if $item.filer }}
<li class="wall-item-filer-wrapper"><a href="#" id="filer-$item.id" onclick="itemFiler($item.id); return false;" class="filer-item icon file-as" title="$item.star.filer"></a></li>
{{ endif }}
{{ if $item.plink }}
<li class="wall-item-links-wrapper$item.sparkle"><a href="$item.plink.href" title="$item.plink.title" target="external-link" class="icon remote-link"></a></li>
{{ endif }}
{{ if $item.edpost }}
<li><a class="editpost icon pencil" href="$item.edpost.0" title="$item.edpost.1"></a></li>
{{ endif }}
<li class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$item.id" >
{{ if $item.drop.dropping }}<a href="item/drop/$item.id" onclick="return confirmDelete();" class="icon drophide" title="$item.drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
{{ if $item.drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$item.drop.select" class="item-select" name="itemselected[]" value="$item.id" />{{ endif }}
</li>
</ul>
<div class="wall-item-delete-end"></div>
</div>
<div class="wall-item-content" id="wall-item-content-$item.id">
<div class="wall-item-title" id="wall-item-title-$item.id">$item.title</div>
<div class="wall-item-title-end"></div>
<div class="wall-item-body" id="wall-item-body-$item.id">
$item.body
<div class="body-tag">
{{ for $item.tags as $tag }}
<span class="tag">$tag</span>
{{ endfor }}
</div>
</div>
</div>
</div>
<div class="wall-item-wrapper-end"></div>
<div class="wall-item-like $item.indent" id="wall-item-like-$item.id">$item.like</div>
<div class="wall-item-dislike $item.indent" id="wall-item-dislike-$item.id">$item.dislike</div>
<div class="wall-item-comment-separator"></div>
{{ if $item.threaded }}
{{ if $item.comment }}
<div class="wall-item-comment-wrapper $item.indent" >
$item.comment
</div>
{{ endif }}
{{ endif }}
{{ if $item.flatten }}
<div class="wall-item-comment-wrapper" >
$item.comment
</div>
{{ endif }}
<div class="wall-item-outside-wrapper-end $item.indent" ></div>
</div>
{{ for $item.children as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
</div>
{{if $item.comment_lastcollapsed}}</div>{{endif}}

View file

@ -1,5 +1,10 @@
<div class="comment-wwedit-wrapper" id="comment-edit-wrapper-$id" style="display: block;"> <div class="comment-wwedit-wrapper" id="comment-edit-wrapper-$id" style="display: block;">
<form class="comment-edit-form" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;"> {{ if $threaded }}
<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;">
{{ else }}
<form class="comment-edit-form" style="display: block;" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;">
{{ endif }}
<input type="hidden" name="type" value="$type" /> <input type="hidden" name="type" value="$type" />
<input type="hidden" name="profile_uid" value="$profile_uid" /> <input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" /> <input type="hidden" name="parent" value="$parent" />

View file

@ -935,8 +935,19 @@ input#dfrn-url {
} }
.wall-item-content-wrapper.comment { .tread-wrapper .tread-wrapper {
margin-left: 50px; margin-left: 50px;
}
.tread-wrapper .wall-item-comment-wrapper {
margin-left: 50px;
}
.tread-end-wrapper {
margin-left: 50px;
}
.wall-item-content-wrapper.comment {
# margin-left: 50px;
background: #EEEEEE; background: #EEEEEE;
} }
@ -1175,9 +1186,7 @@ input#dfrn-url {
} }
.comment-wwedit-wrapper { .comment-wwedit-wrapper {
margin-top: 15px;
background: #f3f3f3; background: #f3f3f3;
margin-left: 50px;
} }
.comment-edit-photo { .comment-edit-photo {

View file

@ -6,19 +6,24 @@ Photo album display?
- Edit photo page: bottom buttons are off-center in Dolphin Mini - Edit photo page: bottom buttons are off-center in Dolphin Mini
- Pager: looks weird when only "prev" is there
- BB code buttons for status updates - BB code buttons for status updates
- Get "add contact" back on contacts page - Get "add contact" back on contacts page
- Admin: access to more pages than summary? - Admin: access to more pages than summary?
- Embedded video playback is way too big - 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! - Needs to be faster!
- Reduce DOM elements (~2400 for 10 items, ~8400 for 40 items) - Reduce DOM elements (~2400 for 10 items, ~8400 for 40 items)
- Automatically set limit of 10 items for Network and Profile?
- Sometimes, when "Permission denied", wrong login page is shown

View file

@ -9,6 +9,7 @@
{{ inc field_textarea.tpl with $field=$banner }}{{ endinc }} {{ inc field_textarea.tpl with $field=$banner }}{{ endinc }}
{{ inc field_select.tpl with $field=$language }}{{ endinc }} {{ inc field_select.tpl with $field=$language }}{{ endinc }}
{{ inc field_select.tpl with $field=$theme }}{{ 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 }} {{ inc field_select.tpl with $field=$ssl_policy }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
@ -25,6 +26,8 @@
<h3>$upload</h3> <h3>$upload</h3>
{{ inc field_input.tpl with $field=$maximagesize }}{{ endinc }} {{ 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> <h3>$corporate</h3>
{{ inc field_input.tpl with $field=$allowed_sites }}{{ endinc }} {{ inc field_input.tpl with $field=$allowed_sites }}{{ endinc }}
@ -36,6 +39,8 @@
{{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }}
{{ inc field_input.tpl with $field=$global_directory }}{{ 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_public }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>

View file

@ -10,9 +10,12 @@
}); });
</script>--> </script>-->
<div class="comment-wwedit-wrapper" id="comment-edit-wrapper-$id" style="display: block;" > <div class="comment-wwedit-wrapper $indent" id="comment-edit-wrapper-$id" style="display: block;" >
<form class="comment-edit-form" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;" > <form class="comment-edit-form $indent" id="comment-edit-form-$id" action="item" method="post" onsubmit="post_comment($id); return false;" >
<!-- <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="type" value="$type" />
<input type="hidden" name="source" value="$sourceapp" />
<input type="hidden" name="profile_uid" value="$profile_uid" /> <input type="hidden" name="profile_uid" value="$profile_uid" />
<input type="hidden" name="parent" value="$parent" /> <input type="hidden" name="parent" value="$parent" />
<input type="hidden" name="return" value="$return_path" /> <input type="hidden" name="return" value="$return_path" />

View file

@ -6,23 +6,23 @@
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head> </head>
<body> <body>
<?php if(x($page,'nav')) echo $page['nav']; ?>
<?php if( $a->module === 'home' ) { ?> <?php if( $a->module === 'home' ) { ?>
<center> <center>
<div class="login-button"> <div class="login-button">
<a href="login" class="login-button-link"><img class="login-button-image" src="/images/friendika-1600.png" title="Click to log in"></a> <a href="login" class="login-button-link"><img class="login-button-image" src="/images/friendika-1600.png" title="Click to log in"></a>
</div> </div>
</center> </center>
<?php } elseif ( $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) { <?php } elseif ( $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {
?> ?>
<div class='section-wrapper'> <div class='section-wrapper'>
<section><?php if(x($page,'content')) echo $page['content']; ?> <section><?php if(x($page,'content')) echo $page['content']; ?>
</section> </section>
</div> </div>
<?php } else { <?php } else { ?>
if(x($page,'nav')) echo $page['nav']; ?>
<div class='main-container'> <div class='main-container'>
<div class='main-content-container'> <div class='main-content-container'>
<aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside> <aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside>

View file

@ -7,6 +7,7 @@
</script>--> </script>-->
<script type="text/javascript" src="$baseurl/js/jquery.js" ></script> <script type="text/javascript" src="$baseurl/js/jquery.js" ></script>
<script type="text/javascript">var $j = jQuery.noConflict();</script> <script type="text/javascript">var $j = jQuery.noConflict();</script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/jquery.divgrow-1.3.1.min.js" ></script>
<script type="text/javascript" src="$baseurl/js/jquery.textinputs.js" ></script> <script type="text/javascript" src="$baseurl/js/jquery.textinputs.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost-mobile/js/fk.autocomplete.min.js" ></script> <script type="text/javascript" src="$baseurl/view/theme/frost-mobile/js/fk.autocomplete.min.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/fancybox/jquery.fancybox-1.3.4.pack.js"></script>-->

View file

@ -1,7 +1,10 @@
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <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='width=device-width, minimum-scale=1 maximum-scale=1' name='viewport'>
<meta content='True' name='HandheldFriendly'> <meta content='True' name='HandheldFriendly'>
<meta content='320' name='MobileOptimized'> <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/" /> <base href="$baseurl/" />
<meta name="generator" content="$generator" /> <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/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />

View file

@ -11,6 +11,7 @@
window.term = "$term"; window.term = "$term";
window.baseURL = "$baseurl"; window.baseURL = "$baseurl";
window.geoTag = function () { $geotag } window.geoTag = function () { $geotag }
window.ajaxType = 'jot-header';
</script> </script>

View file

@ -13,7 +13,7 @@
<input type="hidden" name="location" id="jot-location" value="$defloc" /> <input type="hidden" name="location" id="jot-location" value="$defloc" />
<input type="hidden" name="coord" id="jot-coord" value="" /> <input type="hidden" name="coord" id="jot-coord" value="" />
<input type="hidden" name="post_id" value="$post_id" /> <input type="hidden" name="post_id" value="$post_id" />
<input type="hidden" name="source" value="$mobileapp" /> <input type="hidden" name="source" value="$sourceapp" />
<input type="hidden" name="preview" id="jot-preview" value="0" /> <input type="hidden" name="preview" id="jot-preview" value="0" />
<div id="jot-title-wrap"><input name="title" id="jot-title" type="text" placeholder="$placeholdertitle" value="$title" class="jothidden" style="display:none"></div> <div id="jot-title-wrap"><input name="title" id="jot-title" type="text" placeholder="$placeholdertitle" value="$title" class="jothidden" style="display:none"></div>
<div id="jot-category-wrap"><input name="category" id="jot-category" type="text" placeholder="$placeholdercategory" value="$category" class="jothidden" style="display:none" /></div> <div id="jot-category-wrap"><input name="category" id="jot-category" type="text" placeholder="$placeholdercategory" value="$category" class="jothidden" style="display:none" /></div>

View file

@ -0,0 +1,194 @@
/**
* Friendica people autocomplete
*
* require jQuery, jquery.textareas
*/
function ACPopup(elm,backend_url){
this.idsel=-1;
this.element = elm;
this.searchText="";
this.ready=true;
this.kp_timer = false;
this.url = backend_url;
var w = 530;
var h = 130;
if(typeof elm.editorId == "undefined") {
style = $j(elm).offset();
w = $j(elm).width();
h = $j(elm).height();
}
else {
var container = elm.getContainer();
if(typeof container != "undefined") {
style = $j(container).offset();
w = $j(container).width();
h = $j(container).height();
}
}
style.top=style.top+h;
style.width = w;
style.position = 'absolute';
/* style['max-height'] = '150px';
style.border = '1px solid red';
style.background = '#cccccc';
style.overflow = 'auto';
style['z-index'] = '100000';
*/
style.display = 'none';
this.cont = $j("<div class='acpopup'></div>");
this.cont.css(style);
$j("body").append(this.cont);
}
ACPopup.prototype.close = function(){
$j(this.cont).remove();
this.ready=false;
}
ACPopup.prototype.search = function(text){
var that = this;
this.searchText=text;
if (this.kp_timer) clearTimeout(this.kp_timer);
this.kp_timer = setTimeout( function(){that._search();}, 500);
}
ACPopup.prototype._search = function(){
console.log("_search");
var that = this;
var postdata = {
start:0,
count:100,
search:this.searchText,
type:'c',
}
$j.ajax({
type:'POST',
url: this.url,
data: postdata,
dataType: 'json',
success:function(data){
that.cont.html("");
if (data.tot>0){
that.cont.show();
$j(data.items).each(function(){
html = "<img src='{0}' height='16px' width='16px'>{1} ({2})".format(this.photo, this.name, this.nick)
that.add(html, this.nick.replace(' ','') + '+' + this.id + ' - ' + this.link);
});
} else {
that.cont.hide();
}
}
});
}
ACPopup.prototype.add = function(label, value){
var that=this;
var elm = $j("<div class='acpopupitem' title='"+value+"'>"+label+"</div>");
elm.click(function(e){
t = $j(this).attr('title').replace(new RegExp(' \- .*'),'');
if(typeof(that.element.container) === "undefined") {
el=$j(that.element);
sel = el.getSelection();
sel.start = sel.start- that.searchText.length;
el.setSelection(sel.start,sel.end).replaceSelectedText(t+' ').collapseSelection(false);
that.close();
}
else {
txt = tinyMCE.activeEditor.getContent();
// alert(that.searchText + ':' + t);
newtxt = txt.replace(that.searchText,t+' ');
tinyMCE.activeEditor.setContent(newtxt);
tinyMCE.activeEditor.focus();
that.close();
}
});
$j(this.cont).append(elm);
}
ACPopup.prototype.onkey = function(event){
if (event.keyCode == '13') {
if(this.idsel>-1) {
this.cont.children()[this.idsel].click();
event.preventDefault();
}
else
this.close();
}
if (event.keyCode == '38') { //cursor up
cmax = this.cont.children().size()-1;
this.idsel--;
if (this.idsel<0) this.idsel=cmax;
event.preventDefault();
}
if (event.keyCode == '40' || event.keyCode == '9') { //cursor down
cmax = this.cont.children().size()-1;
this.idsel++;
if (this.idsel>cmax) this.idsel=0;
event.preventDefault();
}
if (event.keyCode == '38' || event.keyCode == '40' || event.keyCode == '9') {
this.cont.children().removeClass('selected');
$j(this.cont.children()[this.idsel]).addClass('selected');
}
if (event.keyCode == '27') { //ESC
this.close();
}
}
function ContactAutocomplete(element,backend_url){
this.pattern=/@([^ \n]+)$/;
this.popup=null;
var that = this;
$j(element).unbind('keydown');
$j(element).unbind('keyup');
$j(element).keydown(function(event){
if (that.popup!==null) that.popup.onkey(event);
});
$j(element).keyup(function(event){
cpos = $j(this).getSelection();
if (cpos.start==cpos.end){
match = $j(this).val().substring(0,cpos.start).match(that.pattern);
if (match!==null){
if (that.popup===null){
that.popup = new ACPopup(this, backend_url);
}
if (that.popup.ready && match[1]!==that.popup.searchText) that.popup.search(match[1]);
if (!that.popup.ready) that.popup=null;
} else {
if (that.popup!==null) {that.popup.close(); that.popup=null;}
}
}
});
}
/**
* jQuery plugin 'contact_autocomplete'
*/
(function( $ ){
$j.fn.contact_autocomplete = function(backend_url) {
this.each(function(){
new ContactAutocomplete(this, backend_url);
});
};
})( jQuery );

View file

@ -0,0 +1 @@
(function ($) { var divgrowid = 0; $.fn.divgrow = function (options) { var options = $.extend({}, { initialHeight: 100, moreText: "+ Show More", lessText: "- Show Less", speed: 1000, showBrackets: true }, options); return this.each(function () { divgrowid++; obj = $(this); var fullHeight = obj.height() + 10; obj.css('height', options.initialHeight).css('overflow', 'hidden'); if (options.showBrackets) { obj.after('<p class="divgrow-brackets">[&hellip;]</p><a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>') } else { obj.after('<a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>') } $("a.divgrow-showmore").html(options.moreText); $("." + "divgrow-obj-" + divgrowid).toggle(function () { $(this).prevAll("div:first").animate({ height: fullHeight + "px" }, options.speed, function () { if (options.showBrackets) { $(this).nextAll("p.divgrow-brackets:first").fadeOut() } $(this).nextAll("a.divgrow-showmore:first").html(options.lessText) }) }, function () { $(this).prevAll("div:first").stop(true, false).animate({ height: options.initialHeight }, options.speed, function () { if (options.showBrackets) { $(this).nextAll("p.divgrow-brackets:first").stop(true, false).fadeIn() } $(this).nextAll("a.divgrow-showmore:first").stop(true, false).html(options.moreText) }) }) }) } })(jQuery);

View file

@ -297,7 +297,7 @@
// add a new thread // add a new thread
$j('.tread-wrapper',data).each(function() { $j('.toplevel_item',data).each(function() {
var ident = $j(this).attr('id'); var ident = $j(this).attr('id');
if($j('#' + ident).length == 0 && profile_page == 1) { if($j('#' + ident).length == 0 && profile_page == 1) {
@ -349,6 +349,33 @@
} }
/* autocomplete @nicknames */ /* autocomplete @nicknames */
$j(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl"); $j(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl");
var bimgs = $j(".wall-item-body > img").not(function() { return this.complete; });
var bimgcount = bimgs.length;
if (bimgcount) {
bimgs.load(function() {
bimgcount--;
if (! bimgcount) {
collapseHeight();
}
});
} else {
collapseHeight();
}
});
}
function collapseHeight() {
$j(".wall-item-body").each(function() {
if($j(this).height() > 310) {
if(! $j(this).hasClass('divmore')) {
$j(this).divgrow({ initialHeight: 300, showBrackets: false, speed: 0 });
$j(this).addClass('divmore');
}
}
}); });
} }
@ -401,19 +428,19 @@
function getPosition(e) { function getPosition(e) {
var cursor = {x:0, y:0}; var cursor = {x:0, y:0};
if ( e.pageX || e.pageY ) { if ( e.touches[0].pageX || e.touches[0].pageY ) {
cursor.x = e.pageX; cursor.x = e.touches[0].pageX;
cursor.y = e.pageY; cursor.y = e.touches[0].pageY;
} }
else { else {
if( e.clientX || e.clientY ) { if( e.touches[0].clientX || e.touches[0].clientY ) {
cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft; cursor.x = e.touches[0].clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
cursor.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop; cursor.y = e.touches[0].clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
} }
else { else {
if( e.x || e.y ) { if( e.touches[0].x || e.touches[0].y ) {
cursor.x = e.x; cursor.touches[0].x = e.touches[0].x;
cursor.y = e.y; cursor.touches[0].y = e.touches[0].y;
} }
} }
} }

File diff suppressed because one or more lines are too long

View file

@ -544,6 +544,15 @@ function showHideComments(id) {
} }
} }
/*function showHideCommentBox(id) {
if( $j('#comment-edit-form-' + id).is(':visible')) {
$j('#comment-edit-form-' + id).hide();
}
else {
$j('#comment-edit-form-' + id).show();
}
}*/
/*function deleteCheckedItems() { /*function deleteCheckedItems() {
var checkedstr = ''; var checkedstr = '';

View file

@ -15,6 +15,26 @@ a:hover {text-decoration: underline; }
img { border :0px; } img { border :0px; }
nav {
display: none;
}
/* popup notifications */
div.jGrowl div.notice {
background: #511919 url("../../../images/icons/48/notice.png") no-repeat 5px center;
color: #ffffff;
padding-left: 58px;
}
div.jGrowl div.info {
background: #364e59 url("../../../images/icons/48/info.png") no-repeat 5px center;
color: #ffffff;
padding-left: 58px;
}
#jGrowl.top-right {
top: 15px;
right: 15px;
}
.login-button { .login-button {
margin-top: 90px; margin-top: 90px;
margin-left: auto; margin-left: auto;
@ -26,7 +46,7 @@ img.login-button-image {
max-width: 300px; max-width: 300px;
} }
.section-wrapper { div.section-wrapper {
position: relative; position: relative;
width: 300px; width: 300px;
margin-left: auto; margin-left: auto;
@ -45,6 +65,8 @@ img.login-button-image {
.field label { .field label {
margin-left: 25px; margin-left: 25px;
font-weight: 700; font-weight: 700;
float: none;
width: auto;
} }
.field input { .field input {
@ -62,6 +84,7 @@ img.login-button-image {
background-position: 0 50%; background-position: 0 50%;
width: 182px; width: 182px;
padding-left: 18px; padding-left: 18px;
margin-left: 50px;
} }
#login-footer { #login-footer {

View file

@ -0,0 +1,2 @@
<link rel="stylesheet" href="$baseurl/view/theme/frost-mobile/login-style.css" type="text/css" media="all" />

View file

@ -0,0 +1,18 @@
<div class="mail-conv-outside-wrapper">
<div class="mail-conv-sender" >
<a href="$mail.from_url" class="mail-conv-sender-url" ><img class="mframe mail-conv-sender-photo$mail.sparkle" src="$mail.from_photo" heigth="80" width="80" alt="$mail.from_name" /></a>
</div>
<div class="mail-conv-detail" >
<div class="mail-conv-sender-name" >$mail.from_name</div>
<div class="mail-conv-date">$mail.date</div>
<div class="mail-conv-subject">$mail.subject</div>
</div>
<div class="mail-conv-body">$mail.body</div>
</div>
<div class="mail-conv-outside-wrapper-end"></div>
<div class="mail-conv-delete-wrapper" id="mail-conv-delete-wrapper-$mail.id" ><a href="message/drop/$mail.id" class="icon drophide delete-icon mail-list-delete-icon" onclick="return confirmDelete();" title="$mail.delete" id="mail-conv-delete-icon-$mail.id" class="mail-conv-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div>
<div class="mail-conv-delete-end"></div>
<hr class="mail-conv-break" />

View file

@ -19,16 +19,16 @@
<a id="nav-register-link" class="nav-load-page-link $nav.register.2 $sel.register" href="$nav.register.0" title="$nav.register.3" >$nav.register.1</a> <a id="nav-register-link" class="nav-load-page-link $nav.register.2 $sel.register" href="$nav.register.0" title="$nav.register.3" >$nav.register.1</a>
{{ endif }} {{ endif }}
{{ if $nav.settings }}
<li><a id="nav-settings-link" class="$nav.settings.2 nav-load-page-link" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a></li>
{{ endif }}
{{ if $nav.manage }} {{ if $nav.manage }}
<li> <li>
<a id="nav-manage-link" class="nav-load-page-link $nav.manage.2 $sel.manage" href="$nav.manage.0" title="$nav.manage.3">$nav.manage.1</a> <a id="nav-manage-link" class="nav-load-page-link $nav.manage.2 $sel.manage" href="$nav.manage.0" title="$nav.manage.3">$nav.manage.1</a>
</li> </li>
{{ endif }} {{ endif }}
{{ if $nav.settings }}
<li><a id="nav-settings-link" class="$nav.settings.2 nav-load-page-link" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a></li>
{{ endif }}
{{ if $nav.profiles }} {{ if $nav.profiles }}
<li><a id="nav-profiles-link" class="$nav.profiles.2 nav-load-page-link" href="$nav.profiles.0" title="$nav.profiles.3" >$nav.profiles.1</a></li> <li><a id="nav-profiles-link" class="$nav.profiles.2 nav-load-page-link" href="$nav.profiles.0" title="$nav.profiles.3" >$nav.profiles.1</a></li>
{{ endif }} {{ endif }}

View file

@ -0,0 +1,19 @@
<h1>$title</h1>
<form enctype="multipart/form-data" action="profile_photo" method="post">
<input type='hidden' name='form_security_token' value='$form_security_token'>
<div id="profile-photo-upload-wrapper">
<label id="profile-photo-upload-label" for="profile-photo-upload">$lbl_upfile </label>
<input name="userfile" type="file" id="profile-photo-upload" size="25" />
</div>
<div id="profile-photo-submit-wrapper">
<input type="submit" name="submit" id="profile-photo-submit" value="$submit">
</div>
</form>
<div id="profile-photo-link-select-wrapper">
$select
</div>

View file

@ -9,9 +9,10 @@
/* generals */ /* generals */
html { html {
width: 320px; /* width: 320px;*/
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
overflow-x:hidden;
} }
body { body {
@ -23,6 +24,7 @@ body {
background-repeat: repeat-x; background-repeat: repeat-x;
color: #505050; color: #505050;
margin: 0px; margin: 0px;
overflow-x:hidden;
} }
div.container { div.container {
@ -32,6 +34,7 @@ div.container {
margin-bottom: 0px; margin-bottom: 0px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
overflow-x:hidden;
} }
a, a:visited, a:link { color: #3465a4; text-decoration: none; } a, a:visited, a:link { color: #3465a4; text-decoration: none; }
@ -39,7 +42,7 @@ a:hover {text-decoration: underline; }
input { input {
border: 1px solid #666666; border: 1px solid #666666;
-moz-border-radius: 3px; /* -moz-border-radius: 3px;*/
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
padding: 3px; padding: 3px;
@ -78,6 +81,10 @@ blockquote {
background-color: #f4f8f9; background-color: #f4f8f9;
border-left: 4px solid #dae4ee; border-left: 4px solid #dae4ee;
padding: 0.4em; padding: 0.4em;
margin-left: 20px;
margin-right: 0px;
width: 260px;
overflow: hidden;
} }
.icollapse-wrapper, .ccollapse-wrapper { .icollapse-wrapper, .ccollapse-wrapper {
@ -176,7 +183,7 @@ nav #banner #logo-text a:hover { text-decoration: none; }
border-bottom: 0px; border-bottom: 0px;
background-color: #aec0d3; background-color: #aec0d3;
color: #565854; color: #565854;
-moz-border-radius: 3px 3px 0px 0px; /* -moz-border-radius: 3px 3px 0px 0px;*/
-webkit-border-radius: 3px 3px 0px 0px; -webkit-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px; border-radius: 3px 3px 0px 0px;
} }
@ -197,7 +204,7 @@ nav #banner #logo-text a:hover { text-decoration: none; }
right: 2px; right: 2px;
padding: 1px 2px; padding: 1px 2px;
border-radius: 4px; border-radius: 4px;
-moz-border-radius: 4px; /* -moz-border-radius: 4px;*/
-webkit-border-radius: 4px; -webkit-border-radius: 4px;
background-color: gold !important; background-color: gold !important;
} }
@ -245,7 +252,7 @@ nav .nav-link {
/* right: -33px;*/ /* right: -33px;*/
padding: 1em 0px; padding: 1em 0px;
-moz-box-shadow: 3px 3px 5px #555; /* -moz-box-shadow: 3px 3px 5px #555;*/
-webkit-box-shadow: 3px 3px 5px #555; -webkit-box-shadow: 3px 3px 5px #555;
box-shadow: 3px 3px 5px #555; box-shadow: 3px 3px 5px #555;
@ -300,7 +307,7 @@ aside {
display: block; display: block;
color: #FFFFFF; color: #FFFFFF;
-webkit-border-radius: 5px ; -webkit-border-radius: 5px ;
-moz-border-radius: 5px; /* -moz-border-radius: 5px;*/
border-radius: 5px; border-radius: 5px;
padding: 5px; padding: 5px;
font-weight: bold; font-weight: bold;
@ -310,7 +317,7 @@ aside {
display: block; display: block;
color: #FFFFFF; color: #FFFFFF;
-webkit-border-radius: 5px ; -webkit-border-radius: 5px ;
-moz-border-radius: 5px; /* -moz-border-radius: 5px;*/
border-radius: 5px; border-radius: 5px;
padding: 5px; padding: 5px;
font-weight: bold; font-weight: bold;
@ -320,10 +327,11 @@ aside {
/* section */ /* section */
div.section-wrapper { div.section-wrapper {
/* width: 100%;*/ /* width: 100%;*/
width: 320px; /* width: 320px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;*/
margin-left: 0px;
/*padding-right:2em;*/ /*padding-right:2em;*/
@ -349,6 +357,7 @@ section {
min-height: 112px; min-height: 112px;
border-top: 1px solid #babdb6; border-top: 1px solid #babdb6;
overflow-x:hidden;
} }
.tabs { .tabs {
@ -363,7 +372,7 @@ section {
padding: 0.4em 2em; padding: 0.4em 2em;
border: 1px solid #aaa; border: 1px solid #aaa;
border-radius: 8px; border-radius: 8px;
-moz-border-radius: 8px; /* -moz-border-radius: 8px;*/
-webkit-border-radius: 8px; -webkit-border-radius: 8px;
} }
.tab { .tab {
@ -437,8 +446,8 @@ footer {
#jot-title::-webkit-input-placeholder{font-weight: normal;} #jot-title::-webkit-input-placeholder{font-weight: normal;}
#jot-category::-webkit-input-placeholder{font-weight: normal;} #jot-category::-webkit-input-placeholder{font-weight: normal;}
#jot-title:-moz-placeholder{font-weight: normal;} /*#jot-title:-moz-placeholder{font-weight: normal;}
#jot-category:-moz-placeholder{font-weight: normal;} #jot-category:-moz-placeholder{font-weight: normal;}*/
#jot-title:hover, #jot-title:hover,
@ -468,7 +477,7 @@ footer {
.group-selected, .nets-selected, .fileas-selected, .categories-selected { .group-selected, .nets-selected, .fileas-selected, .categories-selected {
padding: 3px; padding: 3px;
-moz-border-radius: 3px; /* -moz-border-radius: 3px;*/
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
border: 1px solid #CCCCCC; border: 1px solid #CCCCCC;
@ -478,7 +487,7 @@ footer {
.settings-widget .selected { .settings-widget .selected {
padding: 3px; padding: 3px;
-moz-border-radius: 3px; /* -moz-border-radius: 3px;*/
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
border: 1px solid #CCCCCC; border: 1px solid #CCCCCC;
@ -538,7 +547,7 @@ footer {
margin-top: 10px; margin-top: 10px;
} }
/*
#login_standard { #login_standard {
width: 210px; width: 210px;
float: left; float: left;
@ -568,9 +577,9 @@ footer {
} }
#login-submit-button { #login-submit-button {
/* margin-top: 10px; */ margin-top: 10px;
margin-left: 200px; margin-left: 200px;
} }*/
input#dfrn-url { input#dfrn-url {
@ -1133,7 +1142,7 @@ input#dfrn-url {
border: 2px solid #AAAAAA; border: 2px solid #AAAAAA;
border-radius: 10px; border-radius: 10px;
-webkit-border-radius: 10px; -webkit-border-radius: 10px;
-moz-border-radius: 10px; /* -moz-border-radius: 10px;*/
/* background: #EEEEEE;*/ /* background: #EEEEEE;*/
} }
@ -1328,12 +1337,23 @@ input#dfrn-url {
} }
.wall-item-content img { .wall-item-content img {
max-width: 300px; max-width: 290px;
border-radius: 7px; border-radius: 7px;
-moz-border-radius: 7px; /* -moz-border-radius: 7px;*/
-webkit-border-radius: 7px; -webkit-border-radius: 7px;
} }
.comment .wall-item-content img {
max-width: 280px;
}
.divgrow-showmore {
display: block;
clear: both;
text-align: center;
outline: 0;
border-top: 1px dotted #888;
}
.wall-item-title { .wall-item-title {
@ -1350,19 +1370,28 @@ input#dfrn-url {
.wall-item-body { .wall-item-body {
text-align: justify; text-align: justify;
float: left; float: left;
width: 300px; /* width: 300px;*/
overflow: hidden; overflow: hidden;
margin-top: 10px; margin-top: 10px;
padding-right: 1em;
line-height: 23px; line-height: 23px;
} }
.wall-item-body code { .wall-item-body code {
width: 260px;
overflow: hidden; overflow: hidden;
} }
.comment .wall-item-body { .comment .wall-item-body {
margin-left: 5px; margin-left: 5px;
width: 280px; padding-right: 0.5em;
/* width: 280px;*/
}
.comment .wall-item-body blockquote {
margin-left: 0px;
margin-right: 0px;
width: 260px;
} }
.wall-item-tools { .wall-item-tools {
@ -1387,6 +1416,7 @@ input#dfrn-url {
border-bottom-right-radius: 10px; border-bottom-right-radius: 10px;
} }
.comment-edit-wrapper { .comment-edit-wrapper {
margin-top: 15px; margin-top: 15px;
background: #f3f3f3; background: #f3f3f3;
@ -1401,6 +1431,13 @@ input#dfrn-url {
margin-right: 10px; margin-right: 10px;
} }
.comment-wwedit-wrapper.comment {
margin-left: 40px;
margin-right: 40px;
border-radius: 10px;
}
.comment-edit-photo { .comment-edit-photo {
margin-top: 15px; margin-top: 15px;
margin-left: 10px; margin-left: 10px;
@ -1413,7 +1450,7 @@ input#dfrn-url {
} }
.comment-edit-text-empty, .comment-edit-text-full { .comment-edit-text-empty, .comment-edit-text-full {
/* float: left;*/ /* float: left;*/
-moz-border-radius: 3px; /* -moz-border-radius: 3px;*/
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
border: 1px solid #cccccc; border: 1px solid #cccccc;
@ -1435,11 +1472,20 @@ input#dfrn-url {
height: 150px; height: 150px;
/* width: 350px; /* width: 350px;
overflow: auto;*/ overflow: auto;*/
width: 190px; width: 250px;
margin-top: 15px; margin-top: 15px;
margin-left: 20px; margin-left: 20px;
} }
.comment .comment-edit-text-empty {
width: 120px;
}
.comment .comment-edit-text-full {
margin-left: 10px;
width: 210px;
}
.comment-edit-text-end { .comment-edit-text-end {
clear: both; clear: both;
} }
@ -1669,7 +1715,7 @@ input#dfrn-url {
padding: 0.2em 1em; padding: 0.2em 1em;
border: 1px solid #aaa; border: 1px solid #aaa;
border-radius: 10px; border-radius: 10px;
-moz-border-radius: 10px; /* -moz-border-radius: 10px;*/
-webkit-border-radius: 10px; -webkit-border-radius: 10px;
} }
@ -1688,8 +1734,8 @@ input#dfrn-url {
margin-right: 5px; margin-right: 5px;
margin-bottom: 10px;*/ margin-bottom: 10px;*/
/* float: left;*/ /* float: left;*/
margin-right: 15px; /* margin-right: 15px;
margin-left: 15px; margin-left: 15px;*/
} }
.pager_first, .pager_first,
@ -1698,14 +1744,10 @@ input#dfrn-url {
display: none; display: none;
} }
.pager_first a, /*.pager_first a,
.pager_last a, .pager_last a,
.pager_prev a, .pager_prev a,
.pager_next a { .pager_next a {
/* padding-top: 2px;
padding-bottom: 2px;
padding-left: 4px;
padding-right: 8px;*/
padding-top: 5px; padding-top: 5px;
padding-bottom: 5px; padding-bottom: 5px;
padding-left: 25px; padding-left: 25px;
@ -1725,6 +1767,16 @@ input#dfrn-url {
padding-left: 9px; padding-left: 9px;
padding-right: 18px; padding-right: 18px;
text-decoration: none; text-decoration: none;
}*/
.pager_prev a,
.pager_next a {
font-size: 1.5em;
padding: 0.2em 1em;
border: 1px solid #aaa;
border-radius: 10px;
/* -moz-border-radius: 10px;*/
-webkit-border-radius: 10px;
} }
.pager_current { .pager_current {
@ -1732,7 +1784,7 @@ input#dfrn-url {
float: left; float: left;
border: 1px solid black; border: 1px solid black;
border-radius: 7px; border-radius: 7px;
-moz-border-radius: 7px; /* -moz-border-radius: 7px;*/
-webkit-border-radius: 7px; -webkit-border-radius: 7px;
background: #FFCCCC; background: #FFCCCC;
font-size: 1.25em; font-size: 1.25em;
@ -1960,7 +2012,7 @@ input#dfrn-url {
left: -30px; top: 80px; left: -30px; top: 80px;
display: none; display: none;
z-index: 10000; z-index: 10000;
-moz-box-shadow: 3px 3px 5px #555; /* -moz-box-shadow: 3px 3px 5px #555;*/
-webkit-box-shadow: 3px 3px 5px #555; -webkit-box-shadow: 3px 3px 5px #555;
box-shadow: 3px 3px 5px #555; box-shadow: 3px 3px 5px #555;
} }
@ -1998,7 +2050,7 @@ input#dfrn-url {
color:#cccccc; color:#cccccc;
border: 1px solid #cccccc; border: 1px solid #cccccc;
padding: 3px 0px 0px 5px; padding: 3px 0px 0px 5px;
-moz-border-radius: 3px; /* -moz-border-radius: 3px;*/
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
} }
@ -2043,7 +2095,7 @@ input#dfrn-url {
background-repeat: no-repeat; background-repeat: no-repeat;
padding: 7px 5px 0px 30px; padding: 7px 5px 0px 30px;
-webkit-border-radius: 5px ; -webkit-border-radius: 5px ;
-moz-border-radius: 5px; /* -moz-border-radius: 5px;*/
border-radius: 5px; border-radius: 5px;
color: #999999; color: #999999;
} }
@ -2068,7 +2120,7 @@ input#dfrn-url {
width: 120px; width: 120px;
height: 30px; height: 30px;
border: 1px solid #cccccc; border: 1px solid #cccccc;
-moz-border-radius: 4px; /* -moz-border-radius: 4px;*/
-webkit-border-radius: 4px; -webkit-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
margin-top: 5px; margin-top: 5px;
@ -2098,7 +2150,7 @@ input#dfrn-url {
background-repeat: no-repeat; background-repeat: no-repeat;
margin-right: 5px; margin-right: 5px;
-webkit-border-radius: 2px ; -webkit-border-radius: 2px ;
-moz-border-radius: 2px; /* -moz-border-radius: 2px;*/
border-radius: 2px; border-radius: 2px;
padding-left: 15px; padding-left: 15px;
} }
@ -2242,7 +2294,7 @@ a.mail-list-link {
.mail-conv-detail { .mail-conv-detail {
margin-left: 20px; margin-left: 20px;
margin-bottom: 10px; margin-bottom: 10px;
width: 270px; /*width: 270px;*/
} }
.mail-conv-subject { .mail-conv-subject {
@ -2250,6 +2302,11 @@ a.mail-list-link {
margin: 10px 0; margin: 10px 0;
} }
.mail-conv-body {
padding-top: 20px;
clear: both;
}
.mail-conv-outside-wrapper-end { .mail-conv-outside-wrapper-end {
clear: both; clear: both;
} }
@ -2260,6 +2317,7 @@ a.mail-list-link {
.mail-conv-delete-wrapper { .mail-conv-delete-wrapper {
float: right; float: right;
padding-bottom: 0.5em;
margin-right: 5px; margin-right: 5px;
margin-top: 15px; margin-top: 15px;
} }
@ -2365,7 +2423,7 @@ aside input[type='text'] {
border: 1px solid #DDDDDD; border: 1px solid #DDDDDD;
padding: 8px; padding: 8px;
margin-top: 5px; margin-top: 5px;
-moz-border-radius:5px; /* -moz-border-radius:5px;*/
-webkit-border-radius:5px; -webkit-border-radius:5px;
border-radius:5px; border-radius:5px;
@ -2423,7 +2481,7 @@ aside input[type='text'] {
.photo-top-image-wrapper img { .photo-top-image-wrapper img {
max-width: 290px; max-width: 290px;
border-radius: 10px; border-radius: 10px;
-moz-border-radius: 10px; /* -moz-border-radius: 10px;*/
-webkit-border-radius: 10px; -webkit-border-radius: 10px;
} }
.photo-top-album-name { .photo-top-album-name {
@ -2582,7 +2640,7 @@ aside input[type='text'] {
margin-top: 15px; margin-top: 15px;
border: 1px solid #aaa; border: 1px solid #aaa;
border-radius: 10px; border-radius: 10px;
-moz-border-radius: 10px; /* -moz-border-radius: 10px;*/
-webkit-border-radius: 10px; -webkit-border-radius: 10px;
} }
@ -2895,7 +2953,7 @@ aside input[type='text'] {
} }
#event-summary { #event-summary {
width: 400px; width: 280px;
} }
.vevent { .vevent {
@ -2934,13 +2992,16 @@ aside input[type='text'] {
} }
.event-start, .event-end { .event-start, .event-end {
font-size: 14px;
margin-left: 10px; margin-left: 10px;
width: 330px; width: 280px;
clear: both; clear: both;
padding-bottom: 1.5em;
} }
.event-start .dtstart, .event-end .dtend { .event-start .dtstart, .event-end .dtend {
float: right; clear: both;
float: left;
} }
.event-list-date { .event-list-date {
@ -3505,7 +3566,7 @@ aside input[type='text'] {
background-repeat: no-repeat; background-repeat: no-repeat;
opacity: 0.5; opacity: 0.5;
} }
.link { display: none; background-position: -144px 0px;} .icon.link { display: none; background-position: -144px 0px;}
/*.globe { background-position: 0px -16px;}*/ /*.globe { background-position: 0px -16px;}*/
.icon.globe { .icon.globe {
@ -3814,11 +3875,11 @@ ul.notifications-menu-popup {
height: auto; height: auto;
overflow-y: scroll;overflow-style:scrollbar; overflow-y: scroll;overflow-style:scrollbar;
background-color:#FFFFFF; background-color:#FFFFFF;
-moz-border-radius: 5px; /* -moz-border-radius: 5px;*/
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
border-radius:5px; border-radius:5px;
border: 1px solid #AAA; border: 1px solid #AAA;
-moz-box-shadow: 3px 3px 5px #555; /* -moz-box-shadow: 3px 3px 5px #555;*/
-webkit-box-shadow: 3px 3px 5px #555; -webkit-box-shadow: 3px 3px 5px #555;
box-shadow: 3px 3px 5px #555; box-shadow: 3px 3px 5px #555;
} }
@ -3876,3 +3937,39 @@ ul.notifications-menu-popup {
margin-left: 40px; margin-left: 40px;
width: 130px; width: 130px;
} }
/*@media only screen and (min-device-width: 768px)
and (max-device-width: 1024px)*/
/*@media only screen and (min-device-width: 768px)
{
html {
width:700px
}
div.section-wrapper {
width:700px;
margin-left:0px;
}
.wall-item-body {
width:700px;
}
.comment .wall-item-body {
width:650px;
}
}*/
@media only screen and (min-device-width: 768px)
{
.wall-item-body code {
width: 700px;
}
.comment .wall-item-body blockquote {
margin-left: 20px;
width: 680px;
}
blockquote {
width: 700px;
}
}

View file

@ -4,9 +4,9 @@
* Name: Frost--mobile version * Name: Frost--mobile version
* Description: Like frosted glass * Description: Like frosted glass
* Credits: Navigation icons taken from http://iconza.com. Other icons taken from http://thenounproject.com, including: Like, Dislike, Black Lock, Unlock, Pencil, Tag, Camera, Paperclip (Marie Coons), Folder (Sergio Calcara), Chain-link (Andrew Fortnum), Speaker (Harold Kim), Quotes (Henry Ryder), Video Camera (Anas Ramadan), and Left Arrow, Right Arrow, and Delete X (all three P.J. Onori). All under Attribution (CC BY 3.0). Others from The Noun Project are public domain or No Rights Reserved (CC0). * Credits: Navigation icons taken from http://iconza.com. Other icons taken from http://thenounproject.com, including: Like, Dislike, Black Lock, Unlock, Pencil, Tag, Camera, Paperclip (Marie Coons), Folder (Sergio Calcara), Chain-link (Andrew Fortnum), Speaker (Harold Kim), Quotes (Henry Ryder), Video Camera (Anas Ramadan), and Left Arrow, Right Arrow, and Delete X (all three P.J. Onori). All under Attribution (CC BY 3.0). Others from The Noun Project are public domain or No Rights Reserved (CC0).
* Version: Version 0.2.2 * Version: Version 0.2.10
* Author: Zach P <windforest@f.shmuz.in> * Author: Zach P <techcity@f.shmuz.in>
* Maintainer: Zach P <windforest@f.shmuz.in> * Maintainer: Zach P <techcity@f.shmuz.in>
*/ */
$a->theme_info = array(); $a->theme_info = array();
@ -22,4 +22,11 @@ function frost_mobile_init(&$a) {
if( $a->module === 'login' ) if( $a->module === 'login' )
$a->page['end'] .= '<script type="text/javascript"> $j(document).ready(function() { $j("#id_" + window.loginName).focus();} );</script>'; $a->page['end'] .= '<script type="text/javascript"> $j(document).ready(function() { $j("#id_" + window.loginName).focus();} );</script>';
$a->sourcename = 'Friendica mobile web';
$a->videowidth = 250;
$a->videoheight = 200;
$a->theme_thread_allow = false;
$a->force_max_items = 10;
} }

View file

@ -0,0 +1,13 @@
{{ for $threads as $item }}
{{ inc $item.template }}{{ endinc }}
{{ 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,106 @@
{{if $item.comment_firstcollapsed}}
<div class="hide-comments-outer">
<span id="hide-comments-total-$item.id" class="hide-comments-total">$item.num_comments</span> <span id="hide-comments-$item.id" class="hide-comments fakelink" onclick="showHideComments($item.id);">$item.hide_text</span>
</div>
<div id="collapsed-comments-$item.id" class="collapsed-comments" style="display: none;">
{{endif}}
<div id="tread-wrapper-$item.id" class="tread-wrapper $item.toplevel">
<a name="$item.id" ></a>
<!--<div class="wall-item-outside-wrapper $item.indent$item.previewing" id="wall-item-outside-wrapper-$item.id" >-->
<div class="wall-item-content-wrapper $item.indent" id="wall-item-content-wrapper-$item.id" >
<div class="wall-item-info" id="wall-item-info-$item.id">
<!-- <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$item.id"
onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')"
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">-->
<div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$item.id">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" />
</a>
<!--<span onclick="openClose('wall-item-photo-menu-$item.id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$item.id">menu</span>
<div class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
<ul class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
$item.item_photo_menu
</ul>
</div>-->
</div>
<!--<div class="wall-item-photo-end"></div>-->
<div class="wall-item-wrapper" id="wall-item-wrapper-$item.id" >
{{ if $item.lock }}<!--<div class="wall-item-lock">--><img src="images/lock_icon.gif" class="wall-item-lock lockview" alt="$item.lock" onclick="lockview(event,$item.id);" /><!--</div>-->
{{ else }}<div class="wall-item-lock"></div>{{ endif }}
<div class="wall-item-location" id="wall-item-location-$item.id">$item.location</div>
</div>
</div>
<!--<div class="wall-item-author">-->
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id" >$item.name</span></a>
<div class="wall-item-ago" id="wall-item-ago-$item.id" >$item.ago</div>
<!--</div>-->
<br />
<div class="wall-item-content" id="wall-item-content-$item.id" >
<div class="wall-item-title" id="wall-item-title-$item.id">$item.title</div>
<!--<div class="wall-item-title-end"></div>-->
<div class="wall-item-body" id="wall-item-body-$item.id" >$item.body
<!-- <div class="body-tag">-->
{{ for $item.tags as $tag }}
<span class='body-tag tag'>$tag</span>
{{ endfor }}
<!-- </div>-->
</div>
</div>
<div class="wall-item-tools" id="wall-item-tools-$item.id">
{{ if $item.vote }}
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$item.id">
<a href="#" class="icon like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false"></a>
<a href="#" class="icon dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ if $item.vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>{{ endif }}
<img id="like-rotator-$item.id" class="like-rotator" src="images/rotator.gif" alt="$item.wait" title="$item.wait" style="display: none;" />
</div>
{{ endif }}
{{ if $item.plink }}
<!--<div class="wall-item-links-wrapper"><a href="$item.plink.href" title="$item.plink.title" target="external-link" class="wall-item-links-wrapper icon remote-link$item.sparkle"></a></div>-->
{{ endif }}
{{ if $item.edpost }}
<a class="editpost icon pencil" href="$item.edpost.0" title="$item.edpost.1"></a>
{{ endif }}
{{ if $item.star }}
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item icon $item.isstarred" title="$item.star.toggle"></a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item icon tagged" title="$item.star.tagger"></a>
{{ endif }}
{{ if $item.filer }}
<a href="#" id="filer-$item.id" onclick="itemFiler($item.id); return false;" class="filer-item filer-icon" title="$item.filer"></a>
{{ endif }}
<!-- <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$item.id" >-->
{{ if $item.drop.dropping }}<a href="item/drop/$item.id" onclick="return confirmDelete();" class="wall-item-delete-wrapper icon drophide" title="$item.drop.delete" id="wall-item-delete-wrapper-$item.id" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
<!-- </div>-->
{{ if $item.drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$item.drop.select" class="item-select" name="itemselected[]" value="$item.id" />{{ endif }}
<!--<div class="wall-item-delete-end"></div>-->
</div>
</div>
<!--<div class="wall-item-wrapper-end"></div>-->
<div class="wall-item-like $item.indent" id="wall-item-like-$item.id">$item.like</div>
<div class="wall-item-dislike $item.indent" id="wall-item-dislike-$item.id">$item.dislike</div>
{{ if $item.threaded }}
{{ if $item.comment }}
<!--<div class="wall-item-comment-wrapper $item.indent" >-->
$item.comment
<!--</div>-->
{{ endif }}
{{ endif }}
<!--<div class="wall-item-outside-wrapper-end $item.indent" ></div>-->
<!--</div>-->
{{ for $item.children as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
{{ if $item.flatten }}
<!--<div class="wall-item-comment-wrapper" >-->
$item.comment
<!--</div>-->
{{ endif }}
</div>
{{if $item.comment_lastcollapsed}}</div>{{endif}}

View file

@ -18,12 +18,12 @@
<ul class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id"> <ul class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
$item.item_photo_menu $item.item_photo_menu
</ul> </ul>
<!-- </div>--> </div>-->
</div> </div>
<!--<div class="wall-item-photo-end"></div>--> <!--<div class="wall-item-photo-end"></div>-->
<div class="wall-item-wrapper" id="wall-item-wrapper-$item.id" > <div class="wall-item-wrapper" id="wall-item-wrapper-$item.id" >
{{ if $item.lock }}<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="$item.lock" onclick="lockview(event,$item.id);" /></div> {{ if $item.lock }}<!--<div class="wall-item-lock">--><img src="images/lock_icon.gif" class="wall-item-lock lockview" alt="$item.lock" onclick="lockview(event,$item.id);" /><!--</div>-->
{{ else }}<div class="wall-item-lock"></div>{{ endif }} {{ else }}<div class="wall-item-lock"></div>{{ endif }}
<div class="wall-item-location" id="wall-item-location-$item.id">$item.location</div> <div class="wall-item-location" id="wall-item-location-$item.id">$item.location</div>
</div> </div>
@ -68,7 +68,7 @@
{{ endif }} {{ endif }}
<!--<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$item.id" >--> <!--<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$item.id" >-->
{{ if $item.drop.dropping }}<a href="item/drop/$item.id" onclick="return confirmDelete();" class="wall-item-delete-wrapper icon drophide" title="$item.drop.delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }} {{ if $item.drop.dropping }}<a href="item/drop/$item.id" onclick="return confirmDelete();" class="wall-item-delete-wrapper icon drophide" title="$item.drop.delete" id="wall-item-delete-wrapper-$item.id" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
<!--</div>--> <!--</div>-->
{{ if $item.drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$item.drop.select" class="item-select" name="itemselected[]" value="$item.id" />{{ endif }} {{ if $item.drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$item.drop.select" class="item-select" name="itemselected[]" value="$item.id" />{{ endif }}
<!--<div class="wall-item-delete-end"></div>--> <!--<div class="wall-item-delete-end"></div>-->

View file

@ -0,0 +1,109 @@
{{if $item.comment_firstcollapsed}}
<div class="hide-comments-outer">
<span id="hide-comments-total-$item.id" class="hide-comments-total">$item.num_comments</span> <span id="hide-comments-$item.id" class="hide-comments fakelink" onclick="showHideComments($item.id);">$item.hide_text</span>
</div>
<div id="collapsed-comments-$item.id" class="collapsed-comments" style="display: none;">
{{endif}}
<div id="tread-wrapper-$item.id" class="tread-wrapper $item.toplevel">
<a name="$item.id" ></a>
<!--<div class="wall-item-outside-wrapper $item.indent$item.previewing wallwall" id="wall-item-outside-wrapper-$item.id" >-->
<div class="wall-item-content-wrapper $item.indent" id="wall-item-content-wrapper-$item.id" >
<div class="wall-item-info wallwall" id="wall-item-info-$item.id">
<div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$item.id" >
<a href="$item.owner_url" target="redir" title="$item.olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$item.id">
<img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" /></a>
</div>
<div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$item.wall" /></div>
<!--<div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$item.id"
onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')"
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">-->
<div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$item.id">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" /></a>
<!--<span onclick="openClose('wall-item-photo-menu-$item.id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$item.id">menu</span>
<div class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
<ul class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
$item.item_photo_menu
</ul>
</div>-->
</div>
<!--<div class="wall-item-photo-end"></div>-->
<div class="wall-item-wrapper" id="wall-item-wrapper-$item.id" >
{{ if $item.lock }}<!--<div class="wall-item-lock">--><img src="images/lock_icon.gif" class="wall-item-lock lockview" alt="$item.lock" onclick="lockview(event,$item.id);" /><!--</div>-->
{{ else }}<div class="wall-item-lock"></div>{{ endif }}
<div class="wall-item-location" id="wall-item-location-$item.id">$item.location</div>
</div>
</div>
<!--<div class="wall-item-author">-->
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id" >$item.name</span></a> $item.to <a href="$item.owner_url" target="redir" title="$item.olinktitle" class="wall-item-name-link"><span class="wall-item-name$item.osparkle" id="wall-item-ownername-$item.id">$item.owner_name</span></a> $item.vwall<br />
<div class="wall-item-ago" id="wall-item-ago-$item.id">$item.ago</div>
<!--</div>-->
<div class="wall-item-content" id="wall-item-content-$item.id" >
<div class="wall-item-title" id="wall-item-title-$item.id">$item.title</div>
<!--<div class="wall-item-title-end"></div>-->
<div class="wall-item-body" id="wall-item-body-$item.id" >$item.body
<!--<div class="body-tag">-->
{{ for $item.tags as $tag }}
<span class='body-tag tag'>$tag</span>
{{ endfor }}
<!--</div>-->
</div>
</div>
<div class="wall-item-tools" id="wall-item-tools-$item.id">
{{ if $item.vote }}
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$item.id">
<a href="#" class="icon like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false"></a>
<a href="#" class="icon dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ if $item.vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>{{ endif }}
<img id="like-rotator-$item.id" class="like-rotator" src="images/rotator.gif" alt="$item.wait" title="$item.wait" style="display: none;" />
</div>
{{ endif }}
{{ if $item.plink }}
<!--<div class="wall-item-links-wrapper">--><a href="$item.plink.href" title="$item.plink.title" target="external-link" class="wall-item-links-wrapper icon remote-link$item.sparkle"></a><!--</div>-->
{{ endif }}
{{ if $item.edpost }}
<a class="editpost icon pencil" href="$item.edpost.0" title="$item.edpost.1"></a>
{{ endif }}
{{ if $item.star }}
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item icon $item.isstarred" title="$item.star.toggle"></a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item icon tagged" title="$item.star.tagger"></a>
{{ endif }}
{{ if $item.filer }}
<a href="#" id="filer-$item.id" onclick="itemFiler($item.id); return false;" class="filer-item filer-icon" title="$item.filer"></a>
{{ endif }}
<!--<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$item.id" >-->
{{ if $item.drop.dropping }}<a href="item/drop/$item.id" onclick="return confirmDelete();" class="wall-item-delete-wrapper icon drophide" title="$item.drop.delete" id="wall-item-delete-wrapper-$item.id" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>{{ endif }}
<!--</div>-->
{{ if $item.drop.dropping }}<input type="checkbox" onclick="checkboxhighlight(this);" title="$item.drop.select" class="item-select" name="itemselected[]" value="$item.id" />{{ endif }}
<!--<div class="wall-item-delete-end"></div>-->
</div>
</div>
<!--<div class="wall-item-wrapper-end"></div>-->
<div class="wall-item-like $item.indent" id="wall-item-like-$item.id">$item.like</div>
<div class="wall-item-dislike $item.indent" id="wall-item-dislike-$item.id">$item.dislike</div>
{{ if $item.threaded }}
{{ if $item.comment }}
<!--<div class="wall-item-comment-wrapper $item.indent" >-->
$item.comment
<!--</div>-->
{{ endif }}
{{ endif }}
<!--<div class="wall-item-outside-wrapper-end $item.indent" ></div>-->
<!--</div>-->
{{ for $item.children as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
{{ if $item.flatten }}
<!--<div class="wall-item-comment-wrapper" >-->
$item.comment
<!--</div>-->
{{ endif }}
</div>
{{if $item.comment_lastcollapsed}}</div>{{endif}}

View file

@ -6,4 +6,9 @@ Check TinyMCE optimization
"Profiles" page is wonky "Profiles" page is wonky
Settings, admin, photos upload don't look beautiful Settings, admin, photos upload don't look beautiful
Threading:
- indentation
- top-level "show more" looks bad
- need some visual way to tie sub-comments to their parent comments
- need a way to change styles if the system allows threading or not
- just don't allow?

View file

@ -9,6 +9,7 @@
{{ inc field_textarea.tpl with $field=$banner }}{{ endinc }} {{ inc field_textarea.tpl with $field=$banner }}{{ endinc }}
{{ inc field_select.tpl with $field=$language }}{{ endinc }} {{ inc field_select.tpl with $field=$language }}{{ endinc }}
{{ inc field_select.tpl with $field=$theme }}{{ 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 }} {{ inc field_select.tpl with $field=$ssl_policy }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
@ -25,6 +26,8 @@
<h3>$upload</h3> <h3>$upload</h3>
{{ inc field_input.tpl with $field=$maximagesize }}{{ endinc }} {{ 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> <h3>$corporate</h3>
{{ inc field_input.tpl with $field=$allowed_sites }}{{ endinc }} {{ inc field_input.tpl with $field=$allowed_sites }}{{ endinc }}
@ -36,6 +39,8 @@
{{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }}
{{ inc field_input.tpl with $field=$global_directory }}{{ 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_public }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div> <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>

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