From 8465ad6e1e2a59474a19a8ab9eebd675b0d86b34 Mon Sep 17 00:00:00 2001 From: Vasudev Kamath Date: Sat, 21 Apr 2012 00:22:48 +0530 Subject: [PATCH 001/644] Few more files with unnecessary executable permissions --- include/security.php | 0 view/theme/diabook-aerith/ch_directory_item.tpl | 0 view/theme/diabook-aerith/directory_item.tpl | 0 view/theme/diabook-aerith/group_side.tpl | 0 view/theme/diabook-aerith/icons/block.png | Bin view/theme/diabook-blue/ch_directory_item.tpl | 0 view/theme/diabook-blue/directory_item.tpl | 0 view/theme/diabook-blue/group_side.tpl | 0 view/theme/diabook-blue/icons/block.png | Bin view/theme/diabook-red/ch_directory_item.tpl | 0 view/theme/diabook-red/directory_item.tpl | 0 view/theme/diabook-red/group_side.tpl | 0 view/theme/diabook-red/icons/block.png | Bin view/theme/diabook/ch_directory_item.tpl | 0 view/theme/diabook/communityhome.tpl | 0 view/theme/diabook/contact_template.tpl | 0 .../diabook/diabook-aerith/ch_directory_item.tpl | 0 .../theme/diabook/diabook-aerith/directory_item.tpl | 0 view/theme/diabook/diabook-aerith/group_side.tpl | 0 view/theme/diabook/diabook-aerith/icons/block.png | Bin .../diabook/diabook-blue/ch_directory_item.tpl | 0 view/theme/diabook/diabook-blue/directory_item.tpl | 0 view/theme/diabook/diabook-blue/group_side.tpl | 0 view/theme/diabook/diabook-blue/icons/block.png | Bin .../diabook/diabook-green/ch_directory_item.tpl | 0 view/theme/diabook/diabook-green/directory_item.tpl | 0 view/theme/diabook/diabook-green/group_side.tpl | 0 view/theme/diabook/diabook-green/icons/block.png | Bin .../diabook/diabook-green/icons/notifications3.png | Bin view/theme/diabook/diabook-green/icons/notify3.png | Bin .../diabook/diabook-pink/ch_directory_item.tpl | 0 view/theme/diabook/diabook-pink/directory_item.tpl | 0 view/theme/diabook/diabook-pink/group_side.tpl | 0 view/theme/diabook/diabook-pink/icons/block.png | Bin .../diabook/diabook-pink/icons/notifications3.png | Bin view/theme/diabook/diabook-pink/icons/notify3.png | Bin .../theme/diabook/diabook-red/ch_directory_item.tpl | 0 view/theme/diabook/diabook-red/directory_item.tpl | 0 view/theme/diabook/diabook-red/group_side.tpl | 0 view/theme/diabook/diabook-red/icons/block.png | Bin view/theme/diabook/directory_item.tpl | 0 view/theme/diabook/group_side.tpl | 0 view/theme/diabook/icons/attach.png | Bin view/theme/diabook/icons/audio.png | Bin view/theme/diabook/icons/block.png | Bin view/theme/diabook/icons/camera.png | Bin view/theme/diabook/icons/close_box.png | Bin view/theme/diabook/icons/contacts2.png | Bin view/theme/diabook/icons/drop.png | Bin view/theme/diabook/icons/expand.png | Bin view/theme/diabook/icons/file_as.png | Bin view/theme/diabook/icons/link.png | Bin view/theme/diabook/icons/lock.png | Bin view/theme/diabook/icons/lupe.png | Bin view/theme/diabook/icons/next.png | Bin view/theme/diabook/icons/notifications.png | Bin view/theme/diabook/icons/notifications3.png | Bin view/theme/diabook/icons/notify.png | Bin view/theme/diabook/icons/notify3.png | Bin view/theme/diabook/icons/pencil.png | Bin view/theme/diabook/icons/prev.png | Bin view/theme/diabook/icons/recycle.png | Bin view/theme/diabook/icons/remote.png | Bin view/theme/diabook/icons/scroll_top.png | Bin view/theme/diabook/icons/star.png | Bin view/theme/diabook/icons/starred.png | Bin view/theme/diabook/icons/tagged.png | Bin view/theme/diabook/icons/unlock.png | Bin view/theme/diabook/icons/unstarred.png | Bin view/theme/diabook/icons/video.png | Bin view/theme/diabook/icons/weblink.png | Bin view/theme/diabook/jot.tpl | 0 view/theme/diabook/mail_conv.tpl | 0 view/theme/diabook/search_item.tpl | 0 view/theme/diabook/theme.php | 0 75 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 include/security.php mode change 100755 => 100644 view/theme/diabook-aerith/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook-aerith/directory_item.tpl mode change 100755 => 100644 view/theme/diabook-aerith/group_side.tpl mode change 100755 => 100644 view/theme/diabook-aerith/icons/block.png mode change 100755 => 100644 view/theme/diabook-blue/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook-blue/directory_item.tpl mode change 100755 => 100644 view/theme/diabook-blue/group_side.tpl mode change 100755 => 100644 view/theme/diabook-blue/icons/block.png mode change 100755 => 100644 view/theme/diabook-red/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook-red/directory_item.tpl mode change 100755 => 100644 view/theme/diabook-red/group_side.tpl mode change 100755 => 100644 view/theme/diabook-red/icons/block.png mode change 100755 => 100644 view/theme/diabook/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook/communityhome.tpl mode change 100755 => 100644 view/theme/diabook/contact_template.tpl mode change 100755 => 100644 view/theme/diabook/diabook-aerith/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-aerith/directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-aerith/group_side.tpl mode change 100755 => 100644 view/theme/diabook/diabook-aerith/icons/block.png mode change 100755 => 100644 view/theme/diabook/diabook-blue/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-blue/directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-blue/group_side.tpl mode change 100755 => 100644 view/theme/diabook/diabook-blue/icons/block.png mode change 100755 => 100644 view/theme/diabook/diabook-green/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-green/directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-green/group_side.tpl mode change 100755 => 100644 view/theme/diabook/diabook-green/icons/block.png mode change 100755 => 100644 view/theme/diabook/diabook-green/icons/notifications3.png mode change 100755 => 100644 view/theme/diabook/diabook-green/icons/notify3.png mode change 100755 => 100644 view/theme/diabook/diabook-pink/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-pink/directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-pink/group_side.tpl mode change 100755 => 100644 view/theme/diabook/diabook-pink/icons/block.png mode change 100755 => 100644 view/theme/diabook/diabook-pink/icons/notifications3.png mode change 100755 => 100644 view/theme/diabook/diabook-pink/icons/notify3.png mode change 100755 => 100644 view/theme/diabook/diabook-red/ch_directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-red/directory_item.tpl mode change 100755 => 100644 view/theme/diabook/diabook-red/group_side.tpl mode change 100755 => 100644 view/theme/diabook/diabook-red/icons/block.png mode change 100755 => 100644 view/theme/diabook/directory_item.tpl mode change 100755 => 100644 view/theme/diabook/group_side.tpl mode change 100755 => 100644 view/theme/diabook/icons/attach.png mode change 100755 => 100644 view/theme/diabook/icons/audio.png mode change 100755 => 100644 view/theme/diabook/icons/block.png mode change 100755 => 100644 view/theme/diabook/icons/camera.png mode change 100755 => 100644 view/theme/diabook/icons/close_box.png mode change 100755 => 100644 view/theme/diabook/icons/contacts2.png mode change 100755 => 100644 view/theme/diabook/icons/drop.png mode change 100755 => 100644 view/theme/diabook/icons/expand.png mode change 100755 => 100644 view/theme/diabook/icons/file_as.png mode change 100755 => 100644 view/theme/diabook/icons/link.png mode change 100755 => 100644 view/theme/diabook/icons/lock.png mode change 100755 => 100644 view/theme/diabook/icons/lupe.png mode change 100755 => 100644 view/theme/diabook/icons/next.png mode change 100755 => 100644 view/theme/diabook/icons/notifications.png mode change 100755 => 100644 view/theme/diabook/icons/notifications3.png mode change 100755 => 100644 view/theme/diabook/icons/notify.png mode change 100755 => 100644 view/theme/diabook/icons/notify3.png mode change 100755 => 100644 view/theme/diabook/icons/pencil.png mode change 100755 => 100644 view/theme/diabook/icons/prev.png mode change 100755 => 100644 view/theme/diabook/icons/recycle.png mode change 100755 => 100644 view/theme/diabook/icons/remote.png mode change 100755 => 100644 view/theme/diabook/icons/scroll_top.png mode change 100755 => 100644 view/theme/diabook/icons/star.png mode change 100755 => 100644 view/theme/diabook/icons/starred.png mode change 100755 => 100644 view/theme/diabook/icons/tagged.png mode change 100755 => 100644 view/theme/diabook/icons/unlock.png mode change 100755 => 100644 view/theme/diabook/icons/unstarred.png mode change 100755 => 100644 view/theme/diabook/icons/video.png mode change 100755 => 100644 view/theme/diabook/icons/weblink.png mode change 100755 => 100644 view/theme/diabook/jot.tpl mode change 100755 => 100644 view/theme/diabook/mail_conv.tpl mode change 100755 => 100644 view/theme/diabook/search_item.tpl mode change 100755 => 100644 view/theme/diabook/theme.php diff --git a/include/security.php b/include/security.php old mode 100755 new mode 100644 diff --git a/view/theme/diabook-aerith/ch_directory_item.tpl b/view/theme/diabook-aerith/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-aerith/directory_item.tpl b/view/theme/diabook-aerith/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-aerith/group_side.tpl b/view/theme/diabook-aerith/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-aerith/icons/block.png b/view/theme/diabook-aerith/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook-blue/ch_directory_item.tpl b/view/theme/diabook-blue/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-blue/directory_item.tpl b/view/theme/diabook-blue/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-blue/group_side.tpl b/view/theme/diabook-blue/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-blue/icons/block.png b/view/theme/diabook-blue/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook-red/ch_directory_item.tpl b/view/theme/diabook-red/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-red/directory_item.tpl b/view/theme/diabook-red/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-red/group_side.tpl b/view/theme/diabook-red/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook-red/icons/block.png b/view/theme/diabook-red/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/ch_directory_item.tpl b/view/theme/diabook/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/communityhome.tpl b/view/theme/diabook/communityhome.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/contact_template.tpl b/view/theme/diabook/contact_template.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-aerith/ch_directory_item.tpl b/view/theme/diabook/diabook-aerith/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-aerith/directory_item.tpl b/view/theme/diabook/diabook-aerith/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-aerith/group_side.tpl b/view/theme/diabook/diabook-aerith/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-aerith/icons/block.png b/view/theme/diabook/diabook-aerith/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-blue/ch_directory_item.tpl b/view/theme/diabook/diabook-blue/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-blue/directory_item.tpl b/view/theme/diabook/diabook-blue/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-blue/group_side.tpl b/view/theme/diabook/diabook-blue/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-blue/icons/block.png b/view/theme/diabook/diabook-blue/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-green/ch_directory_item.tpl b/view/theme/diabook/diabook-green/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-green/directory_item.tpl b/view/theme/diabook/diabook-green/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-green/group_side.tpl b/view/theme/diabook/diabook-green/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-green/icons/block.png b/view/theme/diabook/diabook-green/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-green/icons/notifications3.png b/view/theme/diabook/diabook-green/icons/notifications3.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-green/icons/notify3.png b/view/theme/diabook/diabook-green/icons/notify3.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-pink/ch_directory_item.tpl b/view/theme/diabook/diabook-pink/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-pink/directory_item.tpl b/view/theme/diabook/diabook-pink/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-pink/group_side.tpl b/view/theme/diabook/diabook-pink/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-pink/icons/block.png b/view/theme/diabook/diabook-pink/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-pink/icons/notifications3.png b/view/theme/diabook/diabook-pink/icons/notifications3.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-pink/icons/notify3.png b/view/theme/diabook/diabook-pink/icons/notify3.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-red/ch_directory_item.tpl b/view/theme/diabook/diabook-red/ch_directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-red/directory_item.tpl b/view/theme/diabook/diabook-red/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-red/group_side.tpl b/view/theme/diabook/diabook-red/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/diabook-red/icons/block.png b/view/theme/diabook/diabook-red/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/directory_item.tpl b/view/theme/diabook/directory_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/group_side.tpl b/view/theme/diabook/group_side.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/attach.png b/view/theme/diabook/icons/attach.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/audio.png b/view/theme/diabook/icons/audio.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/block.png b/view/theme/diabook/icons/block.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/camera.png b/view/theme/diabook/icons/camera.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/close_box.png b/view/theme/diabook/icons/close_box.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/contacts2.png b/view/theme/diabook/icons/contacts2.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/drop.png b/view/theme/diabook/icons/drop.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/expand.png b/view/theme/diabook/icons/expand.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/file_as.png b/view/theme/diabook/icons/file_as.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/link.png b/view/theme/diabook/icons/link.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/lock.png b/view/theme/diabook/icons/lock.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/lupe.png b/view/theme/diabook/icons/lupe.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/next.png b/view/theme/diabook/icons/next.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/notifications.png b/view/theme/diabook/icons/notifications.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/notifications3.png b/view/theme/diabook/icons/notifications3.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/notify.png b/view/theme/diabook/icons/notify.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/notify3.png b/view/theme/diabook/icons/notify3.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/pencil.png b/view/theme/diabook/icons/pencil.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/prev.png b/view/theme/diabook/icons/prev.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/recycle.png b/view/theme/diabook/icons/recycle.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/remote.png b/view/theme/diabook/icons/remote.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/scroll_top.png b/view/theme/diabook/icons/scroll_top.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/star.png b/view/theme/diabook/icons/star.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/starred.png b/view/theme/diabook/icons/starred.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/tagged.png b/view/theme/diabook/icons/tagged.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/unlock.png b/view/theme/diabook/icons/unlock.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/unstarred.png b/view/theme/diabook/icons/unstarred.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/video.png b/view/theme/diabook/icons/video.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/icons/weblink.png b/view/theme/diabook/icons/weblink.png old mode 100755 new mode 100644 diff --git a/view/theme/diabook/jot.tpl b/view/theme/diabook/jot.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/mail_conv.tpl b/view/theme/diabook/mail_conv.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/search_item.tpl b/view/theme/diabook/search_item.tpl old mode 100755 new mode 100644 diff --git a/view/theme/diabook/theme.php b/view/theme/diabook/theme.php old mode 100755 new mode 100644 From 4499ce96a0c5fd7ca9feb2b9b5e62876155aa63e Mon Sep 17 00:00:00 2001 From: Vasudev Kamath Date: Sat, 21 Apr 2012 12:00:19 +0530 Subject: [PATCH 002/644] Executable permission missing on script --- util/run_xgettext.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 util/run_xgettext.sh diff --git a/util/run_xgettext.sh b/util/run_xgettext.sh old mode 100644 new mode 100755 From 3968e77f9e15c149d8cafa1dac37411777bd58bd Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 17 Jun 2012 19:49:05 +0200 Subject: [PATCH 003/644] New function to convert bbcode to markdown. --- include/bb2diaspora.php | 39 +- include/diaspora.php | 8 +- include/markdownify/LICENSE_LGPL.txt | 504 ++++++++ include/markdownify/TODO | 29 + include/markdownify/example.php | 51 + include/markdownify/markdownify.php | 1184 +++++++++++++++++++ include/markdownify/markdownify_cli.php | 33 + include/markdownify/markdownify_extra.php | 489 ++++++++ include/markdownify/parsehtml/parsehtml.php | 618 ++++++++++ include/oembed.php | 3 +- 10 files changed, 2939 insertions(+), 19 deletions(-) create mode 100644 include/markdownify/LICENSE_LGPL.txt create mode 100644 include/markdownify/TODO create mode 100644 include/markdownify/example.php create mode 100644 include/markdownify/markdownify.php create mode 100755 include/markdownify/markdownify_cli.php create mode 100644 include/markdownify/markdownify_extra.php create mode 100644 include/markdownify/parsehtml/parsehtml.php diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index d86ba45437..0617ecc5fd 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -1,10 +1,11 @@ ", ">", $Text); // If we find any event code, turn it into an event. - // After we're finished processing the bbcode we'll + // After we're finished processing the bbcode we'll // replace all of the event code with a reformatted version. - if($preserve_nl) $Text = str_replace(array("\n","\r"), array('',''),$Text); + // Convert it to HTML + $Text = bbcode($Text); + + // Now convert HTML to Markdown + $md = new Markdownify(false, false, false); + $Text = $md->parseString($Text); + + // Remove all unconverted tags + $Text = strip_tags($Text); + +/* // Set up the parameters for a URL search string $URLSearchString = "^\[\]"; // Set up the parameters for a MAIL search string @@ -98,7 +109,7 @@ function bb2diaspora($Text,$preserve_nl = false) { // new javascript markdown processor to handle links with images as the link "text" // It is not optimal and may be removed if this ability is restored in the future - $Text = preg_replace("/\[url\=([$URLSearchString]*)\]\[img\](.*?)\[\/img\]\[\/url\]/ism", + $Text = preg_replace("/\[url\=([$URLSearchString]*)\]\[img\](.*?)\[\/img\]\[\/url\]/ism", '![' . t('image/photo') . '](' . '$2' . ')' . "\n" . '[' . t('link') . '](' . '$1' . ')', $Text); $Text = preg_replace("/\[bookmark\]([$URLSearchString]*)\[\/bookmark\]/ism", '[$1]($1)', $Text); @@ -115,7 +126,7 @@ function bb2diaspora($Text,$preserve_nl = false) { // Perform MAIL Search $Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '[$1](mailto:$1)', $Text); $Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '[$2](mailto:$1)', $Text); - + $Text = str_replace('*', '\\*', $Text); $Text = str_replace('_', '\\_', $Text); @@ -158,7 +169,7 @@ function bb2diaspora($Text,$preserve_nl = false) { // $Text = preg_replace("/\[table border=1\](.*?)\[\/table\]/s", '$1
' ,$Text); // $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/s", '$1
' ,$Text); - + // $Text = str_replace("[*]", "
  • ", $Text); // Check for font change text @@ -174,10 +185,10 @@ function bb2diaspora($Text,$preserve_nl = false) { // Declare the format for [quote] layout - // $QuoteLayout = '
    $1
    '; + // $QuoteLayout = '
    $1
    '; // Check for [quote] text $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/is",">$1\n\n", $Text); - + // Images // html5 video and audio @@ -187,7 +198,7 @@ function bb2diaspora($Text,$preserve_nl = false) { $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '$1', $Text); // $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '', $Text); - + // [img=widthxheight]image source[/img] // $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '', $Text); @@ -211,7 +222,7 @@ function bb2diaspora($Text,$preserve_nl = false) { if(x($ev,'desc') && x($ev,'start')) { $sub = format_event_diaspora($ev); - + $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text); $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text); $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text); @@ -222,7 +233,7 @@ function bb2diaspora($Text,$preserve_nl = false) { $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text); $Text = preg_replace_callback('/\[(.*?)\]\((.*?)\)/ism','unescape_underscores_in_links',$Text); - +*/ call_hooks('bb2diaspora',$Text); return $Text; diff --git a/include/diaspora.php b/include/diaspora.php index 2be266e8af..bd38511564 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -2060,12 +2060,12 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) { $images[] = $detail; $body = str_replace($detail['str'],$mtch[1],$body); } - } + } */ - $body = xmlify(html_entity_decode(bb2diaspora($body))); - if(strlen($title)) - $body = xmlify('**' . html_entity_decode($title) . '**' . "\n") . $body; + $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body; + + $body = xmlify(html_entity_decode(bb2diaspora($body))); if($item['attach']) { diff --git a/include/markdownify/LICENSE_LGPL.txt b/include/markdownify/LICENSE_LGPL.txt new file mode 100644 index 0000000000..5ab7695ab8 --- /dev/null +++ b/include/markdownify/LICENSE_LGPL.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/include/markdownify/TODO b/include/markdownify/TODO new file mode 100644 index 0000000000..06ec8508ba --- /dev/null +++ b/include/markdownify/TODO @@ -0,0 +1,29 @@ +Markdownify +=========== +* handle non-markdownifiable lists (i.e. `
    • asdf
    `) +* organize methods better (i.e. flushlinebreaks & setlinebreaks close to each other) +* take a look at function names etc. +* is the new (in rev. 93) lastclosedtag property needed? +* word wrapping (some work is done but it's still very buggy) + + +Markdownify Extra +================= + +* handle table alignment with KEEP_HTML=false +* handle tables without headings when KEEP_HTML=false is set +* handle Markdown inside non-markdownable tags + + +Implementation Thoughts +======================= +* non-markdownifiable lists and markdown inside non-markdownable tags as well as the current + table implementation could be rewritten by using a rollback mechanism. + + example: + +
    • asdf
    • asdf
    + + we come to `
      `, know that this might fail and create a snapshot of our current parser + we keep on parsing and when we reach `
    • ` we gotta rollback and keep this + list in HTML format. diff --git a/include/markdownify/example.php b/include/markdownify/example.php new file mode 100644 index 0000000000..ef86dca83c --- /dev/null +++ b/include/markdownify/example.php @@ -0,0 +1,51 @@ +parseString($_POST['input']); + } else { + $_POST['input'] = ''; + } +?> + + + + HTML to Markdown Converter + + + +
      +
      + HTML Input + +
      + + + + +
      + +

      BACK

      +
      + + + \ No newline at end of file diff --git a/include/markdownify/markdownify.php b/include/markdownify/markdownify.php new file mode 100644 index 0000000000..43730cb77f --- /dev/null +++ b/include/markdownify/markdownify.php @@ -0,0 +1,1184 @@ +, ) + * @license LGPL, see LICENSE_LGPL.txt and the summary below + * @copyright (C) 2007 Milian Wolff + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * HTML Parser, see http://sf.net/projects/parseHTML + */ +require_once dirname(__FILE__).'/parsehtml/parsehtml.php'; + +/** + * default configuration + */ +define('MDFY_LINKS_EACH_PARAGRAPH', false); +define('MDFY_BODYWIDTH', false); +define('MDFY_KEEPHTML', true); + +/** + * HTML to Markdown converter class + */ +class Markdownify { + /** + * html parser object + * + * @var parseHTML + */ + var $parser; + /** + * markdown output + * + * @var string + */ + var $output; + /** + * stack with tags which where not converted to html + * + * @var array + */ + var $notConverted = array(); + /** + * skip conversion to markdown + * + * @var bool + */ + var $skipConversion = false; + /* options */ + /** + * keep html tags which cannot be converted to markdown + * + * @var bool + */ + var $keepHTML = false; + /** + * wrap output, set to 0 to skip wrapping + * + * @var int + */ + var $bodyWidth = 0; + /** + * minimum body width + * + * @var int + */ + var $minBodyWidth = 25; + /** + * display links after each paragraph + * + * @var bool + */ + var $linksAfterEachParagraph = false; + /** + * constructor, set options, setup parser + * + * @param bool $linksAfterEachParagraph wether or not to flush stacked links after each paragraph + * defaults to false + * @param int $bodyWidth wether or not to wrap the output to the given width + * defaults to false + * @param bool $keepHTML wether to keep non markdownable HTML or to discard it + * defaults to true (HTML will be kept) + * @return void + */ + function Markdownify($linksAfterEachParagraph = MDFY_LINKS_EACH_PARAGRAPH, $bodyWidth = MDFY_BODYWIDTH, $keepHTML = MDFY_KEEPHTML) { + $this->linksAfterEachParagraph = $linksAfterEachParagraph; + $this->keepHTML = $keepHTML; + + if ($bodyWidth > $this->minBodyWidth) { + $this->bodyWidth = intval($bodyWidth); + } else { + $this->bodyWidth = false; + } + + $this->parser = new parseHTML; + $this->parser->noTagsInCode = true; + + # we don't have to do this every time + $search = array(); + $replace = array(); + foreach ($this->escapeInText as $s => $r) { + array_push($search, '#(?escapeInText = array( + 'search' => $search, + 'replace' => $replace + ); + } + /** + * parse a HTML string + * + * @param string $html + * @return string markdown formatted + */ + function parseString($html) { + $this->parser->html = $html; + $this->parse(); + return $this->output; + } + /** + * tags with elements which can be handled by markdown + * + * @var array + */ + var $isMarkdownable = array( + 'p' => array(), + 'ul' => array(), + 'ol' => array(), + 'li' => array(), + 'br' => array(), + 'blockquote' => array(), + 'code' => array(), + 'pre' => array(), + 'a' => array( + 'href' => 'required', + 'title' => 'optional', + ), + 'strong' => array(), + 'b' => array(), + 'em' => array(), + 'i' => array(), + 'img' => array( + 'src' => 'required', + 'alt' => 'optional', + 'title' => 'optional', + ), + 'h1' => array(), + 'h2' => array(), + 'h3' => array(), + 'h4' => array(), + 'h5' => array(), + 'h6' => array(), + 'hr' => array(), + ); + /** + * html tags to be ignored (contents will be parsed) + * + * @var array + */ + var $ignore = array( + 'html', + 'body', + ); + /** + * html tags to be dropped (contents will not be parsed!) + * + * @var array + */ + var $drop = array( + 'script', + 'head', + 'style', + 'form', + 'area', + 'object', + 'param', + 'iframe', + ); + /** + * Markdown indents which could be wrapped + * @note: use strings in regex format + * + * @var array + */ + var $wrappableIndents = array( + '\* ', # ul + '\d. ', # ol + '\d\d. ', # ol + '> ', # blockquote + '', # p + ); + /** + * list of chars which have to be escaped in normal text + * @note: use strings in regex format + * + * @var array + * + * TODO: what's with block chars / sequences at the beginning of a block? + */ + var $escapeInText = array( + '([-*_])([ ]{0,2}\1){2,}' => '\\\\$0|', # hr + '\*\*([^*\s]+)\*\*' => '\*\*$1\*\*', # strong + '\*([^*\s]+)\*' => '\*$1\*', # em + '__(?! |_)(.+)(?!<_| )__' => '\_\_$1\_\_', # em + '_(?! |_)(.+)(?!<_| )_' => '\_$1\_', # em + '`(.+)`' => '\`$1\`', # code + '\[(.+)\](\s*\()' => '\[$1\]$2', # links: [text] (url) => [text\] (url) + '\[(.+)\](\s*)\[(.*)\]' => '\[$1\]$2\[$3\]', # links: [text][id] => [text\][id\] + ); + /** + * wether last processed node was a block tag or not + * + * @var bool + */ + var $lastWasBlockTag = false; + /** + * name of last closed tag + * + * @var string + */ + var $lastClosedTag = ''; + /** + * iterate through the nodes and decide what we + * shall do with the current node + * + * @param void + * @return void + */ + function parse() { + $this->output = ''; + # drop tags + $this->parser->html = preg_replace('#<('.implode('|', $this->drop).')[^>]*>.*#sU', '', $this->parser->html); + while ($this->parser->nextNode()) { + switch ($this->parser->nodeType) { + case 'doctype': + break; + case 'pi': + case 'comment': + if ($this->keepHTML) { + $this->flushLinebreaks(); + $this->out($this->parser->node); + $this->setLineBreaks(2); + } + # else drop + break; + case 'text': + $this->handleText(); + break; + case 'tag': + if (in_array($this->parser->tagName, $this->ignore)) { + break; + } + if ($this->parser->isStartTag) { + $this->flushLinebreaks(); + } + if ($this->skipConversion) { + $this->isMarkdownable(); # update notConverted + $this->handleTagToText(); + continue; + } + if (!$this->parser->keepWhitespace && $this->parser->isBlockElement && $this->parser->isStartTag) { + $this->parser->html = ltrim($this->parser->html); + } + if ($this->isMarkdownable()) { + if ($this->parser->isBlockElement && $this->parser->isStartTag && !$this->lastWasBlockTag && !empty($this->output)) { + if (!empty($this->buffer)) { + $str =& $this->buffer[count($this->buffer) -1]; + } else { + $str =& $this->output; + } + if (substr($str, -strlen($this->indent)-1) != "\n".$this->indent) { + $str .= "\n".$this->indent; + } + } + $func = 'handleTag_'.$this->parser->tagName; + $this->$func(); + if ($this->linksAfterEachParagraph && $this->parser->isBlockElement && !$this->parser->isStartTag && empty($this->parser->openTags)) { + $this->flushStacked(); + } + if (!$this->parser->isStartTag) { + $this->lastClosedTag = $this->parser->tagName; + } + } else { + $this->handleTagToText(); + $this->lastClosedTag = ''; + } + break; + default: + trigger_error('invalid node type', E_USER_ERROR); + break; + } + $this->lastWasBlockTag = $this->parser->nodeType == 'tag' && $this->parser->isStartTag && $this->parser->isBlockElement; + } + if (!empty($this->buffer)) { + trigger_error('buffer was not flushed, this is a bug. please report!', E_USER_WARNING); + while (!empty($this->buffer)) { + $this->out($this->unbuffer()); + } + } + ### cleanup + $this->output = rtrim(str_replace('&', '&', str_replace('<', '<', str_replace('>', '>', $this->output)))); + # end parsing, flush stacked tags + $this->flushStacked(); + $this->stack = array(); + } + /** + * check if current tag can be converted to Markdown + * + * @param void + * @return bool + */ + function isMarkdownable() { + if (!isset($this->isMarkdownable[$this->parser->tagName])) { + # simply not markdownable + return false; + } + if ($this->parser->isStartTag) { + $return = true; + if ($this->keepHTML) { + $diff = array_diff(array_keys($this->parser->tagAttributes), array_keys($this->isMarkdownable[$this->parser->tagName])); + if (!empty($diff)) { + # non markdownable attributes given + $return = false; + } + } + if ($return) { + foreach ($this->isMarkdownable[$this->parser->tagName] as $attr => $type) { + if ($type == 'required' && !isset($this->parser->tagAttributes[$attr])) { + # required markdown attribute not given + $return = false; + break; + } + } + } + if (!$return) { + array_push($this->notConverted, $this->parser->tagName.'::'.implode('/', $this->parser->openTags)); + } + return $return; + } else { + if (!empty($this->notConverted) && end($this->notConverted) === $this->parser->tagName.'::'.implode('/', $this->parser->openTags)) { + array_pop($this->notConverted); + return false; + } + return true; + } + } + /** + * output all stacked tags + * + * @param void + * @return void + */ + function flushStacked() { + # links + foreach ($this->stack as $tag => $a) { + if (!empty($a)) { + call_user_func(array(&$this, 'flushStacked_'.$tag)); + } + } + } + /** + * output link references (e.g. [1]: http://example.com "title"); + * + * @param void + * @return void + */ + function flushStacked_a() { + $out = false; + foreach ($this->stack['a'] as $k => $tag) { + if (!isset($tag['unstacked'])) { + if (!$out) { + $out = true; + $this->out("\n\n", true); + } else { + $this->out("\n", true); + } + $this->out(' ['.$tag['linkID'].']: '.$tag['href'].(isset($tag['title']) ? ' "'.$tag['title'].'"' : ''), true); + $tag['unstacked'] = true; + $this->stack['a'][$k] = $tag; + } + } + } + /** + * flush enqued linebreaks + * + * @param void + * @return void + */ + function flushLinebreaks() { + if ($this->lineBreaks && !empty($this->output)) { + $this->out(str_repeat("\n".$this->indent, $this->lineBreaks), true); + } + $this->lineBreaks = 0; + } + /** + * handle non Markdownable tags + * + * @param void + * @return void + */ + function handleTagToText() { + if (!$this->keepHTML) { + if (!$this->parser->isStartTag && $this->parser->isBlockElement) { + $this->setLineBreaks(2); + } + } else { + # dont convert to markdown inside this tag + /** TODO: markdown extra **/ + if (!$this->parser->isEmptyTag) { + if ($this->parser->isStartTag) { + if (!$this->skipConversion) { + $this->skipConversion = $this->parser->tagName.'::'.implode('/', $this->parser->openTags); + } + } else { + if ($this->skipConversion == $this->parser->tagName.'::'.implode('/', $this->parser->openTags)) { + $this->skipConversion = false; + } + } + } + + if ($this->parser->isBlockElement) { + if ($this->parser->isStartTag) { + if (in_array($this->parent(), array('ins', 'del'))) { + # looks like ins or del are block elements now + $this->out("\n", true); + $this->indent(' '); + } + if ($this->parser->tagName != 'pre') { + $this->out($this->parser->node."\n".$this->indent); + if (!$this->parser->isEmptyTag) { + $this->indent(' '); + } else { + $this->setLineBreaks(1); + } + $this->parser->html = ltrim($this->parser->html); + } else { + # don't indent inside
       tags
      +            $this->out($this->parser->node);
      +            static $indent;
      +            $indent =  $this->indent;
      +            $this->indent = '';
      +          }
      +        } else {
      +          if (!$this->parser->keepWhitespace) {
      +            $this->output = rtrim($this->output);
      +          }
      +          if ($this->parser->tagName != 'pre') {
      +            $this->indent('  ');
      +            $this->out("\n".$this->indent.$this->parser->node);
      +          } else {
      +            # reset indentation
      +            $this->out($this->parser->node);
      +            static $indent;
      +            $this->indent = $indent;
      +          }
      +
      +          if (in_array($this->parent(), array('ins', 'del'))) {
      +            # ins or del was block element
      +            $this->out("\n");
      +            $this->indent('  ');
      +          }
      +          if ($this->parser->tagName == 'li') {
      +            $this->setLineBreaks(1);
      +          } else {
      +            $this->setLineBreaks(2);
      +          }
      +        }
      +      } else {
      +        $this->out($this->parser->node);
      +      }
      +      if (in_array($this->parser->tagName, array('code', 'pre'))) {
      +        if ($this->parser->isStartTag) {
      +          $this->buffer();
      +        } else {
      +          # add stuff so cleanup just reverses this
      +          $this->out(str_replace('<', '&lt;', str_replace('>', '&gt;', $this->unbuffer())));
      +        }
      +      }
      +    }
      +  }
      +  /**
      +   * handle plain text
      +   *
      +   * @param void
      +   * @return void
      +   */
      +  function handleText() {
      +    if ($this->hasParent('pre') && strpos($this->parser->node, "\n") !== false) {
      +      $this->parser->node = str_replace("\n", "\n".$this->indent, $this->parser->node);
      +    }
      +    if (!$this->hasParent('code') && !$this->hasParent('pre')) {
      +      # entity decode
      +      $this->parser->node = $this->decode($this->parser->node);
      +      if (!$this->skipConversion) {
      +        # escape some chars in normal Text
      +        $this->parser->node = preg_replace($this->escapeInText['search'], $this->escapeInText['replace'], $this->parser->node);
      +      }
      +    } else {
      +      $this->parser->node = str_replace(array('"', '&apos'), array('"', '\''), $this->parser->node);
      +    }
      +    $this->out($this->parser->node);
      +    $this->lastClosedTag = '';
      +  }
      +  /**
      +   * handle  and  tags
      +   *
      +   * @param void
      +   * @return void
      +   */
      +  function handleTag_em() {
      +    $this->out('*', true);
      +  }
      +  function handleTag_i() {
      +    $this->handleTag_em();
      +  }
      +  /**
      +   * handle  and  tags
      +   *
      +   * @param void
      +   * @return void
      +   */
      +  function handleTag_strong() {
      +    $this->out('**', true);
      +  }
      +  function handleTag_b() {
      +    $this->handleTag_strong();
      +  }
      +  /**
      +   * handle 

      tags + * + * @param void + * @return void + */ + function handleTag_h1() { + $this->handleHeader(1); + } + /** + * handle

      tags + * + * @param void + * @return void + */ + function handleTag_h2() { + $this->handleHeader(2); + } + /** + * handle

      tags + * + * @param void + * @return void + */ + function handleTag_h3() { + $this->handleHeader(3); + } + /** + * handle

      tags + * + * @param void + * @return void + */ + function handleTag_h4() { + $this->handleHeader(4); + } + /** + * handle

      tags + * + * @param void + * @return void + */ + function handleTag_h5() { + $this->handleHeader(5); + } + /** + * handle
      tags + * + * @param void + * @return void + */ + function handleTag_h6() { + $this->handleHeader(6); + } + /** + * number of line breaks before next inline output + */ + var $lineBreaks = 0; + /** + * handle header tags (

      -

      ) + * + * @param int $level 1-6 + * @return void + */ + function handleHeader($level) { + if ($this->parser->isStartTag) { + $this->out(str_repeat('#', $level).' ', true); + } else { + $this->setLineBreaks(2); + } + } + /** + * handle

      tags + * + * @param void + * @return void + */ + function handleTag_p() { + if (!$this->parser->isStartTag) { + $this->setLineBreaks(2); + } + } + /** + * handle tags + * + * @param void + * @return void + */ + function handleTag_a() { + if ($this->parser->isStartTag) { + $this->buffer(); + if (isset($this->parser->tagAttributes['title'])) { + $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']); + } else { + $this->parser->tagAttributes['title'] = null; + } + $this->parser->tagAttributes['href'] = $this->decode(trim($this->parser->tagAttributes['href'])); + $this->stack(); + } else { + $tag = $this->unstack(); + $buffer = $this->unbuffer(); + + if (empty($tag['href']) && empty($tag['title'])) { + # empty links... testcase mania, who would possibly do anything like that?! + $this->out('['.$buffer.']()', true); + return; + } + + if ($buffer == $tag['href'] && empty($tag['title'])) { + # + $this->out('<'.$buffer.'>', true); + return; + } + + $bufferDecoded = $this->decode(trim($buffer)); + if (substr($tag['href'], 0, 7) == 'mailto:' && 'mailto:'.$bufferDecoded == $tag['href']) { + if (is_null($tag['title'])) { + # + $this->out('<'.$bufferDecoded.'>', true); + return; + } + # [mail@example.com][1] + # ... + # [1]: mailto:mail@example.com Title + $tag['href'] = 'mailto:'.$bufferDecoded; + } + # [This link][id] + foreach ($this->stack['a'] as $tag2) { + if ($tag2['href'] == $tag['href'] && $tag2['title'] === $tag['title']) { + $tag['linkID'] = $tag2['linkID']; + break; + } + } + if (!isset($tag['linkID'])) { + $tag['linkID'] = count($this->stack['a']) + 1; + array_push($this->stack['a'], $tag); + } + + $this->out('['.$buffer.']['.$tag['linkID'].']', true); + } + } + /** + * handle tags + * + * @param void + * @return void + */ + function handleTag_img() { + if (!$this->parser->isStartTag) { + return; # just to be sure this is really an empty tag... + } + + if (isset($this->parser->tagAttributes['title'])) { + $this->parser->tagAttributes['title'] = $this->decode($this->parser->tagAttributes['title']); + } else { + $this->parser->tagAttributes['title'] = null; + } + if (isset($this->parser->tagAttributes['alt'])) { + $this->parser->tagAttributes['alt'] = $this->decode($this->parser->tagAttributes['alt']); + } else { + $this->parser->tagAttributes['alt'] = null; + } + + if (empty($this->parser->tagAttributes['src'])) { + # support for "empty" images... dunno if this is really needed + # but there are some testcases which do that... + if (!empty($this->parser->tagAttributes['title'])) { + $this->parser->tagAttributes['title'] = ' '.$this->parser->tagAttributes['title'].' '; + } + $this->out('!['.$this->parser->tagAttributes['alt'].']('.$this->parser->tagAttributes['title'].')', true); + return; + } else { + $this->parser->tagAttributes['src'] = $this->decode($this->parser->tagAttributes['src']); + } + + # [This link][id] + $link_id = false; + if (!empty($this->stack['a'])) { + foreach ($this->stack['a'] as $tag) { + if ($tag['href'] == $this->parser->tagAttributes['src'] + && $tag['title'] === $this->parser->tagAttributes['title']) { + $link_id = $tag['linkID']; + break; + } + } + } else { + $this->stack['a'] = array(); + } + if (!$link_id) { + $link_id = count($this->stack['a']) + 1; + $tag = array( + 'href' => $this->parser->tagAttributes['src'], + 'linkID' => $link_id, + 'title' => $this->parser->tagAttributes['title'] + ); + array_push($this->stack['a'], $tag); + } + + $this->out('!['.$this->parser->tagAttributes['alt'].']['.$link_id.']', true); + } + /** + * handle tags + * + * @param void + * @return void + */ + function handleTag_code() { + if ($this->hasParent('pre')) { + # ignore code blocks inside

      +      return;
      +    }
      +    if ($this->parser->isStartTag) {
      +      $this->buffer();
      +    } else {
      +      $buffer = $this->unbuffer();
      +      # use as many backticks as needed
      +      preg_match_all('#`+#', $buffer, $matches);
      +      if (!empty($matches[0])) {
      +        rsort($matches[0]);
      +
      +        $ticks = '`';
      +        while (true) {
      +          if (!in_array($ticks, $matches[0])) {
      +            break;
      +          }
      +          $ticks .= '`';
      +        }
      +      } else {
      +        $ticks = '`';
      +      }
      +      if ($buffer[0] == '`' || substr($buffer, -1) == '`') {
      +        $buffer = ' '.$buffer.' ';
      +      }
      +      $this->out($ticks.$buffer.$ticks, true);
      +    }
      +  }
      +  /**
      +   * handle 
       tags
      +   *
      +   * @param void
      +   * @return void
      +   */
      +  function handleTag_pre() {
      +    if ($this->keepHTML && $this->parser->isStartTag) {
      +      # check if a simple  follows
      +      if (!preg_match('#^\s*#Us', $this->parser->html)) {
      +        # this is no standard markdown code block
      +        $this->handleTagToText();
      +        return;
      +      }
      +    }
      +    $this->indent('    ');
      +    if (!$this->parser->isStartTag) {
      +      $this->setLineBreaks(2);
      +    } else {
      +      $this->parser->html = ltrim($this->parser->html);
      +    }
      +  }
      +  /**
      +   * handle 
      tags + * + * @param void + * @return void + */ + function handleTag_blockquote() { + $this->indent('> '); + } + /** + * handle
      + +This is an example of the html_select_date function: + +
      +{html_select_date start_year=1998 end_year=2010} +
      + +This is an example of the html_select_time function: + +
      +{html_select_time use_24_hours=false} +
      + +This is an example of the html_options function: + +
      + +
      + +{include file="footer.tpl"} diff --git a/library/Smarty/libs/Smarty.class.php b/library/Smarty/libs/Smarty.class.php new file mode 100644 index 0000000000..f776aaf7cc --- /dev/null +++ b/library/Smarty/libs/Smarty.class.php @@ -0,0 +1,1517 @@ + + * @author Uwe Tews + * @author Rodney Rehm + * @package Smarty + * @version 3.1-DEV + */ + +/** + * define shorthand directory separator constant + */ +if (!defined('DS')) { + define('DS', DIRECTORY_SEPARATOR); +} + +/** + * set SMARTY_DIR to absolute path to Smarty library files. + * Sets SMARTY_DIR only if user application has not already defined it. + */ +if (!defined('SMARTY_DIR')) { + define('SMARTY_DIR', dirname(__FILE__) . DS); +} + +/** + * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins. + * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it. + */ +if (!defined('SMARTY_SYSPLUGINS_DIR')) { + define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DS); +} +if (!defined('SMARTY_PLUGINS_DIR')) { + define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS); +} +if (!defined('SMARTY_MBSTRING')) { + define('SMARTY_MBSTRING', function_exists('mb_strlen')); +} +if (!defined('SMARTY_RESOURCE_CHAR_SET')) { + // UTF-8 can only be done properly when mbstring is available! + /** + * @deprecated in favor of Smarty::$_CHARSET + */ + define('SMARTY_RESOURCE_CHAR_SET', SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1'); +} +if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { + /** + * @deprecated in favor of Smarty::$_DATE_FORMAT + */ + define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y'); +} + +/** + * register the class autoloader + */ +if (!defined('SMARTY_SPL_AUTOLOAD')) { + define('SMARTY_SPL_AUTOLOAD', 0); +} + +if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) { + $registeredAutoLoadFunctions = spl_autoload_functions(); + if (!isset($registeredAutoLoadFunctions['spl_autoload'])) { + spl_autoload_register(); + } +} else { + spl_autoload_register('smartyAutoload'); +} + +/** + * Load always needed external class files + */ +include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_data.php'; +include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_templatebase.php'; +include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_template.php'; +include_once SMARTY_SYSPLUGINS_DIR.'smarty_resource.php'; +include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_resource_file.php'; +include_once SMARTY_SYSPLUGINS_DIR.'smarty_cacheresource.php'; +include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_cacheresource_file.php'; + +/** + * This is the main Smarty class + * @package Smarty + */ +class Smarty extends Smarty_Internal_TemplateBase { + + /**#@+ + * constant definitions + */ + + /** + * smarty version + */ + const SMARTY_VERSION = 'Smarty-3.1.11'; + + /** + * define variable scopes + */ + const SCOPE_LOCAL = 0; + const SCOPE_PARENT = 1; + const SCOPE_ROOT = 2; + const SCOPE_GLOBAL = 3; + /** + * define caching modes + */ + const CACHING_OFF = 0; + const CACHING_LIFETIME_CURRENT = 1; + const CACHING_LIFETIME_SAVED = 2; + /** + * define compile check modes + */ + const COMPILECHECK_OFF = 0; + const COMPILECHECK_ON = 1; + const COMPILECHECK_CACHEMISS = 2; + /** + * modes for handling of "" tags in templates. + */ + const PHP_PASSTHRU = 0; //-> print tags as plain text + const PHP_QUOTE = 1; //-> escape tags as entities + const PHP_REMOVE = 2; //-> escape tags as entities + const PHP_ALLOW = 3; //-> escape tags as entities + /** + * filter types + */ + const FILTER_POST = 'post'; + const FILTER_PRE = 'pre'; + const FILTER_OUTPUT = 'output'; + const FILTER_VARIABLE = 'variable'; + /** + * plugin types + */ + const PLUGIN_FUNCTION = 'function'; + const PLUGIN_BLOCK = 'block'; + const PLUGIN_COMPILER = 'compiler'; + const PLUGIN_MODIFIER = 'modifier'; + const PLUGIN_MODIFIERCOMPILER = 'modifiercompiler'; + + /**#@-*/ + + /** + * assigned global tpl vars + */ + public static $global_tpl_vars = array(); + + /** + * error handler returned by set_error_hanlder() in Smarty::muteExpectedErrors() + */ + public static $_previous_error_handler = null; + /** + * contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors() + */ + public static $_muted_directories = array(); + /** + * Flag denoting if Multibyte String functions are available + */ + public static $_MBSTRING = SMARTY_MBSTRING; + /** + * The character set to adhere to (e.g. "UTF-8") + */ + public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET; + /** + * The date format to be used internally + * (accepts date() and strftime()) + */ + public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT; + /** + * Flag denoting if PCRE should run in UTF-8 mode + */ + public static $_UTF8_MODIFIER = 'u'; + + /** + * Flag denoting if operating system is windows + */ + public static $_IS_WINDOWS = false; + + /**#@+ + * variables + */ + + /** + * auto literal on delimiters with whitspace + * @var boolean + */ + public $auto_literal = true; + /** + * display error on not assigned variables + * @var boolean + */ + public $error_unassigned = false; + /** + * look up relative filepaths in include_path + * @var boolean + */ + public $use_include_path = false; + /** + * template directory + * @var array + */ + private $template_dir = array(); + /** + * joined template directory string used in cache keys + * @var string + */ + public $joined_template_dir = null; + /** + * joined config directory string used in cache keys + * @var string + */ + public $joined_config_dir = null; + /** + * default template handler + * @var callable + */ + public $default_template_handler_func = null; + /** + * default config handler + * @var callable + */ + public $default_config_handler_func = null; + /** + * default plugin handler + * @var callable + */ + public $default_plugin_handler_func = null; + /** + * compile directory + * @var string + */ + private $compile_dir = null; + /** + * plugins directory + * @var array + */ + private $plugins_dir = array(); + /** + * cache directory + * @var string + */ + private $cache_dir = null; + /** + * config directory + * @var array + */ + private $config_dir = array(); + /** + * force template compiling? + * @var boolean + */ + public $force_compile = false; + /** + * check template for modifications? + * @var boolean + */ + public $compile_check = true; + /** + * use sub dirs for compiled/cached files? + * @var boolean + */ + public $use_sub_dirs = false; + /** + * allow ambiguous resources (that are made unique by the resource handler) + * @var boolean + */ + public $allow_ambiguous_resources = false; + /** + * caching enabled + * @var boolean + */ + public $caching = false; + /** + * merge compiled includes + * @var boolean + */ + public $merge_compiled_includes = false; + /** + * cache lifetime in seconds + * @var integer + */ + public $cache_lifetime = 3600; + /** + * force cache file creation + * @var boolean + */ + public $force_cache = false; + /** + * Set this if you want different sets of cache files for the same + * templates. + * + * @var string + */ + public $cache_id = null; + /** + * Set this if you want different sets of compiled files for the same + * templates. + * + * @var string + */ + public $compile_id = null; + /** + * template left-delimiter + * @var string + */ + public $left_delimiter = "{"; + /** + * template right-delimiter + * @var string + */ + public $right_delimiter = "}"; + /**#@+ + * security + */ + /** + * class name + * + * This should be instance of Smarty_Security. + * + * @var string + * @see Smarty_Security + */ + public $security_class = 'Smarty_Security'; + /** + * implementation of security class + * + * @var Smarty_Security + */ + public $security_policy = null; + /** + * controls handling of PHP-blocks + * + * @var integer + */ + public $php_handling = self::PHP_PASSTHRU; + /** + * controls if the php template file resource is allowed + * + * @var bool + */ + public $allow_php_templates = false; + /** + * Should compiled-templates be prevented from being called directly? + * + * {@internal + * Currently used by Smarty_Internal_Template only. + * }} + * + * @var boolean + */ + public $direct_access_security = true; + /**#@-*/ + /** + * debug mode + * + * Setting this to true enables the debug-console. + * + * @var boolean + */ + public $debugging = false; + /** + * This determines if debugging is enable-able from the browser. + *
        + *
      • NONE => no debugging control allowed
      • + *
      • URL => enable debugging when SMARTY_DEBUG is found in the URL.
      • + *
      + * @var string + */ + public $debugging_ctrl = 'NONE'; + /** + * Name of debugging URL-param. + * + * Only used when $debugging_ctrl is set to 'URL'. + * The name of the URL-parameter that activates debugging. + * + * @var type + */ + public $smarty_debug_id = 'SMARTY_DEBUG'; + /** + * Path of debug template. + * @var string + */ + public $debug_tpl = null; + /** + * When set, smarty uses this value as error_reporting-level. + * @var int + */ + public $error_reporting = null; + /** + * Internal flag for getTags() + * @var boolean + */ + public $get_used_tags = false; + + /**#@+ + * config var settings + */ + + /** + * Controls whether variables with the same name overwrite each other. + * @var boolean + */ + public $config_overwrite = true; + /** + * Controls whether config values of on/true/yes and off/false/no get converted to boolean. + * @var boolean + */ + public $config_booleanize = true; + /** + * Controls whether hidden config sections/vars are read from the file. + * @var boolean + */ + public $config_read_hidden = false; + + /**#@-*/ + + /**#@+ + * resource locking + */ + + /** + * locking concurrent compiles + * @var boolean + */ + public $compile_locking = true; + /** + * Controls whether cache resources should emply locking mechanism + * @var boolean + */ + public $cache_locking = false; + /** + * seconds to wait for acquiring a lock before ignoring the write lock + * @var float + */ + public $locking_timeout = 10; + + /**#@-*/ + + /** + * global template functions + * @var array + */ + public $template_functions = array(); + /** + * resource type used if none given + * + * Must be an valid key of $registered_resources. + * @var string + */ + public $default_resource_type = 'file'; + /** + * caching type + * + * Must be an element of $cache_resource_types. + * + * @var string + */ + public $caching_type = 'file'; + /** + * internal config properties + * @var array + */ + public $properties = array(); + /** + * config type + * @var string + */ + public $default_config_type = 'file'; + /** + * cached template objects + * @var array + */ + public $template_objects = array(); + /** + * check If-Modified-Since headers + * @var boolean + */ + public $cache_modified_check = false; + /** + * registered plugins + * @var array + */ + public $registered_plugins = array(); + /** + * plugin search order + * @var array + */ + public $plugin_search_order = array('function', 'block', 'compiler', 'class'); + /** + * registered objects + * @var array + */ + public $registered_objects = array(); + /** + * registered classes + * @var array + */ + public $registered_classes = array(); + /** + * registered filters + * @var array + */ + public $registered_filters = array(); + /** + * registered resources + * @var array + */ + public $registered_resources = array(); + /** + * resource handler cache + * @var array + */ + public $_resource_handlers = array(); + /** + * registered cache resources + * @var array + */ + public $registered_cache_resources = array(); + /** + * cache resource handler cache + * @var array + */ + public $_cacheresource_handlers = array(); + /** + * autoload filter + * @var array + */ + public $autoload_filters = array(); + /** + * default modifier + * @var array + */ + public $default_modifiers = array(); + /** + * autoescape variable output + * @var boolean + */ + public $escape_html = false; + /** + * global internal smarty vars + * @var array + */ + public static $_smarty_vars = array(); + /** + * start time for execution time calculation + * @var int + */ + public $start_time = 0; + /** + * default file permissions + * @var int + */ + public $_file_perms = 0644; + /** + * default dir permissions + * @var int + */ + public $_dir_perms = 0771; + /** + * block tag hierarchy + * @var array + */ + public $_tag_stack = array(); + /** + * self pointer to Smarty object + * @var Smarty + */ + public $smarty; + /** + * required by the compiler for BC + * @var string + */ + public $_current_file = null; + /** + * internal flag to enable parser debugging + * @var bool + */ + public $_parserdebug = false; + /** + * Saved parameter of merged templates during compilation + * + * @var array + */ + public $merged_templates_func = array(); + /**#@-*/ + + /** + * Initialize new Smarty object + * + */ + public function __construct() + { + // selfpointer needed by some other class methods + $this->smarty = $this; + if (is_callable('mb_internal_encoding')) { + mb_internal_encoding(Smarty::$_CHARSET); + } + $this->start_time = microtime(true); + // set default dirs + $this->setTemplateDir('.' . DS . 'templates' . DS) + ->setCompileDir('.' . DS . 'templates_c' . DS) + ->setPluginsDir(SMARTY_PLUGINS_DIR) + ->setCacheDir('.' . DS . 'cache' . DS) + ->setConfigDir('.' . DS . 'configs' . DS); + + $this->debug_tpl = 'file:' . dirname(__FILE__) . '/debug.tpl'; + if (isset($_SERVER['SCRIPT_NAME'])) { + $this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']); + } + } + + + /** + * Class destructor + */ + public function __destruct() + { + // intentionally left blank + } + + /** + * <> set selfpointer on cloned object + */ + public function __clone() + { + $this->smarty = $this; + } + + + /** + * <> Generic getter. + * + * Calls the appropriate getter function. + * Issues an E_USER_NOTICE if no valid getter is found. + * + * @param string $name property name + * @return mixed + */ + public function __get($name) + { + $allowed = array( + 'template_dir' => 'getTemplateDir', + 'config_dir' => 'getConfigDir', + 'plugins_dir' => 'getPluginsDir', + 'compile_dir' => 'getCompileDir', + 'cache_dir' => 'getCacheDir', + ); + + if (isset($allowed[$name])) { + return $this->{$allowed[$name]}(); + } else { + trigger_error('Undefined property: '. get_class($this) .'::$'. $name, E_USER_NOTICE); + } + } + + /** + * <> Generic setter. + * + * Calls the appropriate setter function. + * Issues an E_USER_NOTICE if no valid setter is found. + * + * @param string $name property name + * @param mixed $value parameter passed to setter + */ + public function __set($name, $value) + { + $allowed = array( + 'template_dir' => 'setTemplateDir', + 'config_dir' => 'setConfigDir', + 'plugins_dir' => 'setPluginsDir', + 'compile_dir' => 'setCompileDir', + 'cache_dir' => 'setCacheDir', + ); + + if (isset($allowed[$name])) { + $this->{$allowed[$name]}($value); + } else { + trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); + } + } + + /** + * Check if a template resource exists + * + * @param string $resource_name template name + * @return boolean status + */ + public function templateExists($resource_name) + { + // create template object + $save = $this->template_objects; + $tpl = new $this->template_class($resource_name, $this); + // check if it does exists + $result = $tpl->source->exists; + $this->template_objects = $save; + return $result; + } + + /** + * Returns a single or all global variables + * + * @param object $smarty + * @param string $varname variable name or null + * @return string variable value or or array of variables + */ + public function getGlobal($varname = null) + { + if (isset($varname)) { + if (isset(self::$global_tpl_vars[$varname])) { + return self::$global_tpl_vars[$varname]->value; + } else { + return ''; + } + } else { + $_result = array(); + foreach (self::$global_tpl_vars AS $key => $var) { + $_result[$key] = $var->value; + } + return $_result; + } + } + + /** + * Empty cache folder + * + * @param integer $exp_time expiration time + * @param string $type resource type + * @return integer number of cache files deleted + */ + function clearAllCache($exp_time = null, $type = null) + { + // load cache resource and call clearAll + $_cache_resource = Smarty_CacheResource::load($this, $type); + Smarty_CacheResource::invalidLoadedCache($this); + return $_cache_resource->clearAll($this, $exp_time); + } + + /** + * Empty cache for a specific template + * + * @param string $template_name template name + * @param string $cache_id cache id + * @param string $compile_id compile id + * @param integer $exp_time expiration time + * @param string $type resource type + * @return integer number of cache files deleted + */ + public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) + { + // load cache resource and call clear + $_cache_resource = Smarty_CacheResource::load($this, $type); + Smarty_CacheResource::invalidLoadedCache($this); + return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time); + } + + /** + * Loads security class and enables security + * + * @param string|Smarty_Security $security_class if a string is used, it must be class-name + * @return Smarty current Smarty instance for chaining + * @throws SmartyException when an invalid class name is provided + */ + public function enableSecurity($security_class = null) + { + if ($security_class instanceof Smarty_Security) { + $this->security_policy = $security_class; + return $this; + } elseif (is_object($security_class)) { + throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security."); + } + if ($security_class == null) { + $security_class = $this->security_class; + } + if (!class_exists($security_class)) { + throw new SmartyException("Security class '$security_class' is not defined"); + } elseif ($security_class !== 'Smarty_Security' && !is_subclass_of($security_class, 'Smarty_Security')) { + throw new SmartyException("Class '$security_class' must extend Smarty_Security."); + } else { + $this->security_policy = new $security_class($this); + } + + return $this; + } + + /** + * Disable security + * @return Smarty current Smarty instance for chaining + */ + public function disableSecurity() + { + $this->security_policy = null; + + return $this; + } + + /** + * Set template directory + * + * @param string|array $template_dir directory(s) of template sources + * @return Smarty current Smarty instance for chaining + */ + public function setTemplateDir($template_dir) + { + $this->template_dir = array(); + foreach ((array) $template_dir as $k => $v) { + $this->template_dir[$k] = rtrim($v, '/\\') . DS; + } + + $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); + return $this; + } + + /** + * Add template directory(s) + * + * @param string|array $template_dir directory(s) of template sources + * @param string $key of the array element to assign the template dir to + * @return Smarty current Smarty instance for chaining + * @throws SmartyException when the given template directory is not valid + */ + public function addTemplateDir($template_dir, $key=null) + { + // make sure we're dealing with an array + $this->template_dir = (array) $this->template_dir; + + if (is_array($template_dir)) { + foreach ($template_dir as $k => $v) { + if (is_int($k)) { + // indexes are not merged but appended + $this->template_dir[] = rtrim($v, '/\\') . DS; + } else { + // string indexes are overridden + $this->template_dir[$k] = rtrim($v, '/\\') . DS; + } + } + } elseif ($key !== null) { + // override directory at specified index + $this->template_dir[$key] = rtrim($template_dir, '/\\') . DS; + } else { + // append new directory + $this->template_dir[] = rtrim($template_dir, '/\\') . DS; + } + $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); + return $this; + } + + /** + * Get template directories + * + * @param mixed index of directory to get, null to get all + * @return array|string list of template directories, or directory of $index + */ + public function getTemplateDir($index=null) + { + if ($index !== null) { + return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null; + } + + return (array)$this->template_dir; + } + + /** + * Set config directory + * + * @param string|array $template_dir directory(s) of configuration sources + * @return Smarty current Smarty instance for chaining + */ + public function setConfigDir($config_dir) + { + $this->config_dir = array(); + foreach ((array) $config_dir as $k => $v) { + $this->config_dir[$k] = rtrim($v, '/\\') . DS; + } + + $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); + return $this; + } + + /** + * Add config directory(s) + * + * @param string|array $config_dir directory(s) of config sources + * @param string key of the array element to assign the config dir to + * @return Smarty current Smarty instance for chaining + */ + public function addConfigDir($config_dir, $key=null) + { + // make sure we're dealing with an array + $this->config_dir = (array) $this->config_dir; + + if (is_array($config_dir)) { + foreach ($config_dir as $k => $v) { + if (is_int($k)) { + // indexes are not merged but appended + $this->config_dir[] = rtrim($v, '/\\') . DS; + } else { + // string indexes are overridden + $this->config_dir[$k] = rtrim($v, '/\\') . DS; + } + } + } elseif( $key !== null ) { + // override directory at specified index + $this->config_dir[$key] = rtrim($config_dir, '/\\') . DS; + } else { + // append new directory + $this->config_dir[] = rtrim($config_dir, '/\\') . DS; + } + + $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); + return $this; + } + + /** + * Get config directory + * + * @param mixed index of directory to get, null to get all + * @return array|string configuration directory + */ + public function getConfigDir($index=null) + { + if ($index !== null) { + return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null; + } + + return (array)$this->config_dir; + } + + /** + * Set plugins directory + * + * @param string|array $plugins_dir directory(s) of plugins + * @return Smarty current Smarty instance for chaining + */ + public function setPluginsDir($plugins_dir) + { + $this->plugins_dir = array(); + foreach ((array)$plugins_dir as $k => $v) { + $this->plugins_dir[$k] = rtrim($v, '/\\') . DS; + } + + return $this; + } + + /** + * Adds directory of plugin files + * + * @param object $smarty + * @param string $ |array $ plugins folder + * @return Smarty current Smarty instance for chaining + */ + public function addPluginsDir($plugins_dir) + { + // make sure we're dealing with an array + $this->plugins_dir = (array) $this->plugins_dir; + + if (is_array($plugins_dir)) { + foreach ($plugins_dir as $k => $v) { + if (is_int($k)) { + // indexes are not merged but appended + $this->plugins_dir[] = rtrim($v, '/\\') . DS; + } else { + // string indexes are overridden + $this->plugins_dir[$k] = rtrim($v, '/\\') . DS; + } + } + } else { + // append new directory + $this->plugins_dir[] = rtrim($plugins_dir, '/\\') . DS; + } + + $this->plugins_dir = array_unique($this->plugins_dir); + return $this; + } + + /** + * Get plugin directories + * + * @return array list of plugin directories + */ + public function getPluginsDir() + { + return (array)$this->plugins_dir; + } + + /** + * Set compile directory + * + * @param string $compile_dir directory to store compiled templates in + * @return Smarty current Smarty instance for chaining + */ + public function setCompileDir($compile_dir) + { + $this->compile_dir = rtrim($compile_dir, '/\\') . DS; + if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { + Smarty::$_muted_directories[$this->compile_dir] = null; + } + return $this; + } + + /** + * Get compiled directory + * + * @return string path to compiled templates + */ + public function getCompileDir() + { + return $this->compile_dir; + } + + /** + * Set cache directory + * + * @param string $cache_dir directory to store cached templates in + * @return Smarty current Smarty instance for chaining + */ + public function setCacheDir($cache_dir) + { + $this->cache_dir = rtrim($cache_dir, '/\\') . DS; + if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { + Smarty::$_muted_directories[$this->cache_dir] = null; + } + return $this; + } + + /** + * Get cache directory + * + * @return string path of cache directory + */ + public function getCacheDir() + { + return $this->cache_dir; + } + + /** + * Set default modifiers + * + * @param array|string $modifiers modifier or list of modifiers to set + * @return Smarty current Smarty instance for chaining + */ + public function setDefaultModifiers($modifiers) + { + $this->default_modifiers = (array) $modifiers; + return $this; + } + + /** + * Add default modifiers + * + * @param array|string $modifiers modifier or list of modifiers to add + * @return Smarty current Smarty instance for chaining + */ + public function addDefaultModifiers($modifiers) + { + if (is_array($modifiers)) { + $this->default_modifiers = array_merge($this->default_modifiers, $modifiers); + } else { + $this->default_modifiers[] = $modifiers; + } + + return $this; + } + + /** + * Get default modifiers + * + * @return array list of default modifiers + */ + public function getDefaultModifiers() + { + return $this->default_modifiers; + } + + + /** + * Set autoload filters + * + * @param array $filters filters to load automatically + * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types + * @return Smarty current Smarty instance for chaining + */ + public function setAutoloadFilters($filters, $type=null) + { + if ($type !== null) { + $this->autoload_filters[$type] = (array) $filters; + } else { + $this->autoload_filters = (array) $filters; + } + + return $this; + } + + /** + * Add autoload filters + * + * @param array $filters filters to load automatically + * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types + * @return Smarty current Smarty instance for chaining + */ + public function addAutoloadFilters($filters, $type=null) + { + if ($type !== null) { + if (!empty($this->autoload_filters[$type])) { + $this->autoload_filters[$type] = array_merge($this->autoload_filters[$type], (array) $filters); + } else { + $this->autoload_filters[$type] = (array) $filters; + } + } else { + foreach ((array) $filters as $key => $value) { + if (!empty($this->autoload_filters[$key])) { + $this->autoload_filters[$key] = array_merge($this->autoload_filters[$key], (array) $value); + } else { + $this->autoload_filters[$key] = (array) $value; + } + } + } + + return $this; + } + + /** + * Get autoload filters + * + * @param string $type type of filter to get autoloads for. Defaults to all autoload filters + * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type was specified + */ + public function getAutoloadFilters($type=null) + { + if ($type !== null) { + return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array(); + } + + return $this->autoload_filters; + } + + /** + * return name of debugging template + * + * @return string + */ + public function getDebugTemplate() + { + return $this->debug_tpl; + } + + /** + * set the debug template + * + * @param string $tpl_name + * @return Smarty current Smarty instance for chaining + * @throws SmartyException if file is not readable + */ + public function setDebugTemplate($tpl_name) + { + if (!is_readable($tpl_name)) { + throw new SmartyException("Unknown file '{$tpl_name}'"); + } + $this->debug_tpl = $tpl_name; + + return $this; + } + + /** + * creates a template object + * + * @param string $template the resource handle of the template file + * @param mixed $cache_id cache id to be used with this template + * @param mixed $compile_id compile id to be used with this template + * @param object $parent next higher level of Smarty variables + * @param boolean $do_clone flag is Smarty object shall be cloned + * @return object template object + */ + public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true) + { + if (!empty($cache_id) && (is_object($cache_id) || is_array($cache_id))) { + $parent = $cache_id; + $cache_id = null; + } + if (!empty($parent) && is_array($parent)) { + $data = $parent; + $parent = null; + } else { + $data = null; + } + // default to cache_id and compile_id of Smarty object + $cache_id = $cache_id === null ? $this->cache_id : $cache_id; + $compile_id = $compile_id === null ? $this->compile_id : $compile_id; + // already in template cache? + if ($this->allow_ambiguous_resources) { + $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id; + } else { + $_templateId = $this->joined_template_dir . '#' . $template . $cache_id . $compile_id; + } + if (isset($_templateId[150])) { + $_templateId = sha1($_templateId); + } + if ($do_clone) { + if (isset($this->template_objects[$_templateId])) { + // return cached template object + $tpl = clone $this->template_objects[$_templateId]; + $tpl->smarty = clone $tpl->smarty; + $tpl->parent = $parent; + $tpl->tpl_vars = array(); + $tpl->config_vars = array(); + } else { + $tpl = new $this->template_class($template, clone $this, $parent, $cache_id, $compile_id); + } + } else { + if (isset($this->template_objects[$_templateId])) { + // return cached template object + $tpl = $this->template_objects[$_templateId]; + $tpl->parent = $parent; + $tpl->tpl_vars = array(); + $tpl->config_vars = array(); + } else { + $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id); + } + } + // fill data if present + if (!empty($data) && is_array($data)) { + // set up variable values + foreach ($data as $_key => $_val) { + $tpl->tpl_vars[$_key] = new Smarty_variable($_val); + } + } + return $tpl; + } + + + /** + * Takes unknown classes and loads plugin files for them + * class name format: Smarty_PluginType_PluginName + * plugin filename format: plugintype.pluginname.php + * + * @param string $plugin_name class plugin name to load + * @param bool $check check if already loaded + * @return string |boolean filepath of loaded file or false + */ + public function loadPlugin($plugin_name, $check = true) + { + // if function or class exists, exit silently (already loaded) + if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) { + return true; + } + // Plugin name is expected to be: Smarty_[Type]_[Name] + $_name_parts = explode('_', $plugin_name, 3); + // class name must have three parts to be valid plugin + // count($_name_parts) < 3 === !isset($_name_parts[2]) + if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') { + throw new SmartyException("plugin {$plugin_name} is not a valid name format"); + return false; + } + // if type is "internal", get plugin from sysplugins + if (strtolower($_name_parts[1]) == 'internal') { + $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; + if (file_exists($file)) { + require_once($file); + return $file; + } else { + return false; + } + } + // plugin filename is expected to be: [type].[name].php + $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php"; + + $_stream_resolve_include_path = function_exists('stream_resolve_include_path'); + + // loop through plugin dirs and find the plugin + foreach($this->getPluginsDir() as $_plugin_dir) { + $names = array( + $_plugin_dir . $_plugin_filename, + $_plugin_dir . strtolower($_plugin_filename), + ); + foreach ($names as $file) { + if (file_exists($file)) { + require_once($file); + return $file; + } + if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { + // try PHP include_path + if ($_stream_resolve_include_path) { + $file = stream_resolve_include_path($file); + } else { + $file = Smarty_Internal_Get_Include_Path::getIncludePath($file); + } + + if ($file !== false) { + require_once($file); + return $file; + } + } + } + } + // no plugin loaded + return false; + } + + /** + * Compile all template files + * + * @param string $extension file extension + * @param bool $force_compile force all to recompile + * @param int $time_limit + * @param int $max_errors + * @return integer number of template files recompiled + */ + public function compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) + { + return Smarty_Internal_Utility::compileAllTemplates($extention, $force_compile, $time_limit, $max_errors, $this); + } + + /** + * Compile all config files + * + * @param string $extension file extension + * @param bool $force_compile force all to recompile + * @param int $time_limit + * @param int $max_errors + * @return integer number of template files recompiled + */ + public function compileAllConfig($extention = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) + { + return Smarty_Internal_Utility::compileAllConfig($extention, $force_compile, $time_limit, $max_errors, $this); + } + + /** + * Delete compiled template file + * + * @param string $resource_name template name + * @param string $compile_id compile id + * @param integer $exp_time expiration time + * @return integer number of template files deleted + */ + public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) + { + return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this); + } + + + /** + * Return array of tag/attributes of all tags used by an template + * + * @param object $templae template object + * @return array of tag/attributes + */ + public function getTags(Smarty_Internal_Template $template) + { + return Smarty_Internal_Utility::getTags($template); + } + + /** + * Run installation test + * + * @param array $errors Array to write errors into, rather than outputting them + * @return boolean true if setup is fine, false if something is wrong + */ + public function testInstall(&$errors=null) + { + return Smarty_Internal_Utility::testInstall($this, $errors); + } + + /** + * Error Handler to mute expected messages + * + * @link http://php.net/set_error_handler + * @param integer $errno Error level + * @return boolean + */ + public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) + { + $_is_muted_directory = false; + + // add the SMARTY_DIR to the list of muted directories + if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) { + $smarty_dir = realpath(SMARTY_DIR); + Smarty::$_muted_directories[SMARTY_DIR] = array( + 'file' => $smarty_dir, + 'length' => strlen($smarty_dir), + ); + } + + // walk the muted directories and test against $errfile + foreach (Smarty::$_muted_directories as $key => &$dir) { + if (!$dir) { + // resolve directory and length for speedy comparisons + $file = realpath($key); + $dir = array( + 'file' => $file, + 'length' => strlen($file), + ); + } + if (!strncmp($errfile, $dir['file'], $dir['length'])) { + $_is_muted_directory = true; + break; + } + } + + // pass to next error handler if this error did not occur inside SMARTY_DIR + // or the error was within smarty but masked to be ignored + if (!$_is_muted_directory || ($errno && $errno & error_reporting())) { + if (Smarty::$_previous_error_handler) { + return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline, $errcontext); + } else { + return false; + } + } + } + + /** + * Enable error handler to mute expected messages + * + * @return void + */ + public static function muteExpectedErrors() + { + /* + error muting is done because some people implemented custom error_handlers using + http://php.net/set_error_handler and for some reason did not understand the following paragraph: + + It is important to remember that the standard PHP error handler is completely bypassed for the + error types specified by error_types unless the callback function returns FALSE. + error_reporting() settings will have no effect and your error handler will be called regardless - + however you are still able to read the current value of error_reporting and act appropriately. + Of particular note is that this value will be 0 if the statement that caused the error was + prepended by the @ error-control operator. + + Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include + - @filemtime() is almost twice as fast as using an additional file_exists() + - between file_exists() and filemtime() a possible race condition is opened, + which does not exist using the simple @filemtime() approach. + */ + $error_handler = array('Smarty', 'mutingErrorHandler'); + $previous = set_error_handler($error_handler); + + // avoid dead loops + if ($previous !== $error_handler) { + Smarty::$_previous_error_handler = $previous; + } + } + + /** + * Disable error handler muting expected messages + * + * @return void + */ + public static function unmuteExpectedErrors() + { + restore_error_handler(); + } +} + +// Check if we're running on windows +Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; + +// let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8 +if (Smarty::$_CHARSET !== 'UTF-8') { + Smarty::$_UTF8_MODIFIER = ''; +} + +/** + * Smarty exception class + * @package Smarty + */ +class SmartyException extends Exception { +} + +/** + * Smarty compiler exception class + * @package Smarty + */ +class SmartyCompilerException extends SmartyException { +} + +/** + * Autoloader + */ +function smartyAutoload($class) +{ + $_class = strtolower($class); + $_classes = array( + 'smarty_config_source' => true, + 'smarty_config_compiled' => true, + 'smarty_security' => true, + 'smarty_cacheresource' => true, + 'smarty_cacheresource_custom' => true, + 'smarty_cacheresource_keyvaluestore' => true, + 'smarty_resource' => true, + 'smarty_resource_custom' => true, + 'smarty_resource_uncompiled' => true, + 'smarty_resource_recompiled' => true, + ); + + if (!strncmp($_class, 'smarty_internal_', 16) || isset($_classes[$_class])) { + include SMARTY_SYSPLUGINS_DIR . $_class . '.php'; + } +} + +?> diff --git a/library/Smarty/libs/SmartyBC.class.php b/library/Smarty/libs/SmartyBC.class.php new file mode 100644 index 0000000000..f8f0a138f8 --- /dev/null +++ b/library/Smarty/libs/SmartyBC.class.php @@ -0,0 +1,460 @@ + + * @author Uwe Tews + * @author Rodney Rehm + * @package Smarty + */ +/** + * @ignore + */ +require(dirname(__FILE__) . '/Smarty.class.php'); + +/** + * Smarty Backward Compatability Wrapper Class + * + * @package Smarty + */ +class SmartyBC extends Smarty { + + /** + * Smarty 2 BC + * @var string + */ + public $_version = self::SMARTY_VERSION; + + /** + * Initialize new SmartyBC object + * + * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false ) + */ + public function __construct(array $options=array()) + { + parent::__construct($options); + // register {php} tag + $this->registerPlugin('block', 'php', 'smarty_php_tag'); + } + + /** + * wrapper for assign_by_ref + * + * @param string $tpl_var the template variable name + * @param mixed &$value the referenced value to assign + */ + public function assign_by_ref($tpl_var, &$value) + { + $this->assignByRef($tpl_var, $value); + } + + /** + * wrapper for append_by_ref + * + * @param string $tpl_var the template variable name + * @param mixed &$value the referenced value to append + * @param boolean $merge flag if array elements shall be merged + */ + public function append_by_ref($tpl_var, &$value, $merge = false) + { + $this->appendByRef($tpl_var, $value, $merge); + } + + /** + * clear the given assigned template variable. + * + * @param string $tpl_var the template variable to clear + */ + public function clear_assign($tpl_var) + { + $this->clearAssign($tpl_var); + } + + /** + * Registers custom function to be used in templates + * + * @param string $function the name of the template function + * @param string $function_impl the name of the PHP function to register + * @param bool $cacheable + * @param mixed $cache_attrs + */ + public function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) + { + $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs); + } + + /** + * Unregisters custom function + * + * @param string $function name of template function + */ + public function unregister_function($function) + { + $this->unregisterPlugin('function', $function); + } + + /** + * Registers object to be used in templates + * + * @param string $object name of template object + * @param object $object_impl the referenced PHP object to register + * @param array $allowed list of allowed methods (empty = all) + * @param boolean $smarty_args smarty argument format, else traditional + * @param array $block_functs list of methods that are block format + */ + public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) + { + settype($allowed, 'array'); + settype($smarty_args, 'boolean'); + $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods); + } + + /** + * Unregisters object + * + * @param string $object name of template object + */ + public function unregister_object($object) + { + $this->unregisterObject($object); + } + + /** + * Registers block function to be used in templates + * + * @param string $block name of template block + * @param string $block_impl PHP function to register + * @param bool $cacheable + * @param mixed $cache_attrs + */ + public function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) + { + $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs); + } + + /** + * Unregisters block function + * + * @param string $block name of template function + */ + public function unregister_block($block) + { + $this->unregisterPlugin('block', $block); + } + + /** + * Registers compiler function + * + * @param string $function name of template function + * @param string $function_impl name of PHP function to register + * @param bool $cacheable + */ + public function register_compiler_function($function, $function_impl, $cacheable=true) + { + $this->registerPlugin('compiler', $function, $function_impl, $cacheable); + } + + /** + * Unregisters compiler function + * + * @param string $function name of template function + */ + public function unregister_compiler_function($function) + { + $this->unregisterPlugin('compiler', $function); + } + + /** + * Registers modifier to be used in templates + * + * @param string $modifier name of template modifier + * @param string $modifier_impl name of PHP function to register + */ + public function register_modifier($modifier, $modifier_impl) + { + $this->registerPlugin('modifier', $modifier, $modifier_impl); + } + + /** + * Unregisters modifier + * + * @param string $modifier name of template modifier + */ + public function unregister_modifier($modifier) + { + $this->unregisterPlugin('modifier', $modifier); + } + + /** + * Registers a resource to fetch a template + * + * @param string $type name of resource + * @param array $functions array of functions to handle resource + */ + public function register_resource($type, $functions) + { + $this->registerResource($type, $functions); + } + + /** + * Unregisters a resource + * + * @param string $type name of resource + */ + public function unregister_resource($type) + { + $this->unregisterResource($type); + } + + /** + * Registers a prefilter function to apply + * to a template before compiling + * + * @param callable $function + */ + public function register_prefilter($function) + { + $this->registerFilter('pre', $function); + } + + /** + * Unregisters a prefilter function + * + * @param callable $function + */ + public function unregister_prefilter($function) + { + $this->unregisterFilter('pre', $function); + } + + /** + * Registers a postfilter function to apply + * to a compiled template after compilation + * + * @param callable $function + */ + public function register_postfilter($function) + { + $this->registerFilter('post', $function); + } + + /** + * Unregisters a postfilter function + * + * @param callable $function + */ + public function unregister_postfilter($function) + { + $this->unregisterFilter('post', $function); + } + + /** + * Registers an output filter function to apply + * to a template output + * + * @param callable $function + */ + public function register_outputfilter($function) + { + $this->registerFilter('output', $function); + } + + /** + * Unregisters an outputfilter function + * + * @param callable $function + */ + public function unregister_outputfilter($function) + { + $this->unregisterFilter('output', $function); + } + + /** + * load a filter of specified type and name + * + * @param string $type filter type + * @param string $name filter name + */ + public function load_filter($type, $name) + { + $this->loadFilter($type, $name); + } + + /** + * clear cached content for the given template and cache id + * + * @param string $tpl_file name of template file + * @param string $cache_id name of cache_id + * @param string $compile_id name of compile_id + * @param string $exp_time expiration time + * @return boolean + */ + public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) + { + return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time); + } + + /** + * clear the entire contents of cache (all templates) + * + * @param string $exp_time expire time + * @return boolean + */ + public function clear_all_cache($exp_time = null) + { + return $this->clearCache(null, null, null, $exp_time); + } + + /** + * test to see if valid cache exists for this template + * + * @param string $tpl_file name of template file + * @param string $cache_id + * @param string $compile_id + * @return boolean + */ + public function is_cached($tpl_file, $cache_id = null, $compile_id = null) + { + return $this->isCached($tpl_file, $cache_id, $compile_id); + } + + /** + * clear all the assigned template variables. + */ + public function clear_all_assign() + { + $this->clearAllAssign(); + } + + /** + * clears compiled version of specified template resource, + * or all compiled template files if one is not specified. + * This function is for advanced use only, not normally needed. + * + * @param string $tpl_file + * @param string $compile_id + * @param string $exp_time + * @return boolean results of {@link smarty_core_rm_auto()} + */ + public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) + { + return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time); + } + + /** + * Checks whether requested template exists. + * + * @param string $tpl_file + * @return boolean + */ + public function template_exists($tpl_file) + { + return $this->templateExists($tpl_file); + } + + /** + * Returns an array containing template variables + * + * @param string $name + * @return array + */ + public function get_template_vars($name=null) + { + return $this->getTemplateVars($name); + } + + /** + * Returns an array containing config variables + * + * @param string $name + * @return array + */ + public function get_config_vars($name=null) + { + return $this->getConfigVars($name); + } + + /** + * load configuration values + * + * @param string $file + * @param string $section + * @param string $scope + */ + public function config_load($file, $section = null, $scope = 'global') + { + $this->ConfigLoad($file, $section, $scope); + } + + /** + * return a reference to a registered object + * + * @param string $name + * @return object + */ + public function get_registered_object($name) + { + return $this->getRegisteredObject($name); + } + + /** + * clear configuration values + * + * @param string $var + */ + public function clear_config($var = null) + { + $this->clearConfig($var); + } + + /** + * trigger Smarty error + * + * @param string $error_msg + * @param integer $error_type + */ + public function trigger_error($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Smarty error: $error_msg", $error_type); + } + +} + +/** + * Smarty {php}{/php} block function + * + * @param array $params parameter list + * @param string $content contents of the block + * @param object $template template object + * @param boolean &$repeat repeat flag + * @return string content re-formatted + */ +function smarty_php_tag($params, $content, $template, &$repeat) +{ + eval($content); + return ''; +} + +?> \ No newline at end of file diff --git a/library/Smarty/libs/debug.tpl b/library/Smarty/libs/debug.tpl new file mode 100644 index 0000000000..12eef0ffdb --- /dev/null +++ b/library/Smarty/libs/debug.tpl @@ -0,0 +1,133 @@ +{capture name='_smarty_debug' assign=debug_output} + + + + Smarty Debug Console + + + + +

      Smarty Debug Console - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}

      + +{if !empty($template_data)} +

      included templates & config files (load time in seconds)

      + +
      +{foreach $template_data as $template} + {$template.name} + + (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}) + +
      +{/foreach} +
      +{/if} + +

      assigned template variables

      + + + {foreach $assigned_vars as $vars} + + + + {/foreach} +
      ${$vars@key|escape:'html'}{$vars|debug_print_var nofilter}
      + +

      assigned config file variables (outer template scope)

      + + + {foreach $config_vars as $vars} + + + + {/foreach} + +
      {$vars@key|escape:'html'}{$vars|debug_print_var nofilter}
      + + +{/capture} + diff --git a/library/Smarty/libs/plugins/block.textformat.php b/library/Smarty/libs/plugins/block.textformat.php new file mode 100644 index 0000000000..b22b104a55 --- /dev/null +++ b/library/Smarty/libs/plugins/block.textformat.php @@ -0,0 +1,113 @@ + + * Name: textformat
      + * Purpose: format text a certain way with preset styles + * or custom wrap/indent settings
      + * Params: + *
      + * - style         - string (email)
      + * - indent        - integer (0)
      + * - wrap          - integer (80)
      + * - wrap_char     - string ("\n")
      + * - indent_char   - string (" ")
      + * - wrap_boundary - boolean (true)
      + * 
      + * + * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} + * (Smarty online manual) + * @param array $params parameters + * @param string $content contents of the block + * @param Smarty_Internal_Template $template template object + * @param boolean &$repeat repeat flag + * @return string content re-formatted + * @author Monte Ohrt + */ +function smarty_block_textformat($params, $content, $template, &$repeat) +{ + if (is_null($content)) { + return; + } + + $style = null; + $indent = 0; + $indent_first = 0; + $indent_char = ' '; + $wrap = 80; + $wrap_char = "\n"; + $wrap_cut = false; + $assign = null; + + foreach ($params as $_key => $_val) { + switch ($_key) { + case 'style': + case 'indent_char': + case 'wrap_char': + case 'assign': + $$_key = (string)$_val; + break; + + case 'indent': + case 'indent_first': + case 'wrap': + $$_key = (int)$_val; + break; + + case 'wrap_cut': + $$_key = (bool)$_val; + break; + + default: + trigger_error("textformat: unknown attribute '$_key'"); + } + } + + if ($style == 'email') { + $wrap = 72; + } + // split into paragraphs + $_paragraphs = preg_split('![\r\n]{2}!', $content); + $_output = ''; + + + foreach ($_paragraphs as &$_paragraph) { + if (!$_paragraph) { + continue; + } + // convert mult. spaces & special chars to single space + $_paragraph = preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), array(' ', ''), $_paragraph); + // indent first line + if ($indent_first > 0) { + $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; + } + // wordwrap sentences + if (Smarty::$_MBSTRING) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); + $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); + } else { + $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); + } + // indent lines + if ($indent > 0) { + $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph); + } + } + $_output = implode($wrap_char . $wrap_char, $_paragraphs); + + if ($assign) { + $template->assign($assign, $_output); + } else { + return $_output; + } +} + +?> \ No newline at end of file diff --git a/library/Smarty/libs/plugins/function.counter.php b/library/Smarty/libs/plugins/function.counter.php new file mode 100644 index 0000000000..3906badf0f --- /dev/null +++ b/library/Smarty/libs/plugins/function.counter.php @@ -0,0 +1,78 @@ + + * Name: counter
      + * Purpose: print out a counter value + * + * @author Monte Ohrt + * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * @return string|null + */ +function smarty_function_counter($params, $template) +{ + static $counters = array(); + + $name = (isset($params['name'])) ? $params['name'] : 'default'; + if (!isset($counters[$name])) { + $counters[$name] = array( + 'start'=>1, + 'skip'=>1, + 'direction'=>'up', + 'count'=>1 + ); + } + $counter =& $counters[$name]; + + if (isset($params['start'])) { + $counter['start'] = $counter['count'] = (int)$params['start']; + } + + if (!empty($params['assign'])) { + $counter['assign'] = $params['assign']; + } + + if (isset($counter['assign'])) { + $template->assign($counter['assign'], $counter['count']); + } + + if (isset($params['print'])) { + $print = (bool)$params['print']; + } else { + $print = empty($counter['assign']); + } + + if ($print) { + $retval = $counter['count']; + } else { + $retval = null; + } + + if (isset($params['skip'])) { + $counter['skip'] = $params['skip']; + } + + if (isset($params['direction'])) { + $counter['direction'] = $params['direction']; + } + + if ($counter['direction'] == "down") + $counter['count'] -= $counter['skip']; + else + $counter['count'] += $counter['skip']; + + return $retval; + +} + +?> \ No newline at end of file diff --git a/library/Smarty/libs/plugins/function.cycle.php b/library/Smarty/libs/plugins/function.cycle.php new file mode 100644 index 0000000000..1778ffb538 --- /dev/null +++ b/library/Smarty/libs/plugins/function.cycle.php @@ -0,0 +1,106 @@ + + * Name: cycle
      + * Date: May 3, 2002
      + * Purpose: cycle through given values
      + * Params: + *
      + * - name      - name of cycle (optional)
      + * - values    - comma separated list of values to cycle, or an array of values to cycle
      + *               (this can be left out for subsequent calls)
      + * - reset     - boolean - resets given var to true
      + * - print     - boolean - print var or not. default is true
      + * - advance   - boolean - whether or not to advance the cycle
      + * - delimiter - the value delimiter, default is ","
      + * - assign    - boolean, assigns to template var instead of printed.
      + * 
      + * Examples:
      + *
      + * {cycle values="#eeeeee,#d0d0d0d"}
      + * {cycle name=row values="one,two,three" reset=true}
      + * {cycle name=row}
      + * 
      + * + * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} + * (Smarty online manual) + * @author Monte Ohrt + * @author credit to Mark Priatel + * @author credit to Gerard + * @author credit to Jason Sweat + * @version 1.3 + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * @return string|null + */ + +function smarty_function_cycle($params, $template) +{ + static $cycle_vars; + + $name = (empty($params['name'])) ? 'default' : $params['name']; + $print = (isset($params['print'])) ? (bool)$params['print'] : true; + $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true; + $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false; + + if (!isset($params['values'])) { + if(!isset($cycle_vars[$name]['values'])) { + trigger_error("cycle: missing 'values' parameter"); + return; + } + } else { + if(isset($cycle_vars[$name]['values']) + && $cycle_vars[$name]['values'] != $params['values'] ) { + $cycle_vars[$name]['index'] = 0; + } + $cycle_vars[$name]['values'] = $params['values']; + } + + if (isset($params['delimiter'])) { + $cycle_vars[$name]['delimiter'] = $params['delimiter']; + } elseif (!isset($cycle_vars[$name]['delimiter'])) { + $cycle_vars[$name]['delimiter'] = ','; + } + + if(is_array($cycle_vars[$name]['values'])) { + $cycle_array = $cycle_vars[$name]['values']; + } else { + $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); + } + + if(!isset($cycle_vars[$name]['index']) || $reset ) { + $cycle_vars[$name]['index'] = 0; + } + + if (isset($params['assign'])) { + $print = false; + $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); + } + + if($print) { + $retval = $cycle_array[$cycle_vars[$name]['index']]; + } else { + $retval = null; + } + + if($advance) { + if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { + $cycle_vars[$name]['index'] = 0; + } else { + $cycle_vars[$name]['index']++; + } + } + + return $retval; +} + +?> \ No newline at end of file diff --git a/library/Smarty/libs/plugins/function.fetch.php b/library/Smarty/libs/plugins/function.fetch.php new file mode 100644 index 0000000000..eca1182d50 --- /dev/null +++ b/library/Smarty/libs/plugins/function.fetch.php @@ -0,0 +1,214 @@ + + * Name: fetch
      + * Purpose: fetch file, web or ftp data and display results + * + * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} + * (Smarty online manual) + * @author Monte Ohrt + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable + */ +function smarty_function_fetch($params, $template) +{ + if (empty($params['file'])) { + trigger_error("[plugin] fetch parameter 'file' cannot be empty",E_USER_NOTICE); + return; + } + + // strip file protocol + if (stripos($params['file'], 'file://') === 0) { + $params['file'] = substr($params['file'], 7); + } + + $protocol = strpos($params['file'], '://'); + if ($protocol !== false) { + $protocol = strtolower(substr($params['file'], 0, $protocol)); + } + + if (isset($template->smarty->security_policy)) { + if ($protocol) { + // remote resource (or php stream, …) + if(!$template->smarty->security_policy->isTrustedUri($params['file'])) { + return; + } + } else { + // local file + if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) { + return; + } + } + } + + $content = ''; + if ($protocol == 'http') { + // http fetch + if($uri_parts = parse_url($params['file'])) { + // set defaults + $host = $server_name = $uri_parts['host']; + $timeout = 30; + $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; + $agent = "Smarty Template Engine ". Smarty::SMARTY_VERSION; + $referer = ""; + $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; + $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; + $_is_proxy = false; + if(empty($uri_parts['port'])) { + $port = 80; + } else { + $port = $uri_parts['port']; + } + if(!empty($uri_parts['user'])) { + $user = $uri_parts['user']; + } + if(!empty($uri_parts['pass'])) { + $pass = $uri_parts['pass']; + } + // loop through parameters, setup headers + foreach($params as $param_key => $param_value) { + switch($param_key) { + case "file": + case "assign": + case "assign_headers": + break; + case "user": + if(!empty($param_value)) { + $user = $param_value; + } + break; + case "pass": + if(!empty($param_value)) { + $pass = $param_value; + } + break; + case "accept": + if(!empty($param_value)) { + $accept = $param_value; + } + break; + case "header": + if(!empty($param_value)) { + if(!preg_match('![\w\d-]+: .+!',$param_value)) { + trigger_error("[plugin] invalid header format '".$param_value."'",E_USER_NOTICE); + return; + } else { + $extra_headers[] = $param_value; + } + } + break; + case "proxy_host": + if(!empty($param_value)) { + $proxy_host = $param_value; + } + break; + case "proxy_port": + if(!preg_match('!\D!', $param_value)) { + $proxy_port = (int) $param_value; + } else { + trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE); + return; + } + break; + case "agent": + if(!empty($param_value)) { + $agent = $param_value; + } + break; + case "referer": + if(!empty($param_value)) { + $referer = $param_value; + } + break; + case "timeout": + if(!preg_match('!\D!', $param_value)) { + $timeout = (int) $param_value; + } else { + trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE); + return; + } + break; + default: + trigger_error("[plugin] unrecognized attribute '".$param_key."'",E_USER_NOTICE); + return; + } + } + if(!empty($proxy_host) && !empty($proxy_port)) { + $_is_proxy = true; + $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); + } else { + $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); + } + + if(!$fp) { + trigger_error("[plugin] unable to fetch: $errstr ($errno)",E_USER_NOTICE); + return; + } else { + if($_is_proxy) { + fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); + } else { + fputs($fp, "GET $uri HTTP/1.0\r\n"); + } + if(!empty($host)) { + fputs($fp, "Host: $host\r\n"); + } + if(!empty($accept)) { + fputs($fp, "Accept: $accept\r\n"); + } + if(!empty($agent)) { + fputs($fp, "User-Agent: $agent\r\n"); + } + if(!empty($referer)) { + fputs($fp, "Referer: $referer\r\n"); + } + if(isset($extra_headers) && is_array($extra_headers)) { + foreach($extra_headers as $curr_header) { + fputs($fp, $curr_header."\r\n"); + } + } + if(!empty($user) && !empty($pass)) { + fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); + } + + fputs($fp, "\r\n"); + while(!feof($fp)) { + $content .= fgets($fp,4096); + } + fclose($fp); + $csplit = preg_split("!\r\n\r\n!",$content,2); + + $content = $csplit[1]; + + if(!empty($params['assign_headers'])) { + $template->assign($params['assign_headers'],preg_split("!\r\n!",$csplit[0])); + } + } + } else { + trigger_error("[plugin fetch] unable to parse URL, check syntax",E_USER_NOTICE); + return; + } + } else { + $content = @file_get_contents($params['file']); + if ($content === false) { + throw new SmartyException("{fetch} cannot read resource '" . $params['file'] ."'"); + } + } + + if (!empty($params['assign'])) { + $template->assign($params['assign'], $content); + } else { + return $content; + } +} + +?> \ No newline at end of file diff --git a/library/Smarty/libs/plugins/function.html_checkboxes.php b/library/Smarty/libs/plugins/function.html_checkboxes.php new file mode 100644 index 0000000000..fb9584bbd4 --- /dev/null +++ b/library/Smarty/libs/plugins/function.html_checkboxes.php @@ -0,0 +1,216 @@ + + * Type: function
      + * Name: html_checkboxes
      + * Date: 24.Feb.2003
      + * Purpose: Prints out a list of checkbox input types
      + * Examples: + *
      + * {html_checkboxes values=$ids output=$names}
      + * {html_checkboxes values=$ids name='box' separator='
      ' output=$names} + * {html_checkboxes values=$ids checked=$checked separator='
      ' output=$names} + *
      + * Params: + *
      + * - name       (optional) - string default "checkbox"
      + * - values     (required) - array
      + * - options    (optional) - associative array
      + * - checked    (optional) - array default not set
      + * - separator  (optional) - ie 
      or   + * - output (optional) - the output next to each checkbox + * - assign (optional) - assign the output as an array to this variable + * - escape (optional) - escape the content (not value), defaults to true + *
      + * + * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} + * (Smarty online manual) + * @author Christopher Kvarme + * @author credits to Monte Ohrt + * @version 1.0 + * @param array $params parameters + * @param object $template template object + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_checkboxes($params, $template) +{ + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + + $name = 'checkbox'; + $values = null; + $options = null; + $selected = array(); + $separator = ''; + $escape = true; + $labels = true; + $label_ids = false; + $output = null; + + $extra = ''; + + foreach($params as $_key => $_val) { + switch($_key) { + case 'name': + case 'separator': + $$_key = (string) $_val; + break; + + case 'escape': + case 'labels': + case 'label_ids': + $$_key = (bool) $_val; + break; + + case 'options': + $$_key = (array) $_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array) $_val); + break; + + case 'checked': + case 'selected': + if (is_array($_val)) { + $selected = array(); + foreach ($_val as $_sel) { + if (is_object($_sel)) { + if (method_exists($_sel, "__toString")) { + $_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); + } else { + trigger_error("html_checkboxes: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE); + continue; + } + } else { + $_sel = smarty_function_escape_special_chars((string) $_sel); + } + $selected[$_sel] = true; + } + } elseif (is_object($_val)) { + if (method_exists($_val, "__toString")) { + $selected = smarty_function_escape_special_chars((string) $_val->__toString()); + } else { + trigger_error("html_checkboxes: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); + } + } else { + $selected = smarty_function_escape_special_chars((string) $_val); + } + break; + + case 'checkboxes': + trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); + $options = (array) $_val; + break; + + case 'assign': + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) + return ''; /* raise error here? */ + + $_html_result = array(); + + if (isset($options)) { + foreach ($options as $_key=>$_val) { + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); + } + } else { + foreach ($values as $_i=>$_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); + } + } + + if(!empty($params['assign'])) { + $template->assign($params['assign'], $_html_result); + } else { + return implode("\n", $_html_result); + } + +} + +function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape=true) { + $_output = ''; + + if (is_object($value)) { + if (method_exists($value, "__toString")) { + $value = (string) $value->__toString(); + } else { + trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); + return ''; + } + } else { + $value = (string) $value; + } + + if (is_object($output)) { + if (method_exists($output, "__toString")) { + $output = (string) $output->__toString(); + } else { + trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE); + return ''; + } + } else { + $output = (string) $output; + } + + if ($labels) { + if ($label_ids) { + $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); + $_output .= '
    diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less index 84aa13ac03..51fdfcf7c4 100644 --- a/view/theme/quattro/quattro.less +++ b/view/theme/quattro/quattro.less @@ -314,6 +314,18 @@ aside { li { padding: 0px; margin: 0px; list-style: none; } } + #wallmessage-link { + display: block; + .rounded(); + color: @AsideConnect; + background: @AsideConnectBg url('../../../images/connect-bg.png') no-repeat left center; + font-weight: bold; + text-transform:uppercase; + padding: 4px 2px 2px 35px; + margin-top: 3px; + + &:hover { text-decoration: none; background-color: @AsideConnectHoverBg; } + } #dfrn-request-link { display: block; .rounded(); From 6c44125fb5bd9d9ca22ac26f7eb801f896fe2950 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 14 Sep 2012 15:46:14 +0200 Subject: [PATCH 602/644] DE: update to the strings --- view/de/messages.po | 442 +++++++++++++++++++++++++++----------------- view/de/strings.php | 24 ++- 2 files changed, 294 insertions(+), 172 deletions(-) diff --git a/view/de/messages.po b/view/de/messages.po index c21bde3951..a01bf6a830 100644 --- a/view/de/messages.po +++ b/view/de/messages.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: http://bugs.friendica.com/\n" -"POT-Creation-Date: 2012-09-09 10:00-0700\n" -"PO-Revision-Date: 2012-09-11 07:17+0000\n" +"POT-Creation-Date: 2012-09-13 10:00-0700\n" +"PO-Revision-Date: 2012-09-14 13:44+0000\n" "Last-Translator: bavatar \n" "Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" "MIME-Version: 1.0\n" @@ -61,8 +61,8 @@ msgstr "Konnte den Kontakt nicht aktualisieren." #: ../../mod/group.php:19 ../../mod/viewcontacts.php:22 #: ../../mod/register.php:38 ../../mod/regmod.php:116 ../../mod/item.php:126 #: ../../mod/item.php:142 ../../mod/mood.php:114 -#: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:142 -#: ../../mod/profile_photo.php:153 ../../mod/profile_photo.php:166 +#: ../../mod/profile_photo.php:19 ../../mod/profile_photo.php:169 +#: ../../mod/profile_photo.php:180 ../../mod/profile_photo.php:193 #: ../../mod/message.php:38 ../../mod/message.php:168 #: ../../mod/allfriends.php:9 ../../mod/nogroup.php:25 #: ../../mod/wall_upload.php:64 ../../mod/follow.php:9 @@ -70,9 +70,10 @@ msgstr "Konnte den Kontakt nicht aktualisieren." #: ../../mod/profiles.php:413 ../../mod/delegate.php:6 #: ../../mod/suggest.php:28 ../../mod/invite.php:13 ../../mod/invite.php:81 #: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:510 -#: ../../addon/facebook/facebook.php:516 -#: ../../addon/dav/friendica/layout.fnk.php:354 ../../include/items.php:3834 -#: ../../index.php:315 +#: ../../addon/facebook/facebook.php:516 ../../addon/fbpost/fbpost.php:159 +#: ../../addon/fbpost/fbpost.php:165 +#: ../../addon/dav/friendica/layout.fnk.php:354 ../../include/items.php:3908 +#: ../../index.php:317 msgid "Permission denied." msgstr "Zugriff verweigert." @@ -154,15 +155,15 @@ msgstr "Neues Foto von dieser URL" #: ../../addon/fromgplus/fromgplus.php:40 #: ../../addon/facebook/facebook.php:619 #: ../../addon/snautofollow/snautofollow.php:64 ../../addon/bg/bg.php:90 -#: ../../addon/yourls/yourls.php:76 ../../addon/ljpost/ljpost.php:93 -#: ../../addon/nsfw/nsfw.php:57 ../../addon/page/page.php:210 -#: ../../addon/planets/planets.php:158 +#: ../../addon/fbpost/fbpost.php:226 ../../addon/yourls/yourls.php:76 +#: ../../addon/ljpost/ljpost.php:93 ../../addon/nsfw/nsfw.php:57 +#: ../../addon/page/page.php:210 ../../addon/planets/planets.php:158 #: ../../addon/uhremotestorage/uhremotestorage.php:89 #: ../../addon/randplace/randplace.php:177 ../../addon/dwpost/dwpost.php:93 #: ../../addon/drpost/drpost.php:110 ../../addon/startpage/startpage.php:92 #: ../../addon/geonames/geonames.php:187 ../../addon/oembed.old/oembed.php:41 #: ../../addon/forumlist/forumlist.php:169 -#: ../../addon/impressum/impressum.php:82 +#: ../../addon/impressum/impressum.php:83 #: ../../addon/notimeline/notimeline.php:64 ../../addon/blockem/blockem.php:57 #: ../../addon/qcomment/qcomment.php:61 #: ../../addon/openstreetmap/openstreetmap.php:70 @@ -172,7 +173,7 @@ msgstr "Neues Foto von dieser URL" #: ../../addon/mathjax/mathjax.php:42 ../../addon/editplain/editplain.php:84 #: ../../addon/blackout/blackout.php:98 ../../addon/gravatar/gravatar.php:95 #: ../../addon/pageheader/pageheader.php:55 ../../addon/ijpost/ijpost.php:93 -#: ../../addon/jappixmini/jappixmini.php:302 +#: ../../addon/jappixmini/jappixmini.php:307 #: ../../addon/statusnet/statusnet.php:278 #: ../../addon/statusnet/statusnet.php:292 #: ../../addon/statusnet/statusnet.php:318 @@ -189,7 +190,7 @@ msgstr "Neues Foto von dieser URL" #: ../../view/theme/diabook/theme.php:757 #: ../../view/theme/diabook/config.php:190 #: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70 -#: ../../include/conversation.php:591 +#: ../../include/conversation.php:591 ../../object/Item.php:532 msgid "Submit" msgstr "Senden" @@ -202,11 +203,11 @@ msgstr "Hilfe:" msgid "Help" msgstr "Hilfe" -#: ../../mod/help.php:38 ../../index.php:224 +#: ../../mod/help.php:38 ../../index.php:226 msgid "Not Found" msgstr "Nicht gefunden" -#: ../../mod/help.php:41 ../../index.php:227 +#: ../../mod/help.php:41 ../../index.php:229 msgid "Page not found." msgstr "Seite nicht gefunden." @@ -412,10 +413,10 @@ msgid "Contact information unavailable" msgstr "Kontaktinformationen nicht verfügbar" #: ../../mod/photos.php:149 ../../mod/photos.php:653 ../../mod/photos.php:1073 -#: ../../mod/photos.php:1088 ../../mod/profile_photo.php:60 -#: ../../mod/profile_photo.php:67 ../../mod/profile_photo.php:74 -#: ../../mod/profile_photo.php:177 ../../mod/profile_photo.php:261 -#: ../../mod/profile_photo.php:270 +#: ../../mod/photos.php:1088 ../../mod/profile_photo.php:74 +#: ../../mod/profile_photo.php:81 ../../mod/profile_photo.php:88 +#: ../../mod/profile_photo.php:204 ../../mod/profile_photo.php:296 +#: ../../mod/profile_photo.php:305 #: ../../addon/communityhome/communityhome.php:111 #: ../../view/theme/diabook/theme.php:599 ../../include/user.php:318 #: ../../include/user.php:325 ../../include/user.php:332 @@ -458,12 +459,12 @@ msgstr "Die Bildgröße übersteigt das Limit von " msgid "Image file is empty." msgstr "Bilddatei ist leer." -#: ../../mod/photos.php:729 ../../mod/profile_photo.php:126 +#: ../../mod/photos.php:729 ../../mod/profile_photo.php:153 #: ../../mod/wall_upload.php:110 msgid "Unable to process image." msgstr "Konnte das Bild nicht bearbeiten." -#: ../../mod/photos.php:756 ../../mod/profile_photo.php:266 +#: ../../mod/photos.php:756 ../../mod/profile_photo.php:301 #: ../../mod/wall_upload.php:136 msgid "Image upload failed." msgstr "Hochladen des Bildes gescheitert." @@ -549,7 +550,7 @@ msgid "Use as profile photo" msgstr "Als Profilbild verwenden" #: ../../mod/photos.php:1224 ../../mod/content.php:601 -#: ../../include/conversation.php:428 +#: ../../include/conversation.php:428 ../../object/Item.php:103 msgid "Private Message" msgstr "Private Nachricht" @@ -591,16 +592,16 @@ msgid "" msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" #: ../../mod/photos.php:1356 ../../mod/content.php:665 -#: ../../include/conversation.php:565 +#: ../../include/conversation.php:565 ../../object/Item.php:185 msgid "I like this (toggle)" msgstr "Ich mag das (toggle)" #: ../../mod/photos.php:1357 ../../mod/content.php:666 -#: ../../include/conversation.php:566 +#: ../../include/conversation.php:566 ../../object/Item.php:186 msgid "I don't like this (toggle)" msgstr "Ich mag das nicht (toggle)" -#: ../../mod/photos.php:1358 ../../include/conversation.php:1195 +#: ../../mod/photos.php:1358 ../../include/conversation.php:1214 msgid "Share" msgstr "Teilen" @@ -608,25 +609,27 @@ msgstr "Teilen" #: ../../mod/content.php:482 ../../mod/content.php:843 #: ../../mod/wallmessage.php:152 ../../mod/message.php:293 #: ../../mod/message.php:481 ../../include/conversation.php:659 -#: ../../include/conversation.php:891 ../../include/conversation.php:1214 +#: ../../include/conversation.php:891 ../../include/conversation.php:1233 +#: ../../object/Item.php:237 msgid "Please wait" msgstr "Bitte warten" #: ../../mod/photos.php:1375 ../../mod/photos.php:1416 #: ../../mod/photos.php:1448 ../../mod/content.php:688 -#: ../../include/conversation.php:588 +#: ../../include/conversation.php:588 ../../object/Item.php:529 msgid "This is you" msgstr "Das bist du" #: ../../mod/photos.php:1377 ../../mod/photos.php:1418 #: ../../mod/photos.php:1450 ../../mod/content.php:690 #: ../../include/conversation.php:590 ../../boot.php:574 +#: ../../object/Item.php:531 msgid "Comment" msgstr "Kommentar" #: ../../mod/photos.php:1379 ../../mod/editpost.php:133 #: ../../mod/content.php:700 ../../include/conversation.php:600 -#: ../../include/conversation.php:1232 +#: ../../include/conversation.php:1251 ../../object/Item.php:541 msgid "Preview" msgstr "Vorschau" @@ -634,6 +637,7 @@ msgstr "Vorschau" #: ../../mod/content.php:721 ../../mod/settings.php:606 #: ../../mod/settings.php:695 ../../mod/group.php:168 ../../mod/admin.php:694 #: ../../include/conversation.php:440 ../../include/conversation.php:847 +#: ../../object/Item.php:116 msgid "Delete" msgstr "Löschen" @@ -699,28 +703,29 @@ msgstr "Beitrag nicht gefunden" msgid "Edit post" msgstr "Beitrag bearbeiten" -#: ../../mod/editpost.php:88 ../../include/conversation.php:1181 +#: ../../mod/editpost.php:88 ../../include/conversation.php:1200 msgid "Post to Email" msgstr "An E-Mail senden" #: ../../mod/editpost.php:103 ../../mod/content.php:708 #: ../../mod/settings.php:605 ../../include/conversation.php:433 +#: ../../object/Item.php:107 msgid "Edit" msgstr "Bearbeiten" #: ../../mod/editpost.php:104 ../../mod/wallmessage.php:150 #: ../../mod/message.php:291 ../../mod/message.php:478 -#: ../../include/conversation.php:1196 +#: ../../include/conversation.php:1215 msgid "Upload photo" msgstr "Foto hochladen" -#: ../../mod/editpost.php:105 ../../include/conversation.php:1198 +#: ../../mod/editpost.php:105 ../../include/conversation.php:1217 msgid "Attach file" msgstr "Datei anhängen" #: ../../mod/editpost.php:106 ../../mod/wallmessage.php:151 #: ../../mod/message.php:292 ../../mod/message.php:479 -#: ../../include/conversation.php:1200 +#: ../../include/conversation.php:1219 msgid "Insert web link" msgstr "einen Link einfügen" @@ -736,35 +741,35 @@ msgstr "Vorbis [.ogg] Video einfügen" msgid "Insert Vorbis [.ogg] audio" msgstr "Vorbis [.ogg] Audio einfügen" -#: ../../mod/editpost.php:110 ../../include/conversation.php:1206 +#: ../../mod/editpost.php:110 ../../include/conversation.php:1225 msgid "Set your location" msgstr "Deinen Standort festlegen" -#: ../../mod/editpost.php:111 ../../include/conversation.php:1208 +#: ../../mod/editpost.php:111 ../../include/conversation.php:1227 msgid "Clear browser location" msgstr "Browser-Standort leeren" -#: ../../mod/editpost.php:113 ../../include/conversation.php:1215 +#: ../../mod/editpost.php:113 ../../include/conversation.php:1234 msgid "Permission settings" msgstr "Berechtigungseinstellungen" -#: ../../mod/editpost.php:121 ../../include/conversation.php:1224 +#: ../../mod/editpost.php:121 ../../include/conversation.php:1243 msgid "CC: email addresses" msgstr "Cc:-E-Mail-Addressen" -#: ../../mod/editpost.php:122 ../../include/conversation.php:1225 +#: ../../mod/editpost.php:122 ../../include/conversation.php:1244 msgid "Public post" msgstr "Öffentlicher Beitrag" -#: ../../mod/editpost.php:125 ../../include/conversation.php:1211 +#: ../../mod/editpost.php:125 ../../include/conversation.php:1230 msgid "Set title" msgstr "Titel setzen" -#: ../../mod/editpost.php:127 ../../include/conversation.php:1213 +#: ../../mod/editpost.php:127 ../../include/conversation.php:1232 msgid "Categories (comma-separated list)" msgstr "Kategorien (kommasepariert)" -#: ../../mod/editpost.php:128 ../../include/conversation.php:1227 +#: ../../mod/editpost.php:128 ../../include/conversation.php:1246 msgid "Example: bob@example.com, mary@example.com" msgstr "Z.B.: bob@example.com, mary@example.com" @@ -885,7 +890,7 @@ msgstr "Bitte bestätige deine Kontaktanfrage bei %s." msgid "Confirm" msgstr "Bestätigen" -#: ../../mod/dfrn_request.php:715 ../../include/items.php:3213 +#: ../../mod/dfrn_request.php:715 ../../include/items.php:3287 msgid "[Name Withheld]" msgstr "[Name unterdrückt]" @@ -1308,18 +1313,21 @@ msgstr "Gruppe: " #: ../../mod/content.php:438 ../../mod/content.php:720 #: ../../include/conversation.php:439 ../../include/conversation.php:846 +#: ../../object/Item.php:115 msgid "Select" msgstr "Auswählen" #: ../../mod/content.php:455 ../../mod/content.php:813 #: ../../mod/content.php:814 ../../include/conversation.php:627 #: ../../include/conversation.php:628 ../../include/conversation.php:863 +#: ../../object/Item.php:206 ../../object/Item.php:207 #, php-format msgid "View %s's profile @ %s" msgstr "Das Profil von %s auf %s betrachten." #: ../../mod/content.php:465 ../../mod/content.php:825 #: ../../include/conversation.php:641 ../../include/conversation.php:874 +#: ../../object/Item.php:219 #, php-format msgid "%s from %s" msgstr "%s von %s" @@ -1329,6 +1337,7 @@ msgid "View in context" msgstr "Im Zusammenhang betrachten" #: ../../mod/content.php:586 ../../include/conversation.php:668 +#: ../../object/Item.php:256 #, php-format msgid "%d comment" msgid_plural "%d comments" @@ -1338,91 +1347,112 @@ msgstr[1] "%d Kommentare" #: ../../mod/content.php:587 ../../addon/page/page.php:76 #: ../../addon/page/page.php:110 ../../addon/showmore/showmore.php:119 #: ../../include/contact_widgets.php:195 ../../include/conversation.php:669 -#: ../../boot.php:575 +#: ../../boot.php:575 ../../object/Item.php:257 msgid "show more" msgstr "mehr anzeigen" #: ../../mod/content.php:665 ../../include/conversation.php:565 +#: ../../object/Item.php:185 msgid "like" msgstr "mag ich" #: ../../mod/content.php:666 ../../include/conversation.php:566 +#: ../../object/Item.php:186 msgid "dislike" msgstr "mag ich nicht" #: ../../mod/content.php:668 ../../include/conversation.php:568 +#: ../../object/Item.php:188 msgid "Share this" msgstr "Weitersagen" #: ../../mod/content.php:668 ../../include/conversation.php:568 +#: ../../object/Item.php:188 msgid "share" msgstr "Teilen" #: ../../mod/content.php:692 ../../include/conversation.php:592 +#: ../../object/Item.php:533 msgid "Bold" msgstr "Fett" #: ../../mod/content.php:693 ../../include/conversation.php:593 +#: ../../object/Item.php:534 msgid "Italic" msgstr "Kursiv" #: ../../mod/content.php:694 ../../include/conversation.php:594 +#: ../../object/Item.php:535 msgid "Underline" msgstr "Unterstrichen" #: ../../mod/content.php:695 ../../include/conversation.php:595 +#: ../../object/Item.php:536 msgid "Quote" msgstr "Zitat" #: ../../mod/content.php:696 ../../include/conversation.php:596 +#: ../../object/Item.php:537 msgid "Code" msgstr "Code" #: ../../mod/content.php:697 ../../include/conversation.php:597 +#: ../../object/Item.php:538 msgid "Image" msgstr "Bild" #: ../../mod/content.php:698 ../../include/conversation.php:598 +#: ../../object/Item.php:539 msgid "Link" msgstr "Verweis" #: ../../mod/content.php:699 ../../include/conversation.php:599 +#: ../../object/Item.php:540 msgid "Video" msgstr "Video" #: ../../mod/content.php:733 ../../include/conversation.php:529 +#: ../../object/Item.php:169 msgid "add star" msgstr "markieren" #: ../../mod/content.php:734 ../../include/conversation.php:530 +#: ../../object/Item.php:170 msgid "remove star" msgstr "Markierung entfernen" #: ../../mod/content.php:735 ../../include/conversation.php:531 +#: ../../object/Item.php:171 msgid "toggle star status" msgstr "Markierung umschalten" #: ../../mod/content.php:738 ../../include/conversation.php:534 +#: ../../object/Item.php:174 msgid "starred" msgstr "markiert" #: ../../mod/content.php:739 ../../include/conversation.php:535 +#: ../../object/Item.php:175 msgid "add tag" msgstr "Tag hinzufügen" #: ../../mod/content.php:743 ../../include/conversation.php:443 +#: ../../object/Item.php:119 msgid "save to folder" msgstr "In Ordner speichern" #: ../../mod/content.php:815 ../../include/conversation.php:629 +#: ../../object/Item.php:208 msgid "to" msgstr "zu" #: ../../mod/content.php:816 ../../include/conversation.php:630 +#: ../../object/Item.php:209 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" #: ../../mod/content.php:817 ../../include/conversation.php:631 +#: ../../object/Item.php:210 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" @@ -1938,9 +1968,9 @@ msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten" #: ../../mod/register.php:90 ../../mod/register.php:144 #: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:752 #: ../../addon/facebook/facebook.php:702 -#: ../../addon/facebook/facebook.php:1200 +#: ../../addon/facebook/facebook.php:1200 ../../addon/fbpost/fbpost.php:661 #: ../../addon/public_server/public_server.php:62 -#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:3222 +#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:3296 #: ../../boot.php:788 msgid "Administrator" msgstr "Administrator" @@ -2088,7 +2118,7 @@ msgid "Private forum has no privacy permissions and no default privacy group." msgstr "Für das private Forum sind keine Zugriffsrechte eingestellt, und es gibt keine voreingestellte Gruppe für neue Kontakte." #: ../../mod/settings.php:471 ../../addon/facebook/facebook.php:495 -#: ../../addon/impressum/impressum.php:77 +#: ../../addon/fbpost/fbpost.php:144 ../../addon/impressum/impressum.php:78 #: ../../addon/openstreetmap/openstreetmap.php:80 #: ../../addon/mathjax/mathjax.php:66 ../../addon/piwik/piwik.php:105 #: ../../addon/twitter/twitter.php:389 @@ -2355,7 +2385,7 @@ msgstr "Dürfen dir Unbekannte private Nachrichten schicken?" msgid "Profile is not published." msgstr "Profil ist nicht veröffentlicht." -#: ../../mod/settings.php:944 ../../mod/profile_photo.php:214 +#: ../../mod/settings.php:944 ../../mod/profile_photo.php:248 msgid "or" msgstr "oder" @@ -2636,6 +2666,7 @@ msgstr "Persönliche Notizen" #: ../../mod/notes.php:63 ../../mod/filer.php:30 #: ../../addon/facebook/facebook.php:770 #: ../../addon/privacy_image_cache/privacy_image_cache.php:263 +#: ../../addon/fbpost/fbpost.php:267 #: ../../addon/dav/friendica/layout.fnk.php:441 #: ../../addon/dav/friendica/layout.fnk.php:488 ../../include/text.php:681 msgid "Save" @@ -2672,7 +2703,7 @@ msgstr "Kein Empfänger." #: ../../mod/wallmessage.php:123 ../../mod/wallmessage.php:131 #: ../../mod/message.php:242 ../../mod/message.php:250 -#: ../../include/conversation.php:1132 ../../include/conversation.php:1149 +#: ../../include/conversation.php:1151 ../../include/conversation.php:1168 msgid "Please enter a link URL:" msgstr "Bitte gib die URL des Links ein:" @@ -2759,7 +2790,7 @@ msgstr "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen msgid "Profile" msgstr "Profil" -#: ../../mod/newmember.php:36 ../../mod/profile_photo.php:211 +#: ../../mod/newmember.php:36 ../../mod/profile_photo.php:244 msgid "Upload Profile Photo" msgstr "Profilbild hochladen" @@ -2797,7 +2828,7 @@ msgid "Connecting" msgstr "Verbindungen knüpfen" #: ../../mod/newmember.php:49 ../../mod/newmember.php:51 -#: ../../addon/facebook/facebook.php:728 +#: ../../addon/facebook/facebook.php:728 ../../addon/fbpost/fbpost.php:239 #: ../../include/contact_selectors.php:81 msgid "Facebook" msgstr "Facebook" @@ -2924,7 +2955,7 @@ msgstr "Gruppe nicht gefunden." msgid "Group name changed." msgstr "Gruppenname geändert." -#: ../../mod/group.php:72 ../../mod/profperm.php:19 ../../index.php:314 +#: ../../mod/group.php:72 ../../mod/profperm.php:19 ../../index.php:316 msgid "Permission denied" msgstr "Zugriff verweigert" @@ -3098,7 +3129,7 @@ msgstr "%1$s mag %2$ss %3$s nicht" #: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:159 #: ../../mod/admin.php:731 ../../mod/admin.php:930 ../../mod/display.php:29 -#: ../../mod/display.php:145 ../../include/items.php:3700 +#: ../../mod/display.php:145 ../../include/items.php:3774 msgid "Item not found." msgstr "Beitrag nicht gefunden." @@ -3182,61 +3213,65 @@ msgstr "Stimmung" msgid "Set your current mood and tell your friends" msgstr "Wähle deine aktuelle Stimmung und erzähle sie deinen Freunden" -#: ../../mod/profile_photo.php:30 +#: ../../mod/profile_photo.php:44 msgid "Image uploaded but image cropping failed." msgstr "Bilder hochgeladen, aber das Zuschneiden ist fehlgeschlagen." -#: ../../mod/profile_photo.php:63 ../../mod/profile_photo.php:70 -#: ../../mod/profile_photo.php:77 ../../mod/profile_photo.php:273 +#: ../../mod/profile_photo.php:77 ../../mod/profile_photo.php:84 +#: ../../mod/profile_photo.php:91 ../../mod/profile_photo.php:308 #, php-format msgid "Image size reduction [%s] failed." msgstr "Verkleinern der Bildgröße von [%s] ist gescheitert." -#: ../../mod/profile_photo.php:91 +#: ../../mod/profile_photo.php:118 msgid "" "Shift-reload the page or clear browser cache if the new photo does not " "display immediately." msgstr "Drücke Umschalt+Neu Laden oder leere den Browser-Cache, falls das neue Foto nicht gleich angezeigt wird." -#: ../../mod/profile_photo.php:101 +#: ../../mod/profile_photo.php:128 msgid "Unable to process image" msgstr "Bild konnte nicht verarbeitet werden" -#: ../../mod/profile_photo.php:117 ../../mod/wall_upload.php:88 +#: ../../mod/profile_photo.php:144 ../../mod/wall_upload.php:88 #, php-format msgid "Image exceeds size limit of %d" msgstr "Bildgröße überschreitet das Limit von %d" -#: ../../mod/profile_photo.php:210 +#: ../../mod/profile_photo.php:242 msgid "Upload File:" msgstr "Datei hochladen:" -#: ../../mod/profile_photo.php:212 +#: ../../mod/profile_photo.php:243 +msgid "Select a profile:" +msgstr "Profil auswählen" + +#: ../../mod/profile_photo.php:245 #: ../../addon/dav/friendica/layout.fnk.php:152 msgid "Upload" msgstr "Hochladen" -#: ../../mod/profile_photo.php:214 +#: ../../mod/profile_photo.php:248 msgid "skip this step" msgstr "diesen Schritt überspringen" -#: ../../mod/profile_photo.php:214 +#: ../../mod/profile_photo.php:248 msgid "select a photo from your photo albums" msgstr "wähle ein Foto von deinen Fotoalben" -#: ../../mod/profile_photo.php:227 +#: ../../mod/profile_photo.php:262 msgid "Crop Image" msgstr "Bild zurechtschneiden" -#: ../../mod/profile_photo.php:228 +#: ../../mod/profile_photo.php:263 msgid "Please adjust the image cropping for optimum viewing." msgstr "Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden kann." -#: ../../mod/profile_photo.php:230 +#: ../../mod/profile_photo.php:265 msgid "Done Editing" msgstr "Bearbeitung abgeschlossen" -#: ../../mod/profile_photo.php:264 +#: ../../mod/profile_photo.php:299 msgid "Image uploaded successfully." msgstr "Bild erfolgreich auf den Server geladen." @@ -4390,8 +4425,8 @@ msgstr "sichtbar für jeden" msgid "Edit visibility" msgstr "Sichtbarkeit bearbeiten" -#: ../../mod/filer.php:29 ../../include/conversation.php:1136 -#: ../../include/conversation.php:1153 +#: ../../mod/filer.php:29 ../../include/conversation.php:1155 +#: ../../include/conversation.php:1172 msgid "Save to Folder:" msgstr "In diesen Ordner verschieben:" @@ -4732,7 +4767,7 @@ msgstr "Facebook deaktiviert" msgid "Updating contacts" msgstr "Aktualisiere Kontakte" -#: ../../addon/facebook/facebook.php:551 +#: ../../addon/facebook/facebook.php:551 ../../addon/fbpost/fbpost.php:192 msgid "Facebook API key is missing." msgstr "Facebook-API-Schlüssel nicht gefunden" @@ -4748,13 +4783,13 @@ msgstr "Facebook-Connector für dieses Konto installieren." msgid "Remove Facebook connector" msgstr "Facebook-Connector entfernen" -#: ../../addon/facebook/facebook.php:576 +#: ../../addon/facebook/facebook.php:576 ../../addon/fbpost/fbpost.php:217 msgid "" "Re-authenticate [This is necessary whenever your Facebook password is " "changed.]" msgstr "Neu authentifizieren [Das ist immer dann nötig, wenn du dein Facebook-Passwort geändert hast.]" -#: ../../addon/facebook/facebook.php:583 +#: ../../addon/facebook/facebook.php:583 ../../addon/fbpost/fbpost.php:224 msgid "Post to Facebook by default" msgstr "Veröffentliche standardmäßig bei Facebook" @@ -4820,11 +4855,11 @@ msgstr "Probleme mit Facebook Echtzeit-Updates" msgid "Facebook Connector Settings" msgstr "Facebook-Verbindungseinstellungen" -#: ../../addon/facebook/facebook.php:744 +#: ../../addon/facebook/facebook.php:744 ../../addon/fbpost/fbpost.php:255 msgid "Facebook API Key" msgstr "Facebook API Schlüssel" -#: ../../addon/facebook/facebook.php:754 +#: ../../addon/facebook/facebook.php:754 ../../addon/fbpost/fbpost.php:262 msgid "" "Error: it appears that you have specified the App-ID and -Secret in your " ".htconfig.php file. As long as they are specified there, they cannot be set " @@ -4847,11 +4882,11 @@ msgid "" "going on." msgstr "Die Richtigkeit des API Schlüssels konnte nicht gefunden werden. Irgendwas stimmt nicht." -#: ../../addon/facebook/facebook.php:766 +#: ../../addon/facebook/facebook.php:766 ../../addon/fbpost/fbpost.php:264 msgid "App-ID / API-Key" msgstr "App-ID / API-Key" -#: ../../addon/facebook/facebook.php:767 +#: ../../addon/facebook/facebook.php:767 ../../addon/fbpost/fbpost.php:265 msgid "Application secret" msgstr "Anwendungs-Geheimnis" @@ -4886,38 +4921,38 @@ msgstr "Echtzeit-Updates nicht aktiviert." msgid "Activate Real-Time Updates" msgstr "Echtzeit-Updates aktivieren" -#: ../../addon/facebook/facebook.php:799 +#: ../../addon/facebook/facebook.php:799 ../../addon/fbpost/fbpost.php:282 #: ../../addon/dav/friendica/layout.fnk.php:361 msgid "The new values have been saved." msgstr "Die neuen Einstellungen wurden gespeichert." -#: ../../addon/facebook/facebook.php:823 +#: ../../addon/facebook/facebook.php:823 ../../addon/fbpost/fbpost.php:301 msgid "Post to Facebook" msgstr "Bei Facebook veröffentlichen" -#: ../../addon/facebook/facebook.php:921 +#: ../../addon/facebook/facebook.php:921 ../../addon/fbpost/fbpost.php:399 msgid "" "Post to Facebook cancelled because of multi-network access permission " "conflict." msgstr "Beitrag wurde nicht bei Facebook veröffentlicht, da Konflikte bei den Multi-Netzwerk-Zugriffsrechten vorliegen." -#: ../../addon/facebook/facebook.php:1149 +#: ../../addon/facebook/facebook.php:1149 ../../addon/fbpost/fbpost.php:610 msgid "View on Friendica" msgstr "In Friendica betrachten" -#: ../../addon/facebook/facebook.php:1182 +#: ../../addon/facebook/facebook.php:1182 ../../addon/fbpost/fbpost.php:643 msgid "Facebook post failed. Queued for retry." msgstr "Veröffentlichung bei Facebook gescheitert. Wir versuchen es später erneut." -#: ../../addon/facebook/facebook.php:1222 +#: ../../addon/facebook/facebook.php:1222 ../../addon/fbpost/fbpost.php:683 msgid "Your Facebook connection became invalid. Please Re-authenticate." msgstr "Deine Facebook Anmeldedaten sind ungültig geworden. Bitte re-authentifiziere dich." -#: ../../addon/facebook/facebook.php:1223 +#: ../../addon/facebook/facebook.php:1223 ../../addon/fbpost/fbpost.php:684 msgid "Facebook connection became invalid" msgstr "Facebook Anmeldedaten sind ungültig geworden" -#: ../../addon/facebook/facebook.php:1224 +#: ../../addon/facebook/facebook.php:1224 ../../addon/fbpost/fbpost.php:685 #, php-format msgid "" "Hi %1$s,\n" @@ -4969,6 +5004,26 @@ msgstr "Größe des Caches" msgid "Delete the whole cache" msgstr "Cache leeren" +#: ../../addon/fbpost/fbpost.php:172 +msgid "Facebook Post disabled" +msgstr "" + +#: ../../addon/fbpost/fbpost.php:199 +msgid "Facebook Post" +msgstr "" + +#: ../../addon/fbpost/fbpost.php:205 +msgid "Install Facebook Post connector for this account." +msgstr "" + +#: ../../addon/fbpost/fbpost.php:212 +msgid "Remove Facebook Post connector" +msgstr "" + +#: ../../addon/fbpost/fbpost.php:240 +msgid "Facebook Post Settings" +msgstr "" + #: ../../addon/widgets/widget_like.php:58 #, php-format msgid "%d person likes this" @@ -5028,12 +5083,12 @@ msgid "did something obscenely biological to" msgstr "machte etwas obszönes Körperliches mit" #: ../../addon/morepokes/morepokes.php:22 -msgid "point out the new poke feature to" -msgstr "die neue Anstups-Funktion zeigen" +msgid "point out the poke feature to" +msgstr "" #: ../../addon/morepokes/morepokes.php:22 -msgid "pointed out the new poke feature to" -msgstr "zeigte die neue Anstups-Funktion" +msgid "pointed out the poke feature to" +msgstr "" #: ../../addon/morepokes/morepokes.php:23 msgid "declare undying love for" @@ -5044,113 +5099,109 @@ msgid "declared undying love for" msgstr "verkündete unsterbliche Liebe für" #: ../../addon/morepokes/morepokes.php:24 -msgid "set fire to" -msgstr "entflammt" - -#: ../../addon/morepokes/morepokes.php:25 msgid "patent" msgstr "patentieren" -#: ../../addon/morepokes/morepokes.php:25 +#: ../../addon/morepokes/morepokes.php:24 msgid "patented" msgstr "patentierte" -#: ../../addon/morepokes/morepokes.php:26 +#: ../../addon/morepokes/morepokes.php:25 msgid "stroke beard" msgstr "sich den Bart kratzen" -#: ../../addon/morepokes/morepokes.php:26 +#: ../../addon/morepokes/morepokes.php:25 msgid "stroked their beard at" msgstr "kratzte sich den Bart in Richtung" -#: ../../addon/morepokes/morepokes.php:27 +#: ../../addon/morepokes/morepokes.php:26 msgid "" "bemoan the declining standards of modern secondary and tertiary education to" msgstr "sich über die sinkenden Standards der Schul- und Hochschulbildung beklagen" -#: ../../addon/morepokes/morepokes.php:27 +#: ../../addon/morepokes/morepokes.php:26 msgid "" "bemoans the declining standards of modern secondary and tertiary education " "to" msgstr "beklagte sich über die sinkenden Standards der Schul- und Hochschulbildung bei" -#: ../../addon/morepokes/morepokes.php:28 +#: ../../addon/morepokes/morepokes.php:27 msgid "hug" msgstr "umarmen" -#: ../../addon/morepokes/morepokes.php:28 +#: ../../addon/morepokes/morepokes.php:27 msgid "hugged" msgstr "umarmte" -#: ../../addon/morepokes/morepokes.php:29 +#: ../../addon/morepokes/morepokes.php:28 msgid "kiss" msgstr "küssen" -#: ../../addon/morepokes/morepokes.php:29 +#: ../../addon/morepokes/morepokes.php:28 msgid "kissed" msgstr "küsste" -#: ../../addon/morepokes/morepokes.php:30 +#: ../../addon/morepokes/morepokes.php:29 msgid "raise eyebrows at" msgstr "Augenbrauen hochziehen" -#: ../../addon/morepokes/morepokes.php:30 +#: ../../addon/morepokes/morepokes.php:29 msgid "raised their eyebrows at" msgstr "zog die Augenbrauen hoch in Richtung" -#: ../../addon/morepokes/morepokes.php:31 +#: ../../addon/morepokes/morepokes.php:30 msgid "insult" msgstr "beleidigen" -#: ../../addon/morepokes/morepokes.php:31 +#: ../../addon/morepokes/morepokes.php:30 msgid "insulted" msgstr "beleidigte" -#: ../../addon/morepokes/morepokes.php:32 +#: ../../addon/morepokes/morepokes.php:31 msgid "praise" msgstr "preisen" -#: ../../addon/morepokes/morepokes.php:32 +#: ../../addon/morepokes/morepokes.php:31 msgid "praised" msgstr "pries" -#: ../../addon/morepokes/morepokes.php:33 +#: ../../addon/morepokes/morepokes.php:32 msgid "be dubious of" msgstr "ungewiss sein" -#: ../../addon/morepokes/morepokes.php:33 +#: ../../addon/morepokes/morepokes.php:32 msgid "was dubious of" msgstr "war ungewiss über" -#: ../../addon/morepokes/morepokes.php:34 +#: ../../addon/morepokes/morepokes.php:33 msgid "eat" msgstr "essen" -#: ../../addon/morepokes/morepokes.php:34 +#: ../../addon/morepokes/morepokes.php:33 msgid "ate" msgstr "aß" -#: ../../addon/morepokes/morepokes.php:35 +#: ../../addon/morepokes/morepokes.php:34 msgid "giggle and fawn at" msgstr "kichern und einschleimen" -#: ../../addon/morepokes/morepokes.php:35 +#: ../../addon/morepokes/morepokes.php:34 msgid "giggled and fawned at" msgstr "kicherte und schleimte sich ein bei" -#: ../../addon/morepokes/morepokes.php:36 +#: ../../addon/morepokes/morepokes.php:35 msgid "doubt" msgstr "bezweifeln" -#: ../../addon/morepokes/morepokes.php:36 +#: ../../addon/morepokes/morepokes.php:35 msgid "doubted" msgstr "bezweifelte" -#: ../../addon/morepokes/morepokes.php:37 +#: ../../addon/morepokes/morepokes.php:36 msgid "glare" msgstr "zornig anstarren" -#: ../../addon/morepokes/morepokes.php:37 +#: ../../addon/morepokes/morepokes.php:36 msgid "glared at" msgstr "starrte zornig auf" @@ -6111,68 +6162,68 @@ msgstr "Zufällige Zusammenstellung der Foren-Liste" msgid "Show forumlists/forums on profile forumlist" msgstr "Liste der Foren deren Abonnement du bist in deinem Profil anzeigen:" -#: ../../addon/impressum/impressum.php:36 +#: ../../addon/impressum/impressum.php:37 msgid "Impressum" msgstr "Impressum" -#: ../../addon/impressum/impressum.php:49 -#: ../../addon/impressum/impressum.php:51 -#: ../../addon/impressum/impressum.php:83 +#: ../../addon/impressum/impressum.php:50 +#: ../../addon/impressum/impressum.php:52 +#: ../../addon/impressum/impressum.php:84 msgid "Site Owner" msgstr "Betreiber der Seite" -#: ../../addon/impressum/impressum.php:49 -#: ../../addon/impressum/impressum.php:87 +#: ../../addon/impressum/impressum.php:50 +#: ../../addon/impressum/impressum.php:88 msgid "Email Address" msgstr "Email Adresse" -#: ../../addon/impressum/impressum.php:54 -#: ../../addon/impressum/impressum.php:85 +#: ../../addon/impressum/impressum.php:55 +#: ../../addon/impressum/impressum.php:86 msgid "Postal Address" msgstr "Postalische Anschrift" -#: ../../addon/impressum/impressum.php:60 +#: ../../addon/impressum/impressum.php:61 msgid "" "The impressum addon needs to be configured!
    Please add at least the " "owner variable to your config file. For other variables please " "refer to the README file of the addon." msgstr "Das Impressums-Plugin muss noch konfiguriert werden.
    Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert." -#: ../../addon/impressum/impressum.php:83 +#: ../../addon/impressum/impressum.php:84 msgid "The page operators name." msgstr "Name des Serveradministrators" -#: ../../addon/impressum/impressum.php:84 +#: ../../addon/impressum/impressum.php:85 msgid "Site Owners Profile" msgstr "Profil des Seitenbetreibers" -#: ../../addon/impressum/impressum.php:84 +#: ../../addon/impressum/impressum.php:85 msgid "Profile address of the operator." msgstr "Profil-Adresse des Serveradministrators" -#: ../../addon/impressum/impressum.php:85 +#: ../../addon/impressum/impressum.php:86 msgid "How to contact the operator via snail mail. You can use BBCode here." msgstr "Kontaktmöglichkeiten zum Administrator via Schneckenpost. Du kannst BBCode verwenden." -#: ../../addon/impressum/impressum.php:86 +#: ../../addon/impressum/impressum.php:87 msgid "Notes" msgstr "Hinweise" -#: ../../addon/impressum/impressum.php:86 +#: ../../addon/impressum/impressum.php:87 msgid "" "Additional notes that are displayed beneath the contact information. You can" " use BBCode here." msgstr "Zusätzliche Informationen die neben den Kontaktmöglichkeiten angezeigt werden. Du kannst BBCode verwenden." -#: ../../addon/impressum/impressum.php:87 +#: ../../addon/impressum/impressum.php:88 msgid "How to contact the operator via email. (will be displayed obfuscated)" msgstr "Wie man den Betreiber per Email erreicht. (Adresse wird verschleiert dargestellt)" -#: ../../addon/impressum/impressum.php:88 +#: ../../addon/impressum/impressum.php:89 msgid "Footer note" msgstr "Fußnote" -#: ../../addon/impressum/impressum.php:88 +#: ../../addon/impressum/impressum.php:89 msgid "Text for the footer. You can use BBCode here." msgstr "Text für die Fußzeile. Du kannst BBCode verwenden." @@ -6477,6 +6528,59 @@ msgstr "InsaneJournal Passwort" msgid "Post to InsaneJournal by default" msgstr "Standardmäßig auf InsaneJournal posten." +#: ../../addon/jappixmini/jappixmini.php:266 +msgid "Jappix Mini addon settings" +msgstr "Jappix Mini Addon Einstellungen" + +#: ../../addon/jappixmini/jappixmini.php:268 +msgid "Activate addon" +msgstr "Addon aktivieren" + +#: ../../addon/jappixmini/jappixmini.php:271 +msgid "" +"Do not insert the Jappixmini Chat-Widget into the webinterface" +msgstr "Füge das Jappix Mini Chat Widget nicht zum Webinterface hinzu" + +#: ../../addon/jappixmini/jappixmini.php:274 +msgid "Jabber username" +msgstr "Jabber Nutzername" + +#: ../../addon/jappixmini/jappixmini.php:277 +msgid "Jabber server" +msgstr "Jabber Server" + +#: ../../addon/jappixmini/jappixmini.php:281 +msgid "Jabber BOSH host" +msgstr "Jabber BOSH Host" + +#: ../../addon/jappixmini/jappixmini.php:285 +msgid "Jabber password" +msgstr "Japper Passwort" + +#: ../../addon/jappixmini/jappixmini.php:290 +msgid "Encrypt Jabber password with Friendica password (recommended)" +msgstr "Verschlüssele das Jabber Passwort mit dem Friendica Passwort (empfohlen)" + +#: ../../addon/jappixmini/jappixmini.php:293 +msgid "Friendica password" +msgstr "Friendica Passwort" + +#: ../../addon/jappixmini/jappixmini.php:296 +msgid "Approve subscription requests from Friendica contacts automatically" +msgstr "Kontaktanfragen von Friendica Kontakten automatisch akzeptieren" + +#: ../../addon/jappixmini/jappixmini.php:299 +msgid "Subscribe to Friendica contacts automatically" +msgstr "Automatisch Friendica Kontakten bei Jabber folgen" + +#: ../../addon/jappixmini/jappixmini.php:302 +msgid "Purge internal list of jabber addresses of contacts" +msgstr "Lösche die interne Liste der Jabber Adressen der Kontakte" + +#: ../../addon/jappixmini/jappixmini.php:308 +msgid "Add contact" +msgstr "Kontakt hinzufügen" + #: ../../addon/viewsrc/viewsrc.php:37 msgid "View Source" msgstr "Quelle ansehen" @@ -8041,12 +8145,12 @@ msgstr "Sekunden" msgid "%1$d %2$s ago" msgstr "%1$d %2$s her" -#: ../../include/datetime.php:472 ../../include/items.php:1621 +#: ../../include/datetime.php:472 ../../include/items.php:1683 #, php-format msgid "%s's birthday" msgstr "%ss Geburtstag" -#: ../../include/datetime.php:473 ../../include/items.php:1622 +#: ../../include/datetime.php:473 ../../include/items.php:1684 #, php-format msgid "Happy Birthday %s" msgstr "Herzlichen Glückwunsch %s" @@ -8321,15 +8425,15 @@ msgstr "Konnte die Kontaktinformationen nicht empfangen." msgid "following" msgstr "folgen" -#: ../../include/items.php:3220 +#: ../../include/items.php:3294 msgid "A new person is sharing with you at " msgstr "Eine neue Person teilt mit dir auf " -#: ../../include/items.php:3220 +#: ../../include/items.php:3294 msgid "You have a new follower at " msgstr "Du hast einen neuen Kontakt auf " -#: ../../include/items.php:3901 +#: ../../include/items.php:3975 msgid "Archives" msgstr "Archiv" @@ -8423,34 +8527,34 @@ msgstr "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das msgid "stopped following" msgstr "wird nicht mehr gefolgt" -#: ../../include/Contact.php:220 ../../include/conversation.php:1033 +#: ../../include/Contact.php:220 ../../include/conversation.php:1052 msgid "Poke" msgstr "Anstupsen" -#: ../../include/Contact.php:221 ../../include/conversation.php:1027 +#: ../../include/Contact.php:221 ../../include/conversation.php:1046 msgid "View Status" msgstr "Pinnwand anschauen" -#: ../../include/Contact.php:222 ../../include/conversation.php:1028 +#: ../../include/Contact.php:222 ../../include/conversation.php:1047 msgid "View Profile" msgstr "Profil anschauen" -#: ../../include/Contact.php:223 ../../include/conversation.php:1029 +#: ../../include/Contact.php:223 ../../include/conversation.php:1048 msgid "View Photos" msgstr "Bilder anschauen" #: ../../include/Contact.php:224 ../../include/Contact.php:237 -#: ../../include/conversation.php:1030 +#: ../../include/conversation.php:1049 msgid "Network Posts" msgstr "Netzwerkbeiträge" #: ../../include/Contact.php:225 ../../include/Contact.php:237 -#: ../../include/conversation.php:1031 +#: ../../include/conversation.php:1050 msgid "Edit Contact" msgstr "Kontakt bearbeiten" #: ../../include/Contact.php:226 ../../include/Contact.php:237 -#: ../../include/conversation.php:1032 +#: ../../include/conversation.php:1051 msgid "Send PM" msgstr "Private Nachricht senden" @@ -8468,106 +8572,106 @@ msgstr "Nachricht/Beitrag" msgid "%1$s marked %2$s's %3$s as favorite" msgstr "%1$s hat %2$s\\s %3$s als Favorit markiert" -#: ../../include/conversation.php:933 +#: ../../include/conversation.php:952 msgid "Delete Selected Items" msgstr "Lösche die markierten Beiträge" -#: ../../include/conversation.php:1091 +#: ../../include/conversation.php:1110 #, php-format msgid "%s likes this." msgstr "%s mag das." -#: ../../include/conversation.php:1091 +#: ../../include/conversation.php:1110 #, php-format msgid "%s doesn't like this." msgstr "%s mag das nicht." -#: ../../include/conversation.php:1095 +#: ../../include/conversation.php:1114 #, php-format msgid "%2$d people like this." msgstr "%2$d Leute mögen das." -#: ../../include/conversation.php:1097 +#: ../../include/conversation.php:1116 #, php-format msgid "%2$d people don't like this." msgstr "%2$d Leute mögen das nicht." -#: ../../include/conversation.php:1103 +#: ../../include/conversation.php:1122 msgid "and" msgstr "und" -#: ../../include/conversation.php:1106 +#: ../../include/conversation.php:1125 #, php-format msgid ", and %d other people" msgstr " und %d andere" -#: ../../include/conversation.php:1107 +#: ../../include/conversation.php:1126 #, php-format msgid "%s like this." msgstr "%s mögen das." -#: ../../include/conversation.php:1107 +#: ../../include/conversation.php:1126 #, php-format msgid "%s don't like this." msgstr "%s mögen das nicht." -#: ../../include/conversation.php:1131 ../../include/conversation.php:1148 +#: ../../include/conversation.php:1150 ../../include/conversation.php:1167 msgid "Visible to everybody" msgstr "Für jedermann sichtbar" -#: ../../include/conversation.php:1133 ../../include/conversation.php:1150 +#: ../../include/conversation.php:1152 ../../include/conversation.php:1169 msgid "Please enter a video link/URL:" msgstr "Bitte Link/URL zum Video einfügen:" -#: ../../include/conversation.php:1134 ../../include/conversation.php:1151 +#: ../../include/conversation.php:1153 ../../include/conversation.php:1170 msgid "Please enter an audio link/URL:" msgstr "Bitte Link/URL zum Audio einfügen:" -#: ../../include/conversation.php:1135 ../../include/conversation.php:1152 +#: ../../include/conversation.php:1154 ../../include/conversation.php:1171 msgid "Tag term:" msgstr "Tag:" -#: ../../include/conversation.php:1137 ../../include/conversation.php:1154 +#: ../../include/conversation.php:1156 ../../include/conversation.php:1173 msgid "Where are you right now?" msgstr "Wo hältst du dich jetzt gerade auf?" -#: ../../include/conversation.php:1197 +#: ../../include/conversation.php:1216 msgid "upload photo" msgstr "Bild hochladen" -#: ../../include/conversation.php:1199 +#: ../../include/conversation.php:1218 msgid "attach file" msgstr "Datei anhängen" -#: ../../include/conversation.php:1201 +#: ../../include/conversation.php:1220 msgid "web link" msgstr "Weblink" -#: ../../include/conversation.php:1202 +#: ../../include/conversation.php:1221 msgid "Insert video link" msgstr "Video-Adresse einfügen" -#: ../../include/conversation.php:1203 +#: ../../include/conversation.php:1222 msgid "video link" msgstr "Video-Link" -#: ../../include/conversation.php:1204 +#: ../../include/conversation.php:1223 msgid "Insert audio link" msgstr "Audio-Adresse einfügen" -#: ../../include/conversation.php:1205 +#: ../../include/conversation.php:1224 msgid "audio link" msgstr "Audio-Link" -#: ../../include/conversation.php:1207 +#: ../../include/conversation.php:1226 msgid "set location" msgstr "Ort setzen" -#: ../../include/conversation.php:1209 +#: ../../include/conversation.php:1228 msgid "clear location" msgstr "Ort löschen" -#: ../../include/conversation.php:1216 +#: ../../include/conversation.php:1235 msgid "permissions" msgstr "Zugriffsrechte" diff --git a/view/de/strings.php b/view/de/strings.php index 55129ae0da..f59f898c9e 100644 --- a/view/de/strings.php +++ b/view/de/strings.php @@ -706,6 +706,7 @@ $a->strings["Shift-reload the page or clear browser cache if the new photo does $a->strings["Unable to process image"] = "Bild konnte nicht verarbeitet werden"; $a->strings["Image exceeds size limit of %d"] = "Bildgröße überschreitet das Limit von %d"; $a->strings["Upload File:"] = "Datei hochladen:"; +$a->strings["Select a profile:"] = "Profil auswählen"; $a->strings["Upload"] = "Hochladen"; $a->strings["skip this step"] = "diesen Schritt überspringen"; $a->strings["select a photo from your photo albums"] = "wähle ein Foto von deinen Fotoalben"; @@ -1115,6 +1116,11 @@ $a->strings["Cache Statistics"] = "Cache Statistik"; $a->strings["Number of items"] = "Anzahl der Einträge"; $a->strings["Size of the cache"] = "Größe des Caches"; $a->strings["Delete the whole cache"] = "Cache leeren"; +$a->strings["Facebook Post disabled"] = ""; +$a->strings["Facebook Post"] = ""; +$a->strings["Install Facebook Post connector for this account."] = ""; +$a->strings["Remove Facebook Post connector"] = ""; +$a->strings["Facebook Post Settings"] = ""; $a->strings["%d person likes this"] = array( 0 => "%d Person mag das", 1 => "%d Leute mögen das", @@ -1134,11 +1140,10 @@ $a->strings["shag"] = "poppen"; $a->strings["shagged"] = "poppte"; $a->strings["do something obscenely biological to"] = "mit ihm/ihr etwas obszönes Körperliches machen"; $a->strings["did something obscenely biological to"] = "machte etwas obszönes Körperliches mit"; -$a->strings["point out the new poke feature to"] = "die neue Anstups-Funktion zeigen"; -$a->strings["pointed out the new poke feature to"] = "zeigte die neue Anstups-Funktion"; +$a->strings["point out the poke feature to"] = ""; +$a->strings["pointed out the poke feature to"] = ""; $a->strings["declare undying love for"] = "unterbliche Liebe verkünden"; $a->strings["declared undying love for"] = "verkündete unsterbliche Liebe für"; -$a->strings["set fire to"] = "entflammt"; $a->strings["patent"] = "patentieren"; $a->strings["patented"] = "patentierte"; $a->strings["stroke beard"] = "sich den Bart kratzen"; @@ -1465,6 +1470,19 @@ $a->strings["Enable InsaneJournal Post Plugin"] = "InsaneJournal Plugin aktivier $a->strings["InsaneJournal username"] = "InsaneJournal Benutzername"; $a->strings["InsaneJournal password"] = "InsaneJournal Passwort"; $a->strings["Post to InsaneJournal by default"] = "Standardmäßig auf InsaneJournal posten."; +$a->strings["Jappix Mini addon settings"] = "Jappix Mini Addon Einstellungen"; +$a->strings["Activate addon"] = "Addon aktivieren"; +$a->strings["Do not insert the Jappixmini Chat-Widget into the webinterface"] = "Füge das Jappix Mini Chat Widget nicht zum Webinterface hinzu"; +$a->strings["Jabber username"] = "Jabber Nutzername"; +$a->strings["Jabber server"] = "Jabber Server"; +$a->strings["Jabber BOSH host"] = "Jabber BOSH Host"; +$a->strings["Jabber password"] = "Japper Passwort"; +$a->strings["Encrypt Jabber password with Friendica password (recommended)"] = "Verschlüssele das Jabber Passwort mit dem Friendica Passwort (empfohlen)"; +$a->strings["Friendica password"] = "Friendica Passwort"; +$a->strings["Approve subscription requests from Friendica contacts automatically"] = "Kontaktanfragen von Friendica Kontakten automatisch akzeptieren"; +$a->strings["Subscribe to Friendica contacts automatically"] = "Automatisch Friendica Kontakten bei Jabber folgen"; +$a->strings["Purge internal list of jabber addresses of contacts"] = "Lösche die interne Liste der Jabber Adressen der Kontakte"; +$a->strings["Add contact"] = "Kontakt hinzufügen"; $a->strings["View Source"] = "Quelle ansehen"; $a->strings["Post to StatusNet"] = "Bei StatusNet veröffentlichen"; $a->strings["Please contact your site administrator.
    The provided API URL is not valid."] = "Bitte kontaktiere den Administrator des Servers.
    Die angegebene API-URL ist nicht gültig."; From cb1c9de0690d171005ef50e60aef474114ab0fa0 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 14 Sep 2012 17:01:26 +0200 Subject: [PATCH 603/644] quattro: lilac color schema --- view/theme/quattro/config.php | 1 + view/theme/quattro/lilac/Makefile | 4 + view/theme/quattro/lilac/colors.less | 117 ++ view/theme/quattro/lilac/style.css | 2149 ++++++++++++++++++++++++++ view/theme/quattro/lilac/style.less | 14 + 5 files changed, 2285 insertions(+) create mode 100644 view/theme/quattro/lilac/Makefile create mode 100644 view/theme/quattro/lilac/colors.less create mode 100644 view/theme/quattro/lilac/style.css create mode 100644 view/theme/quattro/lilac/style.less diff --git a/view/theme/quattro/config.php b/view/theme/quattro/config.php index c261a78ecb..e3d5b78102 100644 --- a/view/theme/quattro/config.php +++ b/view/theme/quattro/config.php @@ -44,6 +44,7 @@ function theme_admin_post(&$a){ function quattro_form(&$a, $align, $color){ $colors = array( "dark"=>"Quattro", + "lilac"=>"Lilac", "green"=>"Green" ); diff --git a/view/theme/quattro/lilac/Makefile b/view/theme/quattro/lilac/Makefile new file mode 100644 index 0000000000..989da60c72 --- /dev/null +++ b/view/theme/quattro/lilac/Makefile @@ -0,0 +1,4 @@ +## + +style.css : style.less colors.less ../icons.less ../quattro.less + lessc style.less > style.css diff --git a/view/theme/quattro/lilac/colors.less b/view/theme/quattro/lilac/colors.less new file mode 100644 index 0000000000..2df0e41f1e --- /dev/null +++ b/view/theme/quattro/lilac/colors.less @@ -0,0 +1,117 @@ +// Quattro Theme LESS file + +// "Echo" palette from Inkscape +@Yellow1 : #fce94f; +@Blue1:rgb(25,174,255); +@Blue2:rgb(0,132,200); +@Blue3:rgb(0,92,148); +@Red1:rgb(255,65,65); +@Red2:rgb(220,0,0); +@Red3:rgb(181,0,0); +@Orange1:rgb(255,255,62); +@Orange2:rgb(255,153,0); +@Orange3:rgb(255,102,0); +@Brown1:rgb(255,192,34); +@Brown2:rgb(184,129,0); +@Brown3:rgb(128,77,0); +@Green1:rgb(204,255,66); +@Green2:rgb(154,222,0); +@Green3:rgb(0,145,0); +@Green4:rgb(221,255,221); +@Purple1:rgb(241,202,255); +@Purple2:rgb(215,108,255); +@Purple3:rgb(186,0,255); +@Metalic1:rgb(189,205,212); +@Metalic2:rgb(158,171,176); +@Metalic3:rgb(54,78,89); +@Metalic4:rgb(14,35,46); +@Grey1:rgb(255,255,255); +@Grey2:rgb(204,204,204); +@Grey3:rgb(153,153,153); +@Grey4:rgb(102,102,102); +@Grey5:rgb(45,45,45); +@lilac: #86608e; +@lilacComp: #cbd38d; +@lilacDark: #521f5c; +@lilacBright:#c0a3c7; +@lilacVBright:#F6ECF9; + + +// Theme colors +@BodyBackground: @lilacVBright; +@BodyColor: @Grey5; + +@Link: @lilacDark; +@LinkHover: @lilac; +@LinkVisited: @lilac; + + +@ButtonColor: @Grey1; +@ButtonBackgroundColor: @Grey5; + +@Banner: @Grey1; + +@NavbarBackground:@lilacDark; +@NavbarSelectedBg:@lilacComp; +@NavbarSelectedBorder: @Metalic2; +@NavbarNotifBg: @lilac; + +@Menu: @Grey5; +@MenuBg: @Grey1; +@MenuBorder: @Metalic3; +@MenuItem: @Grey5; +@MenuItemHoverBg: @lilacBright; +@MenuItemSeparator: @Metalic2; +@MenuEmpty: @Metalic2; +@MenuItemDetail: @Metalic2; + +@AsideBorder: @Metalic1; +@AsideConnect: @Grey1; +@AsideConnectBg: @lilacDark; +@AsideConnectHoverBg: @lilac; +@VCardLabelColor: @Grey3; + +@InfoColor: @Grey1; +@InfoBackgroundColor: @Metalic3; + +@NoticeColor: @Grey1; +@NoticeBackgroundColor: #511919; + +@FieldHelpColor: @Grey3; + +@ThreadBackgroundColor: #eff0f1; +@ThreadBottomBorderColor: @Grey2; +@ShinyBorderColor: @lilacBright; + +@BlockquoteBackgroundColor: #FFFFFF; +@BlockquoteBorderColor: #e6e6e6; + +@CommentBoxEmptyColor: @Grey3; +@CommentBoxEmptyBorderColor: @Grey3; +@CommentBoxFullColor: @Grey5; +@CommentBoxFullBorderColor: @Grey5; + +@TagColor: @Grey1; + +@JotToolsBackgroundColor: @lilacDark; +@JotToolsBorderColor: @Metalic2; +@JotToolsOverBackgroundColor: @lilac; +@JotToolsOverBorderColor: @Metalic1; +@JotToolsText: @Grey2; +@JotSubmitBackgroundColor: @Grey2; +@JotSubmitText: @Grey4; +@JotSubmitOverBackgroundColor: @lilacDark; +@JotSubmitOverText: @Grey4; +@JotPermissionUnlockBackgroundColor: @Grey2; +@JotPermissionLockBackgroundColor: @Grey4; +@JotLoadingBackgroundColor: @Grey1; +@JotPreviewBackgroundColor: @lilacBright; + +@MessageNewBackgroundColor: @Blue1; +@MessageNewBorderColor: @Blue3; +@MessageNewColor: @Grey1; + +@MailListBackgroundColor: #f6f7f8; + +@MailDisplaySubjectColor: @Grey5; +@MailDisplaySubjectBackgroundColor: #f6f7f8; diff --git a/view/theme/quattro/lilac/style.css b/view/theme/quattro/lilac/style.css new file mode 100644 index 0000000000..c6229e8858 --- /dev/null +++ b/view/theme/quattro/lilac/style.css @@ -0,0 +1,2149 @@ +/** + * Fabio Comuni + **/ +/* icons */ +.icon { + background-color: transparent ; + background-repeat: no-repeat; + background-position: left center; + display: block; + overflow: hidden; + text-indent: -9999px; + padding: 1px; + min-width: 22px; + height: 22px; +} +.icon.text { + text-indent: 0px; +} +.icon.notify { + background-image: url("../../../images/icons/22/notify_off.png"); +} +.icon.gear { + background-image: url("../../../images/icons/22/gear.png"); +} +.icon.like { + background-image: url("icons/like.png"); +} +.icon.dislike { + background-image: url("icons/dislike.png"); +} +.icon.add { + background-image: url("../../../images/icons/22/add.png"); +} +.icon.delete { + background-image: url("../../../images/icons/22/delete.png"); +} +.icon.edit { + background-image: url("../../../images/icons/22/edit.png"); +} +.icon.star { + background-image: url("../../../images/icons/22/star.png"); +} +.icon.menu { + background-image: url("../../../images/icons/22/menu.png"); +} +.icon.link { + background-image: url("../../../images/icons/22/link.png"); +} +.icon.lock { + background-image: url("../../../images/icons/22/lock.png"); +} +.icon.unlock { + background-image: url("../../../images/icons/22/unlock.png"); +} +.icon.plugin { + background-image: url("../../../images/icons/22/plugin.png"); +} +.icon.type-unkn { + background-image: url("../../../images/icons/22/zip.png"); +} +.icon.type-audio { + background-image: url("../../../images/icons/22/audio.png"); +} +.icon.type-video { + background-image: url("../../../images/icons/22/video.png"); +} +.icon.type-image { + background-image: url("../../../images/icons/22/image.png"); +} +.icon.type-text { + background-image: url("../../../images/icons/22/text.png"); +} +.icon.language { + background-image: url("icons/language.png"); +} +.icon.text { + padding: 10px 0px 0px 25px; +} +.icon.s10 { + min-width: 10px; + height: 10px; +} +.icon.s10.notify { + background-image: url("../../../images/icons/10/notify_off.png"); +} +.icon.s10.gear { + background-image: url("../../../images/icons/10/gear.png"); +} +.icon.s10.like { + background-image: url("icons/like.png"); +} +.icon.s10.dislike { + background-image: url("icons/dislike.png"); +} +.icon.s10.add { + background-image: url("../../../images/icons/10/add.png"); +} +.icon.s10.delete { + background-image: url("../../../images/icons/10/delete.png"); +} +.icon.s10.edit { + background-image: url("../../../images/icons/10/edit.png"); +} +.icon.s10.star { + background-image: url("../../../images/icons/10/star.png"); +} +.icon.s10.menu { + background-image: url("../../../images/icons/10/menu.png"); +} +.icon.s10.link { + background-image: url("../../../images/icons/10/link.png"); +} +.icon.s10.lock { + background-image: url("../../../images/icons/10/lock.png"); +} +.icon.s10.unlock { + background-image: url("../../../images/icons/10/unlock.png"); +} +.icon.s10.plugin { + background-image: url("../../../images/icons/10/plugin.png"); +} +.icon.s10.type-unkn { + background-image: url("../../../images/icons/10/zip.png"); +} +.icon.s10.type-audio { + background-image: url("../../../images/icons/10/audio.png"); +} +.icon.s10.type-video { + background-image: url("../../../images/icons/10/video.png"); +} +.icon.s10.type-image { + background-image: url("../../../images/icons/10/image.png"); +} +.icon.s10.type-text { + background-image: url("../../../images/icons/10/text.png"); +} +.icon.s10.language { + background-image: url("icons/language.png"); +} +.icon.s10.text { + padding: 2px 0px 0px 15px; +} +.icon.s16 { + min-width: 16px; + height: 16px; +} +.icon.s16.notify { + background-image: url("../../../images/icons/16/notify_off.png"); +} +.icon.s16.gear { + background-image: url("../../../images/icons/16/gear.png"); +} +.icon.s16.like { + background-image: url("icons/like.png"); +} +.icon.s16.dislike { + background-image: url("icons/dislike.png"); +} +.icon.s16.add { + background-image: url("../../../images/icons/16/add.png"); +} +.icon.s16.delete { + background-image: url("../../../images/icons/16/delete.png"); +} +.icon.s16.edit { + background-image: url("../../../images/icons/16/edit.png"); +} +.icon.s16.star { + background-image: url("../../../images/icons/16/star.png"); +} +.icon.s16.menu { + background-image: url("../../../images/icons/16/menu.png"); +} +.icon.s16.link { + background-image: url("../../../images/icons/16/link.png"); +} +.icon.s16.lock { + background-image: url("../../../images/icons/16/lock.png"); +} +.icon.s16.unlock { + background-image: url("../../../images/icons/16/unlock.png"); +} +.icon.s16.plugin { + background-image: url("../../../images/icons/16/plugin.png"); +} +.icon.s16.type-unkn { + background-image: url("../../../images/icons/16/zip.png"); +} +.icon.s16.type-audio { + background-image: url("../../../images/icons/16/audio.png"); +} +.icon.s16.type-video { + background-image: url("../../../images/icons/16/video.png"); +} +.icon.s16.type-image { + background-image: url("../../../images/icons/16/image.png"); +} +.icon.s16.type-text { + background-image: url("../../../images/icons/16/text.png"); +} +.icon.s16.language { + background-image: url("icons/language.png"); +} +.icon.s16.text { + padding: 4px 0px 0px 20px; +} +.icon.s22 { + min-width: 22px; + height: 22px; +} +.icon.s22.notify { + background-image: url("../../../images/icons/22/notify_off.png"); +} +.icon.s22.gear { + background-image: url("../../../images/icons/22/gear.png"); +} +.icon.s22.like { + background-image: url("icons/like.png"); +} +.icon.s22.dislike { + background-image: url("icons/dislike.png"); +} +.icon.s22.add { + background-image: url("../../../images/icons/22/add.png"); +} +.icon.s22.delete { + background-image: url("../../../images/icons/22/delete.png"); +} +.icon.s22.edit { + background-image: url("../../../images/icons/22/edit.png"); +} +.icon.s22.star { + background-image: url("../../../images/icons/22/star.png"); +} +.icon.s22.menu { + background-image: url("../../../images/icons/22/menu.png"); +} +.icon.s22.link { + background-image: url("../../../images/icons/22/link.png"); +} +.icon.s22.lock { + background-image: url("../../../images/icons/22/lock.png"); +} +.icon.s22.unlock { + background-image: url("../../../images/icons/22/unlock.png"); +} +.icon.s22.plugin { + background-image: url("../../../images/icons/22/plugin.png"); +} +.icon.s22.type-unkn { + background-image: url("../../../images/icons/22/zip.png"); +} +.icon.s22.type-audio { + background-image: url("../../../images/icons/22/audio.png"); +} +.icon.s22.type-video { + background-image: url("../../../images/icons/22/video.png"); +} +.icon.s22.type-image { + background-image: url("../../../images/icons/22/image.png"); +} +.icon.s22.type-text { + background-image: url("../../../images/icons/22/text.png"); +} +.icon.s22.language { + background-image: url("icons/language.png"); +} +.icon.s22.text { + padding: 10px 0px 0px 25px; +} +.icon.s48 { + width: 48px; + height: 48px; +} +.icon.s48.notify { + background-image: url("../../../images/icons/48/notify_off.png"); +} +.icon.s48.gear { + background-image: url("../../../images/icons/48/gear.png"); +} +.icon.s48.like { + background-image: url("icons/like.png"); +} +.icon.s48.dislike { + background-image: url("icons/dislike.png"); +} +.icon.s48.add { + background-image: url("../../../images/icons/48/add.png"); +} +.icon.s48.delete { + background-image: url("../../../images/icons/48/delete.png"); +} +.icon.s48.edit { + background-image: url("../../../images/icons/48/edit.png"); +} +.icon.s48.star { + background-image: url("../../../images/icons/48/star.png"); +} +.icon.s48.menu { + background-image: url("../../../images/icons/48/menu.png"); +} +.icon.s48.link { + background-image: url("../../../images/icons/48/link.png"); +} +.icon.s48.lock { + background-image: url("../../../images/icons/48/lock.png"); +} +.icon.s48.unlock { + background-image: url("../../../images/icons/48/unlock.png"); +} +.icon.s48.plugin { + background-image: url("../../../images/icons/48/plugin.png"); +} +.icon.s48.type-unkn { + background-image: url("../../../images/icons/48/zip.png"); +} +.icon.s48.type-audio { + background-image: url("../../../images/icons/48/audio.png"); +} +.icon.s48.type-video { + background-image: url("../../../images/icons/48/video.png"); +} +.icon.s48.type-image { + background-image: url("../../../images/icons/48/image.png"); +} +.icon.s48.type-text { + background-image: url("../../../images/icons/48/text.png"); +} +.icon.s48.language { + background-image: url("icons/language.png"); +} +.icon.on { + background-image: url("icons/addon_on.png"); + min-width: 16px; + height: 16px; + background-position: 0px 0px; +} +.icon.off { + background-image: url("icons/addon_off.png"); + width: 16px; + height: 16px; + background-position: 0px 0px; +} +/* global */ +body { + font-family: Liberation Sans, helvetica, arial, clean, sans-serif; + font-size: 11px; + background-color: #f6ecf9; + color: #2d2d2d; + margin: 50px 0px 0px 0px; + display: table; +} +h4 { + font-size: 1.1em; +} +a, +a:link { + color: #521f5c; + text-decoration: none; +} +a:visited { + color: #86608e; + text-decoration: none; +} +a:hover { + color: #86608e; + text-decoration: underline; +} +.left { + float: left; +} +.right { + float: right; +} +.hidden { + display: none; +} +.clear { + clear: both; +} +.fakelink { + color: #521f5c; + text-decoration: none; + cursor: pointer; +} +.fakelink:hover { + color: #86608e; + text-decoration: underline; +} +blockquote { + background: #ffffff; + padding: 1em; + margin-left: 1em; + border-left: 1em solid #e6e6e6; +} +code { + font-family: Courier, monospace; + white-space: pre; + display: block; + overflow: auto; + border: 1px solid #444; + background: #EEE; + color: #444; + padding: 10px; + margin-top: 20px; +} +textarea { + font-size: 20px; +} +#panel { + position: absolute; + width: 10em; + background: #ffffff; + color: #2d2d2d; + margin: 0px; + padding: 1em; + list-style: none; + border: 3px solid #364e59; + z-index: 100000; + -webkit-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + -moz-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); +} +/* tool */ +.tool { + height: auto; + overflow: auto; +} +.tool .label { + float: left; +} +.tool .action { + float: right; +} +.tool > img { + float: left; +} +/* popup notifications */ +#jGrowl.top-right { + top: 30px; + right: 15px; +} +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; +} +/* header */ +header { + position: fixed; + left: 43%; + right: 43%; + top: 0px; + margin: 0px; + padding: 0px; + /*width: 100%; height: 12px; */ + + z-index: 110; + color: #ffffff; +} +header #site-location { + display: none; +} +header #banner { + overflow: hidden; + text-align: center; + width: 100%; +} +header #banner a, +header #banner a:active, +header #banner a:visited, +header #banner a:link, +header #banner a:hover { + color: #ffffff; + text-decoration: none; + outline: none; + vertical-align: bottom; +} +header #banner #logo-img { + height: 22px; + margin-top: 5px; +} +header #banner #logo-text { + font-size: 22px; +} +/* nav */ +nav { + width: 100%; + height: 32px; + position: fixed; + left: 0px; + top: 0px; + padding: 0px; + background-color: #521f5c; + color: #ffffff; + z-index: 100; + -webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); + -moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); +} +nav a, +nav a:active, +nav a:visited, +nav a:link, +nav a:hover { + color: #ffffff; + text-decoration: none; + outline: none; +} +nav ul { + margin: 0px; + padding: 0px 20px; +} +nav ul li { + list-style: none; + margin: 0px; + padding: 0px; + float: left; +} +nav ul li .menu-popup { + left: 0px; + right: auto; +} +nav .nav-menu-icon { + position: relative; + height: 22px; + padding: 5px; + margin: 0px 10px; + -moz-border-radius: 5px 5px 0 0; + -webkit-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} +nav .nav-menu-icon.selected { + background-color: #cbd38d; +} +nav .nav-menu-icon img { + width: 22px; + height: 22px; +} +nav .nav-menu-icon .nav-notify { + top: 3px; +} +nav .nav-menu { + position: relative; + height: 16px; + padding: 5px; + margin: 3px 15px 0px; + font-size: 14px; + border-bottom: 3px solid #521f5c; +} +nav .nav-menu.selected { + border-bottom: 3px solid #9eabb0; +} +nav .nav-notify { + display: none; + position: absolute; + background-color: #86608e; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + font-size: 10px; + padding: 1px 3px; + top: 0px; + right: -10px; + min-width: 15px; + text-align: right; +} +nav .nav-notify.show { + display: block; +} +nav #nav-help-link, +nav #nav-search-link, +nav #nav-directory-link, +nav #nav-apps-link, +nav #nav-site-linkmenu { + float: right; +} +nav #nav-help-link .menu-popup, +nav #nav-search-link .menu-popup, +nav #nav-directory-link .menu-popup, +nav #nav-apps-link .menu-popup, +nav #nav-site-linkmenu .menu-popup { + right: 0px; + left: auto; +} +nav #nav-notifications-linkmenu.on .icon.s22.notify, +nav #nav-notifications-linkmenu.selected .icon.s22.notify { + background-image: url("../../../images/icons/22/notify_on.png"); +} +nav #nav-apps-link.selected { + background-color: #cbd38d; +} +ul.menu-popup { + position: absolute; + display: none; + width: 10em; + background: #ffffff; + color: #2d2d2d; + margin: 0px; + padding: 0px; + list-style: none; + border: 3px solid #364e59; + z-index: 100000; + -webkit-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + -moz-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); +} +ul.menu-popup a { + display: block; + color: #2d2d2d; + padding: 5px 10px; + text-decoration: none; +} +ul.menu-popup a:hover { + background-color: #c0a3c7; +} +ul.menu-popup .menu-sep { + border-top: 1px solid #9eabb0; +} +ul.menu-popup li { + float: none; + overflow: auto; + height: auto; + display: block; +} +ul.menu-popup li img { + float: left; + width: 16px; + height: 16px; + padding-right: 5px; +} +ul.menu-popup .empty { + padding: 5px; + text-align: center; + color: #9eabb0; +} +ul.menu-popup .toolbar { + background-color: #9eabb0; + height: auto; + overflow: auto; +} +ul.menu-popup .toolbar a { + float: right; +} +ul.menu-popup .toolbar a:hover { + background-color: #ffffff; +} +/* autocomplete popup */ +.acpopup { + max-height: 150px; + background-color: #ffffff; + color: #2d2d2d; + border: 1px solid #MenuBorder; + overflow: auto; + z-index: 100000; + -webkit-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + -moz-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); +} +.acpopupitem { + color: #2d2d2d; + padding: 4px; + clear: left; +} +.acpopupitem img { + float: left; + margin-right: 4px; +} +.acpopupitem.selected { + background-color: #c0a3c7; +} +#nav-notifications-menu { + width: 400px; + max-height: 550px; + overflow: auto; +} +#nav-notifications-menu img { + float: left; + margin-right: 5px; +} +#nav-notifications-menu .contactname { + font-weight: bold; +} +#nav-notifications-menu .notif-when { + font-size: 10px; + color: #9eabb0; + display: block; +} +/* aside 230px*/ +aside { + display: table-cell; + vertical-align: top; + width: 200px; + padding: 0px 10px 0px 20px; + border-right: 1px solid #bdcdd4; +} +aside .profile-edit-side-div { + display: none; +} +aside .vcard .fn { + font-size: 16px; + font-weight: bold; + margin-bottom: 5px; +} +aside .vcard .title { + margin-bottom: 5px; +} +aside .vcard dl { + height: auto; + overflow: auto; +} +aside .vcard dt { + float: left; + margin-left: 0px; + width: 35%; + text-align: right; + color: #999999; +} +aside .vcard dd { + float: left; + margin-left: 4px; + width: 60%; +} +aside #profile-extra-links ul { + padding: 0px; + margin: 0px; +} +aside #profile-extra-links li { + padding: 0px; + margin: 0px; + list-style: none; +} +aside #wallmessage-link { + display: block; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + color: #ffffff; + background: #521f5c url('../../../images/connect-bg.png') no-repeat left center; + font-weight: bold; + text-transform: uppercase; + padding: 4px 2px 2px 35px; + margin-top: 3px; +} +aside #wallmessage-link:hover { + text-decoration: none; + background-color: #86608e; +} +aside #dfrn-request-link { + display: block; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + color: #ffffff; + background: #521f5c url('../../../images/connect-bg.png') no-repeat left center; + font-weight: bold; + text-transform: uppercase; + padding: 4px 2px 2px 35px; +} +aside #dfrn-request-link:hover { + text-decoration: none; + background-color: #86608e; +} +aside #profiles-menu { + width: 20em; +} +#contact-block { + overflow: auto; + height: auto; + /*.contact-block-div { width:60px; height: 60px; }*/ + +} +#contact-block .contact-block-h4 { + float: left; + margin: 5px 0px; +} +#contact-block .allcontact-link { + float: right; + margin: 5px 0px; +} +#contact-block .contact-block-content { + clear: both; + overflow: hidden; + height: auto; +} +#contact-block .contact-block-link { + float: left; + margin: 0px 2px 2px 0px; +} +#contact-block .contact-block-link img { + width: 48px; + height: 48px; +} +/* group member */ +#contact-edit-drop-link, +.mail-list-delete-wrapper, +.group-delete-wrapper { + float: right; + margin-right: 50px; +} +#contact-edit-drop-link .drophide, +.mail-list-delete-wrapper .drophide, +.group-delete-wrapper .drophide { + background-image: url('../../../images/icons/22/delete.png'); + display: block; + width: 22px; + height: 22px; + opacity: 0.3; + position: relative; + top: -50px; +} +#contact-edit-drop-link .drop, +.mail-list-delete-wrapper .drop, +.group-delete-wrapper .drop { + background-image: url('../../../images/icons/22/delete.png'); + display: block; + width: 22px; + height: 22px; + position: relative; + top: -50px; +} +/* +#group-members { + margin-top: 20px; + padding: 10px; + height: 250px; + overflow: auto; + border: 1px solid #ddd; +} +#group-members-end { + clear: both; +} +#group-all-contacts { + padding: 10px; + height: 450px; + overflow: auto; + border: 1px solid #ddd; +} +#group-all-contacts-end { + clear: both; + margin-bottom: 10px; +} +.contact-block-div { + float: left; + width: 60px; + height: 60px; +}*/ +/* widget */ +.widget { + margin-bottom: 2em; + /*.action .s10 { width: 10px; overflow: hidden; padding: 0px;} + .action .s16 { width: 16px; overflow: hidden; padding: 0px;}*/ + +} +.widget h3 { + padding: 0px; + margin: 2px; +} +.widget .action { + opacity: 0.1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.widget input.action { + opacity: 0.5; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.widget:hover .title .action { + opacity: 1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.widget .tool:hover .action { + opacity: 1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.widget .tool:hover .action.ticked { + opacity: 1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.widget ul { + padding: 0px; +} +.widget ul li { + padding-left: 16px; + min-height: 16px; + list-style: none; +} +.widget .tool.selected { + background: url('../../../images/selected.png') no-repeat left center; +} +/* widget: search */ +#add-search-popup { + width: 200px; + top: 18px; +} +/* section 800px */ +section { + display: table-cell; + vertical-align: top; + width: 770px; + padding: 0px 20px 0px 10px; +} +.sparkle { + cursor: url('icons/lock.cur'), pointer; +} +/* wall item */ +.tread-wrapper { + background-color: #eff0f1; + position: relative; + padding: 10px; + margin-bottom: 20px; + width: 750px; + border-bottom: 1px solid #cccccc; +} +.wall-item-decor { + position: absolute; + left: 97%; + top: -10px; + width: 16px; +} +.unstarred { + display: none; +} +.wall-item-container { + display: table; + width: 750px; +} +.wall-item-container .wall-item-item, +.wall-item-container .wall-item-bottom { + display: table-row; +} +.wall-item-container .wall-item-bottom { + opacity: 0.5; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.wall-item-container:hover .wall-item-bottom { + opacity: 1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.wall-item-container .wall-item-info { + display: table-cell; + vertical-align: top; + text-align: left; + width: 60px; +} +.wall-item-container .wall-item-location { + word-wrap: break-word; + width: 50px; +} +.wall-item-container .wall-item-content { + display: table-cell; + font-size: 12px; + max-width: 720px; + word-wrap: break-word; +} +.wall-item-container .wall-item-content img { + max-width: 710px; +} +.wall-item-container .wall-item-links, +.wall-item-container .wall-item-actions { + display: table-cell; + vertical-align: middle; +} +.wall-item-container .wall-item-links .icon, +.wall-item-container .wall-item-actions .icon { + opacity: 0.5; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.wall-item-container .wall-item-links .icon:hover, +.wall-item-container .wall-item-actions .icon:hover { + opacity: 1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.wall-item-container .wall-item-ago { + padding-right: 40px; +} +.wall-item-container .wall-item-name { + font-weight: bold; +} +.wall-item-container .wall-item-actions-author { + float: left; + width: 20em; + margin-top: 0.5em; +} +.wall-item-container .wall-item-actions-social { + float: left; + margin-top: 0.5em; +} +.wall-item-container .wall-item-actions-social a { + margin-right: 3em; +} +.wall-item-container .wall-item-actions-tools { + float: right; + width: 15%; +} +.wall-item-container .wall-item-actions-tools a { + float: right; +} +.wall-item-container .wall-item-actions-tools input { + float: right; +} +.wall-item-container.comment .contact-photo-wrapper { + margin-left: 16px; +} +.wall-item-container.comment .contact-photo { + width: 32px; + height: 32px; +} +.wall-item-container.comment .contact-photo-menu-button { + top: 15px !important; + left: 0px !important; +} +.wall-item-container.comment .wall-item-links { + padding-left: 12px; +} +/* 'tag' item type */ +.wall-item-container.item-tag .wall-item-content { + opacity: 0.5; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.wall-item-container.item-tag .contact-photo-wrapper { + margin-left: 32px; +} +.wall-item-container.item-tag .contact-photo { + width: 16px; + height: 16px; +} +.wall-item-container.item-tag .contact-photo-menu-button { + top: 15px !important; + left: 15px !important; +} +.wall-item-comment-wrapper { + margin: 1em 2em 1em 60px; +} +.wall-item-comment-wrapper .comment-edit-photo { + display: none; +} +.wall-item-comment-wrapper textarea { + height: 1em; + width: 100%; + font-size: 10px; + color: #999999; + border: 1px solid #999999; + padding: 0.3em; +} +.wall-item-comment-wrapper .comment-edit-text-full { + font-size: 20px; + height: 4em; + color: #2d2d2d; + border: 1px solid #2d2d2d; +} +.threaded .wall-item-comment-wrapper { + margin-left: 0px; +} +.comment-edit-preview { + width: 710px; + border: 1px solid #2d2d2d; + margin-top: 10px; + background-color: #c0a3c7; +} +.comment-edit-preview .contact-photo { + width: 32px; + height: 32px; + margin-left: 16px; + /*background: url(../../../images/icons/22/user.png) no-repeat center center;*/ + +} +.comment-edit-preview .contact-photo-menu-button { + top: 15px !important; + left: 15px !important; +} +.comment-edit-preview .wall-item-links { + padding-left: 12px; +} +.comment-edit-preview .wall-item-container { + width: 90%; +} +.comment-edit-preview .tread-wrapper { + width: 90%; + padding: 0; + margin: 10px 0; + background-color: #c0a3c7; + border-bottom: 0px; +} +.comment-edit-preview .wall-item-conv { + display: none; +} +.shiny { + border-right: 10px solid #c0a3c7; +} +#jot-preview-content .tread-wrapper { + background-color: #c0a3c7; +} +.hide-comments-outer { + margin-bottom: 0.8em; +} +.wall-item-tags { + padding-top: 5px; +} +.tag { + background: url("../../../images/tag_b.png") no-repeat center left; + color: #ffffff; + padding-left: 3px; +} +.tag a { + padding-right: 8px; + background: url("../../../images/tag.png") no-repeat center right; + color: #ffffff; +} +.filesavetags { + padding: 3px 0px 3px 0px; + opacity: 0.5; +} +.wwto { + position: absolute !important; + width: 25px; + height: 25px; + background: #FFFFFF; + border: 2px solid #364e59; + height: 25px; + width: 25px; + overflow: hidden; + padding: 1px; + position: absolute !important; + top: 40px; + left: 30px; + -webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); + -moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); +} +.wwto .contact-photo { + width: 25px; + height: 25px; +} +/* threaded comments */ +.children { + margin-top: 1em; +} +.children .hide-comments-outer { + margin-left: 60px; +} +.children .wwto { + display: none; +} +.children .comment-edit-preview { + width: 660px; +} +.children .comment-edit-preview .wall-item-container { + width: 610px; +} +.children .children { + margin-left: 40px; +} +.children .children .wall-item-container { + width: 710px; +} +.children .children .comment-edit-preview { + width: 620px; +} +.children .children .comment-edit-preview .wall-item-container { + width: 620px; +} +.children .children .children .wall-item-container { + width: 670px; +} +.children .children .children .comment-edit-preview { + width: 580px; +} +.children .children .children .comment-edit-preview .wall-item-container { + width: 580px; +} +.children .children .children .children .wall-item-container { + width: 630px; +} +.children .children .children .children .comment-edit-preview { + width: 540px; +} +.children .children .children .children .comment-edit-preview .wall-item-container { + width: 540px; +} +.children .children .children .children .children .wall-item-container { + width: 590px; +} +.children .children .children .children .children .comment-edit-preview { + width: 500px; +} +.children .children .children .children .children .comment-edit-preview .wall-item-container { + width: 500px; +} +.children .children .children .children .children .children { + margin-left: 0px; +} +.children .children .children .children .children .children .hide-comments-outer { + margin-left: 0px; +} +/*.threaded .hide-comments-outer { margin-left: 20px; }*/ +span[id^="showmore-teaser"] { + background: url("showmore-bg.jpg") no-repeat center bottom; +} +span[id^="showmore-wrap"] { + border-top: 1px solid #999999; + color: #999999; + display: block; + text-align: center; + background-color: #eff0f1; +} +#pause { + position: fixed; + bottom: 5px; + right: 5px; +} +.contact-photo-wrapper { + position: relative; +} +.contact-photo { + width: 48px; + height: 48px; + overflow: hidden; + display: block; +} +.contact-photo img { + width: 48px; + height: 48px; +} +.contact-photo-menu-button { + display: none; + position: absolute; + left: -2px; + top: 31px; +} +.contact-wrapper { + float: left; + width: 300px; + height: 90px; + padding-right: 10px; + margin: 0 10px 10px 0px; +} +.contact-wrapper .contact-photo-wrapper { + float: left; + margin-right: 10px; +} +.contact-wrapper .contact-photo { + width: 80px; + height: 80px; +} +.contact-wrapper .contact-photo img { + width: 80px; + height: 80px; +} +.contact-wrapper .contact-photo-menu-button { + left: 0px; + top: 63px; +} +.directory-item { + float: left; + width: 200px; + height: 200px; +} +.directory-item .contact-photo { + width: 175px; + height: 175px; +} +.directory-item .contact-photo img { + width: 175px; + height: 175px; +} +.contact-name { + font-weight: bold; + padding-top: 15px; +} +.contact-details { + color: #999999; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +/* editor */ +.jothidden { + display: none; +} +#jot { + width: 100%; + margin: 0px 2em 20px 0px; +} +#jot .profile-jot-text { + height: 1em; + width: 99%; + font-size: 10px; + color: #999999; + border: 1px solid #999999; + padding: 0.3em; +} +#jot .profile-jot-text:focus { + font-size: 20px; +} +#jot #jot-tools { + margin: 0px; + padding: 0px; + height: 40px; + overflow: none; + width: 770px; + background-color: #521f5c; + border-bottom: 2px solid #9eabb0; +} +#jot #jot-tools li { + list-style: none; + float: left; + width: 80px; + height: 40px; + border-bottom: 2px solid #9eabb0; +} +#jot #jot-tools li a { + display: block; + color: #cccccc; + width: 100%; + height: 40px; + text-align: center; + line-height: 40px; + overflow: hidden; +} +#jot #jot-tools li:hover { + background-color: #86608e; + border-bottom: 2px solid #bdcdd4; +} +#jot #jot-tools li.perms { + float: right; + width: 40px; +} +#jot #jot-tools li.perms a.unlock { + width: 30px; + border-left: 10px solid #cccccc; + background-color: #cccccc; +} +#jot #jot-tools li.perms a.lock { + width: 30px; + border-left: 10px solid #666666; + background-color: #666666; +} +#jot #jot-tools li.submit { + float: right; + background-color: #cccccc; + border-bottom: 2px solid #cccccc; + border-right: 1px solid #666666; + border-left: 1px solid #666666; +} +#jot #jot-tools li.submit input { + border: 0px; + margin: 0px; + padding: 0px; + background-color: #cccccc; + color: #666666; + width: 80px; + height: 40px; + line-height: 40px; +} +#jot #jot-tools li.submit input:hover { + background-color: #521f5c; + color: #666666; +} +#jot #jot-tools li.loading { + float: right; + background-color: #ffffff; + width: 20px; + vertical-align: center; + text-align: center; + border-top: 2px solid #9eabb0; + height: 38px; +} +#jot #jot-tools li.loading img { + margin-top: 10px; +} +#jot #jot-title { + border: 0px; + margin: 0px; + height: 20px; + width: 500px; + font-weight: bold; + border: 1px solid #f6ecf9; +} +#jot #jot-title:-webkit-input-placeholder { + font-weight: normal; +} +#jot #jot-title:-moz-placeholder { + font-weight: normal; +} +#jot #jot-title:hover { + border: 1px solid #999999; +} +#jot #jot-title:focus { + border: 1px solid #999999; +} +#jot #character-counter { + width: 40px; + float: right; + text-align: right; + height: 20px; + line-height: 20px; + padding-right: 20px; +} +#jot #jot-category { + border: 0px; + margin: 0px; + height: 20px; + width: 200px; + border: 1px solid #f6ecf9; +} +#jot #jot-category:hover { + border: 1px solid #999999; +} +#jot #jot-category:focus { + border: 1px solid #999999; +} +/** buttons **/ +/*input[type="submit"] { + border: 0px; + background-color: @ButtonBackgroundColor; + color: @ButtonColor; + padding: 0px 10px; + .rounded(5px); + height: 18px; +}*/ +/** acl **/ +#photo-edit-perms-select, +#photos-upload-permissions-wrapper, +#profile-jot-acl-wrapper { + display: block!important; +} +#acl-wrapper { + width: 690px; + float: left; +} +#acl-search { + float: right; + background: #ffffff url("../../../images/search_18.png") no-repeat right center; + padding-right: 20px; +} +#acl-showall { + float: left; + display: block; + width: auto; + height: 18px; + background-color: #cccccc; + background-image: url("../../../images/show_all_off.png"); + background-position: 7px 7px; + background-repeat: no-repeat; + padding: 7px 5px 0px 30px; + color: #999999; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +#acl-showall.selected { + color: #000000; + background-color: #ff9900; + background-image: url("../../../images/show_all_on.png"); +} +#acl-list { + height: 210px; + border: 1px solid #cccccc; + clear: both; + margin-top: 30px; + overflow: auto; +} +.acl-list-item { + display: block; + width: 150px; + height: 30px; + border: 1px solid #cccccc; + margin: 5px; + float: left; +} +.acl-list-item img { + width: 22px; + height: 22px; + float: left; + margin: 4px; +} +.acl-list-item p { + height: 12px; + font-size: 10px; + margin: 0px; + padding: 2px 0px 1px; + overflow: hidden; +} +.acl-list-item a { + font-size: 8px; + display: block; + width: 40px; + height: 10px; + float: left; + color: #999999; + background-color: #cccccc; + background-position: 3px 3px; + background-repeat: no-repeat; + margin-right: 5px; + -webkit-border-radius: 2px ; + -moz-border-radius: 2px; + border-radius: 2px; + padding-left: 15px; +} +#acl-wrapper a:hover { + text-decoration: none; + color: #000000; +} +.acl-button-show { + background-image: url("../../../images/show_off.png"); +} +.acl-button-hide { + background-image: url("../../../images/hide_off.png"); +} +.acl-button-show.selected { + color: #000000; + background-color: #9ade00; + background-image: url("../../../images/show_on.png"); +} +.acl-button-hide.selected { + color: #000000; + background-color: #ff4141; + background-image: url("../../../images/hide_on.png"); +} +.acl-list-item.groupshow { + border-color: #9ade00; +} +.acl-list-item.grouphide { + border-color: #ff4141; +} +/** /acl **/ +/** tab buttons **/ +ul.tabs { + list-style-type: none; + padding-bottom: 10px; +} +ul.tabs li { + float: left; + margin-left: 20px; +} +ul.tabs li .active { + border-bottom: 1px solid #86608e; +} +/** group editor **/ +#group-edit-desc { + margin-top: 1em; + color: #999999; +} +#group-update-wrapper { + height: auto; + overflow: auto; +} +#group-update-wrapper #group { + width: 300px; + float: left; + margin-right: 20px; +} +#group-update-wrapper #contacts { + width: 300px; + float: left; +} +#group-update-wrapper #group-separator { + display: none; +} +#group-update-wrapper .contact_list { + height: 300px; + border: 1px solid #364e59; + overflow: auto; +} +#group-update-wrapper .contact_list .contact-block-div { + width: 50px; + height: 50px; + float: left; +} +/** + * Form fields + */ +.field { + margin-bottom: 10px; + padding-bottom: 10px; + overflow: auto; + width: 100%; +} +.field label { + float: left; + width: 200px; +} +.field input, +.field textarea { + width: 400px; +} +.field input[type="checkbox"], +.field input[type="radio"] { + width: auto; +} +.field textarea { + height: 100px; +} +.field .field_help { + display: block; + margin-left: 200px; + color: #999999; +} +.field .onoff { + float: left; + width: 80px; +} +.field .onoff a { + display: block; + border: 1px solid #666666; + background-image: url("../../../images/onoff.jpg"); + background-repeat: no-repeat; + padding: 4px 2px 2px 2px; + height: 16px; + text-decoration: none; +} +.field .onoff .off { + border-color: #666666; + padding-left: 40px; + background-position: left center; + background-color: #cccccc; + color: #666666; + text-align: right; +} +.field .onoff .on { + border-color: #204A87; + padding-right: 40px; + background-position: right center; + background-color: #D7E3F1; + color: #204A87; + text-align: left; +} +.field .hidden { + display: none!important; +} +.field.radio .field_help { + margin-left: 0px; +} +#profile-edit-links li { + list-style: none; + margin-top: 10px; +} +#profile-edit-default-desc { + color: #FF0000; + border: 1px solid #FF8888; + background-color: #FFEEEE; + padding: 7px; +} +#profile-edit-profile-name-label, +#profile-edit-name-label, +#profile-edit-pdesc-label, +#profile-edit-gender-label, +#profile-edit-dob-label, +#profile-edit-address-label, +#profile-edit-locality-label, +#profile-edit-region-label, +#profile-edit-postal-code-label, +#profile-edit-country-name-label, +#profile-edit-marital-label, +#profile-edit-with-label, +#profile-edit-sexual-label, +#profile-edit-politic-label, +#profile-edit-religion-label, +#profile-edit-pubkeywords-label, +#profile-edit-prvkeywords-label, +#profile-edit-gender-select, +#profile-edit-homepage-label { + float: left; + width: 175px; + padding-top: 7px; +} +#profile-edit-profile-name, +#profile-edit-name, +#gender-select, +#profile-edit-pdesc, +#profile-edit-gender, +#profile-edit-dob, +#profile-edit-address, +#profile-edit-locality, +#profile-edit-region, +#profile-edit-postal-code, +#profile-edit-country-name, +#profile-edit-marital, +#profile-edit-with, +#profile-edit-sexual, +#profile-edit-politic, +#profile-edit-religion, +#profile-edit-pubkeywords, +#profile-edit-prvkeywords, +#profile-edit-homepage { + margin-top: 5px; +} +/* oauth */ +.oauthapp { + height: auto; + overflow: auto; + border-bottom: 2px solid #cccccc; + padding-bottom: 1em; + margin-bottom: 1em; +} +.oauthapp img { + float: left; + width: 48px; + height: 48px; + margin: 10px; +} +.oauthapp img.noicon { + background-image: url("../../../images/icons/48/plugin.png"); + background-position: center center; + background-repeat: no-repeat; +} +.oauthapp a { + float: left; +} +/* contacts */ +.contact-entry-wrapper { + width: 50px; + float: left; +} +/* photo albums */ +#photo-edit-link-wrap { + margin-bottom: 10px; +} +#album-edit-link { + border-right: 1px solid #364e59; + float: left; + padding-right: 5px; + margin-right: 5px; +} +#photo-edit-link, +#album-edit-link a { + background: url("../../../images/icons/16/edit.png") no-repeat left center; + padding-left: 18px; +} +#photo-toprofile-link { + background: url("../../../images/icons/16/user.png") no-repeat left center; + padding-left: 18px; +} +.photos-upload-link a, +#photo-top-upload-link { + background: url("../../../images/icons/16/add.png") no-repeat left center; + padding-left: 18px; +} +.photo-top-image-wrapper, +.photo-album-image-wrapper { + float: left; + margin: 0px 10px 10px 0px; + width: 150px; + height: 150px; + position: relative; + overflow: hidden; +} +.photo-top-image-wrapper img, +.photo-album-image-wrapper img { + width: 150px; +} +.photo-top-image-wrapper .photo-top-album-name, +.photo-album-image-wrapper .photo-top-album-name, +.photo-top-image-wrapper .caption, +.photo-album-image-wrapper .caption { + position: absolute; + color: #2d2d2d; + background-color: #ffffff; + width: 100%; + -webkit-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + -moz-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + -ms-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; + bottom: -150px; +} +.photo-top-image-wrapper:hover .photo-top-album-name, +.photo-album-image-wrapper:hover .photo-top-album-name, +.photo-top-image-wrapper:hover .caption, +.photo-album-image-wrapper:hover .caption { + bottom: 0px; + -webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); + -moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + -ms-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; +} +#photo-photo { + display: block; + width: 660px; + padding: 50px; + margin-bottom: 0px; + text-align: center; + background-color: #999999; +} +#photo-photo img { + max-width: 560px; +} +#photo-album-title { + background: url("../../../images/icons/22/image.png") no-repeat top left; + padding-left: 23px; + min-height: 22px; +} +#photo-album-title a { + display: block; + padding-top: 5px; +} +#photo-caption { + display: block; + width: 660px; + min-height: 55px; + background-color: #cccccc; + padding: 0 50px 0 50px; +} +#photo-next-link > a > div { + background: url("icons/next.png") no-repeat center center; + float: right; + width: 50px; + height: 50px; +} +#photo-prev-link > a > div { + background: url("icons/prev.png") no-repeat center center; + float: left; + width: 50px; + height: 50px; +} +#photo-like-div { + display: block; + width: 660px; + height: 30px; + background-color: #cccccc; + padding: 0 50px 0 50px; +} +#photo-like-div .icon { + float: left; +} +#photo-like-div .like-rotator { + float: right; +} +/* profile match wrapper */ +.profile-match-wrapper { + float: left; + width: 90px; + height: 90px; + margin-bottom: 20px; +} +.profile-match-wrapper .contact-photo { + width: 80px; + height: 80px; +} +.profile-match-wrapper .contact-photo img { + width: 80px; + height: 80px; +} +.profile-match-wrapper .contact-photo-menu-button { + left: 0px; + top: 63px; +} +/* messages */ +#message-new { + background: #19aeff; + border: 1px solid #005c94; + width: 150px; +} +#message-new a { + color: #ffffff; + text-align: center; + display: block; + font-weight: bold; + padding: 1em 0px; +} +.mail-list-wrapper { + background-color: #f6f7f8; + margin-bottom: 5px; + width: 100%; + height: auto; + overflow: hidden; +} +.mail-list-wrapper span { + display: block; + float: left; + width: 20%; + overflow: hidden; +} +.mail-list-wrapper .mail-subject { + width: 30%; + padding: 4px 0px 0px 4px; +} +.mail-list-wrapper .mail-subject a { + display: block; +} +.mail-list-wrapper .mail-subject.unseen a { + font-weight: bold; +} +.mail-list-wrapper .mail-date { + padding: 4px 4px 0px 4px; +} +.mail-list-wrapper .mail-from { + padding: 4px 4px 0px 4px; +} +.mail-list-wrapper .mail-count { + padding: 4px 4px 0px 4px; + text-align: right; +} +.mail-list-wrapper .mail-delete { + float: right; +} +#mail-display-subject { + background-color: #f6f7f8; + color: #2d2d2d; + margin-bottom: 10px; + width: 100%; + height: auto; + overflow: hidden; +} +#mail-display-subject span { + float: left; + overflow: hidden; + padding: 4px 0px 0px 10px; +} +#mail-display-subject .mail-delete { + float: right; + opacity: 0.5; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#mail-display-subject:hover .mail-delete { + opacity: 1; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +/* theme screenshot */ +.screenshot, +#theme-preview { + position: absolute; + width: 202px; + left: 70%; + top: 50px; +} +.screenshot img, +#theme-preview img { + width: 200px; + height: 150px; +} +/* page footer */ +footer { + height: 100px; + display: table-row; +} +.pager { + margin-top: 25px; + clear: both; +} +/** + * ADMIN + */ +#pending-update { + float: right; + color: #ffffff; + font-weight: bold; + background-color: #FF0000; + padding: 0em 0.3em; +} +#adminpage dl { + clear: left; + margin-bottom: 2px; + padding-bottom: 2px; + border-bottom: 1px solid black; +} +#adminpage dt { + width: 200px; + float: left; + font-weight: bold; +} +#adminpage dd { + margin-left: 200px; +} +#adminpage h3 { + border-bottom: 1px solid #cccccc; +} +#adminpage .field label { + font-weight: bold; +} +#adminpage .submit { + clear: left; + text-align: right; +} +#adminpage #pluginslist { + margin: 0px; + padding: 0px; +} +#adminpage .plugin { + list-style: none; + display: block; + border: 1px solid #888888; + padding: 1em; + margin-bottom: 5px; + clear: left; +} +#adminpage .plugin desc { + margin-left: 2.5em; +} +#adminpage .toggleplugin { + float: left; + margin-right: 1em; +} +#adminpage table { + width: 100%; + border-bottom: 1px solid #000000; + margin: 5px 0px; +} +#adminpage table th { + text-align: left; +} +#adminpage table td .icon { + float: left; +} +#adminpage table tr:hover { + background-color: #bbc7d7; +} +#adminpage table#users img { + width: 16px; + height: 16px; +} +#adminpage .selectall { + text-align: right; +} +/* edit buttons for comments */ +.icon.dim { + opacity: 0.3; + filter: alpha(opacity=30); +} +.comment-edit-bb { + list-style: none; + display: none; + margin: 0px; + padding: 0px; + width: 75%; +} +.comment-edit-bb > li { + display: inline-block; + margin: 10px 10px 0 0; + visibility: none; +} +.editicon { + display: inline-block; + width: 16px; + height: 16px; + background-image: url(icons/bbedit.png); + text-decoration: none; +} +.editicon :hover { + background-color: #ccc; +} +.boldbb { + background-position: 0px 0px; +} +.boldbb:hover { + background-position: 0px -16px; +} +.italicbb { + background-position: -16px 0px; +} +.italicbb:hover { + background-position: -16px -16px; +} +.underlinebb { + background-position: -32px 0px; +} +.underlinebb:hover { + background-position: -32px -16px; +} +.quotebb { + background-position: -48px 0px; +} +.quotebb:hover { + background-position: -48px -16px; +} +.codebb { + background-position: -64px 0px; +} +.codebb:hover { + background-position: -64px -16px; +} +.imagebb { + background-position: -80px 0px; +} +.imagebb:hover { + background-position: -80px -16px; +} +.urlbb { + background-position: -96px 0px; +} +.urlbb:hover { + background-position: -96px -16px; +} +.videobb { + background-position: -112px 0px; +} +.videobb:hover { + background-position: -112px -16px; +} diff --git a/view/theme/quattro/lilac/style.less b/view/theme/quattro/lilac/style.less new file mode 100644 index 0000000000..7d81e788a9 --- /dev/null +++ b/view/theme/quattro/lilac/style.less @@ -0,0 +1,14 @@ +/** + * Fabio Comuni + **/ +// Less file http://lesscss.org/ +// compile with lessc +// $ lessc style.less > style.css + +@import "colors"; +@import "../icons"; +@import "../quattro"; + + + + From a30097308403d8a9008b8ce8514ad2bf9957ae33 Mon Sep 17 00:00:00 2001 From: pixelroot Date: Fri, 14 Sep 2012 17:55:17 +0200 Subject: [PATCH 604/644] modified: view/theme/smoothly/style.css --- view/theme/smoothly/style.css | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/view/theme/smoothly/style.css b/view/theme/smoothly/style.css index fd45e205a6..73636d1a95 100644 --- a/view/theme/smoothly/style.css +++ b/view/theme/smoothly/style.css @@ -93,6 +93,10 @@ li.widget-list { .fakelink { color: #1873a2; cursor: pointer; + padding-left: 20px; + margin-left: 40px; + margin-bottom: 10px; + background: url("down.png") no-repeat scroll left center transparent; } .fakelink :hover { @@ -334,8 +338,6 @@ nav { background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); border: 1px solid #7C7D7B; box-shadow: 0 0 8px #BDBDBD; - /* -moz-box-shadow: 3px 3px 4px #959494; - -webkit-box-shadow: 3px 3px 4px #959494;*/ border-radius: 5px 5px 5px 5px; } @@ -876,6 +878,7 @@ ul .sidebar-group-li .icon { } #profile-jot-submit-wrapper { + margin-top: 30px; } #jot-title { From 6537a94b1a907230bba5512bfef1c3e179530503 Mon Sep 17 00:00:00 2001 From: pixelroot Date: Fri, 14 Sep 2012 17:55:27 +0200 Subject: [PATCH 605/644] new file: view/theme/smoothly/down.png --- view/theme/smoothly/down.png | Bin 0 -> 537 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 view/theme/smoothly/down.png diff --git a/view/theme/smoothly/down.png b/view/theme/smoothly/down.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6f9fd49e9c7f10dfa75f0ef0ff255ff2871e6d GIT binary patch literal 537 zcmV+!0_OdRP)Px#x=>71MgRZ*|NsBb(9qP?)zQ+@&d<-&)YRA5*wE3@)z;S1)6>q*&eqr0)z#Jg z{r%Y4+1c9K?d|Q{+}zXE)#Bsh)z{bE-rnHh;r#sk@bK{9;NbW7_vh&7`T6<&{{GzE z-T3(U;^N}z>FLeR&e7A;>+9?8?(Wdi(&Oah)YjJ1)6?zl?)CNc&(YE8>gwU);pph- z+uYpbuz>?d|aK@z&PX+1c6M-QDu@^WWg$>gwwIR#$TX0004WQchC< zK<3zH00001VoOIv0Eh)0NB{r;32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2@Vf1 zDbi1h6aWAK%Sl8*R2b7ukk?WJK@0>}anmK7jdK8Oa?bq!Z?Sg<+x^%zC5>cE1JsxU z(;w?r+TOw-S zx9_uF_wg)T$TAt>4Zz8V?EpM=@e~ZK*v0D&ulu{cPU;ZvD`XY!J`E`FjOvc}zi>tyM bb9m1$aqSE~)%pFD00000NkvXXu0mjfUF$A= literal 0 HcmV?d00001 From 3c846547f7457318e03077ed7661f9a9228cb3a9 Mon Sep 17 00:00:00 2001 From: pixelroot Date: Fri, 14 Sep 2012 19:08:21 +0200 Subject: [PATCH 606/644] modified: view/theme/smoothly/style.css --- view/theme/smoothly/style.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/view/theme/smoothly/style.css b/view/theme/smoothly/style.css index 73636d1a95..f5a4140b9c 100644 --- a/view/theme/smoothly/style.css +++ b/view/theme/smoothly/style.css @@ -94,7 +94,7 @@ li.widget-list { color: #1873a2; cursor: pointer; padding-left: 20px; - margin-left: 40px; + margin-left: 20px; margin-bottom: 10px; background: url("down.png") no-repeat scroll left center transparent; } @@ -1426,7 +1426,8 @@ profile-jot-banner-wrapper { #item-delete-selected { overflow: auto; margin-top: 20px; - width: 100%; + float: right; + width: 230px; } /* ============ */ From 816680ca85caf57174445cb578a1a57de97e6438 Mon Sep 17 00:00:00 2001 From: pixelroot Date: Fri, 14 Sep 2012 19:08:39 +0200 Subject: [PATCH 607/644] new file: view/theme/smoothly/bottom.tpl new file: view/theme/smoothly/js/jquery.autogrow.textarea.js new file: view/theme/smoothly/js/modernizr.custom.2.5.3.js new file: view/theme/smoothly/js/modernizr.custom.2.5.3.min.js --- view/theme/smoothly/bottom.tpl | 59 ++ .../smoothly/js/jquery.autogrow.textarea.js | 46 + .../smoothly/js/modernizr.custom.2.5.3.js | 989 ++++++++++++++++++ .../smoothly/js/modernizr.custom.2.5.3.min.js | 4 + 4 files changed, 1098 insertions(+) create mode 100644 view/theme/smoothly/bottom.tpl create mode 100644 view/theme/smoothly/js/jquery.autogrow.textarea.js create mode 100644 view/theme/smoothly/js/modernizr.custom.2.5.3.js create mode 100644 view/theme/smoothly/js/modernizr.custom.2.5.3.min.js diff --git a/view/theme/smoothly/bottom.tpl b/view/theme/smoothly/bottom.tpl new file mode 100644 index 0000000000..800dc63706 --- /dev/null +++ b/view/theme/smoothly/bottom.tpl @@ -0,0 +1,59 @@ + + diff --git a/view/theme/smoothly/js/jquery.autogrow.textarea.js b/view/theme/smoothly/js/jquery.autogrow.textarea.js new file mode 100644 index 0000000000..806e34f512 --- /dev/null +++ b/view/theme/smoothly/js/jquery.autogrow.textarea.js @@ -0,0 +1,46 @@ +(function($) { + + /* + * Auto-growing textareas; technique ripped from Facebook + */ + $.fn.autogrow = function(options) { + + this.filter('textarea').each(function() { + + var $this = $(this), + minHeight = $this.height(), + lineHeight = $this.css('lineHeight'); + + var shadow = $('
    ').css({ + position: 'absolute', + top: -10000, + left: -10000, + width: $(this).width(), + fontSize: $this.css('fontSize'), + fontFamily: $this.css('fontFamily'), + lineHeight: $this.css('lineHeight'), + resize: 'none' + }).appendTo(document.body); + + var update = function() { + + var val = this.value.replace(//g, '>') + .replace(/&/g, '&') + .replace(/\n/g, '
    '); + + shadow.html(val); + $(this).css('height', Math.max(shadow.height() + 20, minHeight)); + } + + $(this).change(update).keyup(update).keydown(update); + + update.apply(this); + + }); + + return this; + + } + +})(jQuery); \ No newline at end of file diff --git a/view/theme/smoothly/js/modernizr.custom.2.5.3.js b/view/theme/smoothly/js/modernizr.custom.2.5.3.js new file mode 100644 index 0000000000..2502348b19 --- /dev/null +++ b/view/theme/smoothly/js/modernizr.custom.2.5.3.js @@ -0,0 +1,989 @@ +/* Modernizr 2.5.3 (Custom Build) | MIT & BSD + * Build: http://www.modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-flexbox_legacy-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-printshiv-mq-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load + */ +; + + + +window.Modernizr = (function( window, document, undefined ) { + + var version = '2.5.3', + + Modernizr = {}, + + + docElement = document.documentElement, + + mod = 'modernizr', + modElem = document.createElement(mod), + mStyle = modElem.style, + + inputElem = document.createElement('input') , + + smile = ':)', + + toString = {}.toString, + + prefixes = ' -webkit- -moz- -o- -ms- '.split(' '), + + + + omPrefixes = 'Webkit Moz O ms', + + cssomPrefixes = omPrefixes.split(' '), + + domPrefixes = omPrefixes.toLowerCase().split(' '), + + ns = {'svg': 'http://www.w3.org/2000/svg'}, + + tests = {}, + inputs = {}, + attrs = {}, + + classes = [], + + slice = classes.slice, + + featureName, + + + injectElementWithStyles = function( rule, callback, nodes, testnames ) { + + var style, ret, node, + div = document.createElement('div'), + body = document.body, + fakeBody = body ? body : document.createElement('body'); + + if ( parseInt(nodes, 10) ) { + while ( nodes-- ) { + node = document.createElement('div'); + node.id = testnames ? testnames[nodes] : mod + (nodes + 1); + div.appendChild(node); + } + } + + style = ['­',''].join(''); + div.id = mod; + (body ? div : fakeBody).innerHTML += style; + fakeBody.appendChild(div); + if(!body){ + fakeBody.style.background = ""; + docElement.appendChild(fakeBody); + } + + ret = callback(div, rule); + !body ? fakeBody.parentNode.removeChild(fakeBody) : div.parentNode.removeChild(div); + + return !!ret; + + }, + + testMediaQuery = function( mq ) { + + var matchMedia = window.matchMedia || window.msMatchMedia; + if ( matchMedia ) { + return matchMedia(mq).matches; + } + + var bool; + + injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) { + bool = (window.getComputedStyle ? + getComputedStyle(node, null) : + node.currentStyle)['position'] == 'absolute'; + }); + + return bool; + + }, + + + isEventSupported = (function() { + + var TAGNAMES = { + 'select': 'input', 'change': 'input', + 'submit': 'form', 'reset': 'form', + 'error': 'img', 'load': 'img', 'abort': 'img' + }; + + function isEventSupported( eventName, element ) { + + element = element || document.createElement(TAGNAMES[eventName] || 'div'); + eventName = 'on' + eventName; + + var isSupported = eventName in element; + + if ( !isSupported ) { + if ( !element.setAttribute ) { + element = document.createElement('div'); + } + if ( element.setAttribute && element.removeAttribute ) { + element.setAttribute(eventName, ''); + isSupported = is(element[eventName], 'function'); + + if ( !is(element[eventName], 'undefined') ) { + element[eventName] = undefined; + } + element.removeAttribute(eventName); + } + } + + element = null; + return isSupported; + } + return isEventSupported; + })(), + + + _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty; + + if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) { + hasOwnProperty = function (object, property) { + return _hasOwnProperty.call(object, property); + }; + } + else { + hasOwnProperty = function (object, property) { + return ((property in object) && is(object.constructor.prototype[property], 'undefined')); + }; + } + + + if (!Function.prototype.bind) { + Function.prototype.bind = function bind(that) { + + var target = this; + + if (typeof target != "function") { + throw new TypeError(); + } + + var args = slice.call(arguments, 1), + bound = function () { + + if (this instanceof bound) { + + var F = function(){}; + F.prototype = target.prototype; + var self = new F; + + var result = target.apply( + self, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return self; + + } else { + + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + + } + + }; + + return bound; + }; + } + + function setCss( str ) { + mStyle.cssText = str; + } + + function setCssAll( str1, str2 ) { + return setCss(prefixes.join(str1 + ';') + ( str2 || '' )); + } + + function is( obj, type ) { + return typeof obj === type; + } + + function contains( str, substr ) { + return !!~('' + str).indexOf(substr); + } + + function testProps( props, prefixed ) { + for ( var i in props ) { + if ( mStyle[ props[i] ] !== undefined ) { + return prefixed == 'pfx' ? props[i] : true; + } + } + return false; + } + + function testDOMProps( props, obj, elem ) { + for ( var i in props ) { + var item = obj[props[i]]; + if ( item !== undefined) { + + if (elem === false) return props[i]; + + if (is(item, 'function')){ + return item.bind(elem || obj); + } + + return item; + } + } + return false; + } + + function testPropsAll( prop, prefixed, elem ) { + + var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1), + props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); + + if(is(prefixed, "string") || is(prefixed, "undefined")) { + return testProps(props, prefixed); + + } else { + props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); + return testDOMProps(props, prefixed, elem); + } + } + + var testBundle = (function( styles, tests ) { + var style = styles.join(''), + len = tests.length; + + injectElementWithStyles(style, function( node, rule ) { + var style = document.styleSheets[document.styleSheets.length - 1], + cssText = style ? (style.cssRules && style.cssRules[0] ? style.cssRules[0].cssText : style.cssText || '') : '', + children = node.childNodes, hash = {}; + + while ( len-- ) { + hash[children[len].id] = children[len]; + } + + Modernizr['touch'] = ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch || (hash['touch'] && hash['touch'].offsetTop) === 9; + Modernizr['csstransforms3d'] = (hash['csstransforms3d'] && hash['csstransforms3d'].offsetLeft) === 9 && hash['csstransforms3d'].offsetHeight === 3; Modernizr['generatedcontent'] = (hash['generatedcontent'] && hash['generatedcontent'].offsetHeight) >= 1; Modernizr['fontface'] = /src/i.test(cssText) && + cssText.indexOf(rule.split(' ')[0]) === 0; }, len, tests); + + })([ + '@font-face {font-family:"font";src:url("https://")}' ,['@media (',prefixes.join('touch-enabled),('),mod,')', + '{#touch{top:9px;position:absolute}}'].join('') ,['@media (',prefixes.join('transform-3d),('),mod,')', + '{#csstransforms3d{left:9px;position:absolute;height:3px;}}'].join('') + + ,['#generatedcontent:after{content:"',smile,'";visibility:hidden}'].join('') + ], + [ + 'fontface' ,'touch' ,'csstransforms3d' + ,'generatedcontent' + + ]); tests['flexbox'] = function() { + return testPropsAll('flexOrder'); + }; + + + tests['flexbox-legacy'] = function() { + return testPropsAll('boxDirection'); + }; + + + tests['canvas'] = function() { + var elem = document.createElement('canvas'); + return !!(elem.getContext && elem.getContext('2d')); + }; + + tests['canvastext'] = function() { + return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function')); + }; tests['touch'] = function() { + return Modernizr['touch']; + }; + + tests['geolocation'] = function() { + return !!navigator.geolocation; + }; + + tests['postmessage'] = function() { + return !!window.postMessage; + }; + + + tests['websqldatabase'] = function() { + return !!window.openDatabase; + }; + + tests['indexedDB'] = function() { + return !!testPropsAll("indexedDB",window); + }; + + tests['hashchange'] = function() { + return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7); + }; + + tests['history'] = function() { + return !!(window.history && history.pushState); + }; + + tests['draganddrop'] = function() { + var div = document.createElement('div'); + return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div); + }; + + tests['websockets'] = function() { + for ( var i = -1, len = cssomPrefixes.length; ++i < len; ){ + if ( window[cssomPrefixes[i] + 'WebSocket'] ){ + return true; + } + } + return 'WebSocket' in window; + }; + + + tests['rgba'] = function() { + setCss('background-color:rgba(150,255,150,.5)'); + + return contains(mStyle.backgroundColor, 'rgba'); + }; + + tests['hsla'] = function() { + setCss('background-color:hsla(120,40%,100%,.5)'); + + return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla'); + }; + + tests['multiplebgs'] = function() { + setCss('background:url(https://),url(https://),red url(https://)'); + + return /(url\s*\(.*?){3}/.test(mStyle.background); + }; + tests['backgroundsize'] = function() { + return testPropsAll('backgroundSize'); + }; + + tests['borderimage'] = function() { + return testPropsAll('borderImage'); + }; + + + + tests['borderradius'] = function() { + return testPropsAll('borderRadius'); + }; + + tests['boxshadow'] = function() { + return testPropsAll('boxShadow'); + }; + + tests['textshadow'] = function() { + return document.createElement('div').style.textShadow === ''; + }; + + + tests['opacity'] = function() { + setCssAll('opacity:.55'); + + return /^0.55$/.test(mStyle.opacity); + }; + + + tests['cssanimations'] = function() { + return testPropsAll('animationName'); + }; + + + tests['csscolumns'] = function() { + return testPropsAll('columnCount'); + }; + + + tests['cssgradients'] = function() { + var str1 = 'background-image:', + str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', + str3 = 'linear-gradient(left top,#9f9, white);'; + + setCss( + (str1 + '-webkit- '.split(' ').join(str2 + str1) + + prefixes.join(str3 + str1)).slice(0, -str1.length) + ); + + return contains(mStyle.backgroundImage, 'gradient'); + }; + + + tests['cssreflections'] = function() { + return testPropsAll('boxReflect'); + }; + + + tests['csstransforms'] = function() { + return !!testPropsAll('transform'); + }; + + + tests['csstransforms3d'] = function() { + + var ret = !!testPropsAll('perspective'); + + if ( ret && 'webkitPerspective' in docElement.style ) { + + ret = Modernizr['csstransforms3d']; + } + return ret; + }; + + + tests['csstransitions'] = function() { + return testPropsAll('transition'); + }; + + + + tests['fontface'] = function() { + return Modernizr['fontface']; + }; + + tests['generatedcontent'] = function() { + return Modernizr['generatedcontent']; + }; + tests['video'] = function() { + var elem = document.createElement('video'), + bool = false; + + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,''); + + bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,''); + + bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,''); + } + + } catch(e) { } + + return bool; + }; + + tests['audio'] = function() { + var elem = document.createElement('audio'), + bool = false; + + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,''); + bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,''); + + bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,''); + bool.m4a = ( elem.canPlayType('audio/x-m4a;') || + elem.canPlayType('audio/aac;')) .replace(/^no$/,''); + } + } catch(e) { } + + return bool; + }; + + + tests['localstorage'] = function() { + try { + localStorage.setItem(mod, mod); + localStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + tests['sessionstorage'] = function() { + try { + sessionStorage.setItem(mod, mod); + sessionStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + + tests['webworkers'] = function() { + return !!window.Worker; + }; + + + tests['applicationcache'] = function() { + return !!window.applicationCache; + }; + + + tests['svg'] = function() { + return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect; + }; + + tests['inlinesvg'] = function() { + var div = document.createElement('div'); + div.innerHTML = ''; + return (div.firstChild && div.firstChild.namespaceURI) == ns.svg; + }; + + tests['smil'] = function() { + return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate'))); + }; + + + tests['svgclippaths'] = function() { + return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath'))); + }; + + function webforms() { + Modernizr['input'] = (function( props ) { + for ( var i = 0, len = props.length; i < len; i++ ) { + attrs[ props[i] ] = !!(props[i] in inputElem); + } + if (attrs.list){ + attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement); + } + return attrs; + })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); + Modernizr['inputtypes'] = (function(props) { + + for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) { + + inputElem.setAttribute('type', inputElemType = props[i]); + bool = inputElem.type !== 'text'; + + if ( bool ) { + + inputElem.value = smile; + inputElem.style.cssText = 'position:absolute;visibility:hidden;'; + + if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) { + + docElement.appendChild(inputElem); + defaultView = document.defaultView; + + bool = defaultView.getComputedStyle && + defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && + (inputElem.offsetHeight !== 0); + + docElement.removeChild(inputElem); + + } else if ( /^(search|tel)$/.test(inputElemType) ){ + } else if ( /^(url|email)$/.test(inputElemType) ) { + bool = inputElem.checkValidity && inputElem.checkValidity() === false; + + } else if ( /^color$/.test(inputElemType) ) { + docElement.appendChild(inputElem); + docElement.offsetWidth; + bool = inputElem.value != smile; + docElement.removeChild(inputElem); + + } else { + bool = inputElem.value != smile; + } + } + + inputs[ props[i] ] = !!bool; + } + return inputs; + })('search tel url email datetime date month week time datetime-local number range color'.split(' ')); + } + for ( var feature in tests ) { + if ( hasOwnProperty(tests, feature) ) { + featureName = feature.toLowerCase(); + Modernizr[featureName] = tests[feature](); + + classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); + } + } + + Modernizr.input || webforms(); setCss(''); + modElem = inputElem = null; + + + Modernizr._version = version; + + Modernizr._prefixes = prefixes; + Modernizr._domPrefixes = domPrefixes; + Modernizr._cssomPrefixes = cssomPrefixes; + + Modernizr.mq = testMediaQuery; + + Modernizr.hasEvent = isEventSupported; + + Modernizr.testProp = function(prop){ + return testProps([prop]); + }; + + Modernizr.testAllProps = testPropsAll; + + + Modernizr.testStyles = injectElementWithStyles; + return Modernizr; + +})(this, this.document); +/*! HTML5 Shiv v3.4 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */ +;(function(window, document) { + + /** Preset options */ + var options = window.html5 || {}; + + /** Used to skip problem elements */ + var reSkip = /^<|^(?:button|form|map|select|textarea)$/i; + + /** Detect whether the browser supports default html5 styles */ + var supportsHtml5Styles; + + /** Detect whether the browser supports unknown elements */ + var supportsUnknownElements; + + (function() { + var a = document.createElement('a'); + + a.innerHTML = ''; + + //if the hidden property is implemented we can assume, that the browser supports HTML5 Styles + supportsHtml5Styles = ('hidden' in a); + supportsUnknownElements = a.childNodes.length == 1 || (function() { + // assign a false positive if unable to shiv + try { + (document.createElement)('a'); + } catch(e) { + return true; + } + var frag = document.createDocumentFragment(); + return ( + typeof frag.cloneNode == 'undefined' || + typeof frag.createDocumentFragment == 'undefined' || + typeof frag.createElement == 'undefined' + ); + }()); + + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a style sheet with the given CSS text and adds it to the document. + * @private + * @param {Document} ownerDocument The document. + * @param {String} cssText The CSS text. + * @returns {StyleSheet} The style element. + */ + function addStyleSheet(ownerDocument, cssText) { + var p = ownerDocument.createElement('p'), + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + + p.innerHTML = 'x'; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Shivs the `createElement` and `createDocumentFragment` methods of the document. + * @private + * @param {Document|DocumentFragment} ownerDocument The document. + */ + function shivMethods(ownerDocument) { + var cache = {}, + docCreateElement = ownerDocument.createElement, + docCreateFragment = ownerDocument.createDocumentFragment, + frag = docCreateFragment(); + + ownerDocument.createElement = function(nodeName) { + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + var node = (cache[nodeName] || (cache[nodeName] = docCreateElement(nodeName))).cloneNode(); + return html5.shivMethods && node.canHaveChildren && !reSkip.test(nodeName) ? frag.appendChild(node) : node; + }; + + ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' + + 'var n=f.cloneNode(),c=n.createElement;' + + 'h.shivMethods&&(' + + // unroll the `createElement` calls + getElements().join().replace(/\w+/g, function(nodeName) { + cache[nodeName] = docCreateElement(nodeName); + frag.createElement(nodeName); + return 'c("' + nodeName + '")'; + }) + + ');return n}' + )(html5, frag); + } + + /*--------------------------------------------------------------------------*/ + + /** + * Shivs the given document. + * @memberOf html5 + * @param {Document} ownerDocument The document to shiv. + * @returns {Document} The shived document. + */ + function shivDocument(ownerDocument) { + var shived; + if (ownerDocument.documentShived) { + return ownerDocument; + } + if (html5.shivCSS && !supportsHtml5Styles) { + shived = !!addStyleSheet(ownerDocument, + // corrects block display not defined in IE6/7/8/9 + 'article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}' + + // corrects audio display not defined in IE6/7/8/9 + 'audio{display:none}' + + // corrects canvas and video display not defined in IE6/7/8/9 + 'canvas,video{display:inline-block;*display:inline;*zoom:1}' + + // corrects 'hidden' attribute and audio[controls] display not present in IE7/8/9 + '[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}' + + // adds styling not present in IE6/7/8/9 + 'mark{background:#FF0;color:#000}' + ); + } + if (!supportsUnknownElements) { + shived = !shivMethods(ownerDocument); + } + if (shived) { + ownerDocument.documentShived = shived; + } + return ownerDocument; + } + + /*--------------------------------------------------------------------------*/ + + /** + * The `html5` object is exposed so that more elements can be shived and + * existing shiving can be detected on iframes. + * @type Object + * @example + * + * // options can be changed before the script is included + * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false }; + */ + var html5 = { + + /** + * An array or space separated string of node names of the elements to shiv. + * @memberOf html5 + * @type Array|String + */ + 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video', + + /** + * A flag to indicate that the HTML5 style sheet should be inserted. + * @memberOf html5 + * @type Boolean + */ + 'shivCSS': !(options.shivCSS === false), + + /** + * A flag to indicate that the document's `createElement` and `createDocumentFragment` + * methods should be overwritten. + * @memberOf html5 + * @type Boolean + */ + 'shivMethods': !(options.shivMethods === false), + + /** + * A string to describe the type of `html5` object ("default" or "default print"). + * @memberOf html5 + * @type String + */ + 'type': 'default', + + // shivs the document according to the specified `html5` object options + 'shivDocument': shivDocument + }; + + /*--------------------------------------------------------------------------*/ + + // expose html5 + window.html5 = html5; + + // shiv the document + shivDocument(document); + + /*------------------------------- Print Shiv -------------------------------*/ + + /** Used to filter media types */ + var reMedia = /^$|\b(?:all|print)\b/; + + /** Used to namespace printable elements */ + var shivNamespace = 'html5shiv'; + + /** Detect whether the browser supports shivable style sheets */ + var supportsShivableSheets = !supportsUnknownElements && (function() { + // assign a false negative if unable to shiv + var docEl = document.documentElement; + return !( + typeof document.namespaces == 'undefined' || + typeof document.parentWindow == 'undefined' || + typeof docEl.applyElement == 'undefined' || + typeof docEl.removeNode == 'undefined' || + typeof window.attachEvent == 'undefined' + ); + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Wraps all HTML5 elements in the given document with printable elements. + * (eg. the "header" element is wrapped with the "html5shiv:header" element) + * @private + * @param {Document} ownerDocument The document. + * @returns {Array} An array wrappers added. + */ + function addWrappers(ownerDocument) { + var node, + nodes = ownerDocument.getElementsByTagName('*'), + index = nodes.length, + reElements = RegExp('^(?:' + getElements().join('|') + ')$', 'i'), + result = []; + + while (index--) { + node = nodes[index]; + if (reElements.test(node.nodeName)) { + result.push(node.applyElement(createWrapper(node))); + } + } + return result; + } + + /** + * Creates a printable wrapper for the given element. + * @private + * @param {Element} element The element. + * @returns {Element} The wrapper. + */ + function createWrapper(element) { + var node, + nodes = element.attributes, + index = nodes.length, + wrapper = element.ownerDocument.createElement(shivNamespace + ':' + element.nodeName); + + // copy element attributes to the wrapper + while (index--) { + node = nodes[index]; + node.specified && wrapper.setAttribute(node.nodeName, node.nodeValue); + } + // copy element styles to the wrapper + wrapper.style.cssText = element.style.cssText; + return wrapper; + } + + /** + * Shivs the given CSS text. + * (eg. header{} becomes html5shiv\:header{}) + * @private + * @param {String} cssText The CSS text to shiv. + * @returns {String} The shived CSS text. + */ + function shivCssText(cssText) { + var pair, + parts = cssText.split('{'), + index = parts.length, + reElements = RegExp('(^|[\\s,>+~])(' + getElements().join('|') + ')(?=[[\\s,>+~#.:]|$)', 'gi'), + replacement = '$1' + shivNamespace + '\\:$2'; + + while (index--) { + pair = parts[index] = parts[index].split('}'); + pair[pair.length - 1] = pair[pair.length - 1].replace(reElements, replacement); + parts[index] = pair.join('}'); + } + return parts.join('{'); + } + + /** + * Removes the given wrappers, leaving the original elements. + * @private + * @params {Array} wrappers An array of printable wrappers. + */ + function removeWrappers(wrappers) { + var index = wrappers.length; + while (index--) { + wrappers[index].removeNode(); + } + } + + /*--------------------------------------------------------------------------*/ + + /** + * Shivs the given document for print. + * @memberOf html5 + * @param {Document} ownerDocument The document to shiv. + * @returns {Document} The shived document. + */ + function shivPrint(ownerDocument) { + var shivedSheet, + wrappers, + namespaces = ownerDocument.namespaces, + ownerWindow = ownerDocument.parentWindow; + + if (!supportsShivableSheets || ownerDocument.printShived) { + return ownerDocument; + } + if (typeof namespaces[shivNamespace] == 'undefined') { + namespaces.add(shivNamespace); + } + + ownerWindow.attachEvent('onbeforeprint', function() { + var imports, + length, + sheet, + collection = ownerDocument.styleSheets, + cssText = [], + index = collection.length, + sheets = Array(index); + + // convert styleSheets collection to an array + while (index--) { + sheets[index] = collection[index]; + } + // concat all style sheet CSS text + while ((sheet = sheets.pop())) { + // IE does not enforce a same origin policy for external style sheets + if (!sheet.disabled && reMedia.test(sheet.media)) { + for (imports = sheet.imports, index = 0, length = imports.length; index < length; index++) { + sheets.push(imports[index]); + } + try { + cssText.push(sheet.cssText); + } catch(er){} + } + } + // wrap all HTML5 elements with printable elements and add the shived style sheet + cssText = shivCssText(cssText.reverse().join('')); + wrappers = addWrappers(ownerDocument); + shivedSheet = addStyleSheet(ownerDocument, cssText); + }); + + ownerWindow.attachEvent('onafterprint', function() { + // remove wrappers, leaving the original elements, and remove the shived style sheet + removeWrappers(wrappers); + shivedSheet.removeNode(true); + }); + + ownerDocument.printShived = true; + return ownerDocument; + } + + /*--------------------------------------------------------------------------*/ + + // expose API + html5.type += ' print'; + html5.shivPrint = shivPrint; + + // shiv for print + shivPrint(document); + +}(this, document));/*yepnope1.5.3|WTFPL*/ +(function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f",a,""].join(""),k.id=g,(l?k:m).innerHTML+=h,m.appendChild(k),l||(m.style.background="",f.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},y=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return x("@media "+b+" { #"+g+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},z=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=E(e[d],"function"),E(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),A={}.hasOwnProperty,B;!E(A,"undefined")&&!E(A.call,"undefined")?B=function(a,b){return A.call(a,b)}:B=function(a,b){return b in a&&E(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=v.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(v.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(v.call(arguments)))};return e});var J=function(c,d){var f=c.join(""),g=d.length;x(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch||(j.touch&&j.touch.offsetTop)===9,e.csstransforms3d=(j.csstransforms3d&&j.csstransforms3d.offsetLeft)===9&&j.csstransforms3d.offsetHeight===3,e.generatedcontent=(j.generatedcontent&&j.generatedcontent.offsetHeight)>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",m.join("touch-enabled),("),g,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",m.join("transform-3d),("),g,")","{#csstransforms3d{left:9px;position:absolute;height:3px;}}"].join(""),['#generatedcontent:after{content:"',k,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){return I("flexOrder")},r["flexbox-legacy"]=function(){return I("boxDirection")},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!E(b.createElement("canvas").getContext("2d").fillText,"function")},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){return!!a.openDatabase},r.indexedDB=function(){return!!I("indexedDB",a)},r.hashchange=function(){return z("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},r.websockets=function(){for(var b=-1,c=o.length;++b",d.insertBefore(c.lastChild,d.firstChild)}function h(){var a=k.elements;return typeof a=="string"?a.split(" "):a}function i(a){var b={},c=a.createElement,e=a.createDocumentFragment,f=e();a.createElement=function(a){var e=(b[a]||(b[a]=c(a))).cloneNode();return k.shivMethods&&e.canHaveChildren&&!d.test(a)?f.appendChild(e):e},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+h().join().replace(/\w+/g,function(a){return b[a]=c(a),f.createElement(a),'c("'+a+'")'})+");return n}")(k,f)}function j(a){var b;return a.documentShived?a:(k.shivCSS&&!e&&(b=!!g(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),f||(b=!i(a)),b&&(a.documentShived=b),a)}function o(a){var b,c=a.getElementsByTagName("*"),d=c.length,e=RegExp("^(?:"+h().join("|")+")$","i"),f=[];while(d--)b=c[d],e.test(b.nodeName)&&f.push(b.applyElement(p(b)));return f}function p(a){var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(m+":"+a.nodeName);while(d--)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function q(a){var b,c=a.split("{"),d=c.length,e=RegExp("(^|[\\s,>+~])("+h().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),f="$1"+m+"\\:$2";while(d--)b=c[d]=c[d].split("}"),b[b.length-1]=b[b.length-1].replace(e,f),c[d]=b.join("}");return c.join("{")}function r(a){var b=a.length;while(b--)a[b].removeNode()}function s(a){var b,c,d=a.namespaces,e=a.parentWindow;return!n||a.printShived?a:(typeof d[m]=="undefined"&&d.add(m),e.attachEvent("onbeforeprint",function(){var d,e,f,h=a.styleSheets,i=[],j=h.length,k=Array(j);while(j--)k[j]=h[j];while(f=k.pop())if(!f.disabled&&l.test(f.media)){for(d=f.imports,j=0,e=d.length;j",e="hidden"in a,f=a.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var k={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:j};a.html5=k,j(b);var l=/^$|\b(?:all|print)\b/,m="html5shiv",n=!f&&function(){var c=b.documentElement;return typeof b.namespaces!="undefined"&&typeof b.parentWindow!="undefined"&&typeof c.applyElement!="undefined"&&typeof c.removeNode!="undefined"&&typeof a.attachEvent!="undefined"}();k.type+=" print",k.shivPrint=s,s(b)}(this,document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f Date: Fri, 14 Sep 2012 18:22:56 -0600 Subject: [PATCH 608/644] fix permissions for uploaded images with size specified --- mod/item.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/item.php b/mod/item.php index 52ea9d58c9..8fe1c05c12 100644 --- a/mod/item.php +++ b/mod/item.php @@ -373,8 +373,8 @@ function item_post(&$a) { $match = null; - if((! $preview) && preg_match_all("/\[img\](.*?)\[\/img\]/",$body,$match)) { - $images = $match[1]; + if((! $preview) && preg_match_all("/\[img([\=0-9x]*)\](.*?)\[\/img\]/",$body,$match)) { + $images = $match[2]; if(count($images)) { foreach($images as $image) { if(! stristr($image,$a->get_baseurl() . '/photo/')) From 8a4dcc28c1e3a0bdb5b8b4fa971ff48cf3e0fb75 Mon Sep 17 00:00:00 2001 From: Zach Prezkuta Date: Fri, 14 Sep 2012 18:33:07 -0600 Subject: [PATCH 609/644] make size search less greedy --- mod/item.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/item.php b/mod/item.php index 8fe1c05c12..7d36d7f70a 100644 --- a/mod/item.php +++ b/mod/item.php @@ -373,7 +373,7 @@ function item_post(&$a) { $match = null; - if((! $preview) && preg_match_all("/\[img([\=0-9x]*)\](.*?)\[\/img\]/",$body,$match)) { + if((! $preview) && preg_match_all("/\[img([\=0-9x]*?)\](.*?)\[\/img\]/",$body,$match)) { $images = $match[2]; if(count($images)) { foreach($images as $image) { From 21d685b21cccb5055b867271fdc9faaedf9e6685 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Sep 2012 10:38:08 +0200 Subject: [PATCH 610/644] DE: update to the strings --- view/de/messages.po | 15 ++++++++------- view/de/strings.php | 12 ++++++------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/view/de/messages.po b/view/de/messages.po index a01bf6a830..5e3963cff4 100644 --- a/view/de/messages.po +++ b/view/de/messages.po @@ -13,6 +13,7 @@ # , 2012. # , 2012. # Martin Schmitt , 2012. +# , 2012. # Oliver , 2012. # , 2011-2012. # , 2011-2012. @@ -22,7 +23,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: http://bugs.friendica.com/\n" "POT-Creation-Date: 2012-09-13 10:00-0700\n" -"PO-Revision-Date: 2012-09-14 13:44+0000\n" +"PO-Revision-Date: 2012-09-15 08:34+0000\n" "Last-Translator: bavatar \n" "Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" "MIME-Version: 1.0\n" @@ -5010,19 +5011,19 @@ msgstr "" #: ../../addon/fbpost/fbpost.php:199 msgid "Facebook Post" -msgstr "" +msgstr "Beitrag auf Facebook" #: ../../addon/fbpost/fbpost.php:205 msgid "Install Facebook Post connector for this account." -msgstr "" +msgstr "Facebook-Connector für dieses Konto installieren." #: ../../addon/fbpost/fbpost.php:212 msgid "Remove Facebook Post connector" -msgstr "" +msgstr "Facebook-Connector entfernen" #: ../../addon/fbpost/fbpost.php:240 msgid "Facebook Post Settings" -msgstr "" +msgstr "Facebook-Beitragseinstellungen" #: ../../addon/widgets/widget_like.php:58 #, php-format @@ -5084,11 +5085,11 @@ msgstr "machte etwas obszönes Körperliches mit" #: ../../addon/morepokes/morepokes.php:22 msgid "point out the poke feature to" -msgstr "" +msgstr "zeigte die neue Anstups-Funktion" #: ../../addon/morepokes/morepokes.php:22 msgid "pointed out the poke feature to" -msgstr "" +msgstr "zeigte die neue Anstups-Funktion" #: ../../addon/morepokes/morepokes.php:23 msgid "declare undying love for" diff --git a/view/de/strings.php b/view/de/strings.php index f59f898c9e..38e25f5651 100644 --- a/view/de/strings.php +++ b/view/de/strings.php @@ -1117,10 +1117,10 @@ $a->strings["Number of items"] = "Anzahl der Einträge"; $a->strings["Size of the cache"] = "Größe des Caches"; $a->strings["Delete the whole cache"] = "Cache leeren"; $a->strings["Facebook Post disabled"] = ""; -$a->strings["Facebook Post"] = ""; -$a->strings["Install Facebook Post connector for this account."] = ""; -$a->strings["Remove Facebook Post connector"] = ""; -$a->strings["Facebook Post Settings"] = ""; +$a->strings["Facebook Post"] = "Beitrag auf Facebook"; +$a->strings["Install Facebook Post connector for this account."] = "Facebook-Connector für dieses Konto installieren."; +$a->strings["Remove Facebook Post connector"] = "Facebook-Connector entfernen"; +$a->strings["Facebook Post Settings"] = "Facebook-Beitragseinstellungen"; $a->strings["%d person likes this"] = array( 0 => "%d Person mag das", 1 => "%d Leute mögen das", @@ -1140,8 +1140,8 @@ $a->strings["shag"] = "poppen"; $a->strings["shagged"] = "poppte"; $a->strings["do something obscenely biological to"] = "mit ihm/ihr etwas obszönes Körperliches machen"; $a->strings["did something obscenely biological to"] = "machte etwas obszönes Körperliches mit"; -$a->strings["point out the poke feature to"] = ""; -$a->strings["pointed out the poke feature to"] = ""; +$a->strings["point out the poke feature to"] = "zeigte die neue Anstups-Funktion"; +$a->strings["pointed out the poke feature to"] = "zeigte die neue Anstups-Funktion"; $a->strings["declare undying love for"] = "unterbliche Liebe verkünden"; $a->strings["declared undying love for"] = "verkündete unsterbliche Liebe für"; $a->strings["patent"] = "patentieren"; From 669d2b890ead6d5bc268c038a469e8ce65dee715 Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 15 Sep 2012 15:23:15 -0700 Subject: [PATCH 611/644] rev update - add cancel markup to editor --- boot.php | 2 +- include/conversation.php | 1 + mod/editpost.php | 1 + util/messages.po | 204 +++++++++++++++++++-------------------- 4 files changed, 105 insertions(+), 103 deletions(-) diff --git a/boot.php b/boot.php index 66aeb28ec8..713e8e2aa4 100644 --- a/boot.php +++ b/boot.php @@ -11,7 +11,7 @@ require_once('include/cache.php'); require_once('library/Mobile_Detect/Mobile_Detect.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1465' ); +define ( 'FRIENDICA_VERSION', '3.0.1467' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1155 ); diff --git a/include/conversation.php b/include/conversation.php index 91310277fc..cb225127d1 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1280,6 +1280,7 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { '$profile_uid' => $x['profile_uid'], '$preview' => t('Preview'), '$sourceapp' => t($a->sourcename), + '$cancel' => t('Cancel') )); diff --git a/mod/editpost.php b/mod/editpost.php index b44afe245f..03d5263a1d 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -133,6 +133,7 @@ function editpost_content(&$a) { '$preview' => t('Preview'), '$jotplugins' => $jotplugins, '$sourceapp' => t($a->sourcename), + '$cancel' => t('Cancel') )); return $o; diff --git a/util/messages.po b/util/messages.po index e88044c5b0..23f3c724d2 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1465\n" +"Project-Id-Version: 3.0.1467\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-13 10:00-0700\n" +"POT-Creation-Date: 2012-09-15 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -176,7 +176,7 @@ msgstr "" #: ../../view/theme/diabook/theme.php:757 #: ../../view/theme/diabook/config.php:190 #: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70 -#: ../../include/conversation.php:591 ../../object/Item.php:532 +#: ../../include/conversation.php:601 ../../object/Item.php:532 msgid "Submit" msgstr "" @@ -236,7 +236,7 @@ msgid "link to source" msgstr "" #: ../../mod/events.php:331 ../../view/theme/diabook/theme.php:131 -#: ../../include/nav.php:52 ../../boot.php:1683 +#: ../../include/nav.php:52 ../../boot.php:1689 msgid "Events" msgstr "" @@ -374,7 +374,7 @@ msgstr "" msgid "No" msgstr "" -#: ../../mod/photos.php:46 ../../boot.php:1676 +#: ../../mod/photos.php:46 ../../boot.php:1682 msgid "Photo Albums" msgstr "" @@ -404,8 +404,8 @@ msgstr "" #: ../../mod/profile_photo.php:204 ../../mod/profile_photo.php:296 #: ../../mod/profile_photo.php:305 #: ../../addon/communityhome/communityhome.php:111 -#: ../../view/theme/diabook/theme.php:599 ../../include/user.php:318 -#: ../../include/user.php:325 ../../include/user.php:332 +#: ../../view/theme/diabook/theme.php:599 ../../include/user.php:324 +#: ../../include/user.php:331 ../../include/user.php:338 msgid "Profile Photos" msgstr "" @@ -577,51 +577,51 @@ msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" #: ../../mod/photos.php:1356 ../../mod/content.php:665 -#: ../../include/conversation.php:565 ../../object/Item.php:185 +#: ../../include/conversation.php:575 ../../object/Item.php:185 msgid "I like this (toggle)" msgstr "" #: ../../mod/photos.php:1357 ../../mod/content.php:666 -#: ../../include/conversation.php:566 ../../object/Item.php:186 +#: ../../include/conversation.php:576 ../../object/Item.php:186 msgid "I don't like this (toggle)" msgstr "" -#: ../../mod/photos.php:1358 ../../include/conversation.php:1214 +#: ../../mod/photos.php:1358 ../../include/conversation.php:1244 msgid "Share" msgstr "" #: ../../mod/photos.php:1359 ../../mod/editpost.php:112 #: ../../mod/content.php:482 ../../mod/content.php:843 #: ../../mod/wallmessage.php:152 ../../mod/message.php:293 -#: ../../mod/message.php:481 ../../include/conversation.php:659 -#: ../../include/conversation.php:891 ../../include/conversation.php:1233 +#: ../../mod/message.php:481 ../../include/conversation.php:671 +#: ../../include/conversation.php:921 ../../include/conversation.php:1263 #: ../../object/Item.php:237 msgid "Please wait" msgstr "" #: ../../mod/photos.php:1375 ../../mod/photos.php:1416 #: ../../mod/photos.php:1448 ../../mod/content.php:688 -#: ../../include/conversation.php:588 ../../object/Item.php:529 +#: ../../include/conversation.php:598 ../../object/Item.php:529 msgid "This is you" msgstr "" #: ../../mod/photos.php:1377 ../../mod/photos.php:1418 #: ../../mod/photos.php:1450 ../../mod/content.php:690 -#: ../../include/conversation.php:590 ../../boot.php:574 +#: ../../include/conversation.php:600 ../../boot.php:574 #: ../../object/Item.php:531 msgid "Comment" msgstr "" #: ../../mod/photos.php:1379 ../../mod/editpost.php:133 -#: ../../mod/content.php:700 ../../include/conversation.php:600 -#: ../../include/conversation.php:1251 ../../object/Item.php:541 +#: ../../mod/content.php:700 ../../include/conversation.php:610 +#: ../../include/conversation.php:1281 ../../object/Item.php:541 msgid "Preview" msgstr "" #: ../../mod/photos.php:1479 ../../mod/content.php:439 #: ../../mod/content.php:721 ../../mod/settings.php:606 #: ../../mod/settings.php:695 ../../mod/group.php:168 ../../mod/admin.php:694 -#: ../../include/conversation.php:440 ../../include/conversation.php:847 +#: ../../include/conversation.php:440 ../../include/conversation.php:874 #: ../../object/Item.php:116 msgid "Delete" msgstr "" @@ -688,7 +688,7 @@ msgstr "" msgid "Edit post" msgstr "" -#: ../../mod/editpost.php:88 ../../include/conversation.php:1200 +#: ../../mod/editpost.php:88 ../../include/conversation.php:1230 msgid "Post to Email" msgstr "" @@ -700,17 +700,17 @@ msgstr "" #: ../../mod/editpost.php:104 ../../mod/wallmessage.php:150 #: ../../mod/message.php:291 ../../mod/message.php:478 -#: ../../include/conversation.php:1215 +#: ../../include/conversation.php:1245 msgid "Upload photo" msgstr "" -#: ../../mod/editpost.php:105 ../../include/conversation.php:1217 +#: ../../mod/editpost.php:105 ../../include/conversation.php:1247 msgid "Attach file" msgstr "" #: ../../mod/editpost.php:106 ../../mod/wallmessage.php:151 #: ../../mod/message.php:292 ../../mod/message.php:479 -#: ../../include/conversation.php:1219 +#: ../../include/conversation.php:1249 msgid "Insert web link" msgstr "" @@ -726,35 +726,35 @@ msgstr "" msgid "Insert Vorbis [.ogg] audio" msgstr "" -#: ../../mod/editpost.php:110 ../../include/conversation.php:1225 +#: ../../mod/editpost.php:110 ../../include/conversation.php:1255 msgid "Set your location" msgstr "" -#: ../../mod/editpost.php:111 ../../include/conversation.php:1227 +#: ../../mod/editpost.php:111 ../../include/conversation.php:1257 msgid "Clear browser location" msgstr "" -#: ../../mod/editpost.php:113 ../../include/conversation.php:1234 +#: ../../mod/editpost.php:113 ../../include/conversation.php:1264 msgid "Permission settings" msgstr "" -#: ../../mod/editpost.php:121 ../../include/conversation.php:1243 +#: ../../mod/editpost.php:121 ../../include/conversation.php:1273 msgid "CC: email addresses" msgstr "" -#: ../../mod/editpost.php:122 ../../include/conversation.php:1244 +#: ../../mod/editpost.php:122 ../../include/conversation.php:1274 msgid "Public post" msgstr "" -#: ../../mod/editpost.php:125 ../../include/conversation.php:1230 +#: ../../mod/editpost.php:125 ../../include/conversation.php:1260 msgid "Set title" msgstr "" -#: ../../mod/editpost.php:127 ../../include/conversation.php:1232 +#: ../../mod/editpost.php:127 ../../include/conversation.php:1262 msgid "Categories (comma-separated list)" msgstr "" -#: ../../mod/editpost.php:128 ../../include/conversation.php:1246 +#: ../../mod/editpost.php:128 ../../include/conversation.php:1276 msgid "Example: bob@example.com, mary@example.com" msgstr "" @@ -1296,31 +1296,31 @@ msgid "Group: " msgstr "" #: ../../mod/content.php:438 ../../mod/content.php:720 -#: ../../include/conversation.php:439 ../../include/conversation.php:846 +#: ../../include/conversation.php:439 ../../include/conversation.php:873 #: ../../object/Item.php:115 msgid "Select" msgstr "" #: ../../mod/content.php:455 ../../mod/content.php:813 -#: ../../mod/content.php:814 ../../include/conversation.php:627 -#: ../../include/conversation.php:628 ../../include/conversation.php:863 +#: ../../mod/content.php:814 ../../include/conversation.php:639 +#: ../../include/conversation.php:640 ../../include/conversation.php:890 #: ../../object/Item.php:206 ../../object/Item.php:207 #, php-format msgid "View %s's profile @ %s" msgstr "" #: ../../mod/content.php:465 ../../mod/content.php:825 -#: ../../include/conversation.php:641 ../../include/conversation.php:874 +#: ../../include/conversation.php:653 ../../include/conversation.php:904 #: ../../object/Item.php:219 #, php-format msgid "%s from %s" msgstr "" -#: ../../mod/content.php:480 ../../include/conversation.php:889 +#: ../../mod/content.php:480 ../../include/conversation.php:919 msgid "View in context" msgstr "" -#: ../../mod/content.php:586 ../../include/conversation.php:668 +#: ../../mod/content.php:586 ../../include/conversation.php:680 #: ../../object/Item.php:256 #, php-format msgid "%d comment" @@ -1330,92 +1330,92 @@ msgstr[1] "" #: ../../mod/content.php:587 ../../addon/page/page.php:76 #: ../../addon/page/page.php:110 ../../addon/showmore/showmore.php:119 -#: ../../include/contact_widgets.php:195 ../../include/conversation.php:669 +#: ../../include/contact_widgets.php:195 ../../include/conversation.php:681 #: ../../boot.php:575 ../../object/Item.php:257 msgid "show more" msgstr "" -#: ../../mod/content.php:665 ../../include/conversation.php:565 +#: ../../mod/content.php:665 ../../include/conversation.php:575 #: ../../object/Item.php:185 msgid "like" msgstr "" -#: ../../mod/content.php:666 ../../include/conversation.php:566 +#: ../../mod/content.php:666 ../../include/conversation.php:576 #: ../../object/Item.php:186 msgid "dislike" msgstr "" -#: ../../mod/content.php:668 ../../include/conversation.php:568 +#: ../../mod/content.php:668 ../../include/conversation.php:578 #: ../../object/Item.php:188 msgid "Share this" msgstr "" -#: ../../mod/content.php:668 ../../include/conversation.php:568 +#: ../../mod/content.php:668 ../../include/conversation.php:578 #: ../../object/Item.php:188 msgid "share" msgstr "" -#: ../../mod/content.php:692 ../../include/conversation.php:592 +#: ../../mod/content.php:692 ../../include/conversation.php:602 #: ../../object/Item.php:533 msgid "Bold" msgstr "" -#: ../../mod/content.php:693 ../../include/conversation.php:593 +#: ../../mod/content.php:693 ../../include/conversation.php:603 #: ../../object/Item.php:534 msgid "Italic" msgstr "" -#: ../../mod/content.php:694 ../../include/conversation.php:594 +#: ../../mod/content.php:694 ../../include/conversation.php:604 #: ../../object/Item.php:535 msgid "Underline" msgstr "" -#: ../../mod/content.php:695 ../../include/conversation.php:595 +#: ../../mod/content.php:695 ../../include/conversation.php:605 #: ../../object/Item.php:536 msgid "Quote" msgstr "" -#: ../../mod/content.php:696 ../../include/conversation.php:596 +#: ../../mod/content.php:696 ../../include/conversation.php:606 #: ../../object/Item.php:537 msgid "Code" msgstr "" -#: ../../mod/content.php:697 ../../include/conversation.php:597 +#: ../../mod/content.php:697 ../../include/conversation.php:607 #: ../../object/Item.php:538 msgid "Image" msgstr "" -#: ../../mod/content.php:698 ../../include/conversation.php:598 +#: ../../mod/content.php:698 ../../include/conversation.php:608 #: ../../object/Item.php:539 msgid "Link" msgstr "" -#: ../../mod/content.php:699 ../../include/conversation.php:599 +#: ../../mod/content.php:699 ../../include/conversation.php:609 #: ../../object/Item.php:540 msgid "Video" msgstr "" -#: ../../mod/content.php:733 ../../include/conversation.php:529 +#: ../../mod/content.php:733 ../../include/conversation.php:539 #: ../../object/Item.php:169 msgid "add star" msgstr "" -#: ../../mod/content.php:734 ../../include/conversation.php:530 +#: ../../mod/content.php:734 ../../include/conversation.php:540 #: ../../object/Item.php:170 msgid "remove star" msgstr "" -#: ../../mod/content.php:735 ../../include/conversation.php:531 +#: ../../mod/content.php:735 ../../include/conversation.php:541 #: ../../object/Item.php:171 msgid "toggle star status" msgstr "" -#: ../../mod/content.php:738 ../../include/conversation.php:534 +#: ../../mod/content.php:738 ../../include/conversation.php:544 #: ../../object/Item.php:174 msgid "starred" msgstr "" -#: ../../mod/content.php:739 ../../include/conversation.php:535 +#: ../../mod/content.php:739 ../../include/conversation.php:545 #: ../../object/Item.php:175 msgid "add tag" msgstr "" @@ -1425,17 +1425,17 @@ msgstr "" msgid "save to folder" msgstr "" -#: ../../mod/content.php:815 ../../include/conversation.php:629 +#: ../../mod/content.php:815 ../../include/conversation.php:641 #: ../../object/Item.php:208 msgid "to" msgstr "" -#: ../../mod/content.php:816 ../../include/conversation.php:630 +#: ../../mod/content.php:816 ../../include/conversation.php:642 #: ../../object/Item.php:209 msgid "Wall-to-Wall" msgstr "" -#: ../../mod/content.php:817 ../../include/conversation.php:631 +#: ../../mod/content.php:817 ../../include/conversation.php:643 #: ../../object/Item.php:210 msgid "via Wall-To-Wall:" msgstr "" @@ -2642,7 +2642,7 @@ msgstr "" msgid "Invalid contact." msgstr "" -#: ../../mod/notes.php:44 ../../boot.php:1690 +#: ../../mod/notes.php:44 ../../boot.php:1696 msgid "Personal Notes" msgstr "" @@ -2686,7 +2686,7 @@ msgstr "" #: ../../mod/wallmessage.php:123 ../../mod/wallmessage.php:131 #: ../../mod/message.php:242 ../../mod/message.php:250 -#: ../../include/conversation.php:1151 ../../include/conversation.php:1168 +#: ../../include/conversation.php:1181 ../../include/conversation.php:1198 msgid "Please enter a link URL:" msgstr "" @@ -2769,7 +2769,7 @@ msgstr "" #: ../../mod/newmember.php:32 ../../mod/profperm.php:103 #: ../../view/theme/diabook/theme.php:128 ../../include/profile_advanced.php:7 #: ../../include/profile_advanced.php:84 ../../include/nav.php:50 -#: ../../boot.php:1666 +#: ../../boot.php:1672 msgid "Profile" msgstr "" @@ -3121,7 +3121,7 @@ msgid "Access denied." msgstr "" #: ../../mod/fbrowser.php:25 ../../view/theme/diabook/theme.php:130 -#: ../../include/nav.php:51 ../../boot.php:1673 +#: ../../include/nav.php:51 ../../boot.php:1679 msgid "Photos" msgstr "" @@ -3635,13 +3635,13 @@ msgid "Allow infinite level threading for items on this site." msgstr "" #: ../../mod/admin.php:470 -msgid "No default permissions for new users" +msgid "Private posts by default for new users" msgstr "" #: ../../mod/admin.php:470 msgid "" -"New users will have no private permissions set for their posts by default, " -"making their posts public until they change it." +"Set default post permissions for all new members to the default privacy " +"group rather than public." msgstr "" #: ../../mod/admin.php:472 @@ -4407,8 +4407,8 @@ msgstr "" msgid "Edit visibility" msgstr "" -#: ../../mod/filer.php:29 ../../include/conversation.php:1155 -#: ../../include/conversation.php:1172 +#: ../../mod/filer.php:29 ../../include/conversation.php:1185 +#: ../../include/conversation.php:1202 msgid "Save to Folder:" msgstr "" @@ -7480,7 +7480,7 @@ msgid "Sex Addict" msgstr "" #: ../../include/profile_selectors.php:42 ../../include/user.php:278 -#: ../../include/user.php:283 +#: ../../include/user.php:282 msgid "Friends" msgstr "" @@ -7902,7 +7902,7 @@ msgstr "" msgid "End this session" msgstr "" -#: ../../include/nav.php:49 ../../boot.php:1659 +#: ../../include/nav.php:49 ../../boot.php:1665 msgid "Status" msgstr "" @@ -8513,34 +8513,34 @@ msgstr "" msgid "stopped following" msgstr "" -#: ../../include/Contact.php:220 ../../include/conversation.php:1052 +#: ../../include/Contact.php:220 ../../include/conversation.php:1082 msgid "Poke" msgstr "" -#: ../../include/Contact.php:221 ../../include/conversation.php:1046 +#: ../../include/Contact.php:221 ../../include/conversation.php:1076 msgid "View Status" msgstr "" -#: ../../include/Contact.php:222 ../../include/conversation.php:1047 +#: ../../include/Contact.php:222 ../../include/conversation.php:1077 msgid "View Profile" msgstr "" -#: ../../include/Contact.php:223 ../../include/conversation.php:1048 +#: ../../include/Contact.php:223 ../../include/conversation.php:1078 msgid "View Photos" msgstr "" #: ../../include/Contact.php:224 ../../include/Contact.php:237 -#: ../../include/conversation.php:1049 +#: ../../include/conversation.php:1079 msgid "Network Posts" msgstr "" #: ../../include/Contact.php:225 ../../include/Contact.php:237 -#: ../../include/conversation.php:1050 +#: ../../include/conversation.php:1080 msgid "Edit Contact" msgstr "" #: ../../include/Contact.php:226 ../../include/Contact.php:237 -#: ../../include/conversation.php:1051 +#: ../../include/conversation.php:1081 msgid "Send PM" msgstr "" @@ -8558,106 +8558,106 @@ msgstr "" msgid "%1$s marked %2$s's %3$s as favorite" msgstr "" -#: ../../include/conversation.php:952 +#: ../../include/conversation.php:982 msgid "Delete Selected Items" msgstr "" -#: ../../include/conversation.php:1110 +#: ../../include/conversation.php:1140 #, php-format msgid "%s likes this." msgstr "" -#: ../../include/conversation.php:1110 +#: ../../include/conversation.php:1140 #, php-format msgid "%s doesn't like this." msgstr "" -#: ../../include/conversation.php:1114 +#: ../../include/conversation.php:1144 #, php-format msgid "%2$d people like this." msgstr "" -#: ../../include/conversation.php:1116 +#: ../../include/conversation.php:1146 #, php-format msgid "%2$d people don't like this." msgstr "" -#: ../../include/conversation.php:1122 +#: ../../include/conversation.php:1152 msgid "and" msgstr "" -#: ../../include/conversation.php:1125 +#: ../../include/conversation.php:1155 #, php-format msgid ", and %d other people" msgstr "" -#: ../../include/conversation.php:1126 +#: ../../include/conversation.php:1156 #, php-format msgid "%s like this." msgstr "" -#: ../../include/conversation.php:1126 +#: ../../include/conversation.php:1156 #, php-format msgid "%s don't like this." msgstr "" -#: ../../include/conversation.php:1150 ../../include/conversation.php:1167 +#: ../../include/conversation.php:1180 ../../include/conversation.php:1197 msgid "Visible to everybody" msgstr "" -#: ../../include/conversation.php:1152 ../../include/conversation.php:1169 +#: ../../include/conversation.php:1182 ../../include/conversation.php:1199 msgid "Please enter a video link/URL:" msgstr "" -#: ../../include/conversation.php:1153 ../../include/conversation.php:1170 +#: ../../include/conversation.php:1183 ../../include/conversation.php:1200 msgid "Please enter an audio link/URL:" msgstr "" -#: ../../include/conversation.php:1154 ../../include/conversation.php:1171 +#: ../../include/conversation.php:1184 ../../include/conversation.php:1201 msgid "Tag term:" msgstr "" -#: ../../include/conversation.php:1156 ../../include/conversation.php:1173 +#: ../../include/conversation.php:1186 ../../include/conversation.php:1203 msgid "Where are you right now?" msgstr "" -#: ../../include/conversation.php:1216 +#: ../../include/conversation.php:1246 msgid "upload photo" msgstr "" -#: ../../include/conversation.php:1218 +#: ../../include/conversation.php:1248 msgid "attach file" msgstr "" -#: ../../include/conversation.php:1220 +#: ../../include/conversation.php:1250 msgid "web link" msgstr "" -#: ../../include/conversation.php:1221 +#: ../../include/conversation.php:1251 msgid "Insert video link" msgstr "" -#: ../../include/conversation.php:1222 +#: ../../include/conversation.php:1252 msgid "video link" msgstr "" -#: ../../include/conversation.php:1223 +#: ../../include/conversation.php:1253 msgid "Insert audio link" msgstr "" -#: ../../include/conversation.php:1224 +#: ../../include/conversation.php:1254 msgid "audio link" msgstr "" -#: ../../include/conversation.php:1226 +#: ../../include/conversation.php:1256 msgid "set location" msgstr "" -#: ../../include/conversation.php:1228 +#: ../../include/conversation.php:1258 msgid "clear location" msgstr "" -#: ../../include/conversation.php:1235 +#: ../../include/conversation.php:1265 msgid "permissions" msgstr "" @@ -8755,18 +8755,18 @@ msgstr "" msgid "Events this week:" msgstr "" -#: ../../boot.php:1662 +#: ../../boot.php:1668 msgid "Status Messages and Posts" msgstr "" -#: ../../boot.php:1669 +#: ../../boot.php:1675 msgid "Profile Details" msgstr "" -#: ../../boot.php:1686 +#: ../../boot.php:1692 msgid "Events and Calendar" msgstr "" -#: ../../boot.php:1693 +#: ../../boot.php:1699 msgid "Only You Can See This" msgstr "" From 2abbd1dc19680fcfc00c841b6a73a97a297055b9 Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 15 Sep 2012 20:21:17 -0700 Subject: [PATCH 612/644] permissions selector showing up for guests, testbubble and smoothly --- include/Photo.php | 2 +- view/theme/smoothly/jot.tpl | 2 +- view/theme/testbubble/jot.tpl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/Photo.php b/include/Photo.php index 8e4eb84bdb..00c424c64c 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -663,7 +663,7 @@ function import_profile_photo($photo,$uid,$cid) { intval($uid), intval($cid) ); - if(count($r)) { + if(count($r) && strlen($r[0]['resource-id'])) { $hash = $r[0]['resource-id']; } else { diff --git a/view/theme/smoothly/jot.tpl b/view/theme/smoothly/jot.tpl index 5f711cf242..2f52643f0c 100644 --- a/view/theme/smoothly/jot.tpl +++ b/view/theme/smoothly/jot.tpl @@ -47,7 +47,7 @@