Merge branch 'master' into notify

This commit is contained in:
friendica 2012-02-22 22:36:07 -08:00
commit 808b886a3e
23 changed files with 1382 additions and 709 deletions

3
README Normal file
View file

@ -0,0 +1,3 @@
This is my personal fork of https://github.com/friendica/friendica
If you want to have a stable version of friendica please look there.

View file

@ -9,7 +9,7 @@ require_once('include/nav.php');
require_once('include/cache.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '2.3.1259' );
define ( 'FRIENDICA_VERSION', '2.3.1260' );
define ( 'DFRN_PROTOCOL_VERSION', '2.22' );
define ( 'DB_UPDATE_VERSION', 1123 );
@ -309,8 +309,12 @@ class App {
. 'library/phpsec' . PATH_SEPARATOR
. '.' );
if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=")
if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=") {
$this->query_string = substr($_SERVER['QUERY_STRING'],2);
// removing trailing / - maybe a nginx problem
if (substr($this->query_string, 0, 1) == "/")
$this->query_string = substr($this->query_string, 1);
}
if(x($_GET,'q'))
$this->cmd = trim($_GET['q'],'/\\');

2
doc/Groups-and-Privacy.md Executable file → Normal file
View file

@ -22,7 +22,7 @@ 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.
These private conversations work best when your friends are Freindika 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.

View file

@ -99,6 +99,10 @@
**************************/
function api_call(&$a){
GLOBAL $API, $called_api;
// preset
$type="json";
foreach ($API as $p=>$info){
if (strpos($a->query_string, $p)===0){
$called_api= explode("/",$p);
@ -144,6 +148,7 @@
//echo "<pre>"; var_dump($r); die();
}
}
logger('API call not implemented: '.$a->query_string." - ".print_r($_REQUEST,true));
$r = '<status><error>not implemented</error></status>';
switch($type){
case "xml":
@ -162,7 +167,6 @@
header ("Content-Type: application/atom+xml");
return '<?xml version="1.0" encoding="UTF-8"?>'."\n".$r;
break;
}
}
@ -453,7 +457,49 @@
return null;
}
// TODO - media uploads
/*Waitman Gobble Mod*/
function api_statuses_mediap(&$a, $type) {
if (local_user()===false) {
logger('api_statuses_update: no user');
return false;
}
$user_info = api_get_user($a);
$_REQUEST['type'] = 'wall';
$_REQUEST['profile_uid'] = local_user();
$_REQUEST['api_source'] = true;
$txt = urldecode(requestdata('status'));
require_once('library/HTMLPurifier.auto.php');
require_once('include/html2bbcode.php');
if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) {
$txt = html2bb_video($txt);
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
$purifier = new HTMLPurifier($config);
$txt = $purifier->purify($txt);
}
$txt = html2bbcode($txt);
$a->argv[1]=$user_info['screen_name']; //should be set to username?
$_REQUEST['hush']='yeah'; //tell wall_upload function to return img info instead of echo
require_once('mod/wall_upload.php');
$bebop = wall_upload_post($a);
//now that we have the img url in bbcode we can add it to the status and insert the wall item.
$_REQUEST['body']=$txt."\n\n".$bebop;
require_once('mod/item.php');
item_post($a);
// this should output the last post (the one we just posted).
return api_status_show($a,$type);
}
api_register_func('api/statuses/mediap','api_statuses_mediap', true);
/*Waitman Gobble Mod*/
function api_statuses_update(&$a, $type) {
if (local_user()===false) {
logger('api_statuses_update: no user');

View file

@ -13,30 +13,49 @@ require_once('include/html2bbcode.php');
function diaspora2bb($s) {
// for testing purposes: Collect raw markdown articles
$file = tempnam("/tmp/friendica/", "markdown");
file_put_contents($file, $s);
$s = html_entity_decode($s,ENT_COMPAT,'UTF-8');
$s = str_replace("\r","\n",$s);
// Too many new lines. So deactivated the following line
// $s = str_replace("\r","\n",$s);
// Simply remove cr.
$s = str_replace("\r","",$s);
// <br/> is invalid. Replace it with the valid expression
$s = str_replace("<br/>","<br />",$s);
$s = preg_replace('/\@\{(.+?)\; (.+?)\@(.+?)\}/','@[url=https://$3/u/$2]$1[/url]',$s);
$s = preg_replace('/\#([^\s\#])/','\\#$1',$s);
// Escaping the hash tags - doesn't always seem to work
// $s = preg_replace('/\#([^\s\#])/','\\#$1',$s);
// This seems to work
$s = preg_replace('/\#([^\s\#])/','&#35;$1',$s);
$s = Markdown($s);
$s = str_replace('&#35;','#',$s);
$s = str_replace("\n",'<br />',$s);
$s = str_replace('&#35;','#',$s);
$s = str_replace("\n",'<br />',$s);
$s = html2bbcode($s);
// $s = str_replace('&#42;','*',$s);
// Convert everything that looks like a link to a link
$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3]$2$3[/url]',$s);
$s = preg_replace("/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism",'[youtube]$2[/youtube]',$s);
$s = preg_replace("/\[url\=https?:\/\/www.youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism",'[youtube]$1[/youtube]',$s);
//$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s);
$s = preg_replace("/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism",'[youtube]$2[/youtube]',$s);
$s = preg_replace("/\[url\=https?:\/\/www.youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism",'[youtube]$1[/youtube]',$s);
$s = preg_replace("/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism",'[vimeo]$2[/vimeo]',$s);
$s = preg_replace("/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism",'[vimeo]$1[/vimeo]',$s);
$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url]$2$3$4[/url]',$s);
// remove duplicate adjacent code tags
$s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s);
$s = scale_diaspora_images($s);
// Don't show link to full picture (until it is fixed)
$s = scale_diaspora_images($s, false);
return $s;
}

View file

