From 7f927856071799039923e9e1f00652819792987a Mon Sep 17 00:00:00 2001
From: paul <paul@plutz.net>
Date: Thu, 28 Nov 2013 03:50:44 +0000
Subject: [PATCH] improved visual style

svn path=/trunk/; revision=22
---
 export.sh                   |   9 +++
 index.cgi                   |   8 +-
 pages/attendees.sh          |   2 +-
 templates/attendees.css.sh  |  71 +++++++++++-------
 templates/attendees.html.sh |   1 -
 templates/text_attendee.sh  |   2 +
 templates/view_attendee.sh  | 142 +++++++++++++++++++++++++-----------
 7 files changed, 160 insertions(+), 75 deletions(-)
 create mode 100755 export.sh

diff --git a/export.sh b/export.sh
new file mode 100755
index 0000000..aa8570a
--- /dev/null
+++ b/export.sh
@@ -0,0 +1,9 @@
+#!/bin/zsh
+
+case "$_GET[\"export\"]" in
+  vcard)
+    echo -n "Content-Type: text/vcard;charset=utf-8\n\n"
+    card="$_GET[\"card\"]"
+    cat "$_DATA/vcard/$card"
+  ;;
+esac
diff --git a/index.cgi b/index.cgi
index 6bd36d5..a7edbb1 100755
--- a/index.cgi
+++ b/index.cgi
@@ -46,4 +46,10 @@ cgi_get
 
 . "$_EXEC/constants.sh"
 
-[ -n "$_GET[\"action\"]" ] && . "$_EXEC/action.sh" || . "$_EXEC/page.sh"
+if [ -n "$_GET[\"action\"]" ]; then
+  . "$_EXEC/action.sh"
+elif [ -n "$_GET[\"export\"]" ]; then
+  . "$_EXEC/export.sh"
+else
+  . "$_EXEC/page.sh"
+fi
diff --git a/pages/attendees.sh b/pages/attendees.sh
index aecc95d..00bbd43 100755
--- a/pages/attendees.sh
+++ b/pages/attendees.sh
@@ -124,7 +124,7 @@ vcf_parse() {
 	;;
       *)
         [ -n "$n" ] && fn="$n"
-	[ -n "$fn" -a -n "$nick" ] && fn="$fn aka. $nick"
+	#[ -n "$fn" -a -n "$nick" ] && fn="$fn aka. $nick"
 	[ -n "$fn" ] && echo -E "003 FN:$fn" \
 	 	      || echo -E "003 FN:$nick"
 	echo -E "$line"
diff --git a/templates/attendees.css.sh b/templates/attendees.css.sh
index c024559..126a952 100644
--- a/templates/attendees.css.sh
+++ b/templates/attendees.css.sh
@@ -6,48 +6,63 @@ cat <<EOF
 #cardlist {}
 
 .cardlist .card {
-  margin: 4px 10%;
+  margin: 4px 5%;
   border-width: 1px;
   border-style: solid;
-  padding: .5em 1em 1em 120px;
+  padding: 0;
   overflow: auto;
-  min-height: 160px;
+  width:130ex;
   display: block;
 }
 