@ -149,21 +149,20 @@ function bbcode($Text,$preserve_nl = false) {
$Text = str_replace("[*]", "<li>", $Text);
$Text = preg_replace("/\[li\](.*?)\[\/li\]/ism", '<li>$1</li>' ,$Text);
$Text = preg_replace("/\[list\](.*?)\[\/list\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>' ,$Text);
$Text = preg_replace("/\[ul\](.*?)\[\/ul\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>'
,$Text);
$Text = preg_replace("/\[list=\](.*?)\[\/list\]/ism", '<ul class="listnone" style="list-style-type: none;">$1</ul>' ,$Text);
$Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>' ,$Text);
$Text = preg_replace("/\[ol\](.*?)\[\/ol\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>'
,$Text);
$Text = preg_replace("/\[list=((?-i)i)\](.*?)\[\/list\]/ism",'<ul class="listlowerroman" style="list-style-type:
lower-roman;">$2</ul>' ,$Text);
$Text = preg_replace("/\[list=((?-i)I)\](.*?)\[\/list\]/ism", '<ul class="listupperroman" style="list-style-type:
upper-roman;">$2</ul>' ,$Text);
$Text = preg_replace("/\[list=((?-i)a)\](.*?)\[\/list\]/ism", '<ul class="listloweralpha" style="list-style-type:
lower-alpha;">$2</ul>' ,$Text);
$Text = preg_replace("/\[list=((?-i)A)\](.*?)\[\/list\]/ism", '<ul class="listupperalpha" style="list-style-type:
upper-alpha;">$2</ul>' ,$Text);
// handle nested lists
$endlessloop = 0;
while (strpos($Text, "[/list]") and strpos($Text, "[list") and (++$endlessloop < 20)) {
$Text = preg_replace("/\[list\](.*?)\[\/list\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>' ,$Text);
$Text = preg_replace("/\[list=\](.*?)\[\/list\]/ism", '<ul class="listnone" style="list-style-type: none;">$1</ul>' ,$Text);
$Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>' ,$Text);
$Text = preg_replace("/\[list=((?-i)i)\](.*?)\[\/list\]/ism",'<ul class="listlowerroman" style="list-style-type: lower-roman;">$2</ul>' ,$Text);
$Text = preg_replace("/\[list=((?-i)I)\](.*?)\[\/list\]/ism", '<ul class="listupperroman" style="list-style-type: upper-roman;">$2</ul>' ,$Text);
$Text = preg_replace("/\[list=((?-i)a)\](.*?)\[\/list\]/ism", '<ul class="listloweralpha" style="list-style-type: lower-alpha;">$2</ul>' ,$Text);
$Text = preg_replace("/\[list=((?-i)A)\](.*?)\[\/list\]/ism", '<ul class="listupperalpha" style="list-style-type: upper-alpha;">$2</ul>' ,$Text);
}
$Text = preg_replace("/\[ul\](.*?)\[\/ul\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>' ,$Text);
$Text = preg_replace("/\[ol\](.*?)\[\/ol\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>' ,$Text);
$Text = preg_replace("/\[th\](.*?)\[\/th\]/sm", '<th>$1</th>' ,$Text);
$Text = preg_replace("/\[td\](.*?)\[\/td\]/sm", '<td>$1</td>' ,$Text);
@ -190,21 +189,24 @@ upper-alpha;">$2</ul>' ,$Text);
// Check for [code] text
$Text = preg_replace("/\[code\](.*?)\[\/code\]/ism","$CodeLayout", $Text);
// Declare the format for [quote] layout
$QuoteLayout = '<blockquote>$1</blockquote>';
// Check for [quote] text
$Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text);
// handle nested quotes
$endlessloop = 0;
while (strpos($Text, "[/quote]") !== false and strpos($Text, "[quote]") !== false and (++$endlessloop < 20))
$Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text);
// Check for [quote=Author] text
$t_wrote = t('$1 wrote:');
$Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism",
"<blockquote><strong>" . $t_wrote . "</strong> $2</blockquote>",
$Text);
// handle nested quotes
$endlessloop = 0;
while (strpos($Text, "[/quote]") !== false and strpos($Text, "[quote=") !== false and (++$endlessloop < 20))
$Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism",
"<blockquote><strong>" . $t_wrote . "</strong> $2</blockquote>",
$Text);
// [img=widthxheight]image source[/img]
$Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '<img src="$3" style="height: $2px; width: $1px;" >', $Text);

View file

@ -451,7 +451,7 @@ function diaspora_request($importer,$xml) {
// perhaps we were already sharing with this person. Now they're sharing with us.
// That makes us friends.
if($contact['rel'] == CONTACT_IS_FOLLOWER) {
if($contact['rel'] == CONTACT_IS_FOLLOWER && $importer['page-flags'] != PAGE_COMMUNITY) {
q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval(CONTACT_IS_FRIEND),
intval($contact['id']),
@ -619,6 +619,18 @@ function diaspora_request($importer,$xml) {
return;
}
function diaspora_post_allow($importer,$contact) {
if(($contact['blocked']) || ($contact['readonly']))
return false;
if($contact['rel'] == CONTACT_IS_SHARING || $contact['rel'] == CONTACT_IS_FRIEND)
return true;
if($contact['rel'] == CONTACT_IS_FOLLOWER)
if($importer['page-flags'] == PAGE_COMMUNITY)
return true;
return false;
}
function diaspora_post($importer,$xml) {
$a = get_app();
@ -629,7 +641,7 @@ function diaspora_post($importer,$xml) {
if(! $contact)
return;
if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_post: Ignoring this author.');
return 202;
}
@ -748,7 +760,7 @@ function diaspora_reshare($importer,$xml) {
if(! $contact)
return;
if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_reshare: Ignoring this author: ' . $diaspora_handle . ' ' . print_r($xml,true));
return 202;
}
@ -900,7 +912,7 @@ function diaspora_asphoto($importer,$xml) {
if(! $contact)
return;
if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_asphoto: Ignoring this author.');
return 202;
}
@ -1001,7 +1013,7 @@ function diaspora_comment($importer,$xml,$msg) {
return;
}
if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_comment: Ignoring this author.');
return 202;
}
@ -1446,7 +1458,7 @@ function diaspora_photo($importer,$xml,$msg) {
return;
}
if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_photo: Ignoring this author.');
return 202;
}
@ -1503,7 +1515,7 @@ function diaspora_like($importer,$xml,$msg) {
return;
}
if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_like: Ignoring this author.');
return 202;
}

View file

@ -1,127 +1,286 @@
<?php
/*
html2bbcode.php
Converter for HTML to BBCode
Made by: ike@piratenpartei.de
Originally made for the syncom project: http://wiki.piratenpartei.de/Syncom
https://github.com/annando/Syncom
*/
/**
* html2bbcode
*/
function html2bbcode($s) {
// only keep newlines from source that are within pre tags
$s = stripnl_exceptinpre($s);
// Tags to Find
$htmltags = array(
'/\<pre\>(.*?)\<\/pre\>/is',
'/\<p(.*?)\>/is',
'/\<\/p\>/is',
'/\<b\>(.*?)\<\/b\>/is',
'/\<i\>(.*?)\<\/i\>/is',
'/\<u\>(.*?)\<\/u\>/is',
'/\<ul\>(.*?)\<\/ul\>/is',
'/\<li\>(.*?)\<\/li\>/is',
'/\<img(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is',
'/\<img(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is',
'/\<img(.*?)src=\"(.*?)\"(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)\>/is',
'/\<img(.*?)src=\"(.*?)\"(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)\>/is',
'/\<img(.*?) src=\"(.*?)\" (.*?)\>/is',
'/\<div(.*?)\>(.*?)\<\/div\>/is',
'/\<br(.*?)\>/is',
'/\<strong\>(.*?)\<\/strong\>/is',
'/\<a (.*?)href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>/is',
'/\<code\>(.*?)\<\/code\>/is',
'/\<span style=\"color:(.*?)\"\>(.*?)\<\/span\>/is',
'/\<span style=\"font-size:(.*?)\"\>(.*?)\<\/span\>/is',
'/\<blockquote\>(.*?)\<\/blockquote\>/is',
'/\<video(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/video\>/is',
'/\<audio(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/audio\>/is',
'/\<iframe(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/iframe\>/is',
);
// Replace with
$bbtags = array(
'[code]$1[/code]',
'',
"\n",
'[b]$1[/b]',
'[i]$1[/i]',
'[u]$1[/u]',
'[list]$1[/list]',
'[*]$1',
'[img=$2x$4]$6[/img]',
'[img=$4x$2]$6[/img]',
'[img=$4x$6]$2[/img]',
'[img=$6x$4]$2[/img]',
'[img]$2[/img]',
'$2',
"\n",
'[b]$1[/b]',
'[url=$2]$4[/url]',
'[code]$1[/code]',
'[color="$1"]$2[/color]',
'[size=$1]$2[/size]',
'[quote]$1[/quote]',
'[video]$1[/video]',
'[audio]$1[/audio]',
'[iframe]$1[/iframe]',
);
// Replace $htmltags in $text with $bbtags
$text = preg_replace ($htmltags, $bbtags, $s);
call_hooks('html2bbcode', $text);
// Strip all other HTML tags
$text = strip_tags($text);
return $text;
}
function stripnl_exceptinpre($string)
function node2bbcode(&$doc, $oldnode, $attributes, $startbb, $endbb)
{
// First, check for <pre> tag
if(strpos($string, '<pre>') === false)
{
return str_replace("\n","", $string);
}
// If there is a <pre>, we have to split by line
// and manually replace the linebreaks
$strArr=explode("\n", $string);
$output="";
$preFound=false;
// Loop over each line
foreach($strArr as $line)
{ // See if the line has a <pre>. If it does, set $preFound to true
if(strpos($line, "<pre>") !== false)
{
$preFound=true;
}
elseif(strpos($line, "</pre>") !== false)
{
$preFound=false;
}
// If we are in a pre tag, add line and also add \n, else add the line without \n
if($preFound)
{
$output .= $line . "\n";
}
else
{
$output .= $line ;
}
}
return $output;
do {
$done = node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb);
} while ($done);
}
function node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb)
{
$savestart = str_replace('$', '%', $startbb);
$replace = false;
$xpath = new DomXPath($doc);
$list = $xpath->query("//".$oldnode);
foreach ($list as $oldNode) {
$attr = array();
if ($oldNode->attributes->length)
foreach ($oldNode->attributes as $attribute)
$attr[$attribute->name] = $attribute->value;
$replace = true;
$startbb = $savestart;
$i = 0;
foreach ($attributes as $attribute => $value) {
$startbb = str_replace('%'.++$i, '$1', $startbb);
if (strpos('*'.$startbb, '$1') > 0) {
if ($replace and (@$attr[$attribute] != '')) {
$startbb = preg_replace($value, $startbb, $attr[$attribute], -1, $count);
// If nothing could be changed
if ($count == 0)
$replace = false;
} else
$replace = false;
} else {
if (@$attr[$attribute] != $value)
$replace = false;
}
}
if ($replace) {
$StartCode = $oldNode->ownerDocument->createTextNode($startbb);
$EndCode = $oldNode->ownerDocument->createTextNode($endbb);
$oldNode->parentNode->insertBefore($StartCode, $oldNode);
if ($oldNode->hasChildNodes()) {
foreach ($oldNode->childNodes as $child) {
$newNode = $child->cloneNode(true);
$oldNode->parentNode->insertBefore($newNode, $oldNode);
}
}
$oldNode->parentNode->insertBefore($EndCode, $oldNode);
$oldNode->parentNode->removeChild($oldNode);
}
}
return($replace);
}
function deletenode(&$doc, $node)
{
$xpath = new DomXPath($doc);
$list = $xpath->query("//".$node);
foreach ($list as $child)
$child->parentNode->removeChild($child);
}
function html2bbcode($message)
{
//$file = tempnam("/tmp/", "html");
//file_put_contents($file, $message);
$message = str_replace("\r", "", $message);
$message = str_replace(array(
"<li><p>",
"</p></li>"),
array(
"<li>",
"</li>"),
$message);
// remove namespaces
$message = preg_replace('=<(\w+):(.+?)>=', '<removeme>', $message);
$message = preg_replace('=</(\w+):(.+?)>=', '</removeme>', $message);
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$message = mb_convert_encoding($message, 'HTML-ENTITIES', "UTF-8");
@$doc->loadHTML($message);
deletenode($doc, 'style');
deletenode($doc, 'head');
deletenode($doc, 'title');
deletenode($doc, 'meta');
deletenode($doc, 'xml');
deletenode($doc, 'removeme');
$xpath = new DomXPath($doc);
$list = $xpath->query("//pre");
foreach ($list as $node)
$node->nodeValue = str_replace("\n", "\r", $node->nodeValue);
$message = $doc->saveHTML();
$message = str_replace(array("\n<", ">\n", "\r", "\n", "\xC3\x82\xC2\xA0"), array("<", ">", "<br>", " ", ""), $message);
$message = preg_replace('= [\s]*=i', " ", $message);
@$doc->loadHTML($message);
node2bbcode($doc, 'html', array(), "", "");
node2bbcode($doc, 'body', array(), "", "");
// Outlook-Quote - Variant 1
node2bbcode($doc, 'p', array('class'=>'MsoNormal', 'style'=>'margin-left:35.4pt'), '[quote]', '[/quote]');
// Outlook-Quote - Variant 2
node2bbcode($doc, 'div', array('style'=>'border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'), '[quote]', '[/quote]');
// MyBB-Stuff
node2bbcode($doc, 'span', array('style'=>'text-decoration: underline;'), '[u]', '[/u]');
node2bbcode($doc, 'span', array('style'=>'font-style: italic;'), '[i]', '[/i]');
node2bbcode($doc, 'span', array('style'=>'font-weight: bold;'), '[b]', '[/b]');
node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/', 'size'=>'/(\d+)/', 'color'=>'/(.+)/'), '[font=$1][size=$2][color=$3]', '[/color][/size][/font]');
node2bbcode($doc, 'font', array('size'=>'/(\d+)/', 'color'=>'/(.+)/'), '[size=$1][color=$2]', '[/color][/size]');
node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/', 'size'=>'/(.+)/'), '[font=$1][size=$2]', '[/size][/font]');
node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/', 'color'=>'/(.+)/'), '[font=$1][color=$3]', '[/color][/font]');
node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/'), '[font=$1]', '[/font]');
node2bbcode($doc, 'font', array('size'=>'/(\d+)/'), '[size=$1]', '[/size]');
node2bbcode($doc, 'font', array('color'=>'/(.+)/'), '[color=$1]', '[/color]');
node2bbcode($doc, 'span', array('style'=>'/.*color:\s*(.+?)[,;].*/'), '[color="$1"]', '[/color]');
node2bbcode($doc, 'span', array('style'=>'/.*font-size:\s*(\d+)/'), '[size=$1]', '[/size]');
//node2bbcode($doc, 'span', array('style'=>'/.*font-family:\s*(.+?)[,;].*/'), '[font=$1]', '[/font]');
//node2bbcode($doc, 'div', array('style'=>'/.*font-family:\s*(.+?)[,;].*font-size:\s*(\d+?)pt.*/'), '[font=$1][size=$2]', '[/size][/font]');
//node2bbcode($doc, 'div', array('style'=>'/.*font-family:\s*(.+?)[,;].*font-size:\s*(\d+?)px.*/'), '[font=$1][size=$2]', '[/size][/font]');
//node2bbcode($doc, 'div', array('style'=>'/.*font-family:\s*(.+?)[,;].*/'), '[font=$1]', '[/font]');
node2bbcode($doc, 'strong', array(), '[b]', '[/b]');
node2bbcode($doc, 'em', array(), '[i]', '[/i]');
node2bbcode($doc, 'b', array(), '[b]', '[/b]');
node2bbcode($doc, 'i', array(), '[i]', '[/i]');
node2bbcode($doc, 'u', array(), '[u]', '[/u]');
node2bbcode($doc, 'big', array(), "[size=large]", "[/size]");
node2bbcode($doc, 'small', array(), "[size=small]", "[/size]");
node2bbcode($doc, 'blockquote', array(), '[quote]', '[/quote]');
node2bbcode($doc, 'br', array(), "\n", '');
node2bbcode($doc, 'p', array('class'=>'MsoNormal'), "\n", "");
node2bbcode($doc, 'div', array('class'=>'MsoNormal'), "\r", "");
node2bbcode($doc, 'span', array(), "", "");
node2bbcode($doc, 'span', array(), "", "");
node2bbcode($doc, 'pre', array(), "", "");
node2bbcode($doc, 'div', array(), "\r", "\r");
node2bbcode($doc, 'p', array(), "\n", "\n");
node2bbcode($doc, 'ul', array(), "[list]", "[/list]");
node2bbcode($doc, 'ol', array(), "[list=1]", "[/list]");
node2bbcode($doc, 'li', array(), "[*]", "");
node2bbcode($doc, 'hr', array(), "[hr]", "");
//node2bbcode($doc, 'table', array(), "", "");
//node2bbcode($doc, 'tr', array(), "\n", "");
//node2bbcode($doc, 'td', array(), "\t", "");
node2bbcode($doc, 'table', array(), "[table]", "[/table]");
node2bbcode($doc, 'th', array(), "[th]", "[/th]");
node2bbcode($doc, 'tr', array(), "[tr]", "[/tr]");
node2bbcode($doc, 'td', array(), "[td]", "[/td]");
node2bbcode($doc, 'h1', array(), "\n\n[size=xx-large][b]", "[/b][/size]\n");
node2bbcode($doc, 'h2', array(), "\n\n[size=x-large][b]", "[/b][/size]\n");
node2bbcode($doc, 'h3', array(), "\n\n[size=large][b]", "[/b][/size]\n");
node2bbcode($doc, 'h4', array(), "\n\n[size=medium][b]", "[/b][/size]\n");
node2bbcode($doc, 'h5', array(), "\n\n[size=small][b]", "[/b][/size]\n");
node2bbcode($doc, 'h6', array(), "\n\n[size=x-small][b]", "[/b][/size]\n");
node2bbcode($doc, 'a', array('href'=>'/(.+)/'), '[url=$1]', '[/url]');
node2bbcode($doc, 'img', array('src'=>'/(.+)/', 'width'=>'/(\d+)/', 'height'=>'/(\d+)/'), '[img$2x$3]$1', '[/img]');
node2bbcode($doc, 'img', array('src'=>'/(.+)/'), '[img]$1', '[/img]');
node2bbcode($doc, 'video', array('src'=>'/(.+)/'), '[video]$1', '[/video]');
node2bbcode($doc, 'audio', array('src'=>'/(.+)/'), '[audio]$1', '[/audio]');
node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), '[iframe]$1', '[/iframe]');
node2bbcode($doc, 'code', array(), '[code]$1', '[/code]');
$message = $doc->saveHTML();
// I'm removing something really disturbing
// Don't know exactly what it is
$message = str_replace(chr(194).chr(160), ' ', $message);
$message = str_replace("&nbsp;", " ", $message);
// removing multiple DIVs
$message = preg_replace('=\r *\r=i', "\n", $message);
$message = str_replace("\r", "\n", $message);
call_hooks('html2bbcode', $message);
$message = strip_tags($message);
$message = html_entity_decode($message, ENT_QUOTES, 'UTF-8');
$message = str_replace(array("<"), array("&lt;"), $message);
// remove quotes if they don't make sense
$message = preg_replace('=\[/quote\][\s]*\[quote\]=i', "\n", $message);
$message = preg_replace('=\[quote\]\s*=i', "[quote]", $message);
$message = preg_replace('=\s*\[/quote\]=i', "[/quote]", $message);
do {
$oldmessage = $message;
$message = str_replace("\n \n", "\n\n", $message);
} while ($oldmessage != $message);
do {
$oldmessage = $message;
$message = str_replace("\n\n\n", "\n\n", $message);
} while ($oldmessage != $message);
do {
$oldmessage = $message;
$message = str_replace(array(
"[/size]\n\n",
"\n[hr]",
"[hr]\n",
"\n[list",
"[/list]\n",
"\n[/list]",
"[list]\n",
"[list=1]\n",
"\n[*]"),
array(
"[/size]\n",
"[hr]",
"[hr]",
"[list",
"[/list]",
"[/list]",
"[list]",
"[list=1]",
"[*]"),
$message);
} while ($message != $oldmessage);
$message = str_replace(array('[b][b]', '[/b][/b]', '[i][i]', '[/i][/i]'),
array('[b]', '[/b]', '[i]', '[/i]'), $message);
// Handling Yahoo style of mails
$message = str_replace('[hr][b]From:[/b]', '[quote][b]From:[/b]', $message);
return(trim($message));
}
?>

View file

@ -1551,8 +1551,9 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
}
$force_parent = false;
if($contact['network'] === NETWORK_OSTATUS) {
$force_parent = true;
if($contact['network'] === NETWORK_OSTATUS || stristr($contact['url'],'twitter.com')) {
if($contact['network'] === NETWORK_OSTATUS)
$force_parent = true;
if(strlen($datarray['title']))
unset($datarray['title']);
$r = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d",

View file

@ -371,10 +371,14 @@ function poller_run($argv, $argc){
}
elseif($contact['network'] === NETWORK_MAIL || $contact['network'] === NETWORK_MAIL2) {
logger("Mail: Fetching");
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
if($mail_disabled)
continue;
logger("Mail: Enabled");
$mbox = null;
$x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1",
intval($importer_uid)
@ -388,6 +392,7 @@ function poller_run($argv, $argc){
openssl_private_decrypt(hex2bin($mailconf[0]['pass']),$password,$x[0]['prvkey']);
$mbox = email_connect($mailbox,$mailconf[0]['user'],$password);
unset($password);
logger("Mail: Connect");
if($mbox) {
q("UPDATE `mailacct` SET `last_check` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
dbesc(datetime_convert()),
@ -397,11 +402,16 @@ function poller_run($argv, $argc){
}
}
if($mbox) {
logger("Mail: mbox");
$msgs = email_poll($mbox,$contact['addr']);
if(count($msgs)) {
logger("Mail: Parsing ".count($msgs)." mails.");
foreach($msgs as $msg_uid) {
logger("Mail: Parsing mail ".$msg_uid);
$datarray = array();
$meta = email_msg_meta($mbox,$msg_uid);
$headers = email_msg_headers($mbox,$msg_uid);
@ -436,6 +446,7 @@ function poller_run($argv, $argc){
);
if(count($r)) {
logger("Mail: Seen before ".$msg_uid);
if($meta->deleted && ! $r[0]['deleted']) {
q("UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `id` = %d LIMIT 1",
dbesc(datetime_convert()),
@ -448,10 +459,14 @@ function poller_run($argv, $argc){
$datarray['created'] = datetime_convert('UTC','UTC',$meta->date);
$r = email_get_msg($mbox,$msg_uid);
if(! $r)
if(! $r) {
logger("Mail: can't fetch msg ".$msg_uid);
continue;
}
$datarray['body'] = escape_tags($r['body']);
logger("Mail: Importing ".$msg_uid);
// some mailing lists have the original author as 'from' - add this sender info to msg body.
// todo: adding a gravatar for the original author would be cool

View file

@ -675,12 +675,24 @@ function linkify($s) {
* @Parameter: string $s
*
* Returns string
*
* It is expected that this function will be called using HTML text.
* We will escape text between HTML pre and code blocks from being
* processed.
*
* At a higher level, the bbcode [nosmile] tag can be used to prevent this
* function from being executed by the prepare_text() routine when preparing
* bbcode source for HTML display
*
*/
if(! function_exists('smilies')) {
function smilies($s, $sample = false) {
$a = get_app();
$s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','smile_encode',$s);
$s = preg_replace_callback('/<code>(.*?)<\/code>/ism','smile_encode',$s);
$texts = array(
'&lt;3',
'&lt;/3',
@ -777,10 +789,24 @@ function smilies($s, $sample = false) {
$s = str_replace($params['texts'],$params['icons'],$params['string']);
}
$s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','smile_decode',$s);
$s = preg_replace_callback('/<code>(.*?)<\/code>/ism','smile_decode',$s);
return $s;
}}
function smile_encode($m) {
return(str_replace($m[1],base64url_encode($m[1]),$m[0]));
}
function smile_decode($m) {
return(str_replace($m[1],base64url_decode($m[1]),$m[0]));
}
if(! function_exists('day_translate')) {
function day_translate($s) {
$ret = str_replace(array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),

340
library/markdown.php Executable file → Normal file
View file

@ -3,8 +3,8 @@
# Markdown Extra - A text-to-HTML conversion tool for web writers
#
# PHP Markdown & Extra
# Copyright (c) 2004-2008 Michel Fortin
# <http://www.michelf.com/projects/php-markdown/>
# Copyright (c) 2004-2012 Michel Fortin
# <http://michelf.com/projects/php-markdown/>
#
# Original Markdown
# Copyright (c) 2004-2006 John Gruber
@ -12,8 +12,8 @@
#
define( 'MARKDOWN_VERSION', "1.0.1m" ); # Sat 21 Jun 2008
define( 'MARKDOWNEXTRA_VERSION', "1.2.3" ); # Wed 31 Dec 2008
define( 'MARKDOWN_VERSION', "1.0.1o" ); # Sun 8 Jan 2012
define( 'MARKDOWNEXTRA_VERSION', "1.2.5" ); # Sun 8 Jan 2012
#
@ -34,17 +34,6 @@ define( 'MARKDOWNEXTRA_VERSION', "1.2.3" ); # Wed 31 Dec 2008
@define( 'MARKDOWN_FN_LINK_CLASS', "" );
@define( 'MARKDOWN_FN_BACKLINK_CLASS', "" );
# Enables special handling for links pointing outside of the current domain.
@define( 'MARKDOWN_EL_ENABLE', true); # Use this feature at all?
@define( 'MARKDOWN_EL_LOCAL_DOMAIN', null); # Leave as null to autodetect
@define( 'MARKDOWN_EL_NEW_WINDOW', true); # Open link in a new browser?
@define( 'MARKDOWN_EL_CSS_CLASS', 'external'); # Leave as null for no class
# Enables header auto-self-linking.
@define( 'MARKDOWN_HA_ENABLE', true ); # Use this feature at all?
@define( 'MARKDOWN_HA_CLASS', 'hidden-selflink' ); # Leave as null for no class
@define( 'MARKDOWN_HA_TEXT', '&larr;' ); # The text to use as the link
#
# WordPress settings:
@ -80,16 +69,16 @@ function Markdown($text) {
/*
Plugin Name: Markdown Extra
Plugin URI: http://www.michelf.com/projects/php-markdown/
Description: <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a>
Version: 1.2.2
Plugin URI: http://michelf.com/projects/php-markdown/
Description: <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://michelf.com/projects/php-markdown/">More...</a>
Version: 1.2.5
Author: Michel Fortin
Author URI: http://www.michelf.com/
Author URI: http://michelf.com/
*/
if (isset($wp_version)) {
# More details about how it works here:
# <http://www.michelf.com/weblog/2005/wordpress-text-flow-vs-markdown/>
# <http://michelf.com/weblog/2005/wordpress-text-flow-vs-markdown/>
# Post content and excerpts
# - Remove WordPress paragraph generator.
@ -182,7 +171,7 @@ function identify_modifier_markdown() {
'authors' => 'Michel Fortin and John Gruber',
'licence' => 'GPL',
'version' => MARKDOWNEXTRA_VERSION,
'help' => '<a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a>',
'help' => '<a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://michelf.com/projects/php-markdown/">More...</a>',
);
}
@ -367,14 +356,18 @@ class Markdown_Parser {
[ ]*
\n? # maybe *one* newline
[ ]*
<?(\S+?)>? # url = $2
(?:
<(.+?)> # url = $2
|
(\S+?) # url = $3
)
[ ]*
\n? # maybe one newline
[ ]*
(?:
(?<=\s) # lookbehind for whitespace
["(]
(.*?) # title = $3
(.*?) # title = $4
[")]
[ ]*
)? # title is optional
@ -386,8 +379,9 @@ class Markdown_Parser {
}
function _stripLinkDefinitions_callback($matches) {
$link_id = strtolower($matches[1]);
$this->urls[$link_id] = $matches[2];
$this->titles[$link_id] =& $matches[3];
$url = $matches[2] == '' ? $matches[3] : $matches[2];
$this->urls[$link_id] = $url;
$this->titles[$link_id] =& $matches[4];
return ''; # String that will replace the block
}
@ -412,7 +406,7 @@ class Markdown_Parser {
#
$block_tags_a_re = 'ins|del';
$block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
'script|noscript|form|fieldset|iframe|math|textarea';
'script|noscript|form|fieldset|iframe|math';
# Regular expression for the content of a block tag.
$nested_tags_level = 4;
@ -710,37 +704,37 @@ class Markdown_Parser {
('.$this->nested_brackets_re.') # link text = $2
\]
\( # literal paren
[ ]*
[ \n]*
(?:
<(\S*)> # href = $3
<(.+?)> # href = $3
|
('.$this->nested_url_parenthesis_re.') # href = $4
)
[ ]*
[ \n]*
( # $5
([\'"]) # quote char = $6
(.*?) # Title = $7
\6 # matching quote
[ ]* # ignore any spaces/tabs between closing quote and )
[ \n]* # ignore any spaces/tabs between closing quote and )
)? # title is optional
\)
)
}xs',
array(&$this, '_DoAnchors_inline_callback'), $text);
array(&$this, '_doAnchors_inline_callback'), $text);
#
# Last, handle reference-style shortcuts: [link text]
# These must come last in case you've also got [link test][1]
# or [link test](/foo)
# These must come last in case you've also got [link text][1]
# or [link text](/foo)
#
// $text = preg_replace_callback('{
// ( # wrap whole match in $1
// \[
// ([^\[\]]+) # link text = $2; can\'t contain [ or ]
// \]
// )
// }xs',
// array(&$this, '_doAnchors_reference_callback'), $text);
$text = preg_replace_callback('{
( # wrap whole match in $1
\[
([^\[\]]+) # link text = $2; can\'t contain [ or ]
\]
)
}xs',
array(&$this, '_doAnchors_reference_callback'), $text);
$this->in_anchor = false;
return $text;
@ -835,18 +829,18 @@ class Markdown_Parser {
\]
\s? # One optional whitespace character
\( # literal paren
[ ]*
[ \n]*
(?:
<(\S*)> # src url = $3
|
('.$this->nested_url_parenthesis_re.') # src url = $4
)
[ ]*
[ \n]*
( # $5
([\'"]) # quote char = $6
(.*?) # title = $7
\6 # matching quote
[ ]*
[ \n]*
)? # title is optional
\)
)
@ -956,22 +950,25 @@ class Markdown_Parser {
# Re-usable patterns to match list item bullets and number markers:
$marker_ul_re = '[*+-]';
$marker_ol_re = '\d+[.]';
$marker_ol_re = '\d+[\.]';
$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
$markers_relist = array($marker_ul_re, $marker_ol_re);
$markers_relist = array(
$marker_ul_re => $marker_ol_re,
$marker_ol_re => $marker_ul_re,
);
foreach ($markers_relist as $marker_re) {
foreach ($markers_relist as $marker_re => $other_marker_re) {
# Re-usable pattern to match any entirel ul or ol list:
$whole_list_re = '
( # $1 = whole list
( # $2
[ ]{0,'.$less_than_tab.'}
('.$marker_re.') # $3 = first list item marker
([ ]{0,'.$less_than_tab.'}) # $3 = number of spaces
('.$marker_re.') # $4 = first list item marker
[ ]+
)
(?s:.+?)
( # $4
( # $5
\z
|
\n{2,}
@ -980,6 +977,12 @@ class Markdown_Parser {
[ ]*
'.$marker_re.'[ ]+
)
|
(?= # Lookahead for another kind of list
\n
\3 # Must have the same indentation
'.$other_marker_re.'[ ]+
)
)
)
'; // mx
@ -1008,11 +1011,11 @@ class Markdown_Parser {
function _doLists_callback($matches) {
# Re-usable patterns to match list item bullets and number markers:
$marker_ul_re = '[*+-]';
$marker_ol_re = '\d+[.]';
$marker_ol_re = '\d+[\.]';
$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
$list = $matches[1];
$list_type = preg_match("/$marker_ul_re/", $matches[3]) ? "ul" : "ol";
$list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
$marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
@ -1138,25 +1141,25 @@ class Markdown_Parser {
var $em_relist = array(
'' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S)(?![.,:;]\s)',
'*' => '(?<=\S)(?<!\*)\*(?!\*)',
'_' => '(?<=\S)(?<!_)_(?!_)',
'' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![\.,:;]\s)',
'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
'_' => '(?<=\S|^)(?<!_)_(?!_)',
);
var $strong_relist = array(
'' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S)(?![.,:;]\s)',
'**' => '(?<=\S)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S)(?<!_)__(?!_)',
'' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![\.,:;]\s)',
'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S|^)(?<!_)__(?!_)',
);
var $em_strong_relist = array(
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S)(?![.,:;]\s)',
'***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S)(?<!_)___(?!_)',
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![\.,:;]\s)',
'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S|^)(?<!_)___(?!_)',
);
var $em_strong_prepared_relist;
function prepareItalicsAndBold() {
#
# Prepare regular expressions for seraching emphasis tokens in any
# Prepare regular expressions for searching emphasis tokens in any
# context.
#
foreach ($this->em_relist as $em => $em_re) {
@ -1191,7 +1194,7 @@ class Markdown_Parser {
$token_re = $this->em_strong_prepared_relist["$em$strong"];
#
# Each loop iteration seach for the next emphasis token.
# Each loop iteration search for the next emphasis token.
# Each token is then passed to handleSpanToken.
#
$parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
@ -1324,7 +1327,7 @@ class Markdown_Parser {
# These leading spaces cause problem with <pre> content,
# so we need to fix that:
$bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx',
array(&$this, '_DoBlockQuotes_callback2'), $bq);
array(&$this, '_doBlockQuotes_callback2'), $bq);
return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
}
@ -1446,9 +1449,17 @@ class Markdown_Parser {
<
(?:mailto:)?
(
[-.\w\x80-\xFF]+
(?:
[-!#$%&\'*+/=?^_`.{|}~\w\x80-\xFF]+
|
".*?"
)
\@
[-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
(?:
[-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
|
\[[\d.a-fA-F:]+\] # IPv4 & IPv6
)
)
>
}xi',
@ -1676,15 +1687,6 @@ class MarkdownExtra_Parser extends Markdown_Parser {
var $fn_link_class = MARKDOWN_FN_LINK_CLASS;
var $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS;
var $el_enable = MARKDOWN_EL_ENABLE;
var $el_local_domain = MARKDOWN_EL_LOCAL_DOMAIN;
var $el_new_window = MARKDOWN_EL_NEW_WINDOW;
var $el_css_class = MARKDOWN_EL_CSS_CLASS;
var $ha_enable = MARKDOWN_HA_ENABLE;
var $ha_class = MARKDOWN_HA_CLASS;
var $ha_text = MARKDOWN_HA_TEXT;
# Predefined abbreviations.
var $predef_abbr = array();
@ -1697,10 +1699,6 @@ class MarkdownExtra_Parser extends Markdown_Parser {
# initialize the table.
$this->escape_chars .= ':|';
if ($this->el_local_domain === null) {
$this->el_local_domain = $_SERVER['SERVER_NAME'];
}
# Insert extra document, block, and span transformations.
# Parent constructor will do the sorting.
$this->document_gamut += array(
@ -1879,7 +1877,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
'. ( !$span ? ' # If not in span.
|
# Indented code block
(?> ^[ ]*\n? | \n[ ]*\n )
(?: ^[ ]*\n | ^ | \n[ ]*\n )
[ ]{'.($indent+4).'}[^\n]* \n
(?>
(?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n
@ -1887,7 +1885,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
|
# Fenced code block marker
(?> ^ | \n )
[ ]{'.($indent).'}~~~+[ ]*\n
[ ]{0,'.($indent).'}~~~+[ ]*\n
' : '' ). ' # End (if not is span).
)
}xs';
@ -1949,31 +1947,32 @@ class MarkdownExtra_Parser extends Markdown_Parser {
}
}
#
# Check for: Indented code block or fenced code block marker.
# Check for: Fenced code block marker.
#
else if ($tag{0} == "\n" || $tag{0} == "~") {
if ($tag{1} == "\n" || $tag{1} == " ") {
# Indented code block: pass it unchanged, will be handled
# later.
$parsed .= $tag;
else if (preg_match('{^\n?[ ]{0,'.($indent+3).'}~}', $tag)) {
# Fenced code block marker: find matching end marker.
$tag_re = preg_quote(trim($tag));
if (preg_match('{^(?>.*\n)+?[ ]{0,'.($indent).'}'.$tag_re.'[ ]*\n}', $text,
$matches))
{
# End marker found: pass text unchanged until marker.
$parsed .= $tag . $matches[0];
$text = substr($text, strlen($matches[0]));
}
else {
# Fenced code block marker: find matching end marker.
$tag_re = preg_quote(trim($tag));
if (preg_match('{^(?>.*\n)+?'.$tag_re.' *\n}', $text,
$matches))
{
# End marker found: pass text unchanged until marker.
$parsed .= $tag . $matches[0];
$text = substr($text, strlen($matches[0]));
}
else {
# No end marker: just skip it.
$parsed .= $tag;
}
# No end marker: just skip it.
$parsed .= $tag;
}
}
#
# Check for: Indented code block.
#
else if ($tag{0} == "\n" || $tag{0} == " ") {
# Indented code block: pass it unchanged, will be handled
# later.
$parsed .= $tag;
}
#
# Check for: Opening Block level tag or
# Opening Context Block tag (like ins and del)
# used as a block tag (tag is alone on it's line).
@ -2220,81 +2219,6 @@ class MarkdownExtra_Parser extends Markdown_Parser {
return $this->hashPart($text, 'C');
}
function _doAnchors_inline_callback($matches) {
// $whole_match = $matches[1];
$link_text = $this->runSpanGamut($matches[2]);
$url = $matches[3] == '' ? $matches[4] : $matches[3];
$title =& $matches[7];
$url = $this->encodeAttribute($url);
$result = "<a href=\"$url\"";
if (isset($title)) {
$title = $this->encodeAttribute($title);
$result .= " title=\"$title\"";
}
if ($this->el_enable && preg_match('/^https?\:\/\//', $url) && !preg_match('/^https?\:\/\/'.$this->el_local_domain.'/', $url)) {
if ($this->el_new_window) {
$result .= ' target="_blank"';
}
if ($this->el_css_class) {
$result .= ' class="'.$this->el_css_class.'"';
}
}
$link_text = $this->runSpanGamut($link_text);
$result .= ">$link_text</a>";
return $this->hashPart($result);
}
function _doAnchors_reference_callback($matches) {
$whole_match = $matches[1];
$link_text = $matches[2];
$link_id =& $matches[3];
$result = '';
if ($link_id == "") {
# for shortcut links like [this][] or [this].
$link_id = $link_text;
}
# lower-case and turn embedded newlines into spaces
$link_id = strtolower($link_id);
$link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
if (isset($this->urls[$link_id])) {
$url = $this->urls[$link_id];
$url = $this->encodeAttribute($url);
$result = "<a href=\"$url\"";
if ( isset( $this->titles[$link_id] ) ) {
$title = $this->titles[$link_id];
$title = $this->encodeAttribute($title);
$result .= " title=\"$title\"";
}
if ($this->el_enable && preg_match('/^https?\:\/\//', $url) && !preg_match('/^https?\:\/\/'.$this->el_local_domain.'/', $url)) {
if ($this->el_new_window) {
$result .= ' target="_blank"';
}
if ($this->el_css_class) {
$result .= ' class="'.$this->el_css_class.'"';
}
}
$link_text = $this->runSpanGamut($link_text);
$result .= ">$link_text</a>";
$result = $this->hashPart($result);
}
else {
$result = $whole_match;
}
return $result;
}
function doHeaders($text) {
#
@ -2345,36 +2269,15 @@ class MarkdownExtra_Parser extends Markdown_Parser {
return $matches[0];
$level = $matches[3]{0} == '=' ? 1 : 2;
$attr = $this->_doHeaders_attr($id =& $matches[2]);
$body = $this->runSpanGamut($matches[1]);
$body = $this->_doHeaders_selflink($id, $body);
$block = "<h$level$attr>$body</h$level>";
$block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
return "\n" . $this->hashBlock($block) . "\n\n";
}
function _doHeaders_callback_atx($matches) {
$level = strlen($matches[1]);
$attr = $this->_doHeaders_attr($id =& $matches[3]);
$body = $this->runSpanGamut($matches[2]);
$body = $this->_doHeaders_selflink($id, $body);
$block = "<h$level$attr>$body</h$level>";
$block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
return "\n" . $this->hashBlock($block) . "\n\n";
}
function _doHeaders_selflink($id, $body) {
if (!empty($id)) {
$link = '<a href="#'.$id.'"';
if ($this->ha_class) {
$link .= ' class="'.$this->ha_class.'"';
}
$link .= '>'.$this->ha_text.'</a>';
$body .= $link;
}
return $body;
}
function doTables($text) {
@ -2596,7 +2499,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
(?= \n+ # stop at next definition mark,
(?: # next term or end of text
[ ]{0,'.$less_than_tab.'} [:][ ] |
<dt | \z
<dt> | \z
)
)
}xm',
@ -2605,24 +2508,11 @@ class MarkdownExtra_Parser extends Markdown_Parser {
return $list_str;
}
function _processDefListItems_callback_dt($matches) {
$anchor_regexp = '/\{\#([-_:a-zA-Z0-9]+)\}/';
$terms = explode("\n", trim($matches[1]));
$text = '';
$id = array();
foreach ($terms as $term) {
$id = '';
if (preg_match($anchor_regexp, $term, $id) > 0) {
$term = preg_replace($anchor_regexp, '', $term);
$id = ' id="'.trim($id[1]).'"';
}
if (count($id) === 0) {
$id = '';
}
$term = $this->runSpanGamut(trim($term));
$text .= "\n<dt$id>" . $term . "</dt>";
$text .= "\n<dt>" . $term . "</dt>";
}
return $text . "\n";
}
@ -2698,19 +2588,19 @@ class MarkdownExtra_Parser extends Markdown_Parser {
# work in the middle of a word.
#
var $em_relist = array(
'' => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S)(?![.,:;]\s)',
'*' => '(?<=\S)(?<!\*)\*(?!\*)',
'_' => '(?<=\S)(?<!_)_(?![a-zA-Z0-9_])',
'' => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S|$)(?![\.,:;]\s)',
'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
'_' => '(?<=\S|^)(?<!_)_(?![a-zA-Z0-9_])',
);
var $strong_relist = array(
'' => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S)(?![.,:;]\s)',
'**' => '(?<=\S)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S)(?<!_)__(?![a-zA-Z0-9_])',
'' => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S|$)(?![\.,:;]\s)',
'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S|^)(?<!_)__(?![a-zA-Z0-9_])',
);
var $em_strong_relist = array(
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S)(?![.,:;]\s)',
'***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S)(?<!_)___(?![a-zA-Z0-9_])',
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S|$)(?![\.,:;]\s)',
'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S|^)(?<!_)___(?![a-zA-Z0-9_])',
);
@ -2808,7 +2698,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
if (!empty($this->footnotes_ordered)) {
$text .= "\n\n";
$text .= "<div class=\"footnotes\">\n";
$text .= "<hr". MARKDOWN_EMPTY_ELEMENT_SUFFIX ."\n";
$text .= "<hr". $this->empty_element_suffix ."\n";
$text .= "<ol>\n\n";
$attr = " rev=\"footnote\"";
@ -3002,8 +2892,8 @@ Copyright and License
---------------------
PHP Markdown & Extra
Copyright (c) 2004-2008 Michel Fortin
<http://www.michelf.com/>
Copyright (c) 2004-2009 Michel Fortin
<http://michelf.com/>
All rights reserved.
Based on Markdown

View file

@ -68,7 +68,7 @@ function group_content(&$a) {
return;
}
// Switch to text mod interface if we have more than 'n' contacts or group members
// Switch to text mode interface if we have more than 'n' contacts or group members
$switchtotext = get_pconfig(local_user(),'system','groupedit_image_limit');
if($switchtotext === false)

View file

@ -20,6 +20,16 @@ function notify_init(&$a) {
goaway($a->get_baseurl());
}
if($a->argc > 2 && $a->argv[1] === 'mark' && $a->argv[2] === 'all' ) {
$r = q("update notify set seen = 1 where uid = %d",
intval(local_user())
);
$j = json_encode(array('result' => ($r) ? 'success' : 'fail'));
echo $j;
killme();
}
}

View file

@ -101,10 +101,24 @@ function wall_upload_post(&$a) {
$basename = basename($filename);
if(local_user() && intval(get_pconfig(local_user(),'system','plaintext')))
echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]\n\n";
else
echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg\" alt=\"$basename\" /></a><br /><br />";
/* mod Waitman Gobble NO WARRANTY */
//if we get the signal then return the image url info in BBCODE, otherwise this outputs the info and bails (for the ajax image uploader on wall post)
if ($_REQUEST['hush']!='yeah') {
/*existing code*/
if(local_user() && intval(get_pconfig(local_user(),'system','plaintext')))
echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]\n\n";
else
echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg\" alt=\"$basename\" /></a><br /><br />";
/*existing code*/
} else {
$m = '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]";
return($m);
}
/* mod Waitman Gobble NO WARRANTY */
killme();
// NOTREACHED

View file

@ -1,5 +1,5 @@
Lieber $username,
Liebe/r $username,
großartige Neuigkeiten... '$fn' von '$dfrn_url' hat deine Kontaktaufnahme auf
'$sitename' bestätigt.

View file

@ -1,5 +1,5 @@
Lieber $username,
Liebe/r $username,
'$fn' von '$dfrn_url' hat deine Kontaktanfrage auf '$sitename' bestätigt.

View file

@ -1,5 +1,5 @@
Lieber $username,
Liebe/r $username,
wir haben gerade eine Anfrage erhalten dein Passwort auf $sitename zu ändern.
Um diese Anfrage zu bestätigen folge bitte dem Bestätigungslink oder kopiere
ihn in die Adresszeile deines Browsers.

View file

@ -1,5 +1,5 @@
Lieber $username,
Liebe/r $username,
dein Passwort wurde wie gewünscht geändert. Bitte hebe diese Informationen
für deine Unterlagen auf (oder ändere das Passwort augenblicklich in etwas
das du dir merken kannst).

View file

@ -1,5 +1,5 @@
Lieber $username,
Liebe/r $username,
danke für die Registrierung bei $sitename. Dein neuer Account wurde angelegt.
Die Anmeldedetails sind die Folgenden.

View file

@ -1,5 +1,5 @@
Lieber $myname,
Liebe/r $myname,
du hast gerade eine Kontaktanfrage von '$requestor' auf $sitename erhalten.

BIN
view/theme/vier/calendar.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -122,6 +122,17 @@
.next { background-position: -110px -60px;}
.tagged { background-position: -130px -60px;}
.attachtype {
display: block; width: 20px; height: 23px;
background-image: url('../../../images/content-types.png');
}
.type-video { background-position: 0px 0px; }
.type-image { background-position: -20px 0px; }
.type-audio { background-position: -40px 0px; }
.type-text { background-position: -60px 0px; }
.type-unkn { background-position: -80px 0px; }
.icon.drop, .icon.drophide {
float: left;
}
@ -200,9 +211,9 @@
.icon.s16.delete {
background-image: url("../../../images/icons/16/delete.png");
}
.icon.s16.edit {
/*.icon.s16.edit {
background-image: url("../../../images/icons/16/edit.png");
}
}*/
.icon.s16.star {
background-image: url("../../../images/icons/16/star.png");
}
@ -913,7 +924,7 @@ section {
}
.wall-item-container .wall-item-actions-tools {
float: right;
width: 60px;
width: 80px;
}
.wall-item-container .wall-item-actions-tools a {
float: right;
@ -1028,7 +1039,13 @@ section {
/* contacts menu */
.contact-photo-wrapper {
position: relative;
width: 80px;
}
.contact-photo-wrapper.wwto {
width: 25px;
}
.contact-photo {
width: 48px;
height: 48px;
@ -1390,9 +1407,34 @@ ul.tabs li .active {
.field.radio .field_help {
margin-left: 0px;
}
#profile-edit-links li {
list-style: none;
#profile-edit-links-end {
clear: both;
margin-bottom: 15px;
}
#profile-edit-links ul { margin: 20px; padding-bottom: 20px; list-style: none; }
#profile-edit-links li {
float: left;
list-style: none;
margin-left: 10px;
}
.profile-edit-side-div {
display: none;
}
#register-form label,
#profile-edit-form label {
width: 300px; float: left;
}
.required {
display: inline;
color: #B20202;
}
/* oauth */
.oauthapp {
height: auto;
@ -1449,3 +1491,433 @@ footer {
height: 100px;
display: table-row;
}
blockquote {
border-left: 1px solid #D2D2D2;
padding-left: 9px;
margin: 0 0 0 .8ex;
}
/* ================== */
/* = Contacts Block = */
/* ================== */
.contact-block-img {
width: 42px;
height: 42px;
padding-right: 2px;
}
.contact-block-div {
float: left;
}
.contact-block-textdiv { width: 150px; height: 34px; float: left; }
#contact-block-end { clear: both; }
#group-edit-wrapper {
margin-bottom: 10px;
}
#group-members-end {
clear: both;
}
/*
#group-separator,
#prof-separator { display: none;}
*/
#prvmail-wrapper, .mail-conv-detail, .mail-list-detail {
position: relative;
width: 500px;
padding: 50px;
margin: 20px auto;
background-color: #fff;
-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
}
#prvmail-wrapper:before, #prvmail-wrapper:after, .mail-conv-detail:before, .mail-conv-detail:after, .mail-list-detail:before, .mail-list-detail:after {
position: absolute;
width: 40%;
height: 10px;
content: ' ';
left: 12px;
bottom: 12px;
background: transparent;
-webkit-transform: skew(-5deg) rotate(-5deg);
-moz-transform: skew(-5deg) rotate(-5deg);
-ms-transform: skew(-5deg) rotate(-5deg);
-o-transform: skew(-5deg) rotate(-5deg);
transform: skew(-5deg) rotate(-5deg);
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
z-index: -1;
}
#prvmail-wrapper:after, .mail-conv-detail:after, .mail-list-detail:after {
left: auto;
right: 12px;
-webkit-transform: skew(5deg) rotate(5deg);
-moz-transform: skew(5deg) rotate(5deg);
-ms-transform: skew(5deg) rotate(5deg);
-o-transform: skew(5deg) rotate(5deg);
transform: skew(5deg) rotate(5deg);
}
.prvmail-text {
width: 100%;
}
.mail-list-outside-wrapper {
margin-top: 20px;
}
.mail-list-sender {
float: left;
padding: 5px;
background-color: #efefef;
border: 2px dotted #eeeeee;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
box-shadow: 3px 3px 4px #959494;
}
.mail-list-detail {
margin-left: 100px;
width: 300px;
min-height: 70px;
padding: 20px;
padding-top:10px;
border: 1px solid #dddddd;
}
.mail-list-sender-name {
font-size: 1.1em;
display: inline;
font-variant:small-caps;
}
.mail-list-date {
float: right;
clear: block;
display: inline;
font-size: 0.9em;
padding-left: 10px;
font-stretch:ultra-condensed;
font-variant:small-caps;
}
.mail-list-subject {
clear: block;
font-size: 1.2em;
padding-top: 20px;
padding-right: 50px;
}
.mail-list-subject a {
color: #626262;
}
.mail-list-delete-wrapper { float: right;}
.mail-list-outside-wrapper-end {
clear: both;
}
.mail-conv-outside-wrapper {
margin-bottom: 10px;
}
.mail-conv-sender {float: left; margin: 0px 5px 5px 0px; }
.mail-conv-sender-photo {
width: 64px;
height: 64px;
}
.mail-conv-sender-name { float: left; font-variant:small-caps; font-style: bold; }
.mail-conv-date { float: right; font-variant:small-caps; }
.mail-conv-subject { clear: right; font-weight: bold; font-size: 1.2em }
.mail-conv-body {
clear: both;
}
.mail-conv-detail {
width: 500px;
padding: 30px;
padding-bottom: 10px;
margin-left: 20px;
margin-bottom: 0px;
vertical-align: middle;
margin: auto;
border: 1px solid #dddddd;
}
.mail-conv-break { display: none; border: none;}
.mail-conv-delete-wrapper { padding-top: 10px; width: 510px; text-align: right; }
/* ========== */
/* = Events = */
/* ========== */
.clear { clear: both; }
.eventcal {
float: left;
font-size: 20px;
padding: 20px;
}
.vevent {
position: relative;
width: 400px;
padding: 20px;
padding-top: 10px;
margin: 0 0px;
margin-bottom: 10px;
background-color: #fff;
-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
}
.vevent:before, .vevent:after {
position: absolute;
width: 40%;
height: 10px;
content: ' ';
left: 12px;
bottom: 12px;
background: transparent;
-webkit-transform: skew(-5deg) rotate(-5deg);
-moz-transform: skew(-5deg) rotate(-5deg);
-ms-transform: skew(-5deg) rotate(-5deg);
-o-transform: skew(-5deg) rotate(-5deg);
transform: skew(-5deg) rotate(-5deg);
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
z-index: -1;
}
.vevent:after {
left: auto;
right: 12px;
-webkit-transform: skew(5deg) rotate(5deg);
-moz-transform: skew(5deg) rotate(5deg);
-ms-transform: skew(5deg) rotate(5deg);
-o-transform: skew(5deg) rotate(5deg);
transform: skew(5deg) rotate(5deg);
}
.vevent .event-description {
margin-left: 10px;
margin-right: 10px;
text-align:center;
font-size: 1.2em;
font-weight:bolder;
}
.vevent .event-location{
margin-left: 10px;
margin-right: 10px;
font-size: 1em;
font-style: oblique;
text-align: center;
}
.vevent .event-start, .vevent .event-end {
margin-left: 20px;
margin-right: 20px;
margin-bottom: 2px;
margin-top: 2px;
font-size: 0.9em;
font-variant: small-caps;
text-align: left;
}
#new-event-link{
width: 130px;
padding: 7px;
margin-bottom: 10px;
margin-left: 170px; ;
-moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
-webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
box-shadow:inset 0px 1px 0px 0px #cfcfcf;
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
background-color:#bdbdbd;
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
color: #efefef;
}
#new-event-link:hover {
color: #efefef;
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
background-color:#b20202;
}
#new-event-link:active {
background-color: #b20202;
position:relative;
top:1px;
}
#new-event-link a {
color: #efefef;
text-align: center;
}
.edit-event-link, .plink-event-link {
float: left;
margin-top: 4px;
margin-right: 4px;
margin-bottom: 15px;
}
.event-description:before {
content: url('calendar.png');
margin-right: 15px;
vertical-align: middle;
}
.event-start, .event-end {
margin-left: 10px;
width: 330px;
}
.event-start .dtstart, .event-end .dtend {
float: right;
}
.event-list-date {
color: #626262;
margin-bottom: 10px;
font-variant:small-caps;
font-stretch:condensed;
}
.prevcal, .nextcal {
float: left;
margin-left: 32px;
margin-right: 32px;
margin-top: 64px;
}
.event-calendar-end {
clear: both;
}
.calendar {
width: 300px;
font-family: Helvetica, Arial, sans-serif;
background-color: #f1f1f1;
border: 1px solid #dedede;
margin-bottom: 10px;
-moz-box-shadow: 5px 5px 8px #959494;
-webkit-box-shadow: 5px 5px 8px #959494;
box-shadow: 5px 5px 8px #959494;
}
.calendar caption{
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) );
background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202');
background-color: #b20202;
padding: 10px 0px 10px 0px;
width: 300px;
color: #ffffff;
font-weight: bold;
text-align:center;
font-variant:small-caps;
-moz-box-shadow: 5px 2px 8px #959494;
-webkit-box-shadow: 5px 2px 8px #959494;
box-shadow: 5px 2px 8px #959494;
}
tr {
border: 1px solid #eeeeee;
}
.calendar td {
font-size: 14px;
text-align: center;
padding: 3px 0px;
}
.calendar td > a {
background-color: #cdcdcd;
padding: 2px;
color: #000;
}
.calendar th {
font-size: 16px;
}
.today {
font-weight: bold;
text-align: center;
background-color: #b20202;
color: #fff;
}
#event-start-text,
#event-finish-text {
margin-top: 10px;
margin-bottom: 5px;
}
#event-nofinish-checkbox,
#event-nofinish-text,
#event-adjust-checkbox,
#event-adjust-text,
#event-share-checkbox {
float: left;
}
#event-datetime-break {
margin-bottom: 10px;
}
#event-nofinish-break,
#event-adjust-break,
#event-share-break {
clear: both;
}
#event-desc-text,
#event-location-text {
margin-top: 10px;
margin-bottom: 5px;
}
#event-submit {
margin-top: 10px;
}
/* ============= */
/* = Directory = */
/* ============= */
.directory-item {
float: left;
margin: 50px 50px 0px 0px;
}
.directory-details {
font-size: 0.9em;
font-variant: small-caps;
width: 160px;
}
.directory-name {
font-size: 1em;
font-variant: small-caps;
width: 150px;
}