-.cardlist .card .PHOTO {
-  float: left;
-  position: relative;
-  left: -110px;
-  border-width: 1px;
-  border-style: solid;
-  padding: 1px;
-  margin: 1em -110px 1em .5em;
-  width: 96px;
-  max-height: 144px;
+.cardlist .card .section {
+  float:left;
+  display: inline-block;
+  width: 20ex;
+  margin: .125em .5ex .5ex .5ex;
+  background: #EEE;
+  padding: 0 .2em .2em .2em;
+}
+.cardlist .card .control {
+  float: right;
+  background: #EEF;
+  text-align: right;
+  margin-right: 0;
+}
+.cardlist .card .control .item {
+  margin-right: 1ex;
+  border-style: solid double solid solid;
+  border-width: 1px 3px 1px 1px;
+  background: #FFF;
+  padding: .1em 1ex;
+  min-width: 10ex;
+  margin-top: .2em;
+  border-color: #000;
 }
- 
-.cardlist .card .item {
+.cardlist .card .control .item:hover{
+  border-width: 1px 1px 1px 1px;
+}
+
+.cardlist .card .section .sectitle {
   display: block;
-  white-space: nowrap;
-  height: 1.2em;
+  font-weight: bold;
+  margin: .2em .2em .2em .2em;
 }
 
-.cardlist .card .KEY {
-  display: inline;
-  margin: 0px;
-  font: normal bold 1em sans-serif;
+.cardlist .card .section .item {
+  max-width: 20ex;
+  display: block;
+  word-wrap: break-word;
 }
 
-.cardlist .card .VALUE {
-  display: inline;
-  margin: 0px;
-  font: normal normal 1em sans-serif;
+.cardlist .card .section .PHOTO {
+  width: 20ex;
+  max-heigth: 30ex;
 }
 
-.cardlist .card .FN {
-  margin: .25em .5em 1em 0px;
-  font: normal bold 2em sans-serif;
+.cardlist .card .section .FN {
+  font-weight: bold;
+  font-size: 1.2em;
 }
 
 EOF
diff --git a/templates/attendees.html.sh b/templates/attendees.html.sh
index c4430a7..337de10 100644
--- a/templates/attendees.html.sh
+++ b/templates/attendees.html.sh
@@ -55,7 +55,6 @@ $(listcards |while read card; do
 x_EOF
   else cat <<x_EOF
   <div id="${id}" class="card">
-    <p class="control"><a href="?page=attendees&edit=${id}#${id}">$(l10n edit)</a></p>
     $(view_attendee "$id")
   </div>
 x_EOF
diff --git a/templates/text_attendee.sh b/templates/text_attendee.sh
index 509fb47..1942b9f 100755
--- a/templates/text_attendee.sh
+++ b/templates/text_attendee.sh
@@ -51,6 +51,8 @@ item_name[VERSION]=""
 item_name[XML]=""
 
 item_name[edit]="Bearbeiten"
+item_name[vcf_export]="Vcard Exportieren"
+item_name[control]="Aktionen"
 item_name[edit_update]="Daten Übernehmen"
 item_name[edit_cancel]="Abbrechen"
 item_name[edit_addfieldtext]="Feld hinzufügen"
diff --git a/templates/view_attendee.sh b/templates/view_attendee.sh
index a96444a..c8a80fb 100755
--- a/templates/view_attendee.sh
+++ b/templates/view_attendee.sh
@@ -1,49 +1,103 @@
-view_card_item() {
-  case "$key" in
-    BEGIN|VERSION|END|N|NICKNAME);;
-    PHOTO)
-      echo "<img class=\"PHOTO\" src=\"data:image/$tag[TYPE];base64,$value\"/>"
-      ;;
-    FN)
-      echo "<h2 CLASS=\"FN\">$value</h2>"
-      ;;
-    *)
-      echo -n "<span class=\"item\"><span class=\"KEY $key\">$(l10n "$key")"
-      [ -n "$tag[TYPE]" ] && echo -n "($tag[TYPE])"
-      echo ":</span>"
-      ;|
-    EMAIL)
-      echo "<a href=\"mailto:$value\" class=\"VALUE $key\">$value</a></span>"
-      ;;
-    IMPP)
-      echo "<a href=\"$value\" class=\"VALUE $key\">"$(echo "$value" |cut -d: -f2-)"</a></span>"
-      ;;
-    *)
-      echo "<span class=\"VALUE $key\">$value</span></span>"
-      ;;
-  esac
+print_card() {
+  echo '  <div class="section basic">'
+  echo '    <span class="item FN">'$values[FN]'</span>'
+  [ -n "$value[GENDER]" ] && \
+    echo '    <span class="item GENDER">'$(l10n $values[GENDER])'</span>'
+  for n in NICKNAME NICKNAME{0..10}; do [ -n "$values[$n]" ] &&\
+    echo '    <span class="item NICKNAME">aka. '$values[$n]'</span>'
+  done
+  [ -n "$values[BDAY]" ] &&\
+    echo '    <span class="item BDAY"><b>*:</b> '$values[BDAY]'</span>'
+  if [ -n "$values[SOUND]" ]; then
+    echo '    <audio controls="controls" class="item SOUND">'
+    echo '      <source type="audio/ogg" src="data:audio/ogg;base64,'$values[SOUND]'" />'
+    echo '    </audio>'
+  fi
+  [ -n "$values[PHOTO]" ] &&\
+    echo '    <img class="item PHOTO" src="data:image/'$tags[PHOTO_TYPE]';base64,'$values[PHOTO]'" />'
+  [ -n "$values[LOGO]" ] &&\
+    echo '    <img class="item LOGO" src="data:image/'$tags[LOGO_TYPE]';base64,'$values[LOGO]'" />'
+  echo '  </div>'
+  echo ''
+  echo '  <div class="section phone">'
+  echo '    <span class="sectitle">'$(l10n TEL)'</span>'
+  for n in TEL TEL{0..10}; do [ -n "$values[$n]" ] &&\
+    echo '    <span class="item TEL">'$tags[${n}_TYPE]' '$values[$n]'</span>'
+  done
+  echo '  </div>'
+  echo ''
+  echo '  <div class="section message">'
+  echo '    <span class="sectitle">'$(l10n EMAIL)'</span>'
+  for n in EMAIL EMAIL{0..10}; do [ -n "$values[$n]" ] &&\
+    echo '    <span class="item EMAIL"><a href="mailto:'$values[$n]'">'$values[$n]'</a></span>'
+  done
+  [ -n "$values[IMPP]" ] && \
+    echo '    <span class="sectitle">'$(l10n IMPP)'</span>'
+  for n in IMPP IMPP{0..10}; do [ -n "$values[$n]" ] &&\
+    echo '    <span class="item IMPP">'$tags[${n}_TYPE]' <a href="'$values[$n]'">'$values[$n]'</a></span>'
+  done
+  echo '  </div>'
+  echo ''
+  echo '  <div class="section address">'
+  echo '    <span class="sectitle">'$(l10n ADR)'</span>'
+  for n in ADR ADR{0..10}; do [ -n "$values[$n]" ] &&\
+    echo '    <span class="item ADR">'$values[$n]'</span>'
+  done
+  [ -n "$values[URL]" ] && \
+    echo '    <span class="sectitle">'$(l10n URL)'</span>'
+  for n in URL URL{0..10}; do [ -n "$values[$n]" ] &&\
+    echo '    <span class="item URL"><a href="'$values[$n]'">'$values[$n]'</a></span>'
+  done
+  echo '  </div>'
+  echo ''
+  echo '  <div class="section note">'
+  echo '    <span class="sectitle">'$(l10n NOTE)'</span>'
+  for n in NOTE NOTE{0..10}; do [ -n "$values[$n]" ] &&\
+    echo '    <span class="item IMPP">'$values[$n]'</span>'
+  done
+  echo '  </div>'
+  echo ''
+  echo '  <div class="section control">'
+  echo '    <a class="item control" href="?page=attendees&edit='${id}'#'${id}'">'$(l10n edit)'</a>'
+  echo '    <a class="item control" href="?export=vcard&card='${id}'">'$(l10n vcf_export)'</a>'
+  echo '  </div>'
 }
 
 view_attendee() {  #Parameter: Cardfile
-  cardfile="vcard/$1"
-  cachefile="cache/${1}.cache"
+  id="$1"
+  cardfile="vcard/$id"
+  cachefile="cache/${id}.cache"
   unset key
-  [ "$cachefile" -nt "$cardfile" ] && cat "$cachefile" \
-  || vcf_parse "$cardfile" |while read -r line; do
-    declare -A tag
-    case "$line" in
-      value*) eval "$line";;
-      tag*)   eval "$line";;
-      key*)
-        if [ -z "$key" ]; then
-          eval "$line"
-        else
-          view_card_item
-          eval "$line"
-	  unset value
-	  unset tag
-        fi
-      ;;
-    esac
-  done |tee "$cachefile"
+  if [ "$cachefile" -nt "$cardfile" ]; then
+    cat "$cachefile"
+  else
+    declare -A tags
+    declare -A values
+    vcf_parse "$cardfile" |while read -r line; do
+      declare -A tag
+      case "$line" in
+        value*) eval "$line";;
+        tag*)   eval "$line";;
+        key*)
+          if [ -z "$key" ]; then
+            eval "$line"
+          else
+	    values[$key]="$value"
+	    for t in ${(k)tag}; do
+	      tags[${key}_$t]="$tag[$t]"
+            done
+            eval "$line"
+	    if [ -n "$values[$key]" ]; then
+	      n=0
+	      while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
+	      key=$key$n
+	    fi
+  	    unset value
+  	    unset tag
+          fi
+        ;;
+      esac
+    done
+    print_card |tee "$cachefile"
+  fi
 }
-- 
2.39.5