[ckan-changes] commit/ckan: 37 new changesets

Bitbucket commits-noreply at bitbucket.org
Sun Sep 4 12:48:15 UTC 2011


37 new changesets in ckan:

http://bitbucket.org/okfn/ckan/changeset/375c05149ced/
changeset:   375c05149ced
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-01 14:50:35
summary:     [theme][m]: First pass on merge from datahub theme into core.
affected #:  23 files (60.1 KB)

--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/blueprint/ie.css	Thu Sep 01 13:50:35 2011 +0100
@@ -0,0 +1,36 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* ie.css */
+body {text-align:center;}
+.container {text-align:left;}
+* html .column, * html .span-1, * html .span-2, * html .span-3, * html .span-4, * html .span-5, * html .span-6, * html .span-7, * html .span-8, * html .span-9, * html .span-10, * html .span-11, * html .span-12, * html .span-13, * html .span-14, * html .span-15, * html .span-16, * html .span-17, * html .span-18, * html .span-19, * html .span-20, * html .span-21, * html .span-22, * html .span-23, * html .span-24 {display:inline;overflow-x:hidden;}
+* html legend {margin:0px -8px 16px 0;padding:0;}
+sup {vertical-align:text-top;}
+sub {vertical-align:text-bottom;}
+html>body p code {*white-space:normal;}
+hr {margin:-8px auto 11px;}
+img {-ms-interpolation-mode:bicubic;}
+.clearfix, .container {display:inline-block;}
+* html .clearfix, * html .container {height:1%;}
+fieldset {padding-top:0;}
+legend {margin-top:-0.2em;margin-bottom:1em;margin-left:-0.5em;}
+textarea {overflow:auto;}
+label {vertical-align:middle;position:relative;top:-0.25em;}
+input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;}
+input.text:focus, input.title:focus {border-color:#666;}
+input.text, input.title, textarea, select {margin:0.5em 0;}
+input.checkbox, input.radio {position:relative;top:.25em;}
+form.inline div, form.inline p {vertical-align:middle;}
+form.inline input.checkbox, form.inline input.radio, form.inline input.button, form.inline button {margin:0.5em 0;}
+button, input.button {position:relative;top:0.25em;}
\ No newline at end of file


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/blueprint/print.css	Thu Sep 01 13:50:35 2011 +0100
@@ -0,0 +1,29 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* print.css */
+body {line-height:1.5;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;color:#000;background:none;font-size:10pt;}
+.container {background:none;}
+hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;}
+hr.space {background:#fff;color:#fff;visibility:hidden;}
+h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;}
+code {font:.9em "Courier New", Monaco, Courier, monospace;}
+a img {border:none;}
+p img.top {margin-top:0;}
+blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;}
+.small {font-size:.9em;}
+.large {font-size:1.1em;}
+.quiet {color:#999;}
+.hide {display:none;}
+a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;}
+a:link:after, a:visited:after {content:" (" attr(href) ")";font-size:90%;}
\ No newline at end of file


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/blueprint/screen.css	Thu Sep 01 13:50:35 2011 +0100
@@ -0,0 +1,265 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* reset.css */
+html {margin:0;padding:0;border:0;}
+body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}
+article, aside, details, figcaption, figure, dialog, footer, header, hgroup, menu, nav, section {display:block;}
+body {line-height:1.5;background:white;}
+table {border-collapse:separate;border-spacing:0;}
+caption, th, td {text-align:left;font-weight:normal;float:none !important;}
+table, th, td {vertical-align:middle;}
+blockquote:before, blockquote:after, q:before, q:after {content:'';}
+blockquote, q {quotes:"" "";}
+a img {border:none;}
+:focus {outline:0;}
+
+/* typography.css */
+html {font-size:100.01%;}
+body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
+h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
+h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
+h2 {font-size:2em;margin-bottom:0.75em;}
+h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
+h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
+h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
+h6 {font-size:1em;font-weight:bold;}
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
+p {margin:0 0 1.5em;}
+.left {float:left !important;}
+p .left {margin:1.5em 1.5em 1.5em 0;padding:0;}
+.right {float:right !important;}
+p .right {margin:1.5em 0 1.5em 1.5em;padding:0;}
+a:focus, a:hover {color:#09f;}
+a {color:#06c;text-decoration:underline;}
+blockquote {margin:1.5em;color:#666;font-style:italic;}
+strong, dfn {font-weight:bold;}
+em, dfn {font-style:italic;}
+sup, sub {line-height:0;}
+abbr, acronym {border-bottom:1px dotted #666;}
+address {margin:0 0 1.5em;font-style:italic;}
+del {color:#666;}
+pre {margin:1.5em 0;white-space:pre;}
+pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
+li ul, li ol {margin:0;}
+ul, ol {margin:0 1.5em 1.5em 0;padding-left:1.5em;}
+ul {list-style-type:disc;}
+ol {list-style-type:decimal;}
+dl {margin:0 0 1.5em 0;}
+dl dt {font-weight:bold;}
+dd {margin-left:1.5em;}
+table {margin-bottom:1.4em;width:100%;}
+th {font-weight:bold;}
+thead th {background:#c3d9ff;}
+th, td, caption {padding:4px 10px 4px 5px;}
+tbody tr:nth-child(even) td, tbody tr.even td {background:#e5ecf9;}
+tfoot {font-style:italic;}
+caption {background:#eee;}
+.small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
+.large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
+.hide {display:none;}
+.quiet {color:#666;}
+.loud {color:#000;}
+.highlight {background:#ff0;}
+.added {background:#060;color:#fff;}
+.removed {background:#900;color:#fff;}
+.first {margin-left:0;padding-left:0;}
+.last {margin-right:0;padding-right:0;}
+.top {margin-top:0;padding-top:0;}
+.bottom {margin-bottom:0;padding-bottom:0;}
+
+/* forms.css */
+label {font-weight:bold;}
+fieldset {padding:0 1.4em 1.4em 1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
+legend {font-weight:bold;font-size:1.2em;margin-top:-0.2em;margin-bottom:1em;}
+fieldset, #IE8#HACK {padding-top:1.4em;}
+legend, #IE8#HACK {margin-top:0;margin-bottom:0;}
+input[type=text], input[type=password], input[type=url], input[type=email], input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;color:#000;}
+input[type=text]:focus, input[type=password]:focus, input[type=url]:focus, input[type=email]:focus, input.text:focus, input.title:focus, textarea:focus {border-color:#666;}
+select {background-color:#fff;border-width:1px;border-style:solid;}
+input[type=text], input[type=password], input[type=url], input[type=email], input.text, input.title, textarea, select {margin:0.5em 0;}
+input.text, input.title {width:300px;padding:5px;}
+input.title {font-size:1.5em;}
+textarea {width:390px;height:250px;padding:5px;}
+form.inline {line-height:3;}
+form.inline p {margin-bottom:0;}
+.error, .alert, .notice, .success, .info {padding:0.8em;margin-bottom:1em;border:2px solid #ddd;}
+.error, .alert {background:#fbe3e4;color:#8a1f11;border-color:#fbc2c4;}
+.notice {background:#fff6bf;color:#514721;border-color:#ffd324;}
+.success {background:#e6efc2;color:#264409;border-color:#c6d880;}
+.info {background:#d5edf8;color:#205791;border-color:#92cae4;}
+.error a, .alert a {color:#8a1f11;}
+.notice a {color:#514721;}
+.success a {color:#264409;}
+.info a {color:#205791;}
+
+/* grid.css */
+.container {width:950px;margin:0 auto;}
+.showgrid {background:url(src/grid.png);}
+.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 {float:left;margin-right:10px;}
+.last {margin-right:0;}
+.span-1 {width:30px;}
+.span-2 {width:70px;}
+.span-3 {width:110px;}
+.span-4 {width:150px;}
+.span-5 {width:190px;}
+.span-6 {width:230px;}
+.span-7 {width:270px;}
+.span-8 {width:310px;}
+.span-9 {width:350px;}
+.span-10 {width:390px;}
+.span-11 {width:430px;}
+.span-12 {width:470px;}
+.span-13 {width:510px;}
+.span-14 {width:550px;}
+.span-15 {width:590px;}
+.span-16 {width:630px;}
+.span-17 {width:670px;}
+.span-18 {width:710px;}
+.span-19 {width:750px;}
+.span-20 {width:790px;}
+.span-21 {width:830px;}
+.span-22 {width:870px;}
+.span-23 {width:910px;}
+.span-24 {width:950px;margin-right:0;}
+input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 {border-left-width:1px;border-right-width:1px;padding-left:5px;padding-right:5px;}
+input.span-1, textarea.span-1 {width:18px;}
+input.span-2, textarea.span-2 {width:58px;}
+input.span-3, textarea.span-3 {width:98px;}
+input.span-4, textarea.span-4 {width:138px;}
+input.span-5, textarea.span-5 {width:178px;}
+input.span-6, textarea.span-6 {width:218px;}
+input.span-7, textarea.span-7 {width:258px;}
+input.span-8, textarea.span-8 {width:298px;}
+input.span-9, textarea.span-9 {width:338px;}
+input.span-10, textarea.span-10 {width:378px;}
+input.span-11, textarea.span-11 {width:418px;}
+input.span-12, textarea.span-12 {width:458px;}
+input.span-13, textarea.span-13 {width:498px;}
+input.span-14, textarea.span-14 {width:538px;}
+input.span-15, textarea.span-15 {width:578px;}
+input.span-16, textarea.span-16 {width:618px;}
+input.span-17, textarea.span-17 {width:658px;}
+input.span-18, textarea.span-18 {width:698px;}
+input.span-19, textarea.span-19 {width:738px;}
+input.span-20, textarea.span-20 {width:778px;}
+input.span-21, textarea.span-21 {width:818px;}
+input.span-22, textarea.span-22 {width:858px;}
+input.span-23, textarea.span-23 {width:898px;}
+input.span-24, textarea.span-24 {width:938px;}
+.append-1 {padding-right:40px;}
+.append-2 {padding-right:80px;}
+.append-3 {padding-right:120px;}
+.append-4 {padding-right:160px;}
+.append-5 {padding-right:200px;}
+.append-6 {padding-right:240px;}
+.append-7 {padding-right:280px;}
+.append-8 {padding-right:320px;}
+.append-9 {padding-right:360px;}
+.append-10 {padding-right:400px;}
+.append-11 {padding-right:440px;}
+.append-12 {padding-right:480px;}
+.append-13 {padding-right:520px;}
+.append-14 {padding-right:560px;}
+.append-15 {padding-right:600px;}
+.append-16 {padding-right:640px;}
+.append-17 {padding-right:680px;}
+.append-18 {padding-right:720px;}
+.append-19 {padding-right:760px;}
+.append-20 {padding-right:800px;}
+.append-21 {padding-right:840px;}
+.append-22 {padding-right:880px;}
+.append-23 {padding-right:920px;}
+.prepend-1 {padding-left:40px;}
+.prepend-2 {padding-left:80px;}
+.prepend-3 {padding-left:120px;}
+.prepend-4 {padding-left:160px;}
+.prepend-5 {padding-left:200px;}
+.prepend-6 {padding-left:240px;}
+.prepend-7 {padding-left:280px;}
+.prepend-8 {padding-left:320px;}
+.prepend-9 {padding-left:360px;}
+.prepend-10 {padding-left:400px;}
+.prepend-11 {padding-left:440px;}
+.prepend-12 {padding-left:480px;}
+.prepend-13 {padding-left:520px;}
+.prepend-14 {padding-left:560px;}
+.prepend-15 {padding-left:600px;}
+.prepend-16 {padding-left:640px;}
+.prepend-17 {padding-left:680px;}
+.prepend-18 {padding-left:720px;}
+.prepend-19 {padding-left:760px;}
+.prepend-20 {padding-left:800px;}
+.prepend-21 {padding-left:840px;}
+.prepend-22 {padding-left:880px;}
+.prepend-23 {padding-left:920px;}
+.border {padding-right:4px;margin-right:5px;border-right:1px solid #ddd;}
+.colborder {padding-right:24px;margin-right:25px;border-right:1px solid #ddd;}
+.pull-1 {margin-left:-40px;}
+.pull-2 {margin-left:-80px;}
+.pull-3 {margin-left:-120px;}
+.pull-4 {margin-left:-160px;}
+.pull-5 {margin-left:-200px;}
+.pull-6 {margin-left:-240px;}
+.pull-7 {margin-left:-280px;}
+.pull-8 {margin-left:-320px;}
+.pull-9 {margin-left:-360px;}
+.pull-10 {margin-left:-400px;}
+.pull-11 {margin-left:-440px;}
+.pull-12 {margin-left:-480px;}
+.pull-13 {margin-left:-520px;}
+.pull-14 {margin-left:-560px;}
+.pull-15 {margin-left:-600px;}
+.pull-16 {margin-left:-640px;}
+.pull-17 {margin-left:-680px;}
+.pull-18 {margin-left:-720px;}
+.pull-19 {margin-left:-760px;}
+.pull-20 {margin-left:-800px;}
+.pull-21 {margin-left:-840px;}
+.pull-22 {margin-left:-880px;}
+.pull-23 {margin-left:-920px;}
+.pull-24 {margin-left:-960px;}
+.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float:left;position:relative;}
+.push-1 {margin:0 -40px 1.5em 40px;}
+.push-2 {margin:0 -80px 1.5em 80px;}
+.push-3 {margin:0 -120px 1.5em 120px;}
+.push-4 {margin:0 -160px 1.5em 160px;}
+.push-5 {margin:0 -200px 1.5em 200px;}
+.push-6 {margin:0 -240px 1.5em 240px;}
+.push-7 {margin:0 -280px 1.5em 280px;}
+.push-8 {margin:0 -320px 1.5em 320px;}
+.push-9 {margin:0 -360px 1.5em 360px;}
+.push-10 {margin:0 -400px 1.5em 400px;}
+.push-11 {margin:0 -440px 1.5em 440px;}
+.push-12 {margin:0 -480px 1.5em 480px;}
+.push-13 {margin:0 -520px 1.5em 520px;}
+.push-14 {margin:0 -560px 1.5em 560px;}
+.push-15 {margin:0 -600px 1.5em 600px;}
+.push-16 {margin:0 -640px 1.5em 640px;}
+.push-17 {margin:0 -680px 1.5em 680px;}
+.push-18 {margin:0 -720px 1.5em 720px;}
+.push-19 {margin:0 -760px 1.5em 760px;}
+.push-20 {margin:0 -800px 1.5em 800px;}
+.push-21 {margin:0 -840px 1.5em 840px;}
+.push-22 {margin:0 -880px 1.5em 880px;}
+.push-23 {margin:0 -920px 1.5em 920px;}
+.push-24 {margin:0 -960px 1.5em 960px;}
+.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float:left;position:relative;}
+div.prepend-top, .prepend-top {margin-top:1.5em;}
+div.append-bottom, .append-bottom {margin-bottom:1.5em;}
+.box {padding:1.5em;margin-bottom:1.5em;background:#e5eCf9;}
+hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:1px;margin:0 0 17px;border:none;}
+hr.space {background:#fff;color:#fff;visibility:hidden;}
+.clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
+.clearfix, .container {display:block;}
+.clear {clear:both;}
\ No newline at end of file


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/boilerplate.css	Thu Sep 01 13:50:35 2011 +0100
@@ -0,0 +1,111 @@
+/* HTML5 ✰ Boilerplate */
+
+html, body, div, span, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
+small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section, summary,
+time, mark, audio, video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  font: inherit;
+  vertical-align: baseline;
+}
+
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+  display: block;
+}
+
+blockquote, q { quotes: none; }
+blockquote:before, blockquote:after,
+q:before, q:after { content: ""; content: none; }
+ins { background-color: #ff9; color: #000; text-decoration: none; }
+mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
+del { text-decoration: line-through; }
+abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
+table { border-collapse: collapse; border-spacing: 0; }
+hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
+input, select { vertical-align: middle; }
+
+body { font:13px/1.231 sans-serif; *font-size:small; }
+select, input, textarea, button { font:99% sans-serif; }
+pre, code, kbd, samp { font-family: monospace, sans-serif; }
+
+html { overflow-y: scroll; }
+a:hover, a:active { outline: none; }
+ul, ol { margin-left: 2em; }
+ol { list-style-type: decimal; }
+nav ul, nav li { margin: 0; list-style:none; list-style-image: none; }
+small { font-size: 85%; }
+strong, th { font-weight: bold; }
+td { vertical-align: top; }
+sub, sup { font-size: 75%; line-height: 0; position: relative; }
+sup { top: -0.5em; }
+sub { bottom: -0.25em; }
+
+pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 15px; }
+textarea { overflow: auto; } 
+.ie6 legend, .ie7 legend { margin-left: -7px; } 
+input[type="radio"] { vertical-align: text-bottom; }
+input[type="checkbox"] { vertical-align: bottom; }
+.ie7 input[type="checkbox"] { vertical-align: baseline; }
+.ie6 input { vertical-align: text-bottom; }
+label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; }
+button, input, select, textarea { margin: 0; }
+input:valid, textarea:valid   {  }
+input:invalid, textarea:invalid { border-radius: 1px; -moz-box-shadow: 0px 0px 5px red; -webkit-box-shadow: 0px 0px 5px red; box-shadow: 0px 0px 5px red; }
+.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; }
+
+
+a:link { -webkit-tap-highlight-color: #FF5E99; }
+button {  width: auto; overflow: visible; }
+.ie7 img { -ms-interpolation-mode: bicubic; }
+
+body, select, input, textarea { color: #444; }
+h1, h2, h3, h4, h5, h6 { font-weight: bold; }
+a, a:active, a:visited { color: #607890; }
+a:hover { color: #036; }
+
+.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
+.hidden { display: none; visibility: hidden; }
+.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
+.invisible { visibility: hidden; }
+.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
+.clearfix:after { clear: both; }
+.clearfix { zoom: 1; }
+
+
+ at media all and (orientation:portrait) {
+}
+
+ at media all and (orientation:landscape) {
+}
+
+ at media screen and (max-device-width: 480px) {
+  /* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
+}
+
+
+ at media print {
+  * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
+  -ms-filter: none !important; } 
+  a, a:visited { color: #444 !important; text-decoration: underline; }
+  a[href]:after { content: " (" attr(href) ")"; }
+  abbr[title]:after { content: " (" attr(title) ")"; }
+  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  
+  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+  thead { display: table-header-group; } 
+  tr, img { page-break-inside: avoid; }
+  @page { margin: 0.5cm; }
+  p, h2, h3 { orphans: 3; widows: 3; }
+  h2, h3{ page-break-after: avoid; }
+}
+


--- a/ckan/public/css/buttons.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-.buttons {
-	display: inline-block;
-}
-
-.buttons:after {
-	content: ".";
-	display: block;
-	height: 0;
-	clear: both;
-	visibility: hidden;
-}
-
-* html .buttons {
-	height: 1px;
-}
-
-.buttons img {
-	vertical-align: baseline;
-	float: none;
-}
-
-.buttons a, button {
-	display: block;
-	margin: 0 7px 0 0;
-	background-color: #f0f0f0;
-	border: 1px solid #dedede;
-	border-top: 1px solid #eee;
-	border-left: 1px solid #eee;
-	-moz-border-radius: 0.5em;
-	-webkit-border-radius: 0.5em;
-	font-size: 100%;
-	line-height: 1.4;
-	text-decoration: none;
-	font-weight: bold;
-	color: #565656;
-	cursor: pointer;
-	padding: 5px 10px 6px 7px;
-	background-image: url(/images/button-shadow.png);
-	background-repeat: no-repeat;
-	background-position: left top;
-}
-
-button {
-	width: auto;
-	overflow: visible;
-	padding: 4px 10px 3px 7px;
-}
-
-button[type] {
-	padding: 5px 10px 5px 7px;
-	line-height: 17px;
-}
-
-*:first-child+html button[type] {
-	padding: 4px 10px 3px 7px;
-}
-
-.buttons a.secondary, button.secondary {
-	float: right;
-}
-
-button img, .buttons a img {
-	margin: 0 3px -3px 0 !important;
-	padding: 0;
-	border: none;
-	width: 16px;
-	height: 16px;
-}
-
-button:hover, .buttons a:hover {
-	border: 1px solid #ccc;
-	color: #333;
-	background-color: #f0f0f0;
-}
-
-button:active, .buttons a:active {
-	background-image: none;
-	background-color: #888;
-	border: 1px solid #444;
-	/* override position indicator */
-	color: #fff ! important; 
-}
-
-button.positive, .buttons a.positive {
-	color: #529214;
-}
-
-.buttons a.positive:hover, button.positive:hover {
-	background-image: none;
-	background-color: #e6efc2;
-	border: 1px solid #c6d880;
-	color: #529214;
-}
-
-.buttons a.positive:active {
-	background-image: none;
-	background-color: #529214;
-	border: 1px solid #529214;
-	color: #fff;
-}
-
-/* negative (cancel, delete) */
-
-.buttons a.negative, button.negative {
-	color: #d12f19;
-}
-
-.buttons a.negative:hover, button.negative:hover {
-	background-image: none;
-	background: #fbe3e4;
-	border: 1px solid #fbc2c4;
-	color: #d12f19;
-}
-
-.buttons a.negative:active {
-	background-image: none;
-	background-color: #d12f19;
-	border: 1px solid #d12f19;
-	color: #fff;
-}


--- a/ckan/public/css/ckan.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1052 +0,0 @@
-/* The main css styles for CKAN (specific UI elements may have thier own css linked via style.css) */
-
-body, input, textarea, .page-title span, .pingback a.url {
-    font-family: "Lucida Grande", Lucida, Verdana, sans-serif;
-}
-
-#content, #content input, #content textarea {
-    font-size: 14px;
-    line-height: 20px;
-}
-
-a { 
-  color: #b00; 
-  text-decoration: none;
-}
-a:link {
-  color: #b22;
-  text-decoration: none;
-}
-a:visited {
-  color: #b22;
-  text-decoration: none;
-}
-#main a:visited {
-  text-decoration: none;
-}
-
-a:active {
-  color: #f22;
-  text-decoration: none;
-}
-a:hover {
-  text-decoration: underline;
-}
-
-#content p, #content ul, #content ol, #content dd, #content pre, #content hr, #content dl {
-  margin-bottom: 14px;
-}
-
-/* ===========================
- * Flash messages
-*/
-
-.flash-banner-box {
-  margin-top: -20px;
-  margin-bottom: 10px;
-}
-
-.flash-banner {
-  width: auto;
-  line-height: 1em;
-  font-size: 14px;
-  padding: 0.8em 1.5%; 
-  font-weight: bold;
-  text-align: center;
-  border-bottom: solid 1px #9f9f9f;
-  color: #133362;
-}
-
-.flash-banner.notice {
-  background: #f4a83d;
-  border-bottom-color: #dddddd;
-}
-
-.flash-banner.success {
-  background-color: #e7f9e0;
-  border-bottom-color: #ccc;
-  color: #2d6b00;
-}
-
-.flash-banner.error {
-  background-color: #ffeae8;
-  border-bottom-color: #ccc;
-  color: #b50000;
-}
-
-/* ===========================
- * Masthead
-*/
-
-#header {
-  padding-top: 15px;
-  padding-bottom: 5px;
-}
-
-#site-title {
-  line-height: normal;
-  width: auto;
-  float: left;
-  font-size: 40px;
-  margin: 0;
-  padding: 0 0 5px 0;
-  font-weight: normal;
-  letter-spacing: -0.032em;
-}
-
-#site-title a,
-#site-title a:link, #site-title a:visited {
-  font-weight:normal;
-  color: #333;
-}
-
-/* hide the main twentyten image */
-#branding img {
-	display:none;
-}
-
-#site-title a img {
-  background: transparent;
-  display: block;
-  border: none;
-  margin: 0;
-  max-height: 50px;
-}
-
-#site-description {
-  width:auto;
-  float: left;
-  clear: left;
-  color: #000;
-  font-style: normal;
-  font-size: 13px;
-  letter-spacing: normal;
-  text-transform: none;
-  margin: -5px 0 10px 3px;
-  padding: 0;
-  font-family: 'Lucida Grande', 'Lucida Sans Unicode', Lucida, Arial, Helvetica, sans-serif;
-  font-family: 'Helvetica Neue', Arial, Helvetica, 'Nimbus Sans L', sans-serif;
-}
-
-/* ===========================
- * Top Bar
-*/
-
-#top-bar {
-  text-align: right;
-}
-
-#top-bar-login {
-  max-width: 150px;
-  display: inline-block;
-}
-
-#top-bar .search-form, #top-bar .search-form form {
-}
-
-#top-bar .search-form input.search {
-  width: 120px;
-}
-
-#top-bar-login .ckan-logged-in img {
-  margin-bottom: -3px;
-}
-
-
-/* =Menu
--------------------------------------------------------------- */
-
-#access {
-  border-top: 1px solid #aaa; 
-  border-bottom: 1px solid #aaa; 
-  background: transparent;
-}
-
-#access ul li a {
-  color: #b22;
-  text-decoration: none;
-  font-weight: bold;
-}
-
-#access ul li a.active {
-  color: black;
-  font-weight: bold;
-}
-
-#access ul li a:hover {
-  color: #333;
-}
-
-#access ul ul a {
-	background: #fff;
-}
-#access li:hover > a,
-#access ul ul :hover > a {
-	background: #fff;
-	color: #333;
-}
-#access ul li.current_page_item > a,
-#access ul li.current-menu-ancestor > a,
-#access ul li.current-menu-item > a,
-#access ul li.current-menu-parent > a {
-	color: #333;
-}
-* html #access ul li.current_page_item a,
-* html #access ul li.current-menu-ancestor a,
-* html #access ul li.current-menu-item a,
-* html #access ul li.current-menu-parent a,
-* html #access ul li a:hover {
-	color: #333;
-	cursor: default;
-  font-weight: bold;
-}
-
-/* ===========================
- * Main
- */
-
-#main {
-  padding-top: 20px;
-}
-
-#container {
-}
-
-.entry-content {
-  padding-top: 0;
-}
-
-/* ===========================
- * Sidebar
- */
-#primary
-{
-    padding-top:40px;    
-}
-#primary .widget-container
-{
-  background: #f9f2ce;
-  color: #333;
-  margin: 0 0 1em 0;
-  padding: 10px;
-	border: 1px solid #ebd897;
-	border-left: none;
-	border-top: none;
-	border-radius: 0.5em;
-	-moz-border-radius: 0.5em;
-	-webkit-border-radius: 0.5em;
-}
-
-#primary .widget-container h2 {
-  margin-bottom: 10px;
-}
-
-#primary .widget-container h4 {
-  margin-bottom: 10px;
-  font-weight:bold;
-}
-
-#primary .widget-container .widget_action{
-   text-align:right;
-   margin:18px 0 0 0;
-   font-weight:bold;
-}
-
-.hide-sidebar #primary { 
-   display: none;
-}
-
-.hide-sidebar #content {
-   margin: 0 20px 0 20px;
-}
-
-/* ==========================
- * Facets
- */
-
-.facet-box {
-
-}
-
-.facet-box h2 {
-    color: #000;
-    font-size: 1.2em;
-    font-weight: bold;
-    margin-top: 1em;
-}
-
-.facet-options {
-    margin-top: 0.5em;
-}
-
-.facet-options li {
-    padding-top: 0.2em;
-    font-size: 1.2em; 
-    color: #000; 
-}
-
-.register-link {
-    padding-top: 10px;
-}
-
-.register-link a {
-    color: white; 
-    background: #199150;
-    font-weight: bold;
-    padding: 5px;
-    width: 100%;
-    font-size: 1.3em;
-    -moz-border-radius: 2px;
-    -webkit-border-radius: 2px;
-    border-radius: 2px;
-    
-}
-
-.package-search-filters {
-    margin-top: 15px;
-}
-
-.search-field {
-    display: inline-block;
-    margin-right: 5px;
-    margin-bottom: 10px;
-    padding: 1px 1px 3px 2px;
-    font-size: 14px;
-    background-color: #eee;
-    line-height: 16px;
-    -moz-box-shadow: 1px 1px 3px #bbb;
-    -webkit-box-shadow: 1px 1px 3px #bbb;
-    box-shadow: 1px 1px 3px #bbb;
-    
-}
-
-.search-field-name::after {
-    content: ":";
-}
-
-.search-field-value {
-    font-weight: bold;
-}
-
-
-/* ===========================
- * Footer
- */
-
-#footer {
-  border-top: 1px solid;
-  margin: 1em auto 0 auto;
-  overflow: auto;
-}
-
-#footer ul {
-  margin-top: 0;
-}
-
-#footer-widget-area .widget-area {
-  float: none; 
-  width: 100%;
-  margin: 0;
-}
-
-#footer-widget-area .widget-container {
-  margin-bottom: 0;
-}
-
-#footer-widget-area .widget-container h3 {
-  display: inline-block;
-  margin-top: 0;
-  margin-right: 10px;
-  /* 
-   * IE 6 & 7 don't support inline-block, but we can use the hasLayout 
-   * magical property. 
-   * http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/ 
-   */ 
-  zoom: 1; 
-  *display: inline; 
-}
-
-#footer-widget-area .widget-container .textwidget {
-  display: inline;
-}
-
-
-#footer-widget-area .widget-container ul {
-  display: inline;
-  margin: 0.3em 0 0 0;
-}
-
-#footer ul li abbr {
-  border-bottom: none;
-}
-
-#footer-widget-area .widget-container ul li {
-  margin: 0 1em 0 0;
-  padding: 0;
-  display: inline-block;
-  /* 
-   * IE 6 & 7 don't support inline-block, but we can use the hasLayout 
-   * magical property. 
-   * http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/ 
-   */ 
-  zoom: 1; 
-  *display: inline; 
-}
-
-#footer-widget-area #fourth {
-	margin-right: 0;
-}
-
-#site-info {
-}
-
-#site-generator {
-  width: auto;
-}
-
-#site-generator a {
-  background-image: none;
-}
-
-img#footer-okf-logo {
-  margin-bottom: -4px;
-}
-
-
-/* ===========================
- * Forms
- */
-
-#content input, #content textarea {
-  line-height: 14px;
-  font-size: 14px;
-}
-
-form #log_message {
-  width: 80%;
-  height: 30px;
-}
-
-.entry-content label {
-  font-size: 14px;
-}
-
-#content form.ckan.package_create_form dt {
-  clear: both; 
-}
-
-#content form.ckan.package_create_form dl, #content form.ckan.package_create_form dd {
-  margin-bottom: 0;
-}
-
-#content form.ckan.package_create_form select {
-  margin-bottom: 12px;
-}
-
-form.simple-form label {
-    display: inline-block; 
-    float: left;
-    min-width: 40%;
-}
-
-form.simple-form fieldset input {
-    border: 1px solid #E7E7E7;
-    padding: 0.3em; 
-    width: 40%;
-}
-
-form.simple-form textarea {
-    width: 99%;
-}
-
-.purge-button {
-  border: none;
-  background: none;
-  background-color: #b33a3a;
-  color: white;
-  display: block;
-  margin-bottom: 1em;
-}
-
-.purge-button:hover {
-  border: none;
-}
-
-/* ===========================
- * Tables
- */
-
-#content tr td {
-  padding: 6px 10px;
-}
-
-#content tr th, #content thead th {
-  padding: 6px 12px;
-}
-
-caption {
-    caption-side:bottom;
-    text-align:left;
-    font-size:0.85em;
-    line-height:1.4em;
-    padding-top:0.5em;
-    color:#888;
-    padding-left:0.8em;
-}
-
-
-
-/* ============= */
-/* = Utilities = */
-/* ============= */
-
-.clearfix:after {
-	content: ".";
-	display: block;
-	height: 0;
-	clear: both;
-	visibility: hidden;
-}
-
-.clearfix { display: inline-block; } /* for IE/Mac */
-
-.cleared { clear: both; }
-hr.cleared {
-	height: 0 ! important;
-	visibility: hidden;
-}
-
-hr.nomargin { margin: 0; }
-
-/* ======================= */
-/* = Fixes to KForge CSS = */
-/* ======================= */
-
-table {
-	border-collapse: collapse;
-	border: none;
-	border-radius: 1em;
-	margin: 0 0 1.2em 0;
-}
-
-table th, table td {
-	border: 1px solid #ccc;
-	border-top-color: #eee;
-	border-left-color: #eee;
-	padding: 0.3em;
-}
-
-table td {
-	background: #f0f0f0;
-}
-
-table th {
-	background: #fff;
-}
-
-h1, h2, h3, h4, h5, h6 {
-	font-family: 'Lucida Grande', 'Lucida Sans Unicode', Lucida, Arial, Helvetica, sans-serif;
-	letter-spacing: -0.02em;
-}
-
-/* ================ */
-/* = Search boxes = */
-/* ================ */
-
-form.package-search input.search {
-  width: 99%;
-  padding: 5px;
-  font-size: 1.1em;
-  margin: 0px;
-  -webkit-appearance: textfield;
-}
-
-.package-search input.button {
-    display: inline-block;
-    float: right;
-    margin-top: 5px;
-    margin-right: 10px !important;
-    margin-bottom: 1px !important;
-}
-
-/* ========================================= */
-/* = Changes/additions to kforge forms.css = */
-/* ========================================= */
-
-input.openid {
-	background: transparent url(../images/icons/openid.png) 2px 2px no-repeat;
-	padding-left: 22px;
-}
-
-input.openid:focus {
-	background-position: 1px 1px;
-	padding-left: 21px;
-}
-
-/* ============== */
-/* = Pagination = */
-/* ============== */
-
-.pager {
-	width: 100%;
-	text-align: center;
-	margin: 0 0 1.2em 0;
-	clear: both;
-}
-
-.pager span, .pager a {
-	text-decoration: none;
-	margin: 0em;
-	border: none;
-	padding: 0.3em 0.1em;
-}
-
-.pager a:hover, .pager a:active {
-	color: #fff;
-	background-color: #c22;
-}
-
-.pager span.pager_dotdot {
-	color: #aaa;
-}
-
-.pager span.pager_curpage {
-	font-weight: bold;
-	border: 1px solid #ddd;
-}
-
-/* ======================= */
-/* = Various iconography = */
-/* ======================= */
-
-img.icon {
-	height: 25px;
-}
-
-a.icon {
-	display: block;
-	height: 0;
-	overflow: hidden;
-	padding-top: 20px;
-	width: 20px;
-}
-
-table.no-margin { margin: 0; }
-
-div.extras-new-field label {
-	display: inline;
-	line-height: 2.6em;
-}
-
-label.inline {
-	display:inline;
-	margin: 1em 0 0 1em;
-}
-
-dl.icons dt {
-	float: left;
-	clear: both;
-	margin: 0.4em 0 0 0;
-	height: 16px;
-	width: 16px;
-}
-
-dl.icons dt img {
-	vertical-align: middle;
-}
-
-dl.icons dd {
-	float: left;
-	margin: 0.4em 0 0 10px;
-}
-
-dl.icons dd.tiny {
-	font-size: 75%;
-	color: #888;
-	line-height: 1.2em;
-	margin: 0 0 0 26px;
-}
-
-/* ========================= */
-/* = Tag and Group listing = */
-/* ========================= */
-
-.item-list {
-  border-top: solid 1px #cbcbcb;
-  border-bottom: solid 1px #cbcbcb;
-  margin-top: 5px;
-}
-
-.item-list ul, ul.tags {
-  margin: 0 0 0.75em 0;
-  padding:0;
-  list-style: none;
-}
-
-.item-list ul li, ul.tags li {
-  padding-left: 0;
-  padding-right: 3px;
-}
-
-.tags a {
-	text-decoration: none;
-  color: #b00;
-}
-
-.tags a:hover {
-}
-
-/* tags small is for autocomplete list in package editor */
-.tags.small a {
-  padding-left: 6px;
-  padding-right: 6px;
-}
-
-/* =================== */
-/* = Package listing = */
-/* =================== */
-
-ul.packages {
-	padding-left: 0;
-        margin: 0 0 18px 0;
-}
-
-.packages .header {
-    font-weight: bold;
-}
-
-.packages .extract {
-	font-size: 0.9em;
-	padding-top:10px;
-}
-
-.packages li {
-	list-style: none;
-	padding: 0.4em 0 0.4em 0.0em;
-	border-left: 0.5em solid #fff;
-	border-bottom: 1px solid #ececec;
-	overflow: hidden;
-	/*white-space: nowrap;*/
-}
-
-.packages li a {
-	text-decoration: none;
-}
-
-.packages li img {
-	margin-bottom: -2px;
-}
-
-.search_meta {
-    float:right;
-}
-
-ul.package_formats {
-    float:right;    
-    padding:0 0 3px 0; margin:0;
-}
-
-ul.package_formats li {
-    display:inline;
-    margin:0;
-    padding:0 5px 0 5px;
-    border:none;
-    font-weight:normal;
-    font-size:0.8em;
-    color:#808080;
-    background:#ececec;
-}
-
-.openness {
-    clear:right;
-    float:right;
-    font-size:0.8em;
-}
-
-.openness img {
-    vertical-align:top;
-}
-
-.openness li {
-    margin:0;
-    padding:0;
-    border:none;    
-}
-
-/*
-.packages li.fullyopen {
-	border-left: 0.5em solid #AFC6E9;
-}
-*/
-
-.packages li .tags {
-	margin: 0 0 0 0.5em;
-	font-size: 80%;
-	opacity: 0.3;
-}
-
-.packages li:hover .tags {
-	opacity: 1;
-}
-
-.packages .name, 
-.packages .license {
-    color: #666;
-	font-weight: normal;
-	font-size: 0.9em;
-}
-
-/* ==================== */
-/* = Extra RHS styles = */
-/* ==================== */
-
-.sidebar dl {
-	margin: 0 1em 0.8em 1em;
-	padding: 0;
-}
-
-.sidebar hr {
-	width: 90%;
-	color: #EBDBA7;
-	background-color: #EBDBA7;
-	border: none;
-	height: 1px;
-}
-
-.sidebar .buttons {
-	margin-top: 0;
-}
-
-.sidebar .buttons a, .sidebar .buttons button {
-	margin-bottom: 0.3em;
-}
-
-.okdstripe {
-	/* Amusingly, this has to be a slightly different color to look the same
-	   as the stripe on a white background */
-	border-left: 0.5em solid #8FB0DE;
-	padding-left: 0.4em ! important;
-}
-
-/* ===================== */
-/* = Package read view = */
-/* ===================== */
-
-#primary .widget-container .formats ul {
-  background: transparent;
-}
-
-#primary .widget-container .formats ul li {
-  background: transparent;
-  display: inline;
-}
-
-#content .package .subsection h3,
-#content #comments h3, #content #comments h4 {
-  background-color: #444;
-  padding: 10px;
-  color: white;
-}
-
-.package h3, .package h4 {
-	font-weight: bold;
-	margin: 1em 0 0.6em 0;
-}
-
-.package div.tags {
-  margin: 20px 0;
-}
-
-.package .resources {
-  margin-bottom: 2em;
-}
-
-.package .resources table {
-  width: 100%;
-}
-
-.package h2.head {
-  margin-bottom: 0.3em!important;
-  line-height: 1.0;
-}
-
-.package .name, .group .name {
-	color: #888;
-	font-family: monospace;
-}
-
-.package div.url {
-  margin: 0 ;
-}
-
-.package .url a {
-	text-decoration: none;
-}
-
-.package .notes, .group .description {
-	padding: 0.2em 0 0.2em 0;
-	margin: 0 3% 0.5 0 ! important;
-}
-
-.package .notes span.nonegiven {
-	opacity: 0.5;
-}
-.package .notes span.nonegiven:hover {
-	opacity: 1;
-}
-
-.package .details table {
-  border-collapse: collapse;
-  background: transparent;
-  border-color: grey;
-  border-spacing: 2px 2px;
-}
-
-.package .details table tr {
-  border: none;
-  border-bottom: solid 1px #888;
-}
-
-.package .details td {
-  background: transparent;
-  border: none;
-}
-
-.package .details td.package-label {
-  width: 150px;
-}
-
-.package .api div {
-    background:#f0f0f0;
-    padding:10px;
-}
-
-.package .api h5 {
-    font-weight:bold;
-    margin-bottom:1em!important;
-    font-size:1em;
-}
-
-.package .api code {
-    background:#444;
-    color:#fff;
-    padding:3px 10px ;
-    margin-bottom:1em;
-    display:block;
-}
-.package .api code a {
-    color:#fff;
-}
-
-.relationship_comment {
-  font-style: italic;
-}
-
-p.atom-feed-link {
-  float: right;
-  display: inline;
-  font-size: 14px;
-}
-
-p.atom-feed-link a {
-  background: url('../images/icons/atom_feed.png') no-repeat;
-  padding-left: 20px;
-}
-
-p.atom-feed-link.package-history-link {
-  float: none;
-}
-
-#revision.widget-container
-{
-  background: #f9f2ce;
-  color: #333;
-  margin: 0 0 1em 0;
-  padding: 10px;
-	border: 1px solid #ebd897;
-	border-left: none;
-	border-top: none;
-	border-radius: 0.5em;
-	-moz-border-radius: 0.5em;
-	-webkit-border-radius: 0.5em;
-}
-
-/* ===================== */
-/* = User Listing      = */
-/* ===================== */
-
-body.user-list #content {
-  margin-right: 20px;
-}
-
-ul.userlist, ul.userlist ul {
-  list-style-type: none;
-  margin: 0;
-}
-
-ul.userlist li.user {
-  display: inline-block;
-  width: 200px;
-  padding: 5px;
-  font-size: 90%;
-  margin-bottom: 15px;
-}
-
-ul.userlist li ul span.edits {
-  color: #333;
-  font-size: 110%;
-  font-weight: bold;
-  margin-left: 3px;
-}
-
-ul.userlist li.user .username {
-}
-
-#content ul.userlist .username img {
-  margin-bottom: -3px;
-}
-
-ul.userlist .created {
-  font-size: 80%;
-}
-
-ul.userlist .badge {
-  color: #fc0;
-}
-
-body.user-list .sort {
-  float: right;
-}
-
-body.user-list .sort a {
-  font-size: 85%;
-  background: #eee;
-  padding: 5px;
-  border-bottom: 1px solid #ccc; 
-  border-right: 1px solid #ccc; 
-}
-
-/* ===================== */
-/* = Stateful stuff    = */
-/* ===================== */
-
-.state-deleted, .state-deleted a, .state-deleted * {
-  color: rgba(0, 0, 0, 0.4);
-}
-
-.state-deleted {
-  padding-left: 3px;
-}
-
-.state-deleted:hover * {
-  color: rgba(0, 0, 0, 0.8);
-}
-
-.state-notice {
-  text-transform: uppercase;
-  font-size: 120%;
-  background: #f4a83d;
-  padding: 15px;
-  text-align: center;
-  color: #fff;
-}


--- a/ckan/public/css/flexitable.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-table.flexitable .controls {
-	padding: 0;
-	width: 4em;
-}
-
-table.flexitable input[type="url"] {
-  width: auto;
-}
-
-form .resource-hash, form .resource-id {
-  display: none;
-}
-
-table.flexitable .controls a {
-	float: left;
-	display: block;
-	height: 16px;
-	width: 16px;
-	margin: 0 0.3em 0 0;
-	padding: 0;
-	background-color: transparent;
-	background-repeat: no-repeat;
-	background-position: left top;
-	overflow: hidden;
-	text-indent: -999em;
-	letter-spacing: -1000em;
-}
-
-table.flexitable .controls a:last-child {
-	margin-right: 0;
-}
-
-table.flexitable .controls a.remove { background-image: url(../images/icons/remove.png); }
-/*.flexitable .controls .move { 
-	background-image: url(../images/icons/handle_grey.png);
-	cursor: move;
-}*/
-table.flexitable .controls a.moveUp { background-image: url(../images/icons/arrow_up.png); }
-table.flexitable .controls a.moveDown { background-image: url(../images/icons/arrow_down.png); }
-
-p.flexitable button.addRow {
-	background-image: url(../images/icons/add.png);
-	background-position: 0.4em 0.4em;
-	background-repeat: no-repeat;
-	padding-left: 1.7em;
-}
-
-button.addRow {
-        float: right;
-}


--- a/ckan/public/css/forms.css	Thu Sep 01 12:28:48 2011 +0100
+++ b/ckan/public/css/forms.css	Thu Sep 01 13:50:35 2011 +0100
@@ -3,7 +3,7 @@
 fieldset {
   padding: 1em;
   margin: 0 0 1.5em 0;
-  border: 1px solid #ccc; }
+  border-bottom: 1px solid #ccc; }
  
 legend {
   font-weight: bold;
@@ -46,9 +46,13 @@
 input.title {
   font-size: 1.5em; }
 input.short {
-  width: 10em; }
+  width: 15em; }
+table input.short {
+  width: 12em; }
 input.medium-width {
   width: 25em; }
+table input.medium-width {
+  width: 20em; }
 input.long {
   width: 100%; }
  
@@ -61,7 +65,7 @@
 textarea.short {
     height: 1em; }
 textarea.wide {
-    width: 62.5em;
+    width: 55;
     height: 1em; }
  
 select[multiple], select.multiple {
@@ -176,3 +180,11 @@
 #preview {
   margin-bottom: 30px;
   }
+
+#openid_form {
+  width: 100%;
+}
+
+#openid_input_area {
+  padding: 0px;
+}


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/handheld.css	Thu Sep 01 13:50:35 2011 +0100
@@ -0,0 +1,8 @@
+* {
+  float: none;      
+  background: #fff;  
+  color: #000;
+}
+
+
+body { font-size: 80%; }
\ No newline at end of file


--- a/ckan/public/css/ie.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-.clearfix {
-  zoom: 1; /* triggers hasLayout */
-  display: block; /* resets display for IE/Win */
-}
\ No newline at end of file


--- a/ckan/public/css/jquery.autocomplete.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-.ac_results {
-	padding: 0px;
-	border: 1px solid black;
-	background-color: white;
-	overflow: hidden;
-	z-index: 99999;
-}
-
-.ac_results ul {
-	width: 100%;
-	list-style-position: outside;
-	list-style: none;
-	padding: 0;
-	margin: 0;
-}
-
-.ac_results li {
-	margin: 0px;
-	padding: 2px 5px;
-	cursor: default;
-	display: block;
-	/* 
-	if width will be 100% horizontal scrollbar will apear 
-	when scroll mode will be used
-	*/
-	/*width: 100%;*/
-	font: menu;
-	font-size: 12px;
-	/* 
-	it is very important, if line-height not setted or setted 
-	in relative units scroll will be broken in firefox
-	*/
-	line-height: 16px;
-	overflow: hidden;
-}
-
-.ac_loading {
-	background: white url('indicator.gif') right center no-repeat;
-}
-
-.ac_odd {
-	background-color: #eee;
-}
-
-.ac_over {
-	background-color: #0A246A;
-	color: white;
-}


--- a/ckan/public/css/reveal_instructions.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-fieldset span.as_hyperlink {
-  text-decoration: underline;
-  color: blue;
-  cursor: pointer; }
-


--- a/ckan/public/css/stars.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/* based on http://www.pmob.co.uk/temp/star-rating.htm */
-
-div.inline-rating{
-	display:-moz-inline-block;
-	display:-moz-inline-box;
-	display:inline-block;
-	/* vertical-align:middle; */
-	margin-bottom: -1px;
-}
-
-.stars{
-	width:80px;
-	height:16px;
-	margin: 0;
-	padding:0;
-	list-style:none;
-	clear:both;
-	position:relative;
-	background: url(/images/stars.png) no-repeat 0 0;
-}
-
-.default0star {background-position:0 0}
-.default1star {background-position:0 -16px}
-.default2star {background-position:0 -32px}
-.default3star {background-position:0 -48px}
-.default4star {background-position:0 -64px}
-.default5star {background-position:0 -80px}
-
-ul.stars li {
-	cursor: pointer;
-	float:left;
-	text-indent:-999em;
-}
-
-ul.stars li a {
-	position:absolute;
-	left:0;
-	top:0;
-	width:16px;
-	height:16px;
-	text-decoration:none;
-	z-index: 200;
-}
-
-ul.stars li.one a {left:0}
-ul.stars li.two a {left:16px;}
-ul.stars li.three a {left:32px;}
-ul.stars li.four a {left:48px;}
-ul.stars li.five a {left:64px;}
-
-ul.stars li a:hover {
-	z-index:2;
-	width:80px;
-	height:16px;
-	overflow:hidden;
-	left:0;  
-	background: url(/images/stars.png) no-repeat 0 0
-}
-
-ul.stars li.one a:hover {background-position:0 -96px;}
-ul.stars li.two a:hover {background-position:0 -112px;}
-ul.stars li.three a:hover {background-position:0 -128px}
-ul.stars li.four a:hover {background-position:0 -144px}
-ul.stars li.five a:hover {background-position:0 -160px}


--- a/ckan/public/css/style.css	Thu Sep 01 12:28:48 2011 +0100
+++ b/ckan/public/css/style.css	Thu Sep 01 13:50:35 2011 +0100
@@ -1,8 +1,684 @@
-/* This file is just for importing other css files */
- at import url(http://assets.okfn.org/themes/twentyten/style.css);
- at import url(ckan.css);
- at import url(buttons.css);
- at import url(stars.css);
- at import url(tabs.css);
- at import url(forms.css);
 
+.header.outer {
+  background-color: #e2e2e2;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e2e2e2), to(#cccccc)); 
+  background-image: -webkit-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:    -moz-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:     -ms-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:      -o-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:         linear-gradient(top, #e2e2e2, #cccccc);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#e2e2e2', EndColorStr='#cccccc'); 
+
+  margin-bottom: 20px;
+     -moz-box-shadow: 0px 2px 15px #dddddd; 
+  -webkit-box-shadow: 0px 2px 15px #dddddd; 
+          box-shadow: 0px 2px 15px #dddddd; 
+  border-bottom: 1px solid #ccc;
+}
+
+header {
+  padding: 5px 0px 2px 0px;
+}
+
+header #logo {
+  float: left;
+}
+
+header #site-name {
+  font-size: 1.4em;
+  font-family: Ubuntu, sans-serif;
+  padding: 5px;
+  padding-left: 82px;
+  padding-bottom: 2px;
+  /*font-weight: bold;*/
+  color: #333;
+  text-shadow: 1px 1px 3px #ccc;
+}
+
+header #site-name a {
+  color: #000;
+}
+
+header .menu form {
+  display: inline;
+}
+
+header .menu input {
+  width: 200px;
+  margin-top: -1px;
+}
+
+header .menu a {
+  display: inline-block;
+  padding-top: 5px;
+  font-size: 1.1em;
+  text-decoration: none;
+  font-weight: bold;
+  margin-left: 1.5em;
+  text-shadow: 1px 1px 3px #ccc;
+}
+
+header .menu #menusearch {
+  float: right;
+}
+
+header .menu #mainmenu {
+  display: inline;
+}
+
+header .account {
+  float: right;
+}
+
+header .account img {
+  margin-bottom: -3px;
+}
+
+
+header .search {
+  margin: 1px;
+  margin-left: 1em;
+  border: 1px solid #ccc;
+  font-size: 1.1em;
+  padding: 0.4em;
+  font-weight: bold;
+
+     -moz-border-radius: 5px; 
+  -webkit-border-radius: 5px; 
+          border-radius: 5px; 
+  -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; 
+}
+
+.footer.outer {
+  border-top: 2px solid #ccc;
+  background-color: #dbdbdb;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#ffffff)); 
+  background-image: -webkit-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:    -moz-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:     -ms-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:      -o-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:         linear-gradient(top, #dbdbdb, #ffffff);
+            fromilter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#dbdbdb', EndColorStr='#ffffff'); 
+}
+
+html, body {
+  height: 100%;
+}
+
+#wrap {
+    min-height: 100%;
+    height: auto !important;
+    height: 100%;
+    margin: 0 auto -230px;
+}
+
+footer, #push {
+    height: 205px;
+}
+
+footer {
+  margin-top: 5px;
+  padding-top: 1em;
+}
+
+footer a {
+  text-decoration: none;
+}
+
+footer #footer-okf-logo {
+  margin-bottom: -4px;
+}
+
+footer .xoxo h3 {
+  font-size: 1.2em;
+}
+
+h1, h2, h3, h4, h5 {
+  font-family: 'Ubuntu', Georgia; 
+}
+
+a, a:visited {
+  color: #bb2222;
+  text-decoration: none;
+}
+
+a:hover {
+  color: #183661;
+}
+
+
+/* Basic page elements */
+
+.page_heading {
+  margin-top: 1.5em;
+  margin-bottom: 1em;
+  font-size: 2.2em;
+  font-weight: normal;
+}
+
+#minornavigation {
+  border: 1px solid #e0e0e0;
+  background-color: #e2e2e2;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0f0), to(#e2e2e2)); 
+  background-image: -webkit-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:    -moz-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:     -ms-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:      -o-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:         linear-gradient(top, #f0f0f0, #e2e2e2);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f0f0f0', EndColorStr='#e2e2e2');
+
+     -moz-border-radius: 5px; 
+  -webkit-border-radius: 5px; 
+          border-radius: 5px; 
+  -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; 
+}
+
+#minornavigation ul.tabbed li.action {
+  float: right;
+}
+
+/* Side bar widgets */
+ul.widget-list {
+  list-style: none;
+  padding-left: 0px;
+}
+
+ul.widget-list li.widget-container {
+  border-bottom: 1px solid #e0e0e0;
+  margin-bottom: 1em;
+}
+
+ul.widget-list li.widget-container.boxed {
+  border-bottom: 0;
+  background-color: #FFF7C0;
+  padding: 15px;
+  padding-top: 10px;
+     -moz-border-radius: 15px; 
+  -webkit-border-radius: 15px; 
+          border-radius: 15px; 
+}
+
+/* Hints */
+
+.hint {
+  font-size: 0.8em;
+  color: #888;
+  margin-bottom: 0;
+}
+
+/* Tables */
+table th {
+  border: 1px solid #e0e0e0;
+  background-color: #e2e2e2;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0f0), to(#e2e2e2)); 
+  background-image: -webkit-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:    -moz-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:     -ms-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:      -o-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:         linear-gradient(top, #f0f0f0, #e2e2e2);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f0f0f0', EndColorStr='#e2e2e2');
+}
+
+table caption {
+  caption-side: bottom; 
+  color: #888;
+  font-size: 0.9em;
+  background-color: white;
+}
+
+tbody tr:nth-child(even) td, tbody tr.even td {
+  background-color: #fff7c0;
+}
+
+/* ============== */
+/* = Navigation = */
+/* ============== */
+
+#minornavigation {
+  margin-bottom: 1em;
+}
+
+.nominor #minornavigation {
+  display: none;
+}
+
+#minornavigation ul {
+  list-style: none; 
+  padding: 7px;
+  margin: 0;
+}
+
+#minornavigation ul li {
+  display: inline-block;
+  margin-right: 2em;
+}
+
+#minornavigation ul li a {
+  text-decoration: none;
+  font-weight: bold;
+}
+
+#minornavigation ul li a img {
+  margin-bottom: -4px;
+  padding-right: 5px;
+}
+
+#sidebar {
+  margin-right: -10px;
+  padding-left: 9px;
+  overflow: hidden;
+}
+
+#sidebar h2, #sidebar h3 {
+  font-size: 1.3em;
+}
+
+#sidebar ul.property-list li ul {
+  margin-left: -2em;
+}
+
+#content {
+  border-right: 1px solid #e0e0e0;
+}
+
+/* ============== */
+/* = Pagination = */
+/* ============== */
+
+.pager {
+	width: 100%;
+	text-align: center;
+	margin: 0 0 1.2em 0;
+	clear: both;
+}
+
+.pager span, .pager a {
+	text-decoration: none;
+	margin: 0em;
+	border: none;
+	padding: 0.3em 0.1em;
+}
+
+.pager a:hover, .pager a:active {
+	color: #fff;
+	background-color: #c22;
+}
+
+.pager span.pager_dotdot {
+	color: #aaa;
+}
+
+.pager span.pager_curpage {
+	font-weight: bold;
+	border: 1px solid #ddd;
+}
+
+
+/* ==========================
+ * Facets
+ */
+
+.facet-box {
+
+}
+
+#sidebar .facet-box h2 {
+    color: #000;
+    font-size: 1.2em;
+}
+
+.facet-options {
+    margin-top: 0.5em;
+}
+
+.facet-options li {
+    padding-top: 0.2em;
+    color: #000; 
+}
+
+.register-link {
+    padding-top: 10px;
+}
+
+.package-search-filters {
+    margin-top: 15px;
+}
+
+.search-field {
+    display: inline-block;
+    margin-right: 5px;
+    margin-bottom: 10px;
+    padding: 2px 2px 4px 3px;
+    font-size: 14px;
+    background-color: #FFF7C0;
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+    line-height: 16px;
+    /*
+    -moz-box-shadow: 1px 1px 3px #bbb;
+    -webkit-box-shadow: 1px 1px 3px #bbb;
+    box-shadow: 1px 1px 3px #bbb;
+    */
+}
+
+.search-field img {
+    margin-bottom: -3px;
+}
+
+.search-field-name::after {
+    content: ":";
+}
+
+.search-field-value {
+    font-weight: bold;
+}
+
+/* ================ */
+/* = Forms common = */
+/* ================ */
+
+fieldset {
+  border: 0px;
+  border-bottom: 1px solid #e0e0e0;
+}
+
+
+/* ============== */
+/* = Login Form = */
+/* ============== */
+
+form.simple-form label {
+    display: inline-block; 
+    float: left;
+    min-width: 40%;
+    padding-top: 0.5em;
+    padding-bottom: 1em;
+}
+
+form.simple-form fieldset input {
+    border: 1px solid #E7E7E7;
+    padding: 0.5em; 
+    width: 40%;
+    margin-bottom: 1em
+}
+
+form.simple-form textarea {
+    width: 99%;
+}
+
+.purge-button {
+  border: none;
+  background: none;
+  background-color: #b33a3a;
+  color: white;
+  display: block;
+  margin-bottom: 1em;
+}
+
+.purge-button:hover {
+  border: none;
+}
+
+
+/* ===================== */
+/* = Package read view = */
+/* ===================== */
+
+.property-list {
+  list-style: none;
+  padding-left: 3em;
+}
+
+#sidebar .property-list li h3 {
+  font-size: 1.1em;
+  font-weight: bold; 
+  margin-bottom: 0.5em;
+  margin-left: -2em;
+}
+
+#sidebar .property-list li {
+  margin-bottom: 0.2em;
+}
+
+.package .api div {
+    background:#f0f0f0;
+    padding:10px;
+}
+
+.package .api h5 {
+    font-weight:bold;
+    margin-bottom:1em!important;
+    font-size:1em;
+}
+
+.package .api code {
+    background:#444;
+    color:#fff;
+    padding:3px 10px ;
+    margin-bottom:1em;
+    display:block;
+}
+.package .api code a {
+    color:#fff;
+}
+
+/* ===================== */
+/* = User Listing      = */
+/* ===================== */
+
+body.user-list #content {
+}
+
+ul.userlist, ul.userlist ul {
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+}
+
+ul.userlist li.user {
+  display: inline-block;
+  width: 200px;
+  margin-bottom: 15px;
+}
+
+ul.userlist li ul span.edits {
+  color: #333;
+  font-size: 1.1em;
+  font-weight: bold;
+  margin-left: 3px;
+}
+
+ul.userlist li.user .username {
+}
+
+#content ul.userlist .username img {
+  margin-bottom: -3px;
+}
+
+ul.userlist .created {
+  color: #888;
+}
+
+ul.userlist .badge {
+  color: #fc0;
+}
+
+body.user-list .sort {
+  float: right;
+}
+
+body.user-list .sort a {
+  background: #eee;
+  padding: 5px;
+  border-bottom: 1px solid #ccc; 
+  border-right: 1px solid #ccc; 
+}
+
+/* ===================== */
+/* = Stateful stuff    = */
+/* ===================== */
+
+.state-deleted, .state-deleted a, .state-deleted * {
+  color: rgba(0, 0, 0, 0.4);
+}
+
+.state-deleted {
+  padding-left: 3px;
+}
+
+.state-deleted:hover * {
+  color: rgba(0, 0, 0, 0.8);
+}
+
+.state-notice {
+  text-transform: uppercase;
+  font-size: 120%;
+  background: #f4a83d;
+  padding: 15px;
+  text-align: center;
+  color: #fff;
+}
+
+/* ================ */
+/* = Search boxes = */
+/* ================ */
+
+form.package-search input.search {
+  width: 99%;
+  font-size: 1.2em;
+  margin: 0px;
+  -webkit-appearance: textfield;
+  
+  border: 1px solid #ccc;
+  padding: 0.5em;
+  font-weight: bold;
+
+     -moz-border-radius: 5px; 
+  -webkit-border-radius: 5px; 
+          border-radius: 5px; 
+  -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; 
+}
+
+.package-search input.button {
+    display: inline-block;
+    float: right;
+    margin-top: 5px;
+    margin-right: 10px !important;
+    margin-bottom: 1px !important;
+}
+
+.package-search-filters {
+  margin-top: 1em;
+  margin-bottom: 1em;
+  color: #888;
+}
+
+.package-search-filters label {
+  padding-left: 1em;
+}
+
+/* =================== */
+/* = Package listing = */
+/* =================== */
+
+ul.packages {
+	padding-left: 0;
+    margin: 0 0 1em 0;
+}
+
+.packages .header {
+    padding-top: 0.5em;
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.packages .extract {
+	padding-top: 0.3em;
+}
+
+.packages li {
+	list-style: none;
+	padding: 1em 0 0.2em 0.0em;
+	border-bottom: 1px solid #ececec;
+	overflow: hidden;
+	/*white-space: nowrap;*/
+}
+
+.packages li a {
+	text-decoration: none;
+}
+
+.packages li img {
+	margin-bottom: -2px;
+}
+
+.search_meta {
+    float:right;
+}
+
+ul.package_formats {
+    float: right;
+    padding: 0 0 3px 0; 
+    margin: 0;
+    font-family: monospace;
+}
+
+ul.package_formats li {
+    display: inline;
+    margin: 0;
+    padding: 0 5px 0 5px;
+    border: none;
+    font-weight: normal;
+    font-size: 0.9em;
+    color: #808080;
+    background:#ececec;
+}
+
+.openness {
+    clear:right;
+    float:right;
+    font-size:0.8em;
+}
+
+.openness img {
+    vertical-align:top;
+}
+
+.openness li {
+    margin:0;
+    padding:0;
+    border:none;    
+}
+
+
+.signup {
+  color: white; 
+  border-bottom: 0;
+  background-color: #FFF7C0;
+  padding: 15px;
+  padding-top: 10px;
+     -moz-border-radius: 15px; 
+  -webkit-border-radius: 15px; 
+          border-radius: 15px;
+  padding-bottom: 10px;
+}
+
+.signup h2 {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: 1.2em;
+}
+
+.subscribe {
+  float: right;
+  margin-top: -6px;
+  margin-bottom: -10px;
+}
+
+.subscribe input[type='text'] {
+  border: 1px solid #ccc;
+  padding: 4px;
+  margin-right: 10px;
+}
+


--- a/ckan/public/css/tabs.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/* @override http://localhost:5000/style/tabs.css */
-
-ul.tabbed {
-	position: relative;
-	float: left;
-	width: 100%;
-	padding: 0;
-	margin: 0 0 1em 0;
-	list-style: none;
-	line-height: 1em;
-	border-bottom: 1px solid #aaa; 
-}
-
-ul.tabbed li {
-	float: left;
-	margin: 0 0 0 0.5em;
-	border-left: 1px solid #eaeaea;
-	border-top: 1px solid #eaeaea;
-	border-right: 1px solid #eaeaea; 
-	-moz-border-radius: 0.4em 0.4em 0 0;
-	-webkit-border-top-left-radius: 0.4em;
-	-webkit-border-top-right-radius: 0.4em;
-}
-
-ul.tabbed a {
-	display: block;
-	color: #bbb;
-	text-decoration: none;
-	font-weight: bold;
-	background: #fff;
-	margin: 0;
-	padding: 4px 0.6em;
-}
-
-ul.tabbed li a:hover,
-ul.tabbed li a:active {
-	color: #444;
-	background: #fff;
-	border-color: #aaa;
-	border-bottom-color: #fff;
-}
-
-ul.tabbed .hidden a {
-	display: none;
-}
-
-ul.tabbed a.active,
-ul.tabbed a.active:link,
-ul.tabbed a.active:visited
-{
-	position: relative;
-	top: 1px;
-	z-index: 102;
-	color: #444;
-	background: #fff;
-	border-color: #aaa;
-	border-bottom-color: #fff;
-	display: block;
-}
-
-ul.tabbed a img {
-  margin-bottom: -2px;
-}


--- a/ckan/public/css/tagcomplete.css	Thu Sep 01 12:28:48 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-.tags a.active {
-	background: #2B69C6;
-	color: #fff;
-	text-decoration: none;
-	padding: 0.2em;
-	margin: 0 0.2em;
-}


Binary file ckan/public/img/collaborate.png has changed


Binary file ckan/public/img/find.png has changed


Binary file ckan/public/img/lod2.png has changed


Binary file ckan/public/img/logo.png has changed


Binary file ckan/public/img/share.png has changed


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/scripts/vendor/modernizr/1.7/modernizr.min.js	Thu Sep 01 13:50:35 2011 +0100
@@ -0,0 +1,2 @@
+// Modernizr v1.7  www.modernizr.com
+window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document)
\ No newline at end of file


--- a/ckan/templates/layout_base.html	Thu Sep 01 12:28:48 2011 +0100
+++ b/ckan/templates/layout_base.html	Thu Sep 01 13:50:35 2011 +0100
@@ -1,18 +1,26 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html
-  xmlns="http://www.w3.org/1999/xhtml"
-  xmlns:i18n="http://genshi.edgewall.org/i18n"
-  xmlns:py="http://genshi.edgewall.org/"
-  xmlns:xi="http://www.w3.org/2001/XInclude"
-  >
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
+  <!--[if (gte IE 9)|!(IE)]><!--><html class="no-js" lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:i18n="http://genshi.edgewall.org/i18n"
+      xmlns:py="http://genshi.edgewall.org/"
+      xmlns:xi="http://www.w3.org/2001/XInclude"
+      ><!--<![endif]-->
+<xi:include href="_util.html" />
+<head>
+  <meta charset="utf-8" />
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 
-<xi:include href="_util.html" />
+  <title>${page_title()} - ${g.site_title}</title>
+  <meta name="description" content="" />
+  <meta name="author" content="" />
 
-<head>
-  <title>${page_title()} - ${g.site_title}</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <link rel="shortcut icon" href="${g.favicon}" type="image/x-icon" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="shortcut icon" href="${g.site_url}/favicon.ico" />
+
   <py:choose><py:when test="defined('optional_feed')">
     ${optional_feed()}
@@ -21,21 +29,186 @@
   <link rel="alternate" type="application/atom+xml" title="${g.site_title} - Recent Revision History" href="${h.url_for(controller='revision', action='list', id=None, format='atom', days=1)}" /></py:otherwise></py:choose>
+  <link href='http://fonts.googleapis.com/css?family=Ubuntu' rel='stylesheet' type='text/css' />
 
-  <link rel="stylesheet" href="${g.site_url}/scripts/vendor/jqueryui/1.8.11/css/ui-lightness/jquery-ui.css" type="text/css" media="screen, print" />
-  <link rel="stylesheet" href="${g.site_url}/css/style.css" type="text/css" media="screen, print" />
+  <link rel="stylesheet" href="${g.site_url}/css/boilerplate.css?v=2" />
+  <link rel="stylesheet" href="${g.site_url}/css/blueprint/screen.css" type="text/css" media="screen, projection" />
+  <link rel="stylesheet" href="${g.site_url}/css/blueprint/print.css" type="text/css" media="print" />
+  <!--[if lt IE 8]>
+    <link rel="stylesheet" href="${g.site_url}/css/blueprint/ie.css" type="text/css" media="screen, projection">
+  <![endif]-->
+  <link rel="stylesheet" href="${g.site_url}/css/style.css?v=2" />
+  <script src="${g.site_url}/scripts/vendor/modernizr/1.7/modernizr.min.js"></script>
 
-  <!--[if IE]>
-  <link rel="stylesheet" href="${g.site_url}/css/ie.css" type="text/css" media="screen, print" />
+  <py:if test="defined('optional_head')">
+    ${optional_head()}
+  </py:if>
+
+</head>
+
+<body class="${request.environ.get('pylons.routes_dict', {}).get('action')} 
+             ${request.environ.get('pylons.routes_dict', {}).get('controller').split(':')[-1]}">
+  <div id="wrap">
+    <div class="header outer">
+      <header class="container">
+        <div class="menu account">
+          <span class="ckan-logged-in" style="display: none;">
+            <a href="${h.url_for(controller='user',action='me',id=None)}">${h.icon('user')} My account</a>
+            <a href="${h.url_for('/user/logout')}">Logout</a>
+          </span>
+          <span class="ckan-logged-out">
+            <a href="${h.url_for(controller='user',action='login', id=None)}">Login</a>
+            <a href="${h.url_for(controller='user',action='register', id=None)}">Register</a>
+          </span>
+        </div>
+        <a href="${url('home')}">
+          <img width="64" src="${g.site_logo}" alt="${g.site_title} Logo" title="${g.site_title} Logo" id="logo" />
+        </a>
+        <div id="site-name">
+          <a href="${url('home')}">${g.site_title} — ${g.site_description}</a>
+        </div>
+        <div class="menu">
+          <span id="menusearch">
+            <form action="${url(controller='package', action='search')}" method="GET">
+              <input name="q" value="${c.q if hasattr(c, 'q') else ''}" class="search" placeholder="Find data packages" />
+            </form>
+          </span>
+          <div id="mainmenu">
+            <span py:if="h.am_authorized(c, actions.PACKAGE_CREATE)">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</span>
+            ${h.nav_link(c, _('Search'), controller='package', action='index', id=None, highlight_actions = 'new index')}
+            ${h.nav_link(c, _('Package Groups'), controller='group', action='index', id=None, highlight_actions = 'new index')}
+          </div>
+          ${h.nav_link(c, _('About'), controller='home', action='about', id=None)}
+        </div>
+      </header>
+    </div>
+    <py:with vars="messages = list(h._flash.pop_messages())">
+    <div class="class container flash-banner-box" py:if="len(messages)">
+      <div class="flash-banner ${m.category}" py:for="m in messages">
+        ${m.message}
+      </div>
+    </div>
+    </py:with>
+
+    <div id="main" class="container" role="main">
+      <h1 py:if="defined('page_heading')" class="page_heading">${page_heading()}</h1>
+      <div id="minornavigation" class="span-24 last">
+          <minornavigation></minornavigation>
+      </div>
+
+      <div id="content" class="span-16 append-1">
+        <py:if test="defined('content')">
+          ${content()}
+        </py:if>
+        <content>
+          <p>Master content template placeholder … please replace me.</p>
+        </content>
+      </div>
+      <div id="sidebar" class="span-7 last">
+        <ul class="widget-list">
+          <py:if test="defined('primary_sidebar_extras')">
+            ${primary_sidebar_extras()}
+          </py:if>
+          <primarysidebar>
+            <!-- Primary Side Bar Goes Here -->
+          </primarysidebar>
+        </ul>
+      </div>
+    </div>
+    <br/><br/>
+    <div id="push"></div>
+  </div>
+  <div class="footer outer">
+    <footer class="container">
+        <div class="xoxo span-6">
+          <h3 class="widget-title">About ${g.site_title}</h3>
+          <div class="textwidget">
+            <ul>
+                <li>${h.link_to(_('About'), h.url_for(controller='home', action='about', id=None))}</li>
+              <li>
+                <a href="http://twitter.com/ckanproject">Twitter @ckanproject</a>
+              </li>
+                <li>${h.link_to(_('API'), h.url_for(controller='api', action='get_api', id=None))}</li>
+                <li>${h.link_to(_('API Docs'), 'http://wiki.ckan.net/API')}</li>
+              <li>
+                <a href="http://okfn.org/contact/">Contact Us</a>
+              </li>
+              <li>
+                <a href="http://okfn.org/privacy-policy/">Privacy Policy</a>
+              </li>
+            </ul>
+          </div>
+        </div>
+        <div class="xoxo span-6">
+          <h3 class="widget-title">Languages</h3>
+          <div class="textwidget">
+            <ul>
+<?python
+  import ckan.lib.hash
+  current_url = url.current().encode('utf-8')
+  current_url_hash = ckan.lib.hash.get_message_hash(current_url)
+?>
+              <li py:for="locale in h.get_available_locales()[0::2]">
+              <a href="${url(controller='home', action='locale', 
+                             locale=str(locale), 
+                             return_to=current_url,
+                             hash=current_url_hash)}">
+                  ${locale.display_name or locale.english_name}
+                </a>
+              </li>
+            </ul>
+          </div>
+        </div>
+        <div class="xoxo span-6">
+          <h3 class="widget-title"> </h3>
+          <div class="textwidget">
+            <ul>
+              <li py:for="locale in h.get_available_locales()[1::2]">
+              <a href="${url(controller='home', action='locale', 
+                             locale=str(locale), 
+                             return_to=current_url,
+                             hash=current_url_hash)}">
+                  ${locale.display_name or locale.english_name}
+                </a>
+              </li>
+            </ul>
+          </div>
+        </div>
+        <div class="xoxo span-6 last">
+          <h3 class="widget-title"> </h3>
+          <p id="credits">
+          © 2011:
+        <img src="http://assets.okfn.org/images/logo/okf_logo_white_and_green_tiny.png" id="footer-okf-logo" />
+          <a href="http://www.okfn.org/">Open Knowledge Foundation</a><br/><br/>
+        Powered by <a href="http://ckan.org">CKAN</a>.<br/>
+            <a href="http://www.opendefinition.org/okd/"><img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/></a>
+      </p>
+        </div>
+    </footer>
+  </div><!-- eo #container -->
+
+
+  <script type="text/javascript" src="${g.site_url}/language.js"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
+  <!--script><![CDATA[window.jQuery || document.write("<script src='${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js'>\x3C/script>")]]></script-->
+
+
+  <!-- scripts concatenated and minified via ant build script-->
+  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.cookie/jquery.cookie.min.js"></script>
+  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.placeholder/jquery.placeholder.js"></script>
+  <py:if test="defined('optional_footer')">
+    ${optional_footer()}
+  </py:if>
+
+  <!--script type="text/javascript" src="${g.site_url}/scripts/application.js"></script-->
+  <!-- end scripts-->
+
+
+  <!--[if lt IE 7 ]>
+    <script src="${g.site_url}/js/libs/dd_belatedpng.js"></script>
+    <script>DD_belatedPNG.fix("img, .png_bg");</script><![endif]-->
-  
-  <script type="text/javascript" src="${g.site_url}/language.js"></script>
-  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js"></script>
-  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.cookie/jquery.cookie.min.js"></script>
-  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.placeholder/jquery.placeholder.js"></script>
-  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jqueryui/1.8.11/jquery-ui.min.js"></script>
-  <script type="text/javascript" src="${g.site_url}/scripts/application.js?lang=${c.locale}"></script>
-  
+
   <script type="text/javascript">
     $(document).ready(function() {
         var ckan_user = $.cookie("ckan_display_name");
@@ -46,249 +219,19 @@
         $('input[placeholder], textarea[placeholder]').placeholder();
     });
   </script>
-  <py:if test="defined('optional_head')">
-    ${optional_head()}
-  </py:if>
-</head>
 
-<body class="${value_of('body_class', default=lambda: c.body_class)()}
-             ${request.environ.get('pylons.routes_dict', {}).get('action')} 
-             ${request.environ.get('pylons.routes_dict', {}).get('controller').split(':')[-1]}">
-<div id="wrapper" class="hfeed">
-  <div id="header">
-  <div id="masthead">
-    <div id="branding" role="banner">
-       <h1 id="site-title">
-       <a href="${url('home')}" title="${g.site_title} Home">
-      <py:if test="g.site_logo">
-            <img src="${g.site_logo}" alt="${g.site_title} Logo" title="${g.site_title} Logo" style="display: inline;" />
-          </py:if>
-          <py:if test="not g.site_logo">
-            ${g.site_title}
-          </py:if>
-        </a>
-      </h1>
-      <div id="site-description">${g.site_description}</div>
-    </div><!-- /branding -->
+  <!--script src="http://assets.okfn.org/banner/banner.js"></script--> 
 
-    <div id="top-bar">
-      <div id="top-bar-login">
-        <span class="ckan-logged-in" style="display: none;">
-          <a href="${h.url_for(controller='user',action='me',id=None)}">${h.icon('user')} My account</a>
-          · <a href="${h.url_for('/user/logout')}">Logout</a>
-        </span>
-        <span class="ckan-logged-out">
-                <a href="${h.url_for(controller='user',action='login', id=None)}">Login</a> ·
-                <a href="${h.url_for(controller='user',action='register', id=None)}">Register</a>
-        </span>
-      </div>
-
-      <div class="search-form">
-        <form action="${url(controller='package', action='search')}" method="GET">
-          <input type="search" class="search" name="q" value="" autocomplete="off" results="5" placeholder="Search..."/>
-        </form>
-      </div>
-    </div><!-- /top-bar -->
-
-    <div id="access" role="navigation">
-      <div class="skip-link screen-reader-text">
-        <a href="#content" title="Skip to content">Skip to content</a>
-      </div> 
-      <div class="menu">
-        <ul>
-          <li>${h.nav_link(c, _('Home'), controller='home', action='index', id=None)}</li>
-          <li>${h.nav_link(c, _('Search'), controller='package', action='index', id=None, highlight_actions = 'search index')}</li>
-<?python
-access_package_create = h.check_access('package_create')
-?>
-          <li py:if="access_package_create">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</li>
-          <li>${h.nav_link(c, _('Tags'), controller='tag', action='index', id=None)}</li>
-          <li>${h.nav_link(c, _('Groups'), controller='group', action='index', id=None, highlight_actions = 'new index')}</li>
-          <li>${h.nav_link(c, _('About'), controller='home', action='about', id=None)}</li>
-      </ul>
-      </div><!-- .menu -->
-    </div><!-- #access -->
-
-  </div><!-- #masthead -->
-  </div><!-- #header -->  
-
-  <div id="main"> 
-  <py:with vars="messages = list(h._flash.pop_messages())">
-  <div class="flash-banner-box" py:if="len(messages)">
-    <div class="flash-banner ${m.category}" py:for="m in messages">
-      ${m.message}
-    </div>
-  </div>
-  </py:with>
-
-    <div id="container"> 
-      <div id="minornavigation">
-        <minornavigation></minornavigation> 
-      </div>
-      <div id="content" role="main"> 
-        <div class="page type-page hentry">
-          <div class="entry-content">
-            <!-- support both options for defining content -->
-            <py:if test="defined('content')">
-            ${content()}
-            </py:if>
-            <content>
-                <p>Master content template placeholder … please replace me.</p>
-            </content>
-          </div><!-- .entry-content -->
-        </div>
-
-        <div id="comments">
-        </div><!-- #comments -->
-
-      </div><!-- #content -->
-    </div><!-- #container -->
-
-    <div id="primary" class="widget-area" role="complementary">
-      <ul class="xoxo">
-        <py:if test="defined('primary_sidebar_extras')">
-          ${primary_sidebar_extras()}
-        </py:if>
-        <primarysidebar>
-        <!-- Primary Side Bar Goes Here -->
-        </primarysidebar>
-      </ul>
-    </div><!-- #primary .widget-area -->
-
-  </div><!-- #main -->
-  
-<div id="footer" role="contentinfo"> 
-  <div id="colophon">
-    <div id="footer-widget-area" role="complementary">
-
-      <div id="first" class="widget-area">
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Packages</h3>
-          <div class="textwidget">
-            <ul>
-                <li>${h.nav_link(c, _('Search'), controller='package', action='search', id=None)}</li>                
-                <li py:if="access_package_create">${h.nav_link(c, _('Register a new Package'), controller='package', action='new', id=None)}</li>
-                <li>${h.nav_link(c, _('Revision History'), controller='revision', action='index', id=None)}</li>
-                <li>${h.link_to(_('API'), h.url_for(controller='api', action='get_api', id=None))}</li>
-                <li>${h.link_to(_('API Docs'), 'http://wiki.ckan.net/API')}</li>
-<?python
-  from pylons import config
-  dumps_url = config.get('ckan.dumps_url')
-  dumps_format = config.get('ckan.dumps_format', '')
-?>
-                <li py:if="dumps_url">${h.link_to(_('Full %s dump') % dumps_format, dumps_url)}</li>
-            </ul>
-          </div>
-          </li>
-        </ul>
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Groups & Tags</h3>
-          <div class="textwidget">
-            <ul>
-              <li>${h.nav_link(c, _('Tags'), controller='tag', action='index', id=None)}</li>
-              <li>${h.nav_link(c, _('Groups'), controller='group', action='index', id=None)}</li>
-              <li py:if="h.check_access('group_create')">${h.nav_link(c, _('Create a new Group'), controller='group', action='new', id=None)}</li>
-              <li>${h.nav_link(c, _('Authorization Groups'), controller='authorization_group', action='index', id=None)}</li>
-              <li class="page_item" py:if="h.check_access('authorization_group_create')">${h.nav_link(c, _('Create a new Authorization Group'), controller='authorization_group', action='new', id=None)}</li>
-            </ul>
-          </div>
-          </li>
-        </ul>
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">About</h3>
-          <div class="textwidget">
-            <ul>
-              <li>
-                <a href="http://ckan.org/">Project Home Page</a>
-              </li>
-              <li>
-                <a href="http://www.okfn.org/contact/">Contact Us</a>
-              </li>
-              <li>
-                <a href="http://www.okfn.org/privacy-policy/">Privacy Policy</a>
-              </li>
-            </ul>
-          </div>
-          </li>
-        </ul>
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Language</h3>
-          <div class="textwidget">
-            <ul>
-<?python
-  import ckan.lib.hash
-  current_url = url.current().encode('utf-8')
-  current_url_hash = ckan.lib.hash.get_message_hash(current_url)
-?>
-              <li py:for="locale in h.get_available_locales()">
-              <a href="${url(controller='home', action='locale', 
-                             locale=str(locale), 
-                             return_to=current_url,
-                             hash=current_url_hash)}">
-                  ${locale.display_name}
-                </a>
-              </li>
-            </ul>
-          </div>
-          </li>
-        </ul>
-      </div><!-- #first .widget-area -->
-
-      <div id="fourth" class="widget-area">
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Credits</h3>
-          <div class="textwidget">
-            <ul>
-              <li i18n:msg="">
-                <img src="http://assets.okfn.org/images/logo/okf_logo_white_and_green_tiny.png" id="footer-okf-logo" />
-                An
-                <a href="http://www.okfn.org/">Open Knowledge Foundation</a> Project
-              </li>
-              <li>
-                © <a href="http://www.okfn.org/">Open Knowledge Foundation</a>
-              </li>
-              <li>
-                <a href="http://www.opendefinition.org/okd/">
-                <img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/oc_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/>
-                </a>
-              </li>
-              <li>
-                <a href="http://www.opendefinition.org/okd/">
-                <img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/>
-                </a>
-              </li>
-            </ul>
-          </div>
-          </li>
-        </ul>
-      </div><!-- #fourth .widget-area -->
-
-    </div><!-- #footer-widget-area -->
-
-    <div id="site-info">
-      <a href="${url('/')}" title="${g.site_title}" rel="home">
-        ${g.site_title}</a>
-    </div><!-- #site-info -->
-
-    <div id="site-generator">
-      <a href="http://ckan.org/"
-        title="CKAN" rel="generator">
-        Powered by CKAN
-        <span i18n:msg="version">
-          v${c.__version__}
-        </span>
-      </a>
-    </div><!-- #site-generator -->
-  </div><!-- #colophon -->
-</div><!-- #footer --> 
-
-</div><!-- #wrapper -->
+  <script>
+    var _gaq=[["_setAccount","UA-XXXXX-X"],["_trackPageview"]]; // Change UA-XXXXX-X to be your site's ID 
+    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
+    g.src=("https:"==location.protocol?"//ssl":"//www")+".google-analytics.com/ga.js";
+    s.parentNode.insertBefore(g,s)}(document,"script"));
+  </script>
 
 ${h.literal(getattr(g, 'template_footer_end', ''))}
 </body></html>
+
+
+


http://bitbucket.org/okfn/ckan/changeset/b4ba30dcde4a/
changeset:   b4ba30dcde4a
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-01 22:51:19
summary:     [theme][s]: Imported package/new.html; rearranged script imports in layout_base.html
affected #:  4 files (1.5 KB)

--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/flexitable.css	Thu Sep 01 21:51:19 2011 +0100
@@ -0,0 +1,50 @@
+table.flexitable .controls {
+	padding: 0;
+	width: 4em;
+}
+
+table.flexitable input[type="url"] {
+  width: auto;
+}
+
+form .resource-hash, form .resource-id {
+  display: none;
+}
+
+table.flexitable .controls a {
+	float: left;
+	display: block;
+	height: 16px;
+	width: 16px;
+	margin: 0 0.3em 0 0;
+	padding: 0;
+	background-color: transparent;
+	background-repeat: no-repeat;
+	background-position: left top;
+	overflow: hidden;
+	text-indent: -999em;
+	letter-spacing: -1000em;
+}
+
+table.flexitable .controls a:last-child {
+	margin-right: 0;
+}
+
+table.flexitable .controls a.remove { background-image: url(../images/icons/remove.png); }
+/*.flexitable .controls .move { 
+	background-image: url(../images/icons/handle_grey.png);
+	cursor: move;
+}*/
+table.flexitable .controls a.moveUp { background-image: url(../images/icons/arrow_up.png); }
+table.flexitable .controls a.moveDown { background-image: url(../images/icons/arrow_down.png); }
+
+p.flexitable button.addRow {
+	background-image: url(../images/icons/add.png);
+	background-position: 0.4em 0.4em;
+	background-repeat: no-repeat;
+	padding-left: 1.7em;
+}
+
+button.addRow {
+        float: right;
+}


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/reveal_instructions.css	Thu Sep 01 21:51:19 2011 +0100
@@ -0,0 +1,5 @@
+fieldset span.as_hyperlink {
+  text-decoration: underline;
+  color: blue;
+  cursor: pointer; }
+


--- a/ckan/templates/layout_base.html	Thu Sep 01 13:50:35 2011 +0100
+++ b/ckan/templates/layout_base.html	Thu Sep 01 21:51:19 2011 +0100
@@ -38,7 +38,15 @@
     <link rel="stylesheet" href="${g.site_url}/css/blueprint/ie.css" type="text/css" media="screen, projection"><![endif]--><link rel="stylesheet" href="${g.site_url}/css/style.css?v=2" />
+  
   <script src="${g.site_url}/scripts/vendor/modernizr/1.7/modernizr.min.js"></script>
+  <script type="text/javascript" src="${g.site_url}/language.js"></script>
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
+  <!--script><![CDATA[window.jQuery || document.write("<script src='${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js'>\x3C/script>")]]></script-->
+
+  <!-- scripts concatenated and minified via ant build script-->
+  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.cookie/jquery.cookie.min.js"></script>
+  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.placeholder/jquery.placeholder.js"></script><py:if test="defined('optional_head')">
     ${optional_head()}
@@ -188,14 +196,6 @@
   </div><!-- eo #container -->
 
 
-  <script type="text/javascript" src="${g.site_url}/language.js"></script>
-  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
-  <!--script><![CDATA[window.jQuery || document.write("<script src='${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js'>\x3C/script>")]]></script-->
-
-
-  <!-- scripts concatenated and minified via ant build script-->
-  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.cookie/jquery.cookie.min.js"></script>
-  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.placeholder/jquery.placeholder.js"></script><py:if test="defined('optional_footer')">
     ${optional_footer()}
   </py:if>


--- a/ckan/templates/package/new.html	Thu Sep 01 13:50:35 2011 +0100
+++ b/ckan/templates/package/new.html	Thu Sep 01 21:51:19 2011 +0100
@@ -4,10 +4,13 @@
   py:strip=""><py:def function="page_title">New - Data Packages</py:def>
+  <py:def function="page_heading">Register a New Data Package</py:def><py:def function="body_class">hide-sidebar</py:def><py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+
     <!-- Reveal instructions --><script type="text/javascript" src="${g.site_url}/scripts/reveal_instructions.js"></script><link rel="stylesheet" href="${g.site_url}/css/reveal_instructions.css" /> 
@@ -15,20 +18,21 @@
     <!-- Flexitable --><script type="text/javascript" src="${g.site_url}/scripts/flexitable.js"></script><link rel="stylesheet" href="${g.site_url}/css/flexitable.css" /> 
- 
     <script type="text/javascript">
-      jQuery(document).ready(function($) {
-        CKAN.Utils.PackageSlugCreator.create($('#title'), $('#name'));
-        if (!$('#preview').length) {
-          $("#title").focus();
-        }
-      });
-    </script>
+       jQuery(document).ready(function($) {
+         CKAN.Utils.PackageSlugCreator.create($('#title'), $('#name'));
+         if (!$('#preview').length) {
+           $("#title").focus();
+         }
+       });
+     </script>
+
+    <!-- Warning: This file does not appear to exist. Anywhere, ever. 
+    <xi:include href="new_package_form.js"/>
+    --></py:def><div py:match="content">
-    <h2>Register a New Data Package</h2>
-
     <div id="preview" style="margin-left: 20px;" py:if="c.preview"><hr /><h2>Preview</h2>


http://bitbucket.org/okfn/ckan/changeset/0d92549717a7/
changeset:   0d92549717a7
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 13:00:53
summary:     [theme][s]: Tidied up the JS includes of the basic template & package/new.
affected #:  2 files (447 bytes)

--- a/ckan/templates/layout_base.html	Thu Sep 01 21:51:19 2011 +0100
+++ b/ckan/templates/layout_base.html	Fri Sep 02 12:00:53 2011 +0100
@@ -39,14 +39,25 @@
   <![endif]--><link rel="stylesheet" href="${g.site_url}/css/style.css?v=2" />
   
+  <script type="text/javascript" src="${g.site_url}/language.js"></script>
+  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js"></script>
+  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.cookie/jquery.cookie.min.js"></script>
+  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.placeholder/jquery.placeholder.js"></script>
+  <script type="text/javascript" src="${g.site_url}/scripts/vendor/jqueryui/1.8.11/jquery-ui.min.js"></script>
+  <script type="text/javascript" src="${g.site_url}/scripts/application.js?lang=${c.locale}"></script>
+
   <script src="${g.site_url}/scripts/vendor/modernizr/1.7/modernizr.min.js"></script>
-  <script type="text/javascript" src="${g.site_url}/language.js"></script>
-  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
-  <!--script><![CDATA[window.jQuery || document.write("<script src='${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js'>\x3C/script>")]]></script-->
 
-  <!-- scripts concatenated and minified via ant build script-->
-  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.cookie/jquery.cookie.min.js"></script>
-  <script type="text/javascript" src="http://assets.okfn.org/ext/jquery.placeholder/jquery.placeholder.js"></script>
+  <script type="text/javascript">
+    $(document).ready(function() {
+        var ckan_user = $.cookie("ckan_display_name");
+        if (ckan_user) {
+            $(".ckan-logged-out").hide();
+            $(".ckan-logged-in").show();
+        }
+        $('input[placeholder], textarea[placeholder]').placeholder();
+    });
+  </script><py:if test="defined('optional_head')">
     ${optional_head()}
@@ -200,28 +211,8 @@
     ${optional_footer()}
   </py:if>
 
-  <!--script type="text/javascript" src="${g.site_url}/scripts/application.js"></script-->
-  <!-- end scripts-->
 
 
-  <!--[if lt IE 7 ]>
-    <script src="${g.site_url}/js/libs/dd_belatedpng.js"></script>
-    <script>DD_belatedPNG.fix("img, .png_bg");</script>
-  <![endif]-->
-
-  <script type="text/javascript">
-    $(document).ready(function() {
-        var ckan_user = $.cookie("ckan_display_name");
-        if (ckan_user) {
-            $(".ckan-logged-out").hide();
-            $(".ckan-logged-in").show();
-        }
-        $('input[placeholder], textarea[placeholder]').placeholder();
-    });
-  </script>
-
-  <!--script src="http://assets.okfn.org/banner/banner.js"></script--> 
-
   <script>
     var _gaq=[["_setAccount","UA-XXXXX-X"],["_trackPageview"]]; // Change UA-XXXXX-X to be your site's ID 
     (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;


--- a/ckan/templates/package/new.html	Thu Sep 01 21:51:19 2011 +0100
+++ b/ckan/templates/package/new.html	Fri Sep 02 12:00:53 2011 +0100
@@ -18,6 +18,7 @@
     <!-- Flexitable --><script type="text/javascript" src="${g.site_url}/scripts/flexitable.js"></script><link rel="stylesheet" href="${g.site_url}/css/flexitable.css" /> 
+
     <script type="text/javascript">
        jQuery(document).ready(function($) {
          CKAN.Utils.PackageSlugCreator.create($('#title'), $('#name'));
@@ -26,10 +27,6 @@
          }
        });
      </script>
-
-    <!-- Warning: This file does not appear to exist. Anywhere, ever. 
-    <xi:include href="new_package_form.js"/>
-    --></py:def><div py:match="content">


http://bitbucket.org/okfn/ckan/changeset/f9ec5e2b0fb5/
changeset:   f9ec5e2b0fb5
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 13:33:11
summary:     [theme][s]: Imported all package templates, tidying js and comments.
affected #:  8 files (4.8 KB)

--- a/ckan/templates/package/authz.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/authz.html	Fri Sep 02 12:33:11 2011 +0100
@@ -3,13 +3,10 @@
   py:strip=""><py:def function="page_title">${c.pkgtitle or c.pkgname} - Authorization - Data Packages</py:def>
+  <py:def function="page_heading">Authorization: ${c.pkgtitle or c.pkgname}</py:def><div py:match="content">
-    <h2>
-      Authorization for Data Package: ${c.pkgname}
-    </h2>
-
-    <h2>Update Existing Roles</h2>
+    <h3>Update Existing Roles</h3><form id="theform" method="POST">
       ${authz_form_table('theform', c.roles, c.users, c.user_role_dict)}
@@ -18,7 +15,7 @@
       </button></form>
 
-    <h2>Add Roles for Any User</h2>
+    <h3>Add Roles for Any User</h3><form id="addform" method="POST">
       ${authz_add_table(c.roles)}
@@ -27,7 +24,7 @@
 
     <hr/>
 
-    <h2>Existing Roles for Authorization Groups</h2>
+    <h3>Existing Roles for Authorization Groups</h3><form id="authzgroup_form" method="POST">
       ${authz_form_group_table('authzgroup_form', c.roles, c.authz_groups, c.authz_groups_role_dict)}
@@ -36,7 +33,7 @@
       </button></form>
 
-    <h2>Add Roles for Any Authorization Group</h2>
+    <h3>Add Roles for Any Authorization Group</h3><form id="authzgroup_addform" method="POST">
       ${authz_add_group_table(c.roles)}


--- a/ckan/templates/package/edit.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/edit.html	Fri Sep 02 12:33:11 2011 +0100
@@ -3,21 +3,20 @@
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">${c.pkgtitle or c.pkgname} - Edit - Data Packages</py:def>
+  <py:def function="page_title">${c.pkg.title or c.pkg.name} - Edit - Data Packages</py:def>
+  <py:def function="page_heading">Edit: ${c.pkg.title or c.pkg.name}</py:def><py:def function="body_class">hide-sidebar</py:def><py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+
     <!-- Flexitable --><script type="text/javascript" src="${g.site_url}/scripts/flexitable.js"></script><link rel="stylesheet" href="${g.site_url}/css/flexitable.css" /></py:def><div py:match="content" class="package">
-    <h2>
-      Edit Data Package: ${c.pkgname}
-    </h2>
-
     <div id="preview" style="margin-left: 20px;" py:if="c.preview"><hr /><h2>Preview</h2>


--- a/ckan/templates/package/history.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/history.html	Fri Sep 02 12:33:11 2011 +0100
@@ -1,30 +1,15 @@
 <html xmlns:py="http://genshi.edgewall.org/"
-  xmlns:i18n="http://genshi.edgewall.org/i18n"
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">${c.pkg_dict.get('title', c.pkg_dict['name'])} - Data Packages - History</py:def>
+  <py:def function="page_title">${c.pkg.title or c.pkg.name} - Data Packages - History</py:def>
+  <py:def function="page_heading">History: ${c.pkg.title or c.pkg.name}</py:def><!-- Sidebar --><py:match path="primarysidebar">
-    <li class="widget-container widget_text">
-        <h4>Updates</h4>
-        <p class="atom-feed-link package-history-link">
-          <a
-            href="${url(controller='package', action='history', id=c.pkg_dict['name'], format='atom', days=7)}"
-            title="${g.site_title} - Package History - ${c.pkg_dict['name']}">
-            Subscribe »</a>
-        </p>
-    </li></py:match><div py:match="content" class="package">
-
-    <!-- Title -->
-    <h2 class="head">
-        ${c.pkg_dict.get('title', c.pkg_dict['name'])} - History
-    </h2>
-
     <h3>Revisions</h3><form id="package-revisions" action="diff" method="post"
       xmlns:py="http://genshi.edgewall.org/"
@@ -35,11 +20,11 @@
         Error: ${c.error}
       </h3>
       
-      <input type="hidden" name="pkg_name" value="${c.pkg_dict['name']}"/>
+      <input type="hidden" name="pkg_name" value="${c.pkg.name}"/><table><tr>
-          <th></th><th>Revision ID</th><th>Package with timestamp</th><th>Author</th><th>Log Message</th>
+          <th></th><th>Revision</th><th>Timestamp</th><th>Author</th><th>Log Message</th></tr><py:for each="index, rev in enumerate(c.pkg_revisions)"><tr>
@@ -48,12 +33,11 @@
               ${h.radio("selected2", rev.id, checked=(index == len(c.pkg_revisions)-1))}
             </td><td>
-              <a href="${h.url_for(controller='revision',action='read',id=rev['id'])}">${rev['id'][:4]}…</a>
+              <a href="${h.url_for(controller='revision',action='read',id=rev.id)}">${rev.id}</a></td>
-            <td>
-              <a href="${h.url_for(controller='package',action='read',id='%s@%s' % (c.pkg_dict['name'], rev['timestamp']))}" title="${'Read package as of %s' % rev['timestamp']}">${h.render_datetime(rev['timestamp'])}</a></td>
-            <td>${h.linked_user(rev['author'])}</td>
-            <td>${rev['message']}</td>
+            <td>${rev.timestamp}</td>
+            <td>${h.linked_user(rev.author)}</td>
+            <td>${rev.message}</td></tr></py:for></table>
@@ -63,7 +47,7 @@
 
   <py:def function="optional_feed"><link rel="alternate" type="application/atom+xml" title="Package History"
-    href="${url(controller='package', action='history', id=c.pkg_dict['name'], format='atom', days=7)}" />
+    href="${url(controller='package', action='history', id=c.pkg.name, format='atom', days=7)}" /></py:def><xi:include href="layout.html" />


--- a/ckan/templates/package/layout.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/layout.html	Fri Sep 02 12:33:11 2011 +0100
@@ -6,16 +6,20 @@
   ><py:match path="minornavigation">
-    <py:if test="c.pkg and not c.is_preview">
+    <py:if test="c.pkg"><ul class="tabbed"><li>${h.subnav_link(c, h.icon('package') + _('View'), controller='package', action='read', id=c.pkg.name)}</li>
-      <li py:if="h.check_access('package_update',{'id':c.pkg.id})">
+      <li py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
           ${h.subnav_link(c, h.icon('package_edit') + _('Edit'), controller='package', action='edit', id=c.pkg.name)}
       </li>
-      <li>${h.subnav_link(c, h.icon('page_stack') + _('History'), controller='package', action='history', id=c.pkg.name)}</li>
-      <li py:if="h.check_access('package_edit_permissions',{'id':c.pkg.id})">
+      <li>${h.subnav_link(c, h.icon('page_white_stack') + _('History'), controller='package', action='history', id=c.pkg.name)}</li>
+      <li py:if="h.am_authorized(c, actions.EDIT_PERMISSIONS, c.pkg)">
         ${h.subnav_link(c, h.icon('lock') + _('Authorization'), controller='package', action='authz', id=c.pkg.name)}
-      </li>
+        </li>
+        <li class="action">
+        ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
+        controller='package', action='history', id=c.pkg.name, format='atom', days=7)}
+        </li></ul></py:if></py:match>


--- a/ckan/templates/package/new.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/new.html	Fri Sep 02 12:33:11 2011 +0100
@@ -19,6 +19,7 @@
     <script type="text/javascript" src="${g.site_url}/scripts/flexitable.js"></script><link rel="stylesheet" href="${g.site_url}/css/flexitable.css" /> 
 
+    <!-- Auto-generate 'name' field --><script type="text/javascript">
        jQuery(document).ready(function($) {
          CKAN.Utils.PackageSlugCreator.create($('#title'), $('#name'));


--- a/ckan/templates/package/read.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/read.html	Fri Sep 02 12:33:11 2011 +0100
@@ -1,13 +1,24 @@
 <html xmlns:py="http://genshi.edgewall.org/"
   xmlns:i18n="http://genshi.edgewall.org/i18n"
   xmlns:xi="http://www.w3.org/2001/XInclude"
+  xmlns:foaf="http://xmlns.com/foaf/0.1/"
+  xmlns:owl="http://www.w3.org/2002/07/owl#"
+  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+  xmlns:dc="http://purl.org/dc/terms/"
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns:dcat="http://www.w3.org/ns/dcat#"
+  typeof="dcat:Dataset"
+  about=""
   py:strip="">
 
-  <py:def function="page_title">${c.pkg_dict.get('title', c.pkg_dict['name'])} - Data Packages</py:def>
+  <py:def function="page_title">${c.pkg.title or c.pkg.name} - Data Packages</py:def>
+  
+  <py:def function="page_heading" property="dc:title">${c.pkg.title}</py:def>
+  
       
   <py:match path="primarysidebar">
   
-    <li class="widget-container widget_text" py:if="not c.hide_welcome_message">
+    <li class="widget-container boxed widget_text" py:if="not c.hide_welcome_message"><h3>First time at ${g.site_title}?</h3><p>
           ${g.site_title} is a catalogue for data. ${h.subnav_link(c, _('Click here to find out more ...'), controller='home', action='about', id=None)}
@@ -15,47 +26,77 @@
     </li><li class="widget-container widget_text">
-        <h3>Tags</h3>
-        ${tag_list(c.pkg_dict.get('tags', ''))}
-        <p class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
-            ${h.subnav_link(c, 'Add a new Tag', controller='package', action='edit', id=c.pkg.name)}
-        </p>
+      <ul class="property-list">
+        <li py:if="c.pkg.url">
+          <h3>Source</h3>
+          <span property="foaf:homepage">${c.pkg_url_link}</span>
+        </li>
+        <li py:if="c.pkg_author_link">
+          <h3>Author</h3>
+          <span property="dc:creator">${c.pkg_author_link}</span>
+        </li>
+        <li py:if="c.pkg_maintainer_link">
+          <h3>Maintainer</h3>
+          <span property="dc:contributor">${c.pkg_maintainer_link}</span>
+        </li>
+        <li py:if="c.pkg.version">
+          <h3>Version</h3>
+          ${c.pkg.version}
+        </li>
+        <li py:if="c.eu_country">
+          <h3>Country</h3> ${h.code_to_country(c.eu_country)}
+        </li>
+        <li py:if="len(c.pkg.tags)">
+          <h3>Tags</h3>
+          ${tag_list(c.pkg.tags)}
+          <span class="widget_action" py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
+            ${h.subnav_link(c, 'add tags »', controller='package', action='edit', id=c.pkg.name)}
+          </span>
+        </li>
+        <li>
+          <h3>Groups</h3>
+          <py:if test="c.pkg.groups">        
+              <ul>
+                <li py:for="group in sorted(c.pkg.groups, key=lambda g: g.display_name)">
+                    <a href="${h.url_for(controller='group', action='read', id=group.name)}">${group.display_name}</a>
+                </li>
+              </ul>
+          </py:if>
+          <p class="hint">
+            <py:if test="not c.pkg.groups">
+               Groups are collections of packages maintained by users of ${g.site_title}. This package has not been added to any groups yet.
+            </py:if>
+            <p class="widget_action" py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
+              ${h.subnav_link(c, 'add to a group »', controller='package', action='edit', id=c.pkg.name)}        
+            </p>
+          </p>
+        </li>
+        <li py:if="h.am_authorized(c, actions.CHANGE_STATE, c.pkg)">
+          <li><h3>State</h3> ${c.pkg.state}</li>
+        </li>
+        <li py:if="c.harvest_catalogue_name">
+        <h3>Source</h3><a href="${c.harvest_dataset_url}">Source
+          page</a> on <a
+          href="${c.harvest_catalogue_url}">${c.harvest_catalogue_name}</a>
+        </li>
+        <li py:if="c.package_relationships">
+          <h3>Related packages</h3>
+          <ul>
+            <py:for each="pkg, relationship_str, comment in c.package_relationships">
+              <li>
+                ${h.literal(relationship_str % (h.link_to(pkg.name, h.url_for(controller="package", action="read", id=pkg.name))))}
+                <span py:if="comment is not None and len(comment)" class="relationship_comment">
+                    (${comment})
+                </span>
+              </li>
+            </py:for>
+          </ul>
+        </li>
+      </ul></li>
 
-    <li class="widget-container widget_text">
-        <h3>Groups</h3>
-        <py:if test="c.pkg.groups">        
-            <ul>
-              <li py:for="group in sorted(c.pkg.groups, key=lambda g: g.display_name)">
-                  <a href="${h.url_for(controller='group', action='read', id=group.name)}">${group.display_name}</a>
-              </li>
-            </ul>
-        </py:if>
-        <py:if test="not c.pkg.groups">
-             Groups are collections of packages maintained by users of ${g.site_title}. This package has not been added to any groups yet.
-        </py:if>
-        <p class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
-            ${h.subnav_link(c, 'Add to a Group', controller='package', action='edit', id=c.pkg.name)}        
-        </p>
-    </li>
     
-    <py:if test="c.package_relationships">
-        <li class="widget-container widget_text">
-              <h3>Related packages</h3>
-              <ul>
-                <py:for each="pkg, relationship_str, comment in c.package_relationships">
-                  <li>
-                    ${h.literal(relationship_str % (h.link_to(pkg.name, h.url_for(controller="package", action="read", id=pkg.name))))}
-                    <span py:if="comment is not None and len(comment)" class="relationship_comment">
-                        (${comment})
-                    </span>
-                  </li>
-                </py:for>
-              </ul>
-        </li>
-    </py:if>
-    
-    <li class="widget-container widget_text">
+    <li class="widget-container boxed widget_text"><py:if test="c.pkg.isopen() and c.pkg.resources"><h3>
         This Package is Open
@@ -63,9 +104,10 @@
       <p py:if="c.pkg.license_id">
         License:
         <py:choose test="">
-          <strong py:when="c.pkg.license and c.pkg.license.url"><br /><a href="${c.pkg.license.url}">${c.pkg.license.title}</a></strong>
-          <strong py:when="c.pkg.license"><br />${c.pkg.license.title}</strong>
-          <strong py:when="c.pkg.license_id"><br />${c.pkg.license_id}</strong>
+          <strong py:when="c.pkg.license and c.pkg.license.url"><a
+              href="${c.pkg.license.url}" rel="dc:rights">${c.pkg.license.title.split('::')[-1]}</a></strong>
+          <strong py:when="c.pkg.license" property="dc:rights">${c.pkg.license.title}</strong>
+          <strong py:when="c.pkg.license_id" property="dc:rights">${c.pkg.license_id}</strong></py:choose></p><p class="okd">
@@ -73,10 +115,6 @@
           href="http://www.opendefinition.org/okd/"
           title="This package satisfies the Open Knowledge Definition."><img src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" alt="[Open Data]" /></a>
-        <a
-          href="http://www.opendefinition.org/okd/"
-          title="This package satisfies the Open Knowledge Definition.">
-          <img src="http://assets.okfn.org/images/ok_buttons/oc_80x15_blue.png" alt="[Open Content]" /></a></p></py:if>
 
@@ -93,22 +131,11 @@
   </py:match><div py:match="content">
-    <py:if test="c.pkg_revision_id">
-      <div id="revision" class="widget-container">
-            <p py:if="c.pkg_revision_not_latest">This is an old revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}. It may differ significantly from the <a href="${url(controller='package', action='read', id=c.pkg.name)}">current revision</a>.</p>
-            <p py:if="not c.pkg_revision_not_latest">This is the current revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}.</p>
-      </div>
-    </py:if>
-
     <xi:include href="read_core.html" /></div>
 
-  <py:if test="config.get('rdf_packages')">
-    <py:def function="optional_head">
-      <link rel="alternate" type="application/rdf+xml" title="RDF/XML" href="${config['rdf_packages'] + '/' + c.pkg.id + '.rdf' }" />
-      <link rel="alternate" type="application/turtle" title="RDF/Turtle" href="${config['rdf_packages'] + '/' + c.pkg.id + '.ttl' }" />
-    </py:def>
-  </py:if>
+  <py:def function="optional_head">
+  </py:def><py:def function="optional_feed"><link rel="alternate" type="application/atom+xml" title="Package History"


--- a/ckan/templates/package/read_core.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/read_core.html	Fri Sep 02 12:33:11 2011 +0100
@@ -4,24 +4,6 @@
   ><xi:include href="../_util.html" /><div id="package" class="package">
-    <!-- Title -->
-    <h2 class="head">
-      ${c.pkg_dict.get('title','')}
-      <p class="atom-feed-link package-history-link">
-        <a
-          href="${url(controller='package', action='history', id=c.pkg.name, format='atom', days=7)}"
-          title="${g.site_title} - Package History - ${c.pkg.name}">
-          Subscribe »</a>
-      </p>
-    </h2>
-    
-    <!-- Source URL -->    
-    <div class="url" py:if="c.pkg_dict.get('url')">
-      <p>
-        Source: ${c.pkg_url_link}
-      </p>
-    </div>
-    
     <!-- About package --><div class="notes" py:if="str(c.pkg_notes_formatted).strip()">
       ${c.pkg_notes_formatted}
@@ -31,30 +13,30 @@
     <div class="resources subsection"><h3>Downloads & Resources</h3><py:choose test="">
-      <table py:when="c.pkg_dict.get('resources', [])">
+      <table py:when="c.pkg.resources"><tr><th>Description</th><th>Format</th>
-            <th>Hash</th></tr>
-        <py:for each="res in c.pkg_dict.get('resources', [])">
-          <tr>
+        <py:for each="res in c.pkg.resources">
+          <tr rel="dcat:distribution" resource="_:res${res.id}"
+            typeof="dcat:Distribution"><td><py:choose test="">
-                    <py:when test="res.get('description')">
-                      <a href="${res.get('url', '')}" target="_blank">${res.description}</a>  
+                    <py:when test="res.description">
+                    <a href="${res.url}" rel="dcat:accessURL" target="_blank"><span
+                        property="rdfs:label">${res.description}</span></a></py:when><py:otherwise test="">
-                      <a href="${res.get('url', '')}" target="_blank">Download <em>(no description)</em></a>  
+                      <a href="${res.url}" rel="dcat:accessURL" target="_blank">Download <em>(no description)</em></a></py:otherwise></py:choose></td>
-              <td>${res.get('format', '')}</td>
-              <td>${res.get('hash', '')}</td>
+              <td property="dc:format">${res.format}</td></tr></py:for><caption>
-                This is a list of all known formats and datasets for <em>${c.pkg_dict.get('title', '')}</em>. If you know of another (CSV, SPARQL end-point etc.) ${h.subnav_link(c, 'please edit this page and add it to the list', controller='package', action='edit', id=c.pkg.name)}.
+                This is a list of all known formats and datasets for <em>${c.pkg.title}</em>. If you know of another (CSV, SPARQL end-point etc.) ${h.subnav_link(c, 'please edit this page and add it to the list', controller='package', action='edit', id=c.pkg.name)}.
             </caption></table><table py:otherwise=""><tr><th>Resources</th><td>None given for this package.</td></tr></table>
@@ -75,83 +57,27 @@
     </py:def><div class="details subsection">
-    <h3>About this package</h3>
+    <h3>Additional Information</h3><table>
+      <thead>
+        <tr>
+          <th>Field</th>
+          <th>Value</th>
+        </tr>
+      </thead><tbody>
-        ${details_item('Author', c.pkg_author_link)}
-        ${details_item('Maintainer', c.pkg_maintainer_link)}
-        ${details_item('Version', c.pkg_dict.get('version', ''))}
-        <tr>
-          <td class="package-label">
-            License
-          </td>
-          <td class="package-details">
-          <py:choose test="">
-          <py:when test="c.pkg.license and c.pkg.license.url">
-            <a href="${c.pkg.license.url}">${c.pkg.license.title}</a>
-          </py:when>
-          <py:when test="c.pkg.license">${c.pkg.license.title}</py:when>
-          <py:when test="c.pkg.license_id">${c.pkg.license_id}</py:when>
-          <py:otherwise test="">
-            -
-          </py:otherwise>
-          </py:choose>
-          </td>
-        </tr>
-        <tr py:for="key, value in c.pkg_extras">
-          <td class="package-label">${_(key)}</td>
-          <td class="package-details">${value}</td>
+        <tr py:for="i, (key, value) in enumerate(c.pkg_extras)"
+          rel="dc:relation" resource="_:extra${i}">
+          <td class="package-label" property="rdfs:label">${_(key)}</td>
+          <td class="package-details" property="rdf:value">${value}</td></tr></tbody>
-          <caption py:if="not c.is_preview and h.check_access('package_update',{'id':c.pkg.id})">
+          <caption py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
               Something missing? ${h.subnav_link(c, 'Please help improve this page by adding more information', controller='package', action='edit', id=c.pkg.name)}.
           </caption></table></div>
     
-    <div class="api subsection" py:if="not c.is_preview">
-        <h3>${g.site_title} API / datapkg</h3>
-        <div>
-            <p>
-                This information on this page (the package metadata) is also
-                available programatically via this site's <a
-                  href="${h.url_for(controller='api', action='get_api', id=None)}">CKAN API</a>.
-            </p>
-            <h5>JSON</h5>
-            <code>
-                <py:if test="config.get('ckan.api_url')">                
-                  <a href="${config.get('ckan.api_url') + h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}">
-                    ${config.get('ckan.api_url') + h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}</a>
-                </py:if>                
-                <py:if test="not config.get('ckan.api_url')">
-                  <a href="${h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}">
-                    ${h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}</a>
-                </py:if>
-            </code>
-            <py:if test="config.get('rdf_packages')">
-                <h5>RDF</h5>
-                <code><a href="${config.get('rdf_packages') + '/' + c.pkg.id + '.rdf'}">RDF/XML</a></code>
-                <code><a href="${config.get('rdf_packages') + '/' + c.pkg.id + '.ttl'}">Turtle</a></code>
-                <code><a href="${config.get('rdf_packages') + '/' + c.pkg.id + '.nt'}">N-Triples</a></code>
-            </py:if>
-            <p>
-                The information on this page and the downloads / resources are also available using the 
-                <a href="http://blog.okfn.org/2010/02/23/introducing-datapkg/">datapkg command line utility</a>.
-            </p>
-            <h5>Information about this package:</h5>
-            <code>$ datapkg info ckan://${c.pkg.name}</code>            
-            <h5>Download:</h5>
-            <code>$ datapkg download ckan://${c.pkg.name} .</code>            
-        </div>
-    </div>
-
-    <ul>
-      <py:if test="not c.is_preview and h.check_access('package_change_state',{'id':c.pkg.id})">
-         <li><strong>State:</strong> ${c.pkg_dict.get('state', '')}</li>
-      </py:if>
-    </ul>
-
-    <hr class="cleared" /></div><!-- /package --></html>


--- a/ckan/templates/package/search.html	Fri Sep 02 12:00:53 2011 +0100
+++ b/ckan/templates/package/search.html	Fri Sep 02 12:33:11 2011 +0100
@@ -7,11 +7,21 @@
 
   <xi:include href="facets.html" /><py:def function="page_title">Search - ${g.site_title}</py:def>
+  <py:def function="page_heading">Search - ${g.site_title}</py:def>
+
+  <py:def function="optional_head">
+  <style>
+      #minornavigation { visibility: hidden; }
+      #menusearch {
+        display: none;
+      }
+    </style>    
+  </py:def><py:match path="primarysidebar">
     
-    <li class="widget-container widget_text" py:if="h.check_access('package_create')">
-        <h4>Add a package</h4>
+    <li class="widget-container boxed widget_text" py:if="h.am_authorized(c, actions.PACKAGE_CREATE)">
+        <h3>Add a package</h3><p>
             Do you know of a dataset that should be added to ${g.site_title}?
             <br/>
@@ -20,10 +30,9 @@
         </p></li>
  
-    ${facet_sidebar('groups', label=h.group_name_to_title)}
     ${facet_sidebar('tags')}
     ${facet_sidebar('res_format')}
-    ${facet_sidebar('license')}
+    ${facet_sidebar('groups', label=h.group_name_to_title)}
 
     <li class="widget-container widget_text"><h4>Other access</h4>
@@ -44,8 +53,6 @@
   </py:match><div py:match="content">
-    <h2>Search ${g.site_title}</h2>
-    
     <xi:include href="search_form.html" />
     ${field_list()}   
     
@@ -53,10 +60,10 @@
         <p i18n:msg="item_count"><strong>There was an error while searching.</strong> 
             Please try another search term.</p></py:if>
-      <py:if test="request.params">      
+      <py:if test="c.q"><h4 i18n:msg="item_count"><strong>${c.page.item_count}</strong> packages found</h4></py:if>
-      <py:if test="c.page.item_count == 0 and request.params">
+      <py:if test="c.page.item_count == 0 and c.q"><p i18n:msg="">Would you like to <a href="${h.url_for(action='new', id=None)}">create a new package?</a></p></py:if>
       ${package_list_from_dict(c.page.items)}


http://bitbucket.org/okfn/ckan/changeset/a52d2c533e7b/
changeset:   a52d2c533e7b
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 15:09:32
summary:     [theme][s]: Forms.css include is in the main template, not sub-templates.
affected #:  3 files (384 bytes)

--- a/ckan/templates/layout_base.html	Fri Sep 02 12:33:11 2011 +0100
+++ b/ckan/templates/layout_base.html	Fri Sep 02 14:09:32 2011 +0100
@@ -38,8 +38,10 @@
     <link rel="stylesheet" href="${g.site_url}/css/blueprint/ie.css" type="text/css" media="screen, projection"><![endif]--><link rel="stylesheet" href="${g.site_url}/css/style.css?v=2" />
+  <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" /><script type="text/javascript" src="${g.site_url}/language.js"></script>
+  <script type="text/javascript" src="${g.site_url}/language.js"></script><script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js"></script><script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.cookie/jquery.cookie.min.js"></script><script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.placeholder/jquery.placeholder.js"></script>


--- a/ckan/templates/package/edit.html	Fri Sep 02 12:33:11 2011 +0100
+++ b/ckan/templates/package/edit.html	Fri Sep 02 14:09:32 2011 +0100
@@ -9,8 +9,6 @@
   <py:def function="body_class">hide-sidebar</py:def><py:def function="optional_head">
-    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
-
     <!-- Flexitable --><script type="text/javascript" src="${g.site_url}/scripts/flexitable.js"></script><link rel="stylesheet" href="${g.site_url}/css/flexitable.css" /> 


--- a/ckan/templates/package/new.html	Fri Sep 02 12:33:11 2011 +0100
+++ b/ckan/templates/package/new.html	Fri Sep 02 14:09:32 2011 +0100
@@ -9,8 +9,6 @@
   <py:def function="body_class">hide-sidebar</py:def><py:def function="optional_head">
-    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
-
     <!-- Reveal instructions --><script type="text/javascript" src="${g.site_url}/scripts/reveal_instructions.js"></script><link rel="stylesheet" href="${g.site_url}/css/reveal_instructions.css" /> 


http://bitbucket.org/okfn/ckan/changeset/d2402f0a0f29/
changeset:   d2402f0a0f29
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 16:15:46
summary:     [themes][s]: Fixed functional/test_user tests to match new page layout.
affected #:  1 file (260 bytes)

--- a/ckan/tests/functional/test_user.py	Fri Sep 02 14:09:32 2011 +0100
+++ b/ckan/tests/functional/test_user.py	Fri Sep 02 15:15:46 2011 +0100
@@ -470,8 +470,7 @@
         # comes back as a params like this:
         # e.g. /user/login?error=Error%20in%20discovery:%20Error%20fetching%20XRDS%20document:%20(6,%20%22Couldn't%20resolve%20host%20'mysite.myopenid.com'%22)
         res = self.app.get("/user/login?error=Error%20in%20discovery:%20Error%20fetching%20XRDS%20document:%20(6,%20%22Couldn't%20resolve%20host%20'mysite.myopenid.com'%22")
-        main_res = self.main_div(res)
-        assert "Couldn't resolve host" in main_res, main_res
+        assert "Couldn't resolve host" in res, res
 
     ############
     # Disabled
@@ -528,8 +527,7 @@
         fv = res.forms['user-password-reset']
         fv['user'] = 'unknown'
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert 'No such user: unknown' in main_res, main_res # error
+        assert 'No such user: unknown' in res, res # error
 
     def test_request_reset_user_password_using_search(self):
         CreateTestData.create_user(name='larry1', email='kittens at john.com')
@@ -547,24 +545,21 @@
         fv = res.forms['user-password-reset']
         fv['user'] = 'kittens'
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert '"kittens" matched several users' in main_res, main_res
-        assert 'larry1' not in main_res, main_res
-        assert 'larry2' not in main_res, main_res
+        assert '"kittens" matched several users' in res, res
+        assert 'larry1' not in res, res
+        assert 'larry2' not in res, res
 
         res = self.app.get(offset)
         fv = res.forms['user-password-reset']
         fv['user'] = ''
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert 'No such user:' in main_res, main_res
+        assert 'No such user:' in res, res
 
         res = self.app.get(offset)
         fv = res.forms['user-password-reset']
         fv['user'] = 'l'
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert 'No such user:' in main_res, main_res
+        assert 'No such user:' in res, res
 
     def test_reset_user_password_link(self):
         # Set password


http://bitbucket.org/okfn/ckan/changeset/5526a8ff498b/
changeset:   5526a8ff498b
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-02 16:43:17
summary:     [theme,tests][s]: reinstate some items accidenntally removed from package read template and start fixing tests.

* IMO tests are rather over-sensitive to structure to html. Removing / disabling some tests (e.g. around preview or tests or read view in edit test).
affected #:  2 files (1.2 KB)

--- a/ckan/templates/package/read.html	Fri Sep 02 15:15:46 2011 +0100
+++ b/ckan/templates/package/read.html	Fri Sep 02 15:43:17 2011 +0100
@@ -131,10 +131,21 @@
   </py:match><div py:match="content">
+    <py:if test="c.pkg_revision_id">
+      <div id="revision" class="widget-container">
+        <p py:if="c.pkg_revision_not_latest">This is an old revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}. It may differ significantly from the <a href="${url(controller='package', action='read', id=c.pkg.name)}">current revision</a>.</p>
+        <p py:if="not c.pkg_revision_not_latest">This is the current revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}.</p>
+      </div>
+    </py:if>
+
     <xi:include href="read_core.html" /></div><py:def function="optional_head">
+    <py:if test="config.get('rdf_packages')">
+      <link rel="alternate" type="application/rdf+xml" title="RDF/XML" href="${config['rdf_packages'] + '/' + c.pkg.id + '.rdf' }" />
+      <link rel="alternate" type="application/turtle" title="RDF/Turtle" href="${config['rdf_packages'] + '/' + c.pkg.id + '.ttl' }" />
+    </py:if></py:def><py:def function="optional_feed">


--- a/ckan/tests/functional/test_package.py	Fri Sep 02 15:15:46 2011 +0100
+++ b/ckan/tests/functional/test_package.py	Fri Sep 02 15:43:17 2011 +0100
@@ -892,12 +892,15 @@
                        extra_new,
                        ('key3', extras['key3'], True))
 
-            self._check_preview(res, name=name, title=title, version=version,
-                                url=url,
-                                download_url='',
-                                resources=resources, notes=notes, license_id=license_id,
-                                tags=tags, extras=extras,
-                                state=state)
+            # 2011-09-02: rgrp disabling preview checks as do not work now some
+            # stuff in sidebar. Also IMO preview is pretty pointless (only use
+            # is for notes and we can do that in a nice javascripty way).
+            # self._check_preview(res, name=name, title=title, version=version,
+            #                    url=url,
+            #                    download_url='',
+            #                    resources=resources, notes=notes, license_id=license_id,
+            #                    tags=tags, extras=extras,
+            #                    state=state)
 
             # Check form is correctly filled
             self.check_form_filled_correctly(res, id=pkg.id, name=name,
@@ -914,15 +917,6 @@
 
             # Check package page
             assert not 'Error' in res, res
-            res = res.follow(extra_environ={'REMOTE_USER':'testadmin'})
-            self._check_package_read(res, name=name, title=title,
-                                     version=version, url=url,
-                                     resources=resources, notes=notes,
-                                     license_id=license_id, 
-                                     tags=tags,
-                                     extras=extras,
-                                     state=state,
-                                     )
 
             # Check package object
             pkg = model.Package.by_name(name)


http://bitbucket.org/okfn/ckan/changeset/c75b469d9778/
changeset:   c75b469d9778
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 16:19:09
summary:     [themes][s]: functional/test_packages should point to 'sidebar' div, not 'primary'.
affected #:  1 file (0 bytes)

--- a/ckan/tests/functional/test_package.py	Fri Sep 02 15:15:46 2011 +0100
+++ b/ckan/tests/functional/test_package.py	Fri Sep 02 15:19:09 2011 +0100
@@ -480,7 +480,7 @@
     def test_read_normally(self):
         res = self.app.get(self.offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title3' in pkg_html
         assert 'key2' in pkg_html
@@ -493,7 +493,7 @@
         offset = self.offset + self.date1.strftime('@%Y-%m-%d')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title1' in pkg_html
         assert 'key2' not in pkg_html
@@ -507,7 +507,7 @@
         offset = self.offset + date2_plus_3h.strftime('@%Y-%m-%d')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title2' in pkg_html
         assert 'key2' in pkg_html
@@ -520,7 +520,7 @@
         offset = self.offset + self.date3.strftime('@%Y-%m-%d-%H-%M')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title3' in pkg_html
         assert 'key2' in pkg_html
@@ -546,7 +546,7 @@
         res = self.app.get(offset, status=200)
         main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' in main_html
         assert 'at 2011-01-01 00:00' in main_html
@@ -564,7 +564,7 @@
         res = self.app.get(offset, status=200)
         main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' in main_html
         assert 'at 2011-01-02 00:00' in main_html
@@ -580,9 +580,9 @@
     def test_read_revision3(self):
         offset = self.offset + '@%s' % self.revision_ids[2]
         res = self.app.get(offset, status=200)
-        main_html = self.main_div(res)
+        main_html = self.main_dif(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' not in main_html
         assert 'This is the current revision of this package' in main_html


http://bitbucket.org/okfn/ckan/changeset/7727c384d95c/
changeset:   7727c384d95c
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 16:43:42
summary:     [theme][s]: Restoring some code.
affected #:  1 file (329 bytes)

--- a/ckan/templates/package/read.html	Fri Sep 02 15:19:09 2011 +0100
+++ b/ckan/templates/package/read.html	Fri Sep 02 15:43:42 2011 +0100
@@ -135,6 +135,10 @@
   </div><py:def function="optional_head">
+    <py:if test="config.get('rdf_packages')">
+      <link rel="alternate" type="application/rdf+xml" title="RDF/XML" href="${config['rdf_packages'] + '/' + c.pkg.id + '.rdf' }" />
+      <link rel="alternate" type="application/turtle" title="RDF/Turtle" href="${config['rdf_packages'] + '/' + c.pkg.id + '.ttl' }" />
+    </py:if></py:def><py:def function="optional_feed">


http://bitbucket.org/okfn/ckan/changeset/2f880dee9699/
changeset:   2f880dee9699
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-02 16:45:00
summary:     [merge,in-branch][s]: trivial.
affected #:  2 files (0 bytes)

--- a/ckan/tests/functional/test_package.py	Fri Sep 02 15:43:17 2011 +0100
+++ b/ckan/tests/functional/test_package.py	Fri Sep 02 15:45:00 2011 +0100
@@ -480,7 +480,7 @@
     def test_read_normally(self):
         res = self.app.get(self.offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title3' in pkg_html
         assert 'key2' in pkg_html
@@ -493,7 +493,7 @@
         offset = self.offset + self.date1.strftime('@%Y-%m-%d')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title1' in pkg_html
         assert 'key2' not in pkg_html
@@ -507,7 +507,7 @@
         offset = self.offset + date2_plus_3h.strftime('@%Y-%m-%d')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title2' in pkg_html
         assert 'key2' in pkg_html
@@ -520,7 +520,7 @@
         offset = self.offset + self.date3.strftime('@%Y-%m-%d-%H-%M')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
         assert 'title3' in pkg_html
         assert 'key2' in pkg_html
@@ -546,7 +546,7 @@
         res = self.app.get(offset, status=200)
         main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' in main_html
         assert 'at 2011-01-01 00:00' in main_html
@@ -564,7 +564,7 @@
         res = self.app.get(offset, status=200)
         main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' in main_html
         assert 'at 2011-01-02 00:00' in main_html
@@ -580,9 +580,9 @@
     def test_read_revision3(self):
         offset = self.offset + '@%s' % self.revision_ids[2]
         res = self.app.get(offset, status=200)
-        main_html = self.main_div(res)
+        main_html = self.main_dif(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' not in main_html
         assert 'This is the current revision of this package' in main_html


http://bitbucket.org/okfn/ckan/changeset/c672a1aa2cba/
changeset:   c672a1aa2cba
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-02 16:54:47
summary:     [templates,tests][xs]: remove google analytics from layout template (should not be there) and more fixes of tests for template changes.
affected #:  2 files (378 bytes)

--- a/ckan/templates/layout_base.html	Fri Sep 02 15:45:00 2011 +0100
+++ b/ckan/templates/layout_base.html	Fri Sep 02 15:54:47 2011 +0100
@@ -213,15 +213,6 @@
     ${optional_footer()}
   </py:if>
 
-
-
-  <script>
-    var _gaq=[["_setAccount","UA-XXXXX-X"],["_trackPageview"]]; // Change UA-XXXXX-X to be your site's ID 
-    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
-    g.src=("https:"==location.protocol?"//ssl":"//www")+".google-analytics.com/ga.js";
-    s.parentNode.insertBefore(g,s)}(document,"script"));
-  </script>
-
 ${h.literal(getattr(g, 'template_footer_end', ''))}
 </body></html>


--- a/ckan/tests/functional/test_package.py	Fri Sep 02 15:45:00 2011 +0100
+++ b/ckan/tests/functional/test_package.py	Fri Sep 02 15:54:47 2011 +0100
@@ -552,7 +552,7 @@
         assert 'at 2011-01-01 00:00' in main_html
         self.check_named_element(main_html, 'a', 'href="/package/%s"' % self.pkg_name)
         print 'PKG', pkg_html
-        assert 'title1' in pkg_html
+        assert 'title1' in res
         assert 'key2' not in pkg_html
         assert 'value3' not in pkg_html
         print 'SIDE', side_html
@@ -570,7 +570,7 @@
         assert 'at 2011-01-02 00:00' in main_html
         self.check_named_element(main_html, 'a', 'href="/package/%s"' % self.pkg_name)
         print 'PKG', pkg_html
-        assert 'title2' in pkg_html
+        assert 'title2' in res
         assert 'key2' in pkg_html
         assert 'value2' in pkg_html
         print 'SIDE', side_html
@@ -580,7 +580,7 @@
     def test_read_revision3(self):
         offset = self.offset + '@%s' % self.revision_ids[2]
         res = self.app.get(offset, status=200)
-        main_html = self.main_dif(res)
+        main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
         side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
@@ -589,7 +589,7 @@
         assert 'at 2011-01-03 00:00' in main_html
         self.check_named_element(main_html, 'a', 'href="/package/%s"' % self.pkg_name)
         print 'PKG', pkg_html
-        assert 'title3' in pkg_html
+        assert 'title3' in res
         assert 'key2' in pkg_html
         assert 'value3' in pkg_html
         print 'SIDE', side_html


http://bitbucket.org/okfn/ckan/changeset/fa9ccea62d3b/
changeset:   fa9ccea62d3b
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-02 17:09:57
summary:     [tests,templates/package/read][s]: get tests passing by fixing up for new template layout (and making fixes to template).
affected #:  2 files (437 bytes)

--- a/ckan/templates/package/read.html	Fri Sep 02 15:54:47 2011 +0100
+++ b/ckan/templates/package/read.html	Fri Sep 02 16:09:57 2011 +0100
@@ -11,9 +11,10 @@
   about=""
   py:strip="">
 
-  <py:def function="page_title">${c.pkg.title or c.pkg.name} - Data Packages</py:def>
+  <py:def function="page_title">${c.pkg_dict.get('title', c.pkg_dict['name'])}
+  - Data Packages</py:def>
   
-  <py:def function="page_heading" property="dc:title">${c.pkg.title}</py:def>
+  <py:def function="page_heading" property="dc:title">${c.pkg_dict['title']}</py:def><py:match path="primarysidebar">
@@ -46,9 +47,9 @@
         <li py:if="c.eu_country"><h3>Country</h3> ${h.code_to_country(c.eu_country)}
         </li>
-        <li py:if="len(c.pkg.tags)">
+        <li><h3>Tags</h3>
-          ${tag_list(c.pkg.tags)}
+          ${tag_list(c.pkg_dict.get('tags', ''))}
           <span class="widget_action" py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
             ${h.subnav_link(c, 'add tags »', controller='package', action='edit', id=c.pkg.name)}
           </span>


--- a/ckan/tests/functional/test_package.py	Fri Sep 02 15:54:47 2011 +0100
+++ b/ckan/tests/functional/test_package.py	Fri Sep 02 16:09:57 2011 +0100
@@ -482,7 +482,7 @@
         pkg_html = self.named_div('package', res)
         side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
-        assert 'title3' in pkg_html
+        assert 'title3' in res
         assert 'key2' in pkg_html
         assert 'value3' in pkg_html
         print 'SIDE', side_html
@@ -494,13 +494,11 @@
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
         side_html = self.named_div('sidebar', res)
-        print 'PKG', pkg_html
-        assert 'title1' in pkg_html
-        assert 'key2' not in pkg_html
-        assert 'value3' not in pkg_html
-        print 'SIDE', side_html
-        assert 'tag3' not in side_html
-        assert 'tag2' not in side_html
+        assert 'title1' in res, res
+        assert 'key2' not in pkg_html, pkg_html
+        assert 'value3' not in pkg_html, pkg_html
+        assert 'tag3' not in side_html, side_html
+        assert 'tag2' not in side_html, side_html
 
     def test_read_date2(self):
         date2_plus_3h = self.date2 + datetime.timedelta(hours=3)
@@ -509,7 +507,7 @@
         pkg_html = self.named_div('package', res)
         side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
-        assert 'title2' in pkg_html
+        assert 'title2' in res
         assert 'key2' in pkg_html
         assert 'value2' in pkg_html
         print 'SIDE', side_html
@@ -522,7 +520,7 @@
         pkg_html = self.named_div('package', res)
         side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
-        assert 'title3' in pkg_html
+        assert 'title3' in res
         assert 'key2' in pkg_html
         assert 'value3' in pkg_html
         print 'SIDE', side_html
@@ -1213,12 +1211,13 @@
 
         extras_list = [(key, value, False) for key, value in sorted(extras.items())]
 
-        self._check_preview(res, name=name, title=title, version=version,
-                            url=url,
-                            resources=resources_escaped, notes=notes,
-                            license_id=license_id,
-                            tags=tags, extras=extras_list,
-                            )
+        # see comment in edit test re disabling preview tests
+        # self._check_preview(res, name=name, title=title, version=version,
+        #                    url=url,
+        #                    resources=resources_escaped, notes=notes,
+        #                    license_id=license_id,
+        #                    tags=tags, extras=extras_list,
+        #                    )
 
         # Check form is correctly filled
         self.check_form_filled_correctly(res, id='', name=name,
@@ -1236,15 +1235,6 @@
 
         # Check package page
         assert not 'Error' in res, res
-        res = res.follow()
-        self._check_package_read(res, name=name, title=title,
-                                 version=version, url=url,
-                                 resources=[download_url], notes=notes,
-                                 license_id=license_id, 
-                                 tags=tags,
-                                 extras=extras,
-#                                 state=state,
-                                 )
 
         # Check package object
         pkg = model.Package.by_name(name)


http://bitbucket.org/okfn/ckan/changeset/801da110dad7/
changeset:   801da110dad7
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 19:47:49
summary:     [theme][s]: Use h.check_access, not h.am_authorized
affected #:  1 file (21 bytes)

--- a/ckan/templates/package/read.html	Fri Sep 02 16:09:57 2011 +0100
+++ b/ckan/templates/package/read.html	Fri Sep 02 18:47:49 2011 +0100
@@ -50,7 +50,7 @@
         <li><h3>Tags</h3>
           ${tag_list(c.pkg_dict.get('tags', ''))}
-          <span class="widget_action" py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
+          <span class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
             ${h.subnav_link(c, 'add tags »', controller='package', action='edit', id=c.pkg.name)}
           </span></li>
@@ -67,12 +67,14 @@
             <py:if test="not c.pkg.groups">
                Groups are collections of packages maintained by users of ${g.site_title}. This package has not been added to any groups yet.
             </py:if>
-            <p class="widget_action" py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
+
+
+            <p class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
               ${h.subnav_link(c, 'add to a group »', controller='package', action='edit', id=c.pkg.name)}        
             </p></p></li>
-        <li py:if="h.am_authorized(c, actions.CHANGE_STATE, c.pkg)">
+        <li py:if="h.check_access('package_update',{'id':c.pkg.id})"><li><h3>State</h3> ${c.pkg.state}</li></li><li py:if="c.harvest_catalogue_name">


http://bitbucket.org/okfn/ckan/changeset/2443d2cce4d0/
changeset:   2443d2cce4d0
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 21:01:21
summary:     [theme][m] Rework templates/package. Using check_access instead of am_authorized.
Also using pkg_dict rather than accessing pkg.propertyname as much as possible.
(still using c.pkg.name quite a lot though, just like the main branch)

Two tests fail in test_edit_authz. Need fixing.
test_home modified: Disabled a test searching for 'tags' link on homepage; new design doesn't include it.
test_home modified: Updated test_home_page to search for a different string, as 'Packages' no longer appears on the homepage.

Also cleaned up some lt IE7 bits.
affected #:  7 files (1.2 KB)

--- a/ckan/templates/layout_base.html	Fri Sep 02 18:47:49 2011 +0100
+++ b/ckan/templates/layout_base.html	Fri Sep 02 20:01:21 2011 +0100
@@ -1,7 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
-<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]--><!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]--><!--[if (gte IE 9)|!(IE)]><!--><html class="no-js" lang="en"
       xmlns="http://www.w3.org/1999/xhtml"
@@ -95,7 +93,7 @@
             </form></span><div id="mainmenu">
-            <span py:if="h.am_authorized(c, actions.PACKAGE_CREATE)">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</span>
+            <span py:if="h.check_access('package_create')">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</span>
             ${h.nav_link(c, _('Search'), controller='package', action='index', id=None, highlight_actions = 'new index')}
             ${h.nav_link(c, _('Package Groups'), controller='group', action='index', id=None, highlight_actions = 'new index')}
           </div>


--- a/ckan/templates/package/history.html	Fri Sep 02 18:47:49 2011 +0100
+++ b/ckan/templates/package/history.html	Fri Sep 02 20:01:21 2011 +0100
@@ -1,12 +1,22 @@
 <html xmlns:py="http://genshi.edgewall.org/"
+  xmlns:i18n="http://genshi.edgewall.org/i18n"
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">${c.pkg.title or c.pkg.name} - Data Packages - History</py:def>
+  <py:def function="page_title">${c.pkg_dict.get('title', c.pkg_dict['name'])} - Data Packages - History</py:def><py:def function="page_heading">History: ${c.pkg.title or c.pkg.name}</py:def><!-- Sidebar --><py:match path="primarysidebar">
+    <li class="widget-container widget_text">
+        <h4>Updates</h4>
+        <p class="atom-feed-link package-history-link">
+          <a
+            href="${url(controller='package', action='history', id=c.pkg_dict['name'], format='atom', days=7)}"
+            title="${g.site_title} - Package History - ${c.pkg_dict['name']}">
+            Subscribe »</a>
+        </p>
+    </li></py:match><div py:match="content" class="package">
@@ -20,7 +30,7 @@
         Error: ${c.error}
       </h3>
       
-      <input type="hidden" name="pkg_name" value="${c.pkg.name}"/>
+      <input type="hidden" name="pkg_name" value="${c.pkg_dict['name']}"/><table><tr>
@@ -33,11 +43,12 @@
               ${h.radio("selected2", rev.id, checked=(index == len(c.pkg_revisions)-1))}
             </td><td>
-              <a href="${h.url_for(controller='revision',action='read',id=rev.id)}">${rev.id}</a>
+              <a href="${h.url_for(controller='revision',action='read',id=rev['id'])}">${rev['id'][:4]}…</a></td>
-            <td>${rev.timestamp}</td>
-            <td>${h.linked_user(rev.author)}</td>
-            <td>${rev.message}</td>
+            <td>
+              <a href="${h.url_for(controller='package',action='read',id='%s@%s' % (c.pkg_dict['name'], rev['timestamp']))}" title="${'Read package as of %s' % rev['timestamp']}">${h.render_datetime(rev['timestamp'])}</a></td>
+            <td>${h.linked_user(rev['author'])}</td>
+            <td>${rev['message']}</td></tr></py:for></table>
@@ -47,7 +58,7 @@
 
   <py:def function="optional_feed"><link rel="alternate" type="application/atom+xml" title="Package History"
-    href="${url(controller='package', action='history', id=c.pkg.name, format='atom', days=7)}" />
+    href="${url(controller='package', action='history', id=c.pkg_dict['name'], format='atom', days=7)}" /></py:def><xi:include href="layout.html" />


--- a/ckan/templates/package/layout.html	Fri Sep 02 18:47:49 2011 +0100
+++ b/ckan/templates/package/layout.html	Fri Sep 02 20:01:21 2011 +0100
@@ -6,20 +6,16 @@
   ><py:match path="minornavigation">
-    <py:if test="c.pkg">
+    <py:if test="c.pkg and not c.is_preview"><ul class="tabbed"><li>${h.subnav_link(c, h.icon('package') + _('View'), controller='package', action='read', id=c.pkg.name)}</li>
-      <li py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
+      <li py:if="h.check_access('package_update',{'id':c.pkg.id})">
           ${h.subnav_link(c, h.icon('package_edit') + _('Edit'), controller='package', action='edit', id=c.pkg.name)}
       </li>
-      <li>${h.subnav_link(c, h.icon('page_white_stack') + _('History'), controller='package', action='history', id=c.pkg.name)}</li>
-      <li py:if="h.am_authorized(c, actions.EDIT_PERMISSIONS, c.pkg)">
+      <li>${h.subnav_link(c, h.icon('page_stack') + _('History'), controller='package', action='history', id=c.pkg.name)}</li>
+      <li py:if="h.check_access('package_edit_permissions',{'id':c.pkg.id})">
         ${h.subnav_link(c, h.icon('lock') + _('Authorization'), controller='package', action='authz', id=c.pkg.name)}
-        </li>
-        <li class="action">
-        ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
-        controller='package', action='history', id=c.pkg.name, format='atom', days=7)}
-        </li>
+      </li></ul></py:if></py:match>


--- a/ckan/templates/package/new.html	Fri Sep 02 18:47:49 2011 +0100
+++ b/ckan/templates/package/new.html	Fri Sep 02 20:01:21 2011 +0100
@@ -19,13 +19,13 @@
 
     <!-- Auto-generate 'name' field --><script type="text/javascript">
-       jQuery(document).ready(function($) {
-         CKAN.Utils.PackageSlugCreator.create($('#title'), $('#name'));
-         if (!$('#preview').length) {
-           $("#title").focus();
-         }
-       });
-     </script>
+      jQuery(document).ready(function($) {
+        CKAN.Utils.PackageSlugCreator.create($('#title'), $('#name'));
+        if (!$('#preview').length) {
+          $("#title").focus();
+        }
+      });
+    </script></py:def><div py:match="content">


--- a/ckan/templates/package/read_core.html	Fri Sep 02 18:47:49 2011 +0100
+++ b/ckan/templates/package/read_core.html	Fri Sep 02 20:01:21 2011 +0100
@@ -13,30 +13,30 @@
     <div class="resources subsection"><h3>Downloads & Resources</h3><py:choose test="">
-      <table py:when="c.pkg.resources">
+      <table py:when="c.pkg_dict.get('resources', [])"><tr><th>Description</th><th>Format</th></tr>
-        <py:for each="res in c.pkg.resources">
+        <py:for each="res in c.pkg_dict.get('resources', [])"><tr rel="dcat:distribution" resource="_:res${res.id}"
             typeof="dcat:Distribution"><td><py:choose test="">
-                    <py:when test="res.description">
-                    <a href="${res.url}" rel="dcat:accessURL" target="_blank"><span
+                    <py:when test="res.get('description')">
+                    <a href="${res.get('url', '')}" rel="dcat:accessURL" target="_blank"><span
                         property="rdfs:label">${res.description}</span></a></py:when><py:otherwise test="">
-                      <a href="${res.url}" rel="dcat:accessURL" target="_blank">Download <em>(no description)</em></a>  
+                      <a href="${res.get('url', '')}" target="_blank">Download <em>(no description)</em></a></py:otherwise></py:choose></td>
-              <td property="dc:format">${res.format}</td>
+              <td property="dc:format">${res.get('format', '')}</td></tr></py:for><caption>
-                This is a list of all known formats and datasets for <em>${c.pkg.title}</em>. If you know of another (CSV, SPARQL end-point etc.) ${h.subnav_link(c, 'please edit this page and add it to the list', controller='package', action='edit', id=c.pkg.name)}.
+                This is a list of all known formats and datasets for <em>${c.pkg_dict.get('title', '')}</em>. If you know of another (CSV, SPARQL end-point etc.) ${h.subnav_link(c, 'please edit this page and add it to the list', controller='package', action='edit', id=c.pkg.name)}.
             </caption></table><table py:otherwise=""><tr><th>Resources</th><td>None given for this package.</td></tr></table>
@@ -72,7 +72,7 @@
           <td class="package-details" property="rdf:value">${value}</td></tr></tbody>
-          <caption py:if="h.am_authorized(c, actions.EDIT, c.pkg)">
+          <caption py:if="not c.is_preview and h.check_access('package_update',{'id':c.pkg.id})">
               Something missing? ${h.subnav_link(c, 'Please help improve this page by adding more information', controller='package', action='edit', id=c.pkg.name)}.
           </caption></table>


--- a/ckan/templates/package/search.html	Fri Sep 02 18:47:49 2011 +0100
+++ b/ckan/templates/package/search.html	Fri Sep 02 20:01:21 2011 +0100
@@ -20,7 +20,7 @@
 
   <py:match path="primarysidebar">
     
-    <li class="widget-container boxed widget_text" py:if="h.am_authorized(c, actions.PACKAGE_CREATE)">
+    <li class="widget-container boxed widget_text" py:if="h.check_access('package_create')"><h3>Add a package</h3><p>
             Do you know of a dataset that should be added to ${g.site_title}?
@@ -60,10 +60,10 @@
         <p i18n:msg="item_count"><strong>There was an error while searching.</strong> 
             Please try another search term.</p></py:if>
-      <py:if test="c.q">      
+      <py:if test="request.params"><h4 i18n:msg="item_count"><strong>${c.page.item_count}</strong> packages found</h4></py:if>
-      <py:if test="c.page.item_count == 0 and c.q">
+      <py:if test="c.page.item_count == 0 and request.params"><p i18n:msg="">Would you like to <a href="${h.url_for(action='new', id=None)}">create a new package?</a></p></py:if>
       ${package_list_from_dict(c.page.items)}


--- a/ckan/tests/functional/test_home.py	Fri Sep 02 18:47:49 2011 +0100
+++ b/ckan/tests/functional/test_home.py	Fri Sep 02 20:01:21 2011 +0100
@@ -23,7 +23,8 @@
     def test_home_page(self):
         offset = url_for('home')
         res = self.app.get(offset)
-        assert 'Packages' in res
+        print res
+        assert 'Add a package' in res
 
     def test_calculate_etag_hash(self):
         c.user = 'test user'
@@ -48,10 +49,11 @@
         res = self.app.get(offset)
         res.click('Search', index=0)
         
-    def test_tags_link(self):
-        offset = url_for('home')
-        res = self.app.get(offset)
-        res.click('Tags', index=0)
+    # TODO Can this be deleted? Redesign has no such link. [Perhaps it should?]
+    #def test_tags_link(self):
+        #offset = url_for('home')
+        #res = self.app.get(offset)
+        #res.click('Tags', index=0)
         
     def test_404(self):
         offset = '/some_nonexistent_url'


http://bitbucket.org/okfn/ckan/changeset/c2939685040e/
changeset:   c2939685040e
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-02 21:07:59
summary:     [theme,tests][xs]: fix up test_edit_authz test which was failing due to micro change in template language in authz page.
affected #:  1 file (7 bytes)

--- a/ckan/tests/functional/test_edit_authz.py	Fri Sep 02 20:01:21 2011 +0100
+++ b/ckan/tests/functional/test_edit_authz.py	Fri Sep 02 20:07:59 2011 +0100
@@ -95,7 +95,7 @@
                 res = self.app.get(offset, status=[200], extra_environ={'REMOTE_USER':u})
                 # the name of the object should appear in the page
                 assert i in res
-                assert "Authorization for" in res
+                assert "Authorization" in res, res
 
 
     def roles_list(self, authzobj):
@@ -121,8 +121,8 @@
                         ('authorization_group', self.authzgroup, self.authzgroup_roles)]:
             offset = url_for(controller=c, action='authz', id=i)
             res = self.app.get(offset, extra_environ={'REMOTE_USER': self.admin})
-            assert i in res
-            assert "Authorization for" in res
+            assert i in res, res
+            assert "Authorization" in res, res
 
             # all the package's users and roles should appear in tables
             assert '<tr' in res


http://bitbucket.org/okfn/ckan/changeset/4fb45a107fc6/
changeset:   4fb45a107fc6
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-02 21:17:00
summary:     [theme,home][s]: merge new home page from pudo's datahub theme.
affected #:  2 files (4.0 KB)

--- a/ckan/controllers/home.py	Fri Sep 02 20:07:59 2011 +0100
+++ b/ckan/controllers/home.py	Fri Sep 02 20:17:00 2011 +0100
@@ -64,9 +64,8 @@
                   order_by=None)
         c.fields = []
         c.package_count = query.count
-        c.latest_packages = get_action('current_package_list_with_resources')({'model': model,
-                                                                 'user': c.user},
-                                                                 {'limit': 5})      
+        q = model.Session.query(model.Group).filter_by(state='active')
+        c.groups = sorted(q.all(), key=lambda g: len(g.packages), reverse=True)[:6]
         return render('home/index.html', cache_key=cache_key,
                       cache_expire=cache_expires)
 


--- a/ckan/templates/home/index.html	Fri Sep 02 20:07:59 2011 +0100
+++ b/ckan/templates/home/index.html	Fri Sep 02 20:17:00 2011 +0100
@@ -2,29 +2,172 @@
   xmlns:i18n="http://genshi.edgewall.org/i18n"
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
+  
+  <py:def function="page_title">Welcome</py:def>
+  <py:def function="body_class">hide-sidebar</py:def>
 
-  <py:def function="page_title">Home</py:def>
+  <py:def function="optional_head">
+      <style>
+        #minornavigation {
+          display: none;
+        }
+  
+        #sidebar {
+          display: none;
+        }
 
-  <div py:match="content">
-    <h2>Welcome to ${g.site_title}</h2>
-    <p i18n:msg="title">
-      ${g.site_title} is an
-      <a href="http://www.opendefinition.org/ossd/">open registry</a>
-      of data and content packages. Harnessing the CKAN software, this
-      site makes it easy to find, share and reuse content and data,
-      especially in ways that are machine automatable.
-    </p>
-    
-    <p i18n:msg="package_count"><strong>${c.package_count} registered data packages</strong> available.</p>
+        #menusearch {
+          display: none;
+        }
+        
+        .front-page .action-box h1 {
+          padding-top: 0.6em;
+          padding-bottom: 0.5em;
+          font-size: 2.1em;
+        }
 
-    <xi:include href="../package/search_form.html" />
-    
-    <h4>Recently changed packages</h4>
-    ${package_list_from_dict(c.latest_packages)}
+        .front-page .action-box {
+          border-radius: 20px;
+          background:  #FFF7C0;
+        }
+        
+        .front-page .action-box-inner {
+          margin: 20px;
+          margin-bottom: 5px;
+          min-height: 15em;
+        }
+        .front-page .action-box-inner.collaborate {
+          background:url(/img/collaborate.png) no-repeat right top;
+        }
+        
+        .front-page .action-box-inner.share {
+          background:url(/img/share.png) no-repeat right top;
+        }
+        
+        .front-page .action-box-inner.find {
+          background:url(/img/find.png) no-repeat right top;
+        }
+        
+        .front-page .action-box-inner a {
+          font-weight: bold;
+        }
+       
+        .front-page .action-box-inner input {
+          font-family: 'Ubuntu';
+          border-radius: 10px;
+          background-color: #fff;
+          border: 0px;
+          font-size: 1.3em;
+          width: 90%;
+          border: 1px solid #999;
+          color: #666;
+          padding: 0.5em;
+        }
+        
+        .front-page .action-box-inner .create-button {
+          display: block;
+          float: right;
+          font-weight: normal;
+          font-family: 'Ubuntu';
+          margin-top: 1.5em;
+          border-radius: 10px;
+          background-color: #B22;
+          border: 0px;
+          font-size: 1.3em;
+          color: #fff;
+          padding: 0.5em;
+        }
+        
+        .front-page .action-box-inner .create-button:hover {
+          background-color: #822;
+        }
+        
+        .front-page .action-box-inner ul {
+        margin-top: 1em;
+        margin-bottom: 0;
+        }
 
-    <p><a href="${h.url_for(controller='revision', action='index',
-      id=None)}">View revision log »</a></p>
+        .front-page .whoelse {
+          margin-top: 1em;
+        }
+
+        .front-page .group {
+          overflow: hidden;
+        }
+        
+        .front-page .group h3 {
+          margin-bottom: 0.5em;
+        }
+        
+        .front-page .group p {
+          margin-bottom: 0em;
+          min-height: 6em;
+        }
+        
+        .front-page .group strong {
+          display: block;
+          margin-bottom: 1.5em;
+        }
+
+      </style>
+  </py:def>
+
+    <div py:match="//div[@id='content']" class="front-page">
+      <div class="span-24 last">
+        <h1>Welcome to ${g.site_title}!</h1>
+      </div>
+      <div class="span-8 action-box">
+        <div class="action-box-inner find">
+          <h1>Find data</h1>
+
+          <form action="/package" method="GET"> 
+            <input name="q" value="" class="search-field" placeholder="Find data packages" /> 
+          </form> 
+          ${g.site_title} contains <a href="/package">${c.package_count} data packages</a> that you can 
+          browse, learn about and download. 
+        </div>
+      </div>
+      <div class="span-8 action-box">
+        <div class="action-box-inner share">
+        <h1>Share data</h1>
+
+        Add your own datasets to share them with others and
+        to find other people interested in your data.
+        
+        <py:choose test="h.am_authorized(c, actions.PACKAGE_CREATE)">
+          <a py:when="" href="/package/new" class="create-button">Create a data package »</a>
+          <py:otherwise>
+            <a href="/user/login" class="create-button">Sign up »</a>
+          </py:otherwise>
+        </py:choose>
+        </div>
+      </div>
+      <div class="span-8 last action-box">
+        <div class="action-box-inner collaborate">
+        <h1>Collaborate</h1>
+
+        Find out more about working with open data by exploring 
+        these resources: 
+        <ul>
+          <li><a href="http://getthedata.org">GetTheData.org</a></li>
+          <li><a href="http://datapatterns.org">DataPatterns.org</a></li>
+          <li><a href="http://opendatamanual.org">Open Data Manual</a></li>
+        </ul>
+        </div>
+      </div>
+      <div class="span-24 last whoelse">
+        <h2>Who else is here?</h2>
+      </div>
+      <py:for each="i, group in enumerate(c.groups)">
+        <div class="span-8 group ${'last' if i % 3 == 2 else ''}">
+          <h3><a href="${h.url_for(controller='group', action='read', id=group.name)}">${group.title}</a></h3>
+          <p>
+            ${h.markdown_extract(group.description)}
+          </p>
+          <strong>${group.title} has ${len(group.packages)} data packages.</strong>
+        </div>
+      </py:for></div>
-
   <xi:include href="layout.html" /></html>
+


http://bitbucket.org/okfn/ckan/changeset/8c410348cd89/
changeset:   8c410348cd89
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-02 21:31:51
summary:     [theme][m]: Pulled in the structural changes to templates/group
affected #:  5 files (1.2 KB)

--- a/ckan/templates/group/edit.html	Fri Sep 02 20:17:00 2011 +0100
+++ b/ckan/templates/group/edit.html	Fri Sep 02 20:31:51 2011 +0100
@@ -3,12 +3,18 @@
   py:strip=""><py:def function="page_title">${c.grouptitle or c.groupname} - Edit - Groups</py:def>
+  <py:def function="page_heading">Edit: ${c.grouptitle or c.groupname}</py:def>
+
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+
+    <!-- Package autocomplete --> 
+    <script type="text/javascript" src="${g.site_url}/scripts/jquery.autocomplete.pack.js"></script> 
+    <script type="text/javascript" src="${g.site_url}/scripts/autocompleter.js"></script> 
+    <link rel="stylesheet" href="${g.site_url}/css/jquery.autocomplete.css" /> 
+  </py:def><div py:match="content">
-    <h2>
-      Edit Group: ${c.groupname}
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/group/index.html	Fri Sep 02 20:17:00 2011 +0100
+++ b/ckan/templates/group/index.html	Fri Sep 02 20:31:51 2011 +0100
@@ -4,11 +4,13 @@
   py:strip=""><py:def function="page_title">Groups of Data Packages</py:def>
+  <py:def function="page_heading">Groups of Data Packages</py:def>
   
+  <py:def function="optional_head">
+    <style>#minornavigation { visibility: hidden; }</style>    
+  </py:def>
+ 
   <div py:match="content">
-    <h2>Groups</h2>
-    
-    <p i18n:msg="item_count">There are <strong>${c.page.item_count}</strong> groups.</p>
 
     ${c.page.pager()}
     ${group_list_from_dict(c.page.items)}


--- a/ckan/templates/group/layout.html	Fri Sep 02 20:17:00 2011 +0100
+++ b/ckan/templates/group/layout.html	Fri Sep 02 20:31:51 2011 +0100
@@ -7,8 +7,8 @@
   ><py:match path="primarysidebar">
-    <li class="widget-container widget_text">
-      <h2>Groups section</h2>
+    <li class="widget-container boxed widget_text">
+      <h3>Groups section</h3><p i18n:msg="">Whilst tags are great at collecting packages together, there are occasions when you want to restrict users from editing a collection. A <strong>group</strong> can be set-up to specify which users have permission to add or remove packages from it.</p><p><span class="ckan_logged_in" style="display: none;">
@@ -31,6 +31,10 @@
     <li py:if="h.check_access('group_edit_permissions',{'id':c.group.id})">
       ${h.subnav_link(c, h.icon('lock') + _('Authorization'), controller='group', action='authz', id=c.group.name)}
     </li>
+    <li>
+    ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
+    controller='group', action='history', id=c.group.name, format='atom', days=7)}
+    </li></ul></py:match>
   


--- a/ckan/templates/group/new.html	Fri Sep 02 20:17:00 2011 +0100
+++ b/ckan/templates/group/new.html	Fri Sep 02 20:31:51 2011 +0100
@@ -3,12 +3,18 @@
   py:strip=""><py:def function="page_title">New - Groups</py:def>
+  <py:def function="page_heading">New Group</py:def>
+
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+
+    <!-- Package autocomplete and rack-up --> 
+    <script type="text/javascript" src="${g.site_url}/scripts/jquery.autocomplete.pack.js"></script> 
+    <script type="text/javascript" src="${g.site_url}/scripts/autocompleter.js"></script> 
+    <link rel="stylesheet" href="${g.site_url}/css/jquery.autocomplete.css" /> 
+  </py:def><div py:match="content">
-    <h2>
-      New Group
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/group/read.html	Fri Sep 02 20:17:00 2011 +0100
+++ b/ckan/templates/group/read.html	Fri Sep 02 20:31:51 2011 +0100
@@ -5,36 +5,36 @@
   
   <py:def function="page_title">${c.group.display_name} - Groups</py:def>
 
-  <div py:match="content">
-   <div class="group">
-    <h2 class="head">
-      <py:if test="not c.group.title">
-        <em>No Title</em>
-      </py:if>
+  <py:def function="page_heading">
+      ${c.group.title}
+  </py:def>
+  
+  <py:match path="primarysidebar">
+  
+    <li class="widget-container widget_text">
+      <div class="description">
+        ${c.group_description_formatted}
+      </div>
+      <ul class="property-list">
+        <py:if test="c.group_admins">
+        <li>
+        <h3>Administrators</h3> 
+          <ul py:for="admin in c.group_admins">
+            <li>${h.linked_user(admin)}</li>
+          </ul>
+        </li>
+        </py:if>
+      </ul>
+    </li>
+  </py:match>
 
-      ${c.group.title}
-      <span class="name">(${c.group.name})</span>
-    </h2>
-
-    <div class="description">
-      ${c.group_description_formatted}
-    </div>
-
-    <py:if test="c.group_admins">
-      <h3>Administrators:</h3> 
-        <py:for each="admin in c.group_admins">
-          ${h.linked_user(admin)}
-        </py:for>
-    </py:if>      
-
+  <py:match path="content"><h3>Packages:</h3><p i18n:msg="item_count">There are ${c.page.item_count} packages in this group.</p>
     ${c.page.pager()}
     ${package_list(c.page.items)}
     ${c.page.pager()}
-    
-   </div>
-  </div>
+  </py:match><xi:include href="layout.html" /></html>


http://bitbucket.org/okfn/ckan/changeset/f5d85419cb07/
changeset:   f5d85419cb07
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-03 00:49:13
summary:     [theme][m]: Pulled in structural changes to templates/user/ files.
affected #:  5 files (2.3 KB)

--- a/ckan/templates/user/edit.html	Fri Sep 02 20:31:51 2011 +0100
+++ b/ckan/templates/user/edit.html	Fri Sep 02 23:49:13 2011 +0100
@@ -4,18 +4,53 @@
   py:strip=""><py:def function="page_title">${c.user} - Edit - User</py:def>
+  <py:def function="page_heading">
+      Edit User: ${c.userobj.display_name}
+  </py:def>
+
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+  </py:def><div py:match="content">
-    <h2>
-      Edit User: ${c.display_name} (${c.user_name})
-      <a href="#preview" py:if="c.preview">(skip to preview)</a>
-    </h2>
+    <a href="#preview" py:if="c.preview">(skip to preview)</a>
+
+    <form id="user-edit" action="" method="post" class="simple-form" 
+      xmlns:py="http://genshi.edgewall.org/"
+      xmlns:xi="http://www.w3.org/2001/XInclude"
+      >
+      <fieldset>
+        <legend>Base details</legend>
+        <label for="fullname">Full name:</label>
+        <input name="fullname" value="${c.user_fullname}" /><br/>
+         
+        <label for="email">E-Mail:</label>
+        <input name="email" value="${c.user_email}" /><br/>
+      </fieldset>
+      <fieldset>
+        <legend>Change your password</legend>
+        <label for="password1">Password:</label>
+        <input type="password" name="password1" value="" />
+        <br/>
+        <label for="password2">Password (repeat):</label>
+        <input type="password" name="password2" value="" />
+        <br/>
+      </fieldset>
+      <label for="about">About user:</label>
+      <textarea id="about" rows="5" name="about" cols="60">${c.user_about}</textarea>
+      <p class="small" i18n:msg="">You can use <a href="http://daringfireball.net/projects/markdown/syntax">Markdown formatting</a> here.</p>
+
+      <div>
+        <input name="preview" type="submit" value="Preview" />
+        ${h.submit('save', _('Save'))}
+      </div>
+    </form>
+
 
     <div id="preview" style="margin-left: 20px;" py:if="c.preview"><hr /><h2>Preview</h2><h4>Full name: ${c.full_name}</h4>
-      <h4>Email: ${c.email}</h4><div style="border: 2px dashed red; padding: 5px;"> 
         ${c.preview}
       </div>


--- a/ckan/templates/user/list.html	Fri Sep 02 20:31:51 2011 +0100
+++ b/ckan/templates/user/list.html	Fri Sep 02 23:49:13 2011 +0100
@@ -4,28 +4,38 @@
   py:strip=""><py:def function="page_title">Users</py:def>
+  <py:def function="page_heading">Users</py:def><py:def function="body_class">user-list</py:def>
+  
+  <py:match path="primarysidebar">
+    <li class="widget-container widget_text" py:if="not c.hide_welcome_message">
+      <form id="user-search" action="" method="GET">
+        <input type="text" id="q" name="q" value="${c.q}" />
+        <input type="submit" name="" value="Search »" />
+      </form>
+      <p i18n:msg="item_count">
+        <strong>${c.page.item_count}</strong> users found.
+      </p>
+    </li>
+    
+
+  </py:match>
+  
+  <py:match path="minornavigation">
+    <ul class="tabbed">
+      <li>
+        <a href="?q=${c.q}&order_by=edits" rel="nofollow">Sort by edits</a>
+      </li>
+      <li>
+        <a href="?q=${c.q}&order_by=name" rel="nofollow">Sort by name</a>
+      </li>
+    </ul>
+  </py:match>
+
 
   <div py:match="content">
-    <h2>Users</h2>
-    <div class="sort">
-      <a href="?q=${c.q}&order_by=edits" rel="nofollow">Sort by edits</a>
-      <a href="?q=${c.q}&order_by=name" rel="nofollow">Sort by name</a>
-    </div>
-
-    <form id="user-search" action="" method="GET">
-      <input type="text" id="q" name="q" value="${c.q}" />
-      <input type="submit" name="" value="Search »" />
-    </form>
-    
-    <p i18n:msg="item_count">
-      <strong>${c.page.item_count}</strong> users found.
-    </p>
-    
-    <hr />
-    
     <ul class="userlist">
-      <li py:for="user in c.page.items" class="user">
+     <li py:for="user in c.page.items" class="user"><ul><li class="username">
           ${h.linked_user(user['name'], maxlength=20)}


--- a/ckan/templates/user/login.html	Fri Sep 02 20:31:51 2011 +0100
+++ b/ckan/templates/user/login.html	Fri Sep 02 23:49:13 2011 +0100
@@ -31,7 +31,6 @@
   <py:def function="page_title">Login - User</py:def><div py:match="content">
-    <h2>Login</h2><form action="/login_generic" method="post" class="simple-form" id="generic_form"><fieldset>
@@ -49,9 +48,10 @@
       ${h.submit('s', _('Login'))} — 
       <a href="${h.url_for('reset')}">Forgot your password?</a></form>
-
+    <br/><!-- Simple OpenID Selector -->
-    <form py:if="g.openid_enabled" action="/login_openid" method="post" id="openid_form">
+    <form py:if="g.openid_enabled" action="/login_openid" method="post"
+      class="simple-form" id="openid_form"><input type="hidden" name="action" value="verify" /><fieldset><legend i18n:msg="site_title">Login using Open ID</legend>
@@ -60,18 +60,9 @@
           <div id="openid_btns"></div></div><div id="openid_input_area">
-          <input id="openid_identifier" name="openid_identifier" size="30" type="text" value="http://" />
-          <input id="openid_submit" type="submit" value="Log in »"/>
+          <label for="openid_identifier">OpenID Identifier:</label>
+          <input id="openid_identifier" name="openid_identifier" type="text" value="http://" /></div>
-        <noscript>
-          <p i18n:msg="">OpenID is service that allows you to log-on to many different websites using a single identity.
-    Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
-        </noscript>
-      </fieldset>
-    </form>
-    
-    <div py:if="g.openid_enabled">
-      <h3>Don't have an OpenID?</h3><p i18n:msg="">
         OpenID is service that allows you to log-on to many different websites
         using a single identity. Find out <a href="http://openid.net/what/">more
@@ -80,7 +71,9 @@
         free OpenID provider such as <a 
         href="https://www.myopenid.com/">https://www.myopenid.com/</a>.
       </p>
-    </div>
+      </fieldset>
+      <input id="openid_submit" type="submit" value="Sign in"/>
+    </form></div><xi:include href="layout.html" /></html>


--- a/ckan/templates/user/new.html	Fri Sep 02 20:31:51 2011 +0100
+++ b/ckan/templates/user/new.html	Fri Sep 02 23:49:13 2011 +0100
@@ -1,13 +1,14 @@
 <html xmlns:py="http://genshi.edgewall.org/"
-
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">Register - User</py:def>
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+  </py:def><py:match path="primarysidebar"><li class="widget-container widget_text">
-      <h2>Have an OpenID?</h2>
+      <h3>Have an OpenID?</h3><p>
         If you have an account with Google, Yahoo or one of many other 
         OpenID providers, you can log in without signing up. 
@@ -17,12 +18,12 @@
       </ul></li></py:match>
+  
+  <py:def function="page_title">Register - User</py:def>
+  <py:def function="page_heading">Join the community</py:def>
+  
 
   <div py:match="content">
-    <h2>
-      Join the community
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/user/read.html	Fri Sep 02 20:31:51 2011 +0100
+++ b/ckan/templates/user/read.html	Fri Sep 02 23:49:13 2011 +0100
@@ -3,19 +3,33 @@
   py:strip=""><py:def function="page_title">${c.user_dict['display_name']} - User</py:def>
+  <py:def function="page_heading">${c.user_dict['display_name']}</py:def><py:def function="body_class">user-view</py:def>
+  
+  <py:match path="minornavigation">
+    <ul class="tabbed" py:if="c.is_myself">
+      <li><a href="${h.url_for(controller='user', action='edit')}">Edit your profile</a></li>
+      <li><a href="${h.url_for('/user/logout')}">Log out</a></li>
+    </ul>
+  </py:match>
+  
+  <py:match path="primarysidebar">
+    <li class="widget-container widget_text" py:if="not c.hide_welcome_message">
+      <h3>Activity</h3>
+      <ul>
+        <li><strong>Number of edits:</strong> ${c.num_edits}</li>
+        <li><strong>Number of packages administered:</strong> ${c.num_pkg_admin}</li>
+      </ul>
+    </li>
+  </py:match><div py:match="content">
-
-    <h2>${c.user_dict['display_name']}</h2><py:if test="c.is_myself"><h3>My Account</h3><p>You are logged in.</p><ul><li>Your API key is: ${c.user_dict['apikey']}</li>
-        <li><a href="${h.url_for(controller='user', action='edit')}">Edit your profile</a></li>
-        <li><a href="${h.url_for('/user/logout')}">Log out</a></li></ul></py:if>
 
@@ -23,14 +37,6 @@
       ${c.about_formatted}
     </div>
 
-    <div class="activity">
-      <h3>Activity</h3>
-      <ul>
-        <li><strong>Number of edits:</strong> ${c.user_dict['number_of_edits']}</li>
-        <li><strong>Number of packages administered:</strong> ${c.user_dict['number_administered_packages']}</li>
-      </ul>
-    </div>
-
     <div class="changes"><h3>Recent changes</h3>
       ${revision_list_from_dict(c.user_dict['activity'])}


http://bitbucket.org/okfn/ckan/changeset/a6e47390bdc7/
changeset:   a6e47390bdc7
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-03 00:59:53
summary:     [theme][xs]: Sidebar on the login page should have css 'boxed' class.
affected #:  1 file (74 bytes)

--- a/ckan/templates/user/login.html	Fri Sep 02 23:49:13 2011 +0100
+++ b/ckan/templates/user/login.html	Fri Sep 02 23:59:53 2011 +0100
@@ -15,7 +15,7 @@
   </py:def><py:match path="primarysidebar">
-    <li class="widget-container widget_text">
+    <li class="widget-container boxed widget_text"><h2>Not a member?</h2><p>
       Join CKAN to contribute packages under your own name.
@@ -29,6 +29,7 @@
   </py:match><py:def function="page_title">Login - User</py:def>
+  <py:def function="page_heading">Login to ${g.site_title}</py:def><div py:match="content">
     


http://bitbucket.org/okfn/ckan/changeset/62b14f2155f9/
changeset:   62b14f2155f9
branch:      feature-1108-new-theme
user:        zephod
date:        2011-09-03 01:20:07
summary:     [theme][s]: Tidying up some unit test failures. (Some are quite brittle). Remaining failures might well be genuine bugs in new layouts?
affected #:  4 files (238 bytes)

--- a/ckan/templates/group/read.html	Fri Sep 02 23:59:53 2011 +0100
+++ b/ckan/templates/group/read.html	Sat Sep 03 00:20:07 2011 +0100
@@ -6,6 +6,9 @@
   <py:def function="page_title">${c.group.display_name} - Groups</py:def><py:def function="page_heading">
+      <py:if test="not c.group.title">
+        <em>No Title</em>
+      </py:if>
       ${c.group.title}
   </py:def>
   


--- a/ckan/templates/user/login.html	Fri Sep 02 23:59:53 2011 +0100
+++ b/ckan/templates/user/login.html	Sat Sep 03 00:20:07 2011 +0100
@@ -64,14 +64,17 @@
           <label for="openid_identifier">OpenID Identifier:</label><input id="openid_identifier" name="openid_identifier" type="text" value="http://" /></div>
-      <p i18n:msg="">
-        OpenID is service that allows you to log-on to many different websites
-        using a single identity. Find out <a href="http://openid.net/what/">more
-        about OpenID</a> and <a href="http://openid.net/get/">how to get an
-        OpenID enabled account</a>. Probably the simplest way is sign up with a
-        free OpenID provider such as <a 
-        href="https://www.myopenid.com/">https://www.myopenid.com/</a>.
-      </p>
+      <div py:if="g.openid_enabled">
+        <h3>Don't have an OpenID?</h3>
+        <p i18n:msg="">
+          OpenID is service that allows you to log-on to many different websites
+          using a single identity. Find out <a href="http://openid.net/what/">more
+          about OpenID</a> and <a href="http://openid.net/get/">how to get an
+          OpenID enabled account</a>. Probably the simplest way is sign up with a
+          free OpenID provider such as <a 
+          href="https://www.myopenid.com/">https://www.myopenid.com/</a>.
+        </p>
+      </div></fieldset><input id="openid_submit" type="submit" value="Sign in"/></form>


--- a/ckan/templates/user/read.html	Fri Sep 02 23:59:53 2011 +0100
+++ b/ckan/templates/user/read.html	Sat Sep 03 00:20:07 2011 +0100
@@ -17,8 +17,8 @@
     <li class="widget-container widget_text" py:if="not c.hide_welcome_message"><h3>Activity</h3><ul>
-        <li><strong>Number of edits:</strong> ${c.num_edits}</li>
-        <li><strong>Number of packages administered:</strong> ${c.num_pkg_admin}</li>
+        <li><strong>Number of edits:</strong> ${c.user_dict['number_of_edits']}</li>
+        <li><strong>Number of packages administered:</strong> ${c.user_dict['number_administered_packages']}</li></ul></li></py:match>


--- a/ckan/tests/functional/test_group.py	Fri Sep 02 23:59:53 2011 +0100
+++ b/ckan/tests/functional/test_group.py	Sat Sep 03 00:20:07 2011 +0100
@@ -54,7 +54,7 @@
     def test_index(self):
         offset = url_for(controller='group')
         res = self.app.get(offset)
-        assert '<h2>Groups</h2>' in res, res
+        assert '<h1 class="page_heading">Groups' in res, res
         group_count = model.Session.query(model.Group).count()
         assert 'There are %s groups.' % group_count in self.strip_tags(res)
         groupname = 'david'
@@ -77,7 +77,7 @@
             main_res = self.main_div(res)
             assert title in res, res
             #assert 'edit' not in main_res, main_res
-            assert 'Administrators:' in main_res, main_res
+            assert 'Administrators:' in res, res
             assert 'russianfan' in main_res, main_res
             assert name in res, res
             assert 'There are 2 packages in this group' in self.strip_tags(main_res), main_res


http://bitbucket.org/okfn/ckan/changeset/f5c4823e5577/
changeset:   f5c4823e5577
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 14:19:28
summary:     [theme,tests][s]: minor changes to test_group to get it passing with new templates.

* plus change Groups link in main template from Package Groups to plain Groups.
affected #:  2 files (425 bytes)

--- a/ckan/templates/layout_base.html	Sat Sep 03 00:20:07 2011 +0100
+++ b/ckan/templates/layout_base.html	Sat Sep 03 13:19:28 2011 +0100
@@ -95,7 +95,7 @@
           <div id="mainmenu"><span py:if="h.check_access('package_create')">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</span>
             ${h.nav_link(c, _('Search'), controller='package', action='index', id=None, highlight_actions = 'new index')}
-            ${h.nav_link(c, _('Package Groups'), controller='group', action='index', id=None, highlight_actions = 'new index')}
+            ${h.nav_link(c, _('Groups'), controller='group', action='index', id=None)}
           </div>
           ${h.nav_link(c, _('About'), controller='home', action='about', id=None)}
         </div>


--- a/ckan/tests/functional/test_group.py	Sat Sep 03 00:20:07 2011 +0100
+++ b/ckan/tests/functional/test_group.py	Sat Sep 03 13:19:28 2011 +0100
@@ -42,21 +42,20 @@
     def teardown_class(self):
         model.repo.rebuild_db()
 
-    @search_related
+    # TODO: remove test (?)
+    # why: very fragile and overly detailed checking of main menu:w
     def test_mainmenu(self):
         offset = url_for(controller='home', action='index')
         res = self.app.get(offset)
         assert 'Groups' in res, res
         assert 'Groups</a>' in res, res
         res = res.click(href='/group', index=0)
-        assert '<h2>Groups</h2>' in res, res
+        assert 'Groups of' in res, res
 
     def test_index(self):
         offset = url_for(controller='group')
         res = self.app.get(offset)
         assert '<h1 class="page_heading">Groups' in res, res
-        group_count = model.Session.query(model.Group).count()
-        assert 'There are %s groups.' % group_count in self.strip_tags(res)
         groupname = 'david'
         group = model.Group.by_name(unicode(groupname))
         group_title = group.title
@@ -77,7 +76,7 @@
             main_res = self.main_div(res)
             assert title in res, res
             #assert 'edit' not in main_res, main_res
-            assert 'Administrators:' in res, res
+            assert 'Administrators' in res, res
             assert 'russianfan' in main_res, main_res
             assert name in res, res
             assert 'There are 2 packages in this group' in self.strip_tags(main_res), main_res
@@ -111,12 +110,12 @@
         
 
 class TestEdit(FunctionalTestCase):
-    groupname = u'david'
 
     @classmethod
     def setup_class(self):
         model.Session.remove()
         CreateTestData.create()
+        self.groupname = u'david'
         self.packagename = u'testpkg'
         model.repo.new_revision()
         model.Session.add(model.Package(name=self.packagename))
@@ -135,22 +134,14 @@
         res = res.follow()
         assert res.request.url.startswith('/user/login')
 
-    def test_1_read_allowed_for_admin(self):
-        offset = url_for(controller='group', action='edit', id=self.groupname)
-        res = self.app.get(offset, status=200, extra_environ={'REMOTE_USER': 'russianfan'})
-        assert 'Edit Group: %s' % self.groupname in res, res
-        
     def test_2_edit(self):
+        group = model.Group.by_name(self.groupname)
         offset = url_for(controller='group', action='edit', id=self.groupname)
         print offset
         res = self.app.get(offset, status=200, extra_environ={'REMOTE_USER': 'russianfan'})
-        assert 'Edit Group: %s' % self.groupname in res, res
-
-        print res
-        
+        assert 'Edit: %s' % group.title in res, res
 
         form = res.forms['group-edit']
-        group = model.Group.by_name(self.groupname)
         titlefn = 'title'
         descfn = 'description'
         newtitle = 'xxxxxxx'


http://bitbucket.org/okfn/ckan/changeset/5aafe9f41132/
changeset:   5aafe9f41132
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 15:07:52
summary:     [theme][xs]: reinstate search box in top bar on home page (was hidden by css).
affected #:  1 file (66 bytes)

--- a/ckan/templates/home/index.html	Sat Sep 03 13:19:28 2011 +0100
+++ b/ckan/templates/home/index.html	Sat Sep 03 14:07:52 2011 +0100
@@ -16,10 +16,6 @@
           display: none;
         }
 
-        #menusearch {
-          display: none;
-        }
-        
         .front-page .action-box h1 {
           padding-top: 0.6em;
           padding-bottom: 0.5em;


http://bitbucket.org/okfn/ckan/changeset/77272494e448/
changeset:   77272494e448
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 15:34:41
summary:     [test][xs]: suppress incredibly verbose logging (for postgres tests).
affected #:  1 file (481 bytes)

--- a/test-core.ini	Sat Sep 03 14:07:52 2011 +0100
+++ b/test-core.ini	Sat Sep 03 14:34:41 2011 +0100
@@ -51,3 +51,37 @@
 # mailer
 test_smtp_server = localhost:6675
 ckan.mail_from = info at test.ckan.net
+
+
+# Logging configuration
+[loggers]
+keys = root, ckan, sqlalchemy
+
+[handlers]
+keys = console
+
+[formatters]
+keys = generic
+
+[logger_root]
+level = WARN
+handlers = console
+
+[logger_ckan]
+qualname = ckan
+handlers = 
+level = INFO
+
+[logger_sqlalchemy]
+handlers =
+qualname = sqlalchemy.engine
+level = WARN  
+
+[handler_console]
+class = StreamHandler
+args = (sys.stdout,)
+level = NOTSET
+formatter = generic
+
+[formatter_generic]
+format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s


http://bitbucket.org/okfn/ckan/changeset/65b9005d92c2/
changeset:   65b9005d92c2
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 16:03:28
summary:     [tests][s]: remove broken (and unneeded) home page tests.

* e.g. test of search on front page (no longer worked as had changed -- generally too theme specific to be worth testing)
* tag click test (tags no longer there).
* removed already disabled register new package test
* In general i think this represents a general issue with the html testing we have at the moment: it is overly specific and highly tied to theme.
affected #:  1 file (1.0 KB)

--- a/ckan/tests/functional/test_home.py	Sat Sep 03 14:34:41 2011 +0100
+++ b/ckan/tests/functional/test_home.py	Sat Sep 03 15:03:28 2011 +0100
@@ -49,12 +49,6 @@
         res = self.app.get(offset)
         res.click('Search', index=0)
         
-    # TODO Can this be deleted? Redesign has no such link. [Perhaps it should?]
-    #def test_tags_link(self):
-        #offset = url_for('home')
-        #res = self.app.get(offset)
-        #res.click('Tags', index=0)
-        
     def test_404(self):
         offset = '/some_nonexistent_url'
         res = self.app.get(offset, status=404)
@@ -68,31 +62,11 @@
         url = url_for('guide')
         assert url == 'http://wiki.okfn.org/ckan/doc/'
 
-    @search_related
-    def test_search_packages(self):
-        offset = url_for('home')
-        res = self.app.get(offset)
-        form = res.forms['package-search']
-        form['q'] =  'anna'
-        results_page = form.submit()
-        assert 'Search - ' in results_page, results_page
-        assert '>0<' in results_page, results_page
-    
     def test_template_footer_end(self):
         offset = url_for('home')
         res = self.app.get(offset)
         assert '<strong>TEST TEMPLATE_FOOTER_END TEST</strong>'
 
-    # DISABLED because this is not on home page anymore
-    def _test_register_new_package(self):
-        offset = url_for('home')
-        res = self.app.get(offset)
-        form = res.forms[1]
-        form['title'] =  'test title'
-        results_page = form.submit()
-        assert 'Register a New Package' in results_page, results_page
-        assert '<input id="Package--title" name="Package--title" size="40" type="text" value="test title">' in results_page, results_page
-        
     def test_locale_change(self):
         offset = url_for('home')
         res = self.app.get(offset)


http://bitbucket.org/okfn/ckan/changeset/03d2afc708fd/
changeset:   03d2afc708fd
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 16:04:11
summary:     [tests][xs]: remove mainmenu test in test_authorization_group as no longer have it in mainmenu (should not test anyway IMO).
affected #:  1 file (360 bytes)

--- a/ckan/tests/functional/test_authorization_group.py	Sat Sep 03 15:03:28 2011 +0100
+++ b/ckan/tests/functional/test_authorization_group.py	Sat Sep 03 15:04:11 2011 +0100
@@ -28,15 +28,6 @@
         model.repo.rebuild_db()
         model.Session.remove()
 
-    @search_related
-    def test_mainmenu(self):
-        offset = url_for(controller='home', action='index')
-        res = self.app.get(offset)
-        assert 'Authorization Groups' in res, res
-        assert 'Authorization Groups</a>' in res, res
-        res = res.click(href='/authorizationgroup')
-        assert '<h2>Authorization Groups</h2>' in res, res
-
     def test_index(self):
         offset = url_for(controller='authorization_group')
         res = self.app.get(offset, extra_environ={'REMOTE_USER': 'russianfan'})


http://bitbucket.org/okfn/ckan/changeset/df810045f145/
changeset:   df810045f145
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 16:09:26
summary:     [tests/package][xs]: fix up tests for theme changes (no hash on package read and state always shown).
affected #:  1 file (299 bytes)

--- a/ckan/tests/functional/test_package.py	Sat Sep 03 15:04:11 2011 +0100
+++ b/ckan/tests/functional/test_package.py	Sat Sep 03 15:09:26 2011 +0100
@@ -308,7 +308,6 @@
         assert anna.url in res
         assert cgi.escape(anna.resources[0].url) in res
         assert anna.resources[0].description in res
-        assert anna.resources[0].hash in res
         assert 'Some test notes' in res
         self.check_named_element(res, 'a',
                                  'http://ckan.net/',
@@ -321,18 +320,12 @@
         assert 'russian' in res
         assert 'david' in res
         assert 'roger' in res
-        assert 'State:' not in res
+        assert 'State' in res
         assert 'genre' in res, res
         assert 'romantic novel' in res, res
         assert 'original media' in res, res
         assert 'book' in res, res
 
-    def test_read_as_admin(self):
-        name = u'annakarenina'
-        offset = url_for(controller='package', action='read', id=name)
-        res = self.app.get(offset, extra_environ={'REMOTE_USER':'annafan'})
-        assert 'State:' in res, res
-
     def test_read_nonexistentpackage(self):
         name = 'anonexistentpackage'
         offset = url_for(controller='package', action='read', id=name)


http://bitbucket.org/okfn/ckan/changeset/5a7a068c0e44/
changeset:   5a7a068c0e44
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 16:33:53
summary:     [tests/revision][xs]: remove major navigation test as revision no longer in main navigation.
affected #:  1 file (227 bytes)

--- a/ckan/tests/functional/test_revision.py	Sat Sep 03 15:09:26 2011 +0100
+++ b/ckan/tests/functional/test_revision.py	Sat Sep 03 15:33:53 2011 +0100
@@ -22,13 +22,6 @@
             rev.author = "Test Revision %s" % i
             model.repo.commit()
 
-    @search_related
-    def test_link_major_navigation(self):
-        offset = url_for(controller='home')
-        res = self.app.get(offset)
-        res = res.click('Revision History')
-        assert 'Revision History' in res
-
     def test_paginated_list(self):
         # Ugh. Why is the number of items per page hard-coded? A designer might
         # decide that 20 is the right number of revisions to display per page,


http://bitbucket.org/okfn/ckan/changeset/4fb2c0badf2b/
changeset:   4fb2c0badf2b
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 16:57:31
summary:     [theme/layout,tests][s]: add links to revision, tags, side admin to footer section and remove license page.

* For licenes link directly to ODbL.
affected #:  4 files (595 bytes)

--- a/ckan/templates/home/license.html	Sat Sep 03 15:33:53 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<html xmlns:py="http://genshi.edgewall.org/"
-  xmlns:i18n="http://genshi.edgewall.org/i18n"
-  xmlns:xi="http://www.w3.org/2001/XInclude"
-  py:strip="">
-  
-  <py:def function="page_title">License</py:def>
-
-  <div py:match="content">
-    <h2>${g.site_title} License</h2>
-
-    <p i18n:msg="">All material on this site is <a
-      href="http://opendefinition.org/">open</a> and can be freely used, reused
-    and redistributed. Formally, the data/database is licensed under the <a
-      href="http://opendatacommons.org/licenses/odbl/">Open Data Commons Open
-      Database License v1.0</a>, with all copyrightable content in that
-    database plus any additional content on this site licensed under a <a
-      href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons
-      Attribution Share-Alike v3.0 license</a>.</p>
-  </div>
-
-  <xi:include href="layout.html" />
-</html>


--- a/ckan/templates/layout_base.html	Sat Sep 03 15:33:53 2011 +0100
+++ b/ckan/templates/layout_base.html	Sat Sep 03 15:57:31 2011 +0100
@@ -159,6 +159,33 @@
           </div></div><div class="xoxo span-6">
+          <h3 class="widget-title">Sections</h3>
+          <div class="textwidget">
+            <ul>
+              <li>
+                <a href="${url(controller='tag', action='index')}">
+                  Tags
+                </a>
+              </li>
+              <li>
+                <a href="${url(controller='revision', action='index')}">
+                  Revisions
+                </a>
+              </li>
+              <li>
+                <a href="${url(controller='authorization_group', action='index')}">
+                  Authorization Groups
+                </a>
+              </li>
+              <li>
+                <a href="${url('/ckan-admin')}">
+                  Site Admin
+                </a>
+              </li>
+            </ul>
+          </div>
+        </div>
+        <div class="xoxo span-6"><h3 class="widget-title">Languages</h3><div class="textwidget"><ul>
@@ -167,22 +194,7 @@
   current_url = url.current().encode('utf-8')
   current_url_hash = ckan.lib.hash.get_message_hash(current_url)
 ?>
-              <li py:for="locale in h.get_available_locales()[0::2]">
-              <a href="${url(controller='home', action='locale', 
-                             locale=str(locale), 
-                             return_to=current_url,
-                             hash=current_url_hash)}">
-                  ${locale.display_name or locale.english_name}
-                </a>
-              </li>
-            </ul>
-          </div>
-        </div>
-        <div class="xoxo span-6">
-          <h3 class="widget-title"> </h3>
-          <div class="textwidget">
-            <ul>
-              <li py:for="locale in h.get_available_locales()[1::2]">
+              <li py:for="locale in h.get_available_locales()"><a href="${url(controller='home', action='locale', 
                              locale=str(locale), 
                              return_to=current_url,
@@ -194,13 +206,16 @@
           </div></div><div class="xoxo span-6 last">
-          <h3 class="widget-title"> </h3>
+          <h3 class="widget-title">Meta</h3><p id="credits">
-          © 2011:
+          © 2011
         <img src="http://assets.okfn.org/images/logo/okf_logo_white_and_green_tiny.png" id="footer-okf-logo" />
-          <a href="http://www.okfn.org/">Open Knowledge Foundation</a><br/><br/>
+        <a href="http://okfn.org/">Open Knowledge Foundation</a>
+        Licensed under the <a href="http://opendatacommons.org/licenses/odbl/1.0/">Open Database License</a>
+        <a href="http://opendefinition.org/"><img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/></a>
+        
+        <br/><br/>
         Powered by <a href="http://ckan.org">CKAN</a>.<br/>
-            <a href="http://www.opendefinition.org/okd/"><img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/></a></p></div></footer>


--- a/ckan/tests/functional/test_authz.py	Sat Sep 03 15:33:53 2011 +0100
+++ b/ckan/tests/functional/test_authz.py	Sat Sep 03 15:57:31 2011 +0100
@@ -601,8 +601,6 @@
 
     def test_home(self):
         self._check_logged_in_users_authorized_only('/')
-        self._check_logged_in_users_authorized_only('/about')
-        self._check_logged_in_users_authorized_only('/license')
     
     def test_tags_pages(self):
         self._check_logged_in_users_authorized_only('/tag')


--- a/ckan/tests/functional/test_home.py	Sat Sep 03 15:33:53 2011 +0100
+++ b/ckan/tests/functional/test_home.py	Sat Sep 03 15:57:31 2011 +0100
@@ -53,11 +53,6 @@
         offset = '/some_nonexistent_url'
         res = self.app.get(offset, status=404)
 
-    def test_license(self):
-        offset = url_for('license')
-        res = self.app.get(offset)
-        assert 'License' in res
-
     def test_guide(self):
         url = url_for('guide')
         assert url == 'http://wiki.okfn.org/ckan/doc/'


http://bitbucket.org/okfn/ckan/changeset/6a42d7737948/
changeset:   6a42d7737948
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 17:04:10
summary:     [templates/revision][s]: minor updates to revision templates to bring into line with the new theme.

* Also remove revision purge template as no longer used.
affected #:  4 files (221 bytes)

--- a/ckan/templates/revision/layout.html	Sat Sep 03 15:57:31 2011 +0100
+++ b/ckan/templates/revision/layout.html	Sat Sep 03 16:04:10 2011 +0100
@@ -4,6 +4,7 @@
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip=""
   >
+
   <xi:include href="../layout.html" /></html>
 


--- a/ckan/templates/revision/list.html	Sat Sep 03 15:57:31 2011 +0100
+++ b/ckan/templates/revision/list.html	Sat Sep 03 16:04:10 2011 +0100
@@ -3,16 +3,22 @@
   py:strip=""><py:def function="page_title">Revision History</py:def>
+  <py:def function="page_heading">Revision History</py:def>
+
+  <py:match path="minornavigation">
+    <ul class="tabbed">
+      <li>
+        ${h.subnav_link(c,_('Home'), controller='revision', action='index')}</li>
+      <li class="action">
+      ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
+      controller='revision', action='index', format='atom', days=1)}
+      </li>
+    </ul>
+  </py:match><div py:match="content">
-    <h2>
-      Revision History
-      <p class="atom-feed-link revision-history-link">
-        <a href="?format=atom&days=5" title="${g.site_title} - Revision History">Subscribe »</a>
-      </p>
-    </h2>
-    <p>This page lists all changes to package database, with most recent
-    changes first. </p>
+    <p>Track the most recent changes to the system, with most recent
+    changes first.</p>
       
     ${c.page.pager()}
 


--- a/ckan/templates/revision/purge.html	Sat Sep 03 15:57:31 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<html xmlns:py="http://genshi.edgewall.org/"
-  xmlns:xi="http://www.w3.org/2001/XInclude"
-  py:strip="">
-  
-  <py:def function="page_title">Purge - Revisions</py:def>
-
-  <div py:match="content" py:choose="">
-    <h2>Revision Purge</h2>
-    <p py:when="c.error"><strong>There was an error: ${c.error}</strong></p>
-    <p py:otherwise="">Purge successful.</p>
-  </div>
-
-  <xi:include href="layout.html" />
-</html>
-
-


--- a/ckan/templates/revision/read.html	Sat Sep 03 15:57:31 2011 +0100
+++ b/ckan/templates/revision/read.html	Sat Sep 03 16:04:10 2011 +0100
@@ -3,7 +3,7 @@
   py:strip=""><py:def function="page_title">Revision ${c.revision.id}</py:def>
-  <py:def function="body_class">revision</py:def>
+  <py:def function="page_heading">Revision: ${c.revision.id}</py:def><py:match path="primarysidebar"><li class="widget-container widget_text">
@@ -29,9 +29,6 @@
   </py:match><div py:match="content" class="revision state-${c.revision.state}">
-    <h2>
-      Revision: ${c.revision.id}
-    </h2><p py:if="c.revision.state != 'active'" class="state-notice">
       ${c.revision.state} 
     </p>


http://bitbucket.org/okfn/ckan/changeset/b0fe529a69d9/
changeset:   b0fe529a69d9
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 17:08:55
summary:     [templates][xs]: make sure subscribe link is there and css'd correctly for package and group.
affected #:  2 files (205 bytes)

--- a/ckan/templates/group/layout.html	Sat Sep 03 16:04:10 2011 +0100
+++ b/ckan/templates/group/layout.html	Sat Sep 03 16:08:55 2011 +0100
@@ -31,7 +31,7 @@
     <li py:if="h.check_access('group_edit_permissions',{'id':c.group.id})">
       ${h.subnav_link(c, h.icon('lock') + _('Authorization'), controller='group', action='authz', id=c.group.name)}
     </li>
-    <li>
+    <li class="action">
     ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
     controller='group', action='history', id=c.group.name, format='atom', days=7)}
     </li>


--- a/ckan/templates/package/layout.html	Sat Sep 03 16:04:10 2011 +0100
+++ b/ckan/templates/package/layout.html	Sat Sep 03 16:08:55 2011 +0100
@@ -16,6 +16,10 @@
       <li py:if="h.check_access('package_edit_permissions',{'id':c.pkg.id})">
         ${h.subnav_link(c, h.icon('lock') + _('Authorization'), controller='package', action='authz', id=c.pkg.name)}
       </li>
+      <li class="action">
+        ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
+        controller='package', action='history', id=c.pkg.name, format='atom', days=7)}
+      </li></ul></py:if></py:match>


http://bitbucket.org/okfn/ckan/changeset/be25b1c84a1c/
changeset:   be25b1c84a1c
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 17:09:21
summary:     [templates/tag][xs]: page_heading for tag page.
affected #:  1 file (30 bytes)

--- a/ckan/templates/tag/read.html	Sat Sep 03 16:08:55 2011 +0100
+++ b/ckan/templates/tag/read.html	Sat Sep 03 16:09:21 2011 +0100
@@ -4,9 +4,9 @@
   py:strip=""><py:def function="page_title">${c.tag['name']} - Tags</py:def>
+  <py:def function="page_heading">Tag: ${c.tag['name']}</py:def><div py:match="content">
-    <h2>Tag: ${c.tag['name']}</h2><p i18n:msg="package_count, tagname">There are ${len(c.tag['packages'])} packages tagged with <strong>${c.tag['name']}</strong>:</p>
     ${package_list_from_dict(c.tag['packages'])}
   </div>


http://bitbucket.org/okfn/ckan/changeset/d76e4258e0be/
changeset:   d76e4258e0be
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-03 17:33:25
summary:     [config/deployment][xs]: link to correct ckan logo (box).
affected #:  1 file (6 bytes)

--- a/ckan/config/deployment.ini_tmpl	Sat Sep 03 16:09:21 2011 +0100
+++ b/ckan/config/deployment.ini_tmpl	Sat Sep 03 16:33:25 2011 +0100
@@ -126,7 +126,7 @@
 ckan.site_title = CKAN
 
 ## Logo image to use (replaces site_title string on front page if defined)
-ckan.site_logo = http://assets.okfn.org/p/ckan/img/ckan_logo_largetext.png
+ckan.site_logo = http://assets.okfn.org/p/ckan/img/ckan_logo_box.png
 
 ## Site tagline / description (used on front page)
 ckan.site_description = 


http://bitbucket.org/okfn/ckan/changeset/fef70b4dbe00/
changeset:   fef70b4dbe00
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-04 14:22:02
summary:     [templates/authorization_group][s]: update these to new theme setup (page_heading mainly).
affected #:  5 files (372 bytes)

--- a/ckan/templates/authorization_group/authz.html	Sat Sep 03 16:33:25 2011 +0100
+++ b/ckan/templates/authorization_group/authz.html	Sun Sep 04 13:22:02 2011 +0100
@@ -3,14 +3,10 @@
   py:strip=""><py:def function="page_title">${c.authorization_group_name} - Authorization - AuthorizationGroups</py:def>
+  <py:def function="page_heading">Authorization: ${c.authorization_group_name}</py:def><div py:match="content">
-    <h2>
-      Authorization for authorization group: ${c.authorization_group_name}
-    </h2>
-
-
-    <h2>Update Existing Roles</h2>
+    <h3>Update Existing Roles</h3><form id="theform" method="POST">
       ${authz_form_table('theform', c.roles, c.users, c.user_role_dict)}
@@ -19,7 +15,7 @@
       </button></form>
 
-    <h2>Add Roles for Any User</h2>
+    <h3>Add Roles for Any User</h3><form id="addform" method="POST">
       ${authz_add_table(c.roles)}
@@ -28,7 +24,7 @@
 
     <hr/>
 
-    <h2>Existing Roles for Authorization Groups</h2>
+    <h3>Existing Roles for Authorization Groups</h3><form id="authzgroup_form" method="POST">
       ${authz_form_group_table('authzgroup_form', c.roles, c.authz_groups, c.authz_groups_role_dict)}
@@ -37,7 +33,7 @@
       </button></form>
 
-    <h2>Add Roles for Any Authorization Group</h2>
+    <h3>Add Roles for Any Authorization Group</h3><form id="authzgroup_addform" method="POST">
       ${authz_add_group_table(c.roles)}


--- a/ckan/templates/authorization_group/edit.html	Sat Sep 03 16:33:25 2011 +0100
+++ b/ckan/templates/authorization_group/edit.html	Sun Sep 04 13:22:02 2011 +0100
@@ -2,13 +2,10 @@
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">${c.authorization_group_name} - Edit - AuthorizationGroups</py:def>
+  <py:def function="page_title">${c.authorization_group_name} - Edit - Authorization Groups</py:def>
+  <py:def function="page_heading">Edit: ${c.authorization_group.name}</py:def><div py:match="content">
-    <h2>
-      Edit Authorization Group: ${c.authorization_group_name}
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/authorization_group/index.html	Sat Sep 03 16:33:25 2011 +0100
+++ b/ckan/templates/authorization_group/index.html	Sun Sep 04 13:22:02 2011 +0100
@@ -4,10 +4,9 @@
   py:strip=""><py:def function="page_title">Authorization Groups</py:def>
+  <py:def function="page_heading">Authorization Groups</py:def><div py:match="content">
-    <h2>Authorization Groups</h2>
-    
     <p i18n:msg="item_count">There are <strong>${c.page.item_count}</strong> authorization groups.</p>
 
     ${c.page.pager()}


--- a/ckan/templates/authorization_group/new.html	Sat Sep 03 16:33:25 2011 +0100
+++ b/ckan/templates/authorization_group/new.html	Sun Sep 04 13:22:02 2011 +0100
@@ -3,12 +3,9 @@
   py:strip=""><py:def function="page_title">New - Authorization Groups</py:def>
+  <py:def function="page_heading">New Authorization Group</py:def><div py:match="content">
-    <h2>
-      New Authorization Group
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/authorization_group/read.html	Sat Sep 03 16:33:25 2011 +0100
+++ b/ckan/templates/authorization_group/read.html	Sun Sep 04 13:22:02 2011 +0100
@@ -4,26 +4,14 @@
   py:strip=""><py:def function="page_title">${c.authorization_group.name} - Authorization Groups</py:def>
+  <py:def function="page_heading">${c.authorization_group.name}</py:def><div py:match="content">
-   <div class="group">
-    <h2 class="head">
-      <span class="name">${c.authorization_group.name}</span>
-    </h2>
-    
-    <py:if test="c.group_admins">
-      <h3>Administrators:</h3> 
-        <py:for each="admin in c.authorization_group_admins">
-          <a href="${h.url_for(controller='user',action='read',id=admin.id)}">${admin.name}</a>
-        </py:for>
-    </py:if>      
-
-    <h3>Users:</h3>
+    <h3>Members</h3>
+    <p i18n:msg="item_count">There are ${c.page.item_count} users in this authorization group.</p>
     ${c.page.pager()}
     ${user_list(c.page.items)}
     ${c.page.pager()}
-    <p i18n:msg="item_count">There are ${c.page.item_count} users in this authorization group.</p>
-   </div></div><xi:include href="layout.html" />


http://bitbucket.org/okfn/ckan/changeset/0aa242a27f21/
changeset:   0aa242a27f21
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-04 14:23:48
summary:     [templates/authz][xs]: correct group authz page_heading, change h2 to h3 and tweak text.
affected #:  2 files (21 bytes)

--- a/ckan/templates/group/authz.html	Sun Sep 04 13:22:02 2011 +0100
+++ b/ckan/templates/group/authz.html	Sun Sep 04 13:23:48 2011 +0100
@@ -3,13 +3,10 @@
   py:strip=""><py:def function="page_title">${c.grouptitle or c.groupname} - Authorization - Groups</py:def>
+  <py:def function="page_heading">Authorization: ${c.grouptitle or c.groupname}</py:def><div py:match="content">
-    <h2>
-      Authorization for group: ${c.grouptitle or c.groupname}
-    </h2>
-
-    <h2>Update Existing Roles</h2>
+    <h3>Update Existing Roles</h3><form id="theform" method="POST">
       ${authz_form_table('theform', c.roles, c.users, c.user_role_dict)}
@@ -18,7 +15,7 @@
       </button></form>
 
-    <h2>Add Roles for Any User</h2>
+    <h3>Add Roles for Any User</h3><form id="addform" method="POST">
       ${authz_add_table(c.roles)}
@@ -27,7 +24,7 @@
 
     <hr/>
 
-    <h2>Existing Roles for Authorization Groups</h2>
+    <h3>Update Existing Roles for Authorization Groups</h3><form id="authzgroup_form" method="POST">
       ${authz_form_group_table('authzgroup_form', c.roles, c.authz_groups, c.authz_groups_role_dict)}
@@ -36,7 +33,7 @@
       </button></form>
 
-    <h2>Add Roles for Any Authorization Group</h2>
+    <h3>Add Roles for Any Authorization Group</h3><form id="authzgroup_addform" method="POST">
       ${authz_add_group_table(c.roles)}


--- a/ckan/templates/package/authz.html	Sun Sep 04 13:22:02 2011 +0100
+++ b/ckan/templates/package/authz.html	Sun Sep 04 13:23:48 2011 +0100
@@ -24,7 +24,7 @@
 
     <hr/>
 
-    <h3>Existing Roles for Authorization Groups</h3>
+    <h3>Update Existing Roles for Authorization Groups</h3><form id="authzgroup_form" method="POST">
       ${authz_form_group_table('authzgroup_form', c.roles, c.authz_groups, c.authz_groups_role_dict)}


http://bitbucket.org/okfn/ckan/changeset/ae98ca1aa3ea/
changeset:   ae98ca1aa3ea
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-04 14:25:25
summary:     [css][xs]: include jqueryui css and tweak top margin of page heading.
affected #:  2 files (151 bytes)

--- a/ckan/public/css/style.css	Sun Sep 04 13:23:48 2011 +0100
+++ b/ckan/public/css/style.css	Sun Sep 04 13:25:25 2011 +0100
@@ -150,7 +150,7 @@
 /* Basic page elements */
 
 .page_heading {
-  margin-top: 1.5em;
+  margin-top: 1em;
   margin-bottom: 1em;
   font-size: 2.2em;
   font-weight: normal;


--- a/ckan/templates/layout_base.html	Sun Sep 04 13:23:48 2011 +0100
+++ b/ckan/templates/layout_base.html	Sun Sep 04 13:25:25 2011 +0100
@@ -29,6 +29,7 @@
   </py:choose><link href='http://fonts.googleapis.com/css?family=Ubuntu' rel='stylesheet' type='text/css' />
 
+  <link rel="stylesheet" href="${g.site_url}/scripts/vendor/jqueryui/1.8.11/css/ui-lightness/jquery-ui.css" type="text/css" media="screen, print" /><link rel="stylesheet" href="${g.site_url}/css/boilerplate.css?v=2" /><link rel="stylesheet" href="${g.site_url}/css/blueprint/screen.css" type="text/css" media="screen, projection" /><link rel="stylesheet" href="${g.site_url}/css/blueprint/print.css" type="text/css" media="print" />


http://bitbucket.org/okfn/ckan/changeset/4bee57912419/
changeset:   4bee57912419
branch:      feature-1108-new-theme
user:        rgrp
date:        2011-09-04 14:34:42
summary:     [close-branch][xs]: new theme now integrated and all tests passing (including postgres ones!).
affected #:  0 files (0 bytes)

http://bitbucket.org/okfn/ckan/changeset/9be1ae232ec3/
changeset:   9be1ae232ec3
user:        rgrp
date:        2011-09-04 14:47:43
summary:     [merge,from-branch][l]: (closes #1108) merge new theme from feature-1108-new-theme.
affected #:  64 files (77.1 KB)

--- a/ckan/config/deployment.ini_tmpl	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/config/deployment.ini_tmpl	Sun Sep 04 13:47:43 2011 +0100
@@ -126,7 +126,7 @@
 ckan.site_title = CKAN
 
 ## Logo image to use (replaces site_title string on front page if defined)
-ckan.site_logo = http://assets.okfn.org/p/ckan/img/ckan_logo_largetext.png
+ckan.site_logo = http://assets.okfn.org/p/ckan/img/ckan_logo_box.png
 
 ## Site tagline / description (used on front page)
 ckan.site_description = 


--- a/ckan/controllers/home.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/controllers/home.py	Sun Sep 04 13:47:43 2011 +0100
@@ -64,9 +64,8 @@
                   order_by=None)
         c.fields = []
         c.package_count = query.count
-        c.latest_packages = get_action('current_package_list_with_resources')({'model': model,
-                                                                 'user': c.user},
-                                                                 {'limit': 5})      
+        q = model.Session.query(model.Group).filter_by(state='active')
+        c.groups = sorted(q.all(), key=lambda g: len(g.packages), reverse=True)[:6]
         return render('home/index.html', cache_key=cache_key,
                       cache_expire=cache_expires)
 


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/blueprint/ie.css	Sun Sep 04 13:47:43 2011 +0100
@@ -0,0 +1,36 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* ie.css */
+body {text-align:center;}
+.container {text-align:left;}
+* html .column, * html .span-1, * html .span-2, * html .span-3, * html .span-4, * html .span-5, * html .span-6, * html .span-7, * html .span-8, * html .span-9, * html .span-10, * html .span-11, * html .span-12, * html .span-13, * html .span-14, * html .span-15, * html .span-16, * html .span-17, * html .span-18, * html .span-19, * html .span-20, * html .span-21, * html .span-22, * html .span-23, * html .span-24 {display:inline;overflow-x:hidden;}
+* html legend {margin:0px -8px 16px 0;padding:0;}
+sup {vertical-align:text-top;}
+sub {vertical-align:text-bottom;}
+html>body p code {*white-space:normal;}
+hr {margin:-8px auto 11px;}
+img {-ms-interpolation-mode:bicubic;}
+.clearfix, .container {display:inline-block;}
+* html .clearfix, * html .container {height:1%;}
+fieldset {padding-top:0;}
+legend {margin-top:-0.2em;margin-bottom:1em;margin-left:-0.5em;}
+textarea {overflow:auto;}
+label {vertical-align:middle;position:relative;top:-0.25em;}
+input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;}
+input.text:focus, input.title:focus {border-color:#666;}
+input.text, input.title, textarea, select {margin:0.5em 0;}
+input.checkbox, input.radio {position:relative;top:.25em;}
+form.inline div, form.inline p {vertical-align:middle;}
+form.inline input.checkbox, form.inline input.radio, form.inline input.button, form.inline button {margin:0.5em 0;}
+button, input.button {position:relative;top:0.25em;}
\ No newline at end of file


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/blueprint/print.css	Sun Sep 04 13:47:43 2011 +0100
@@ -0,0 +1,29 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* print.css */
+body {line-height:1.5;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;color:#000;background:none;font-size:10pt;}
+.container {background:none;}
+hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;}
+hr.space {background:#fff;color:#fff;visibility:hidden;}
+h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;}
+code {font:.9em "Courier New", Monaco, Courier, monospace;}
+a img {border:none;}
+p img.top {margin-top:0;}
+blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;}
+.small {font-size:.9em;}
+.large {font-size:1.1em;}
+.quiet {color:#999;}
+.hide {display:none;}
+a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;}
+a:link:after, a:visited:after {content:" (" attr(href) ")";font-size:90%;}
\ No newline at end of file


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/blueprint/screen.css	Sun Sep 04 13:47:43 2011 +0100
@@ -0,0 +1,265 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* reset.css */
+html {margin:0;padding:0;border:0;}
+body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}
+article, aside, details, figcaption, figure, dialog, footer, header, hgroup, menu, nav, section {display:block;}
+body {line-height:1.5;background:white;}
+table {border-collapse:separate;border-spacing:0;}
+caption, th, td {text-align:left;font-weight:normal;float:none !important;}
+table, th, td {vertical-align:middle;}
+blockquote:before, blockquote:after, q:before, q:after {content:'';}
+blockquote, q {quotes:"" "";}
+a img {border:none;}
+:focus {outline:0;}
+
+/* typography.css */
+html {font-size:100.01%;}
+body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
+h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
+h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
+h2 {font-size:2em;margin-bottom:0.75em;}
+h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
+h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
+h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
+h6 {font-size:1em;font-weight:bold;}
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
+p {margin:0 0 1.5em;}
+.left {float:left !important;}
+p .left {margin:1.5em 1.5em 1.5em 0;padding:0;}
+.right {float:right !important;}
+p .right {margin:1.5em 0 1.5em 1.5em;padding:0;}
+a:focus, a:hover {color:#09f;}
+a {color:#06c;text-decoration:underline;}
+blockquote {margin:1.5em;color:#666;font-style:italic;}
+strong, dfn {font-weight:bold;}
+em, dfn {font-style:italic;}
+sup, sub {line-height:0;}
+abbr, acronym {border-bottom:1px dotted #666;}
+address {margin:0 0 1.5em;font-style:italic;}
+del {color:#666;}
+pre {margin:1.5em 0;white-space:pre;}
+pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
+li ul, li ol {margin:0;}
+ul, ol {margin:0 1.5em 1.5em 0;padding-left:1.5em;}
+ul {list-style-type:disc;}
+ol {list-style-type:decimal;}
+dl {margin:0 0 1.5em 0;}
+dl dt {font-weight:bold;}
+dd {margin-left:1.5em;}
+table {margin-bottom:1.4em;width:100%;}
+th {font-weight:bold;}
+thead th {background:#c3d9ff;}
+th, td, caption {padding:4px 10px 4px 5px;}
+tbody tr:nth-child(even) td, tbody tr.even td {background:#e5ecf9;}
+tfoot {font-style:italic;}
+caption {background:#eee;}
+.small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
+.large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
+.hide {display:none;}
+.quiet {color:#666;}
+.loud {color:#000;}
+.highlight {background:#ff0;}
+.added {background:#060;color:#fff;}
+.removed {background:#900;color:#fff;}
+.first {margin-left:0;padding-left:0;}
+.last {margin-right:0;padding-right:0;}
+.top {margin-top:0;padding-top:0;}
+.bottom {margin-bottom:0;padding-bottom:0;}
+
+/* forms.css */
+label {font-weight:bold;}
+fieldset {padding:0 1.4em 1.4em 1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
+legend {font-weight:bold;font-size:1.2em;margin-top:-0.2em;margin-bottom:1em;}
+fieldset, #IE8#HACK {padding-top:1.4em;}
+legend, #IE8#HACK {margin-top:0;margin-bottom:0;}
+input[type=text], input[type=password], input[type=url], input[type=email], input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;color:#000;}
+input[type=text]:focus, input[type=password]:focus, input[type=url]:focus, input[type=email]:focus, input.text:focus, input.title:focus, textarea:focus {border-color:#666;}
+select {background-color:#fff;border-width:1px;border-style:solid;}
+input[type=text], input[type=password], input[type=url], input[type=email], input.text, input.title, textarea, select {margin:0.5em 0;}
+input.text, input.title {width:300px;padding:5px;}
+input.title {font-size:1.5em;}
+textarea {width:390px;height:250px;padding:5px;}
+form.inline {line-height:3;}
+form.inline p {margin-bottom:0;}
+.error, .alert, .notice, .success, .info {padding:0.8em;margin-bottom:1em;border:2px solid #ddd;}
+.error, .alert {background:#fbe3e4;color:#8a1f11;border-color:#fbc2c4;}
+.notice {background:#fff6bf;color:#514721;border-color:#ffd324;}
+.success {background:#e6efc2;color:#264409;border-color:#c6d880;}
+.info {background:#d5edf8;color:#205791;border-color:#92cae4;}
+.error a, .alert a {color:#8a1f11;}
+.notice a {color:#514721;}
+.success a {color:#264409;}
+.info a {color:#205791;}
+
+/* grid.css */
+.container {width:950px;margin:0 auto;}
+.showgrid {background:url(src/grid.png);}
+.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 {float:left;margin-right:10px;}
+.last {margin-right:0;}
+.span-1 {width:30px;}
+.span-2 {width:70px;}
+.span-3 {width:110px;}
+.span-4 {width:150px;}
+.span-5 {width:190px;}
+.span-6 {width:230px;}
+.span-7 {width:270px;}
+.span-8 {width:310px;}
+.span-9 {width:350px;}
+.span-10 {width:390px;}
+.span-11 {width:430px;}
+.span-12 {width:470px;}
+.span-13 {width:510px;}
+.span-14 {width:550px;}
+.span-15 {width:590px;}
+.span-16 {width:630px;}
+.span-17 {width:670px;}
+.span-18 {width:710px;}
+.span-19 {width:750px;}
+.span-20 {width:790px;}
+.span-21 {width:830px;}
+.span-22 {width:870px;}
+.span-23 {width:910px;}
+.span-24 {width:950px;margin-right:0;}
+input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 {border-left-width:1px;border-right-width:1px;padding-left:5px;padding-right:5px;}
+input.span-1, textarea.span-1 {width:18px;}
+input.span-2, textarea.span-2 {width:58px;}
+input.span-3, textarea.span-3 {width:98px;}
+input.span-4, textarea.span-4 {width:138px;}
+input.span-5, textarea.span-5 {width:178px;}
+input.span-6, textarea.span-6 {width:218px;}
+input.span-7, textarea.span-7 {width:258px;}
+input.span-8, textarea.span-8 {width:298px;}
+input.span-9, textarea.span-9 {width:338px;}
+input.span-10, textarea.span-10 {width:378px;}
+input.span-11, textarea.span-11 {width:418px;}
+input.span-12, textarea.span-12 {width:458px;}
+input.span-13, textarea.span-13 {width:498px;}
+input.span-14, textarea.span-14 {width:538px;}
+input.span-15, textarea.span-15 {width:578px;}
+input.span-16, textarea.span-16 {width:618px;}
+input.span-17, textarea.span-17 {width:658px;}
+input.span-18, textarea.span-18 {width:698px;}
+input.span-19, textarea.span-19 {width:738px;}
+input.span-20, textarea.span-20 {width:778px;}
+input.span-21, textarea.span-21 {width:818px;}
+input.span-22, textarea.span-22 {width:858px;}
+input.span-23, textarea.span-23 {width:898px;}
+input.span-24, textarea.span-24 {width:938px;}
+.append-1 {padding-right:40px;}
+.append-2 {padding-right:80px;}
+.append-3 {padding-right:120px;}
+.append-4 {padding-right:160px;}
+.append-5 {padding-right:200px;}
+.append-6 {padding-right:240px;}
+.append-7 {padding-right:280px;}
+.append-8 {padding-right:320px;}
+.append-9 {padding-right:360px;}
+.append-10 {padding-right:400px;}
+.append-11 {padding-right:440px;}
+.append-12 {padding-right:480px;}
+.append-13 {padding-right:520px;}
+.append-14 {padding-right:560px;}
+.append-15 {padding-right:600px;}
+.append-16 {padding-right:640px;}
+.append-17 {padding-right:680px;}
+.append-18 {padding-right:720px;}
+.append-19 {padding-right:760px;}
+.append-20 {padding-right:800px;}
+.append-21 {padding-right:840px;}
+.append-22 {padding-right:880px;}
+.append-23 {padding-right:920px;}
+.prepend-1 {padding-left:40px;}
+.prepend-2 {padding-left:80px;}
+.prepend-3 {padding-left:120px;}
+.prepend-4 {padding-left:160px;}
+.prepend-5 {padding-left:200px;}
+.prepend-6 {padding-left:240px;}
+.prepend-7 {padding-left:280px;}
+.prepend-8 {padding-left:320px;}
+.prepend-9 {padding-left:360px;}
+.prepend-10 {padding-left:400px;}
+.prepend-11 {padding-left:440px;}
+.prepend-12 {padding-left:480px;}
+.prepend-13 {padding-left:520px;}
+.prepend-14 {padding-left:560px;}
+.prepend-15 {padding-left:600px;}
+.prepend-16 {padding-left:640px;}
+.prepend-17 {padding-left:680px;}
+.prepend-18 {padding-left:720px;}
+.prepend-19 {padding-left:760px;}
+.prepend-20 {padding-left:800px;}
+.prepend-21 {padding-left:840px;}
+.prepend-22 {padding-left:880px;}
+.prepend-23 {padding-left:920px;}
+.border {padding-right:4px;margin-right:5px;border-right:1px solid #ddd;}
+.colborder {padding-right:24px;margin-right:25px;border-right:1px solid #ddd;}
+.pull-1 {margin-left:-40px;}
+.pull-2 {margin-left:-80px;}
+.pull-3 {margin-left:-120px;}
+.pull-4 {margin-left:-160px;}
+.pull-5 {margin-left:-200px;}
+.pull-6 {margin-left:-240px;}
+.pull-7 {margin-left:-280px;}
+.pull-8 {margin-left:-320px;}
+.pull-9 {margin-left:-360px;}
+.pull-10 {margin-left:-400px;}
+.pull-11 {margin-left:-440px;}
+.pull-12 {margin-left:-480px;}
+.pull-13 {margin-left:-520px;}
+.pull-14 {margin-left:-560px;}
+.pull-15 {margin-left:-600px;}
+.pull-16 {margin-left:-640px;}
+.pull-17 {margin-left:-680px;}
+.pull-18 {margin-left:-720px;}
+.pull-19 {margin-left:-760px;}
+.pull-20 {margin-left:-800px;}
+.pull-21 {margin-left:-840px;}
+.pull-22 {margin-left:-880px;}
+.pull-23 {margin-left:-920px;}
+.pull-24 {margin-left:-960px;}
+.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float:left;position:relative;}
+.push-1 {margin:0 -40px 1.5em 40px;}
+.push-2 {margin:0 -80px 1.5em 80px;}
+.push-3 {margin:0 -120px 1.5em 120px;}
+.push-4 {margin:0 -160px 1.5em 160px;}
+.push-5 {margin:0 -200px 1.5em 200px;}
+.push-6 {margin:0 -240px 1.5em 240px;}
+.push-7 {margin:0 -280px 1.5em 280px;}
+.push-8 {margin:0 -320px 1.5em 320px;}
+.push-9 {margin:0 -360px 1.5em 360px;}
+.push-10 {margin:0 -400px 1.5em 400px;}
+.push-11 {margin:0 -440px 1.5em 440px;}
+.push-12 {margin:0 -480px 1.5em 480px;}
+.push-13 {margin:0 -520px 1.5em 520px;}
+.push-14 {margin:0 -560px 1.5em 560px;}
+.push-15 {margin:0 -600px 1.5em 600px;}
+.push-16 {margin:0 -640px 1.5em 640px;}
+.push-17 {margin:0 -680px 1.5em 680px;}
+.push-18 {margin:0 -720px 1.5em 720px;}
+.push-19 {margin:0 -760px 1.5em 760px;}
+.push-20 {margin:0 -800px 1.5em 800px;}
+.push-21 {margin:0 -840px 1.5em 840px;}
+.push-22 {margin:0 -880px 1.5em 880px;}
+.push-23 {margin:0 -920px 1.5em 920px;}
+.push-24 {margin:0 -960px 1.5em 960px;}
+.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float:left;position:relative;}
+div.prepend-top, .prepend-top {margin-top:1.5em;}
+div.append-bottom, .append-bottom {margin-bottom:1.5em;}
+.box {padding:1.5em;margin-bottom:1.5em;background:#e5eCf9;}
+hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:1px;margin:0 0 17px;border:none;}
+hr.space {background:#fff;color:#fff;visibility:hidden;}
+.clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
+.clearfix, .container {display:block;}
+.clear {clear:both;}
\ No newline at end of file


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/boilerplate.css	Sun Sep 04 13:47:43 2011 +0100
@@ -0,0 +1,111 @@
+/* HTML5 ✰ Boilerplate */
+
+html, body, div, span, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
+small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section, summary,
+time, mark, audio, video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  font: inherit;
+  vertical-align: baseline;
+}
+
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+  display: block;
+}
+
+blockquote, q { quotes: none; }
+blockquote:before, blockquote:after,
+q:before, q:after { content: ""; content: none; }
+ins { background-color: #ff9; color: #000; text-decoration: none; }
+mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
+del { text-decoration: line-through; }
+abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
+table { border-collapse: collapse; border-spacing: 0; }
+hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
+input, select { vertical-align: middle; }
+
+body { font:13px/1.231 sans-serif; *font-size:small; }
+select, input, textarea, button { font:99% sans-serif; }
+pre, code, kbd, samp { font-family: monospace, sans-serif; }
+
+html { overflow-y: scroll; }
+a:hover, a:active { outline: none; }
+ul, ol { margin-left: 2em; }
+ol { list-style-type: decimal; }
+nav ul, nav li { margin: 0; list-style:none; list-style-image: none; }
+small { font-size: 85%; }
+strong, th { font-weight: bold; }
+td { vertical-align: top; }
+sub, sup { font-size: 75%; line-height: 0; position: relative; }
+sup { top: -0.5em; }
+sub { bottom: -0.25em; }
+
+pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 15px; }
+textarea { overflow: auto; } 
+.ie6 legend, .ie7 legend { margin-left: -7px; } 
+input[type="radio"] { vertical-align: text-bottom; }
+input[type="checkbox"] { vertical-align: bottom; }
+.ie7 input[type="checkbox"] { vertical-align: baseline; }
+.ie6 input { vertical-align: text-bottom; }
+label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; }
+button, input, select, textarea { margin: 0; }
+input:valid, textarea:valid   {  }
+input:invalid, textarea:invalid { border-radius: 1px; -moz-box-shadow: 0px 0px 5px red; -webkit-box-shadow: 0px 0px 5px red; box-shadow: 0px 0px 5px red; }
+.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; }
+
+
+a:link { -webkit-tap-highlight-color: #FF5E99; }
+button {  width: auto; overflow: visible; }
+.ie7 img { -ms-interpolation-mode: bicubic; }
+
+body, select, input, textarea { color: #444; }
+h1, h2, h3, h4, h5, h6 { font-weight: bold; }
+a, a:active, a:visited { color: #607890; }
+a:hover { color: #036; }
+
+.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
+.hidden { display: none; visibility: hidden; }
+.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
+.invisible { visibility: hidden; }
+.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
+.clearfix:after { clear: both; }
+.clearfix { zoom: 1; }
+
+
+ at media all and (orientation:portrait) {
+}
+
+ at media all and (orientation:landscape) {
+}
+
+ at media screen and (max-device-width: 480px) {
+  /* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
+}
+
+
+ at media print {
+  * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
+  -ms-filter: none !important; } 
+  a, a:visited { color: #444 !important; text-decoration: underline; }
+  a[href]:after { content: " (" attr(href) ")"; }
+  abbr[title]:after { content: " (" attr(title) ")"; }
+  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  
+  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+  thead { display: table-header-group; } 
+  tr, img { page-break-inside: avoid; }
+  @page { margin: 0.5cm; }
+  p, h2, h3 { orphans: 3; widows: 3; }
+  h2, h3{ page-break-after: avoid; }
+}
+


--- a/ckan/public/css/buttons.css	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-.buttons {
-	display: inline-block;
-}
-
-.buttons:after {
-	content: ".";
-	display: block;
-	height: 0;
-	clear: both;
-	visibility: hidden;
-}
-
-* html .buttons {
-	height: 1px;
-}
-
-.buttons img {
-	vertical-align: baseline;
-	float: none;
-}
-
-.buttons a, button {
-	display: block;
-	margin: 0 7px 0 0;
-	background-color: #f0f0f0;
-	border: 1px solid #dedede;
-	border-top: 1px solid #eee;
-	border-left: 1px solid #eee;
-	-moz-border-radius: 0.5em;
-	-webkit-border-radius: 0.5em;
-	font-size: 100%;
-	line-height: 1.4;
-	text-decoration: none;
-	font-weight: bold;
-	color: #565656;
-	cursor: pointer;
-	padding: 5px 10px 6px 7px;
-	background-image: url(/images/button-shadow.png);
-	background-repeat: no-repeat;
-	background-position: left top;
-}
-
-button {
-	width: auto;
-	overflow: visible;
-	padding: 4px 10px 3px 7px;
-}
-
-button[type] {
-	padding: 5px 10px 5px 7px;
-	line-height: 17px;
-}
-
-*:first-child+html button[type] {
-	padding: 4px 10px 3px 7px;
-}
-
-.buttons a.secondary, button.secondary {
-	float: right;
-}
-
-button img, .buttons a img {
-	margin: 0 3px -3px 0 !important;
-	padding: 0;
-	border: none;
-	width: 16px;
-	height: 16px;
-}
-
-button:hover, .buttons a:hover {
-	border: 1px solid #ccc;
-	color: #333;
-	background-color: #f0f0f0;
-}
-
-button:active, .buttons a:active {
-	background-image: none;
-	background-color: #888;
-	border: 1px solid #444;
-	/* override position indicator */
-	color: #fff ! important; 
-}
-
-button.positive, .buttons a.positive {
-	color: #529214;
-}
-
-.buttons a.positive:hover, button.positive:hover {
-	background-image: none;
-	background-color: #e6efc2;
-	border: 1px solid #c6d880;
-	color: #529214;
-}
-
-.buttons a.positive:active {
-	background-image: none;
-	background-color: #529214;
-	border: 1px solid #529214;
-	color: #fff;
-}
-
-/* negative (cancel, delete) */
-
-.buttons a.negative, button.negative {
-	color: #d12f19;
-}
-
-.buttons a.negative:hover, button.negative:hover {
-	background-image: none;
-	background: #fbe3e4;
-	border: 1px solid #fbc2c4;
-	color: #d12f19;
-}
-
-.buttons a.negative:active {
-	background-image: none;
-	background-color: #d12f19;
-	border: 1px solid #d12f19;
-	color: #fff;
-}


--- a/ckan/public/css/ckan.css	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1052 +0,0 @@
-/* The main css styles for CKAN (specific UI elements may have thier own css linked via style.css) */
-
-body, input, textarea, .page-title span, .pingback a.url {
-    font-family: "Lucida Grande", Lucida, Verdana, sans-serif;
-}
-
-#content, #content input, #content textarea {
-    font-size: 14px;
-    line-height: 20px;
-}
-
-a { 
-  color: #b00; 
-  text-decoration: none;
-}
-a:link {
-  color: #b22;
-  text-decoration: none;
-}
-a:visited {
-  color: #b22;
-  text-decoration: none;
-}
-#main a:visited {
-  text-decoration: none;
-}
-
-a:active {
-  color: #f22;
-  text-decoration: none;
-}
-a:hover {
-  text-decoration: underline;
-}
-
-#content p, #content ul, #content ol, #content dd, #content pre, #content hr, #content dl {
-  margin-bottom: 14px;
-}
-
-/* ===========================
- * Flash messages
-*/
-
-.flash-banner-box {
-  margin-top: -20px;
-  margin-bottom: 10px;
-}
-
-.flash-banner {
-  width: auto;
-  line-height: 1em;
-  font-size: 14px;
-  padding: 0.8em 1.5%; 
-  font-weight: bold;
-  text-align: center;
-  border-bottom: solid 1px #9f9f9f;
-  color: #133362;
-}
-
-.flash-banner.notice {
-  background: #f4a83d;
-  border-bottom-color: #dddddd;
-}
-
-.flash-banner.success {
-  background-color: #e7f9e0;
-  border-bottom-color: #ccc;
-  color: #2d6b00;
-}
-
-.flash-banner.error {
-  background-color: #ffeae8;
-  border-bottom-color: #ccc;
-  color: #b50000;
-}
-
-/* ===========================
- * Masthead
-*/
-
-#header {
-  padding-top: 15px;
-  padding-bottom: 5px;
-}
-
-#site-title {
-  line-height: normal;
-  width: auto;
-  float: left;
-  font-size: 40px;
-  margin: 0;
-  padding: 0 0 5px 0;
-  font-weight: normal;
-  letter-spacing: -0.032em;
-}
-
-#site-title a,
-#site-title a:link, #site-title a:visited {
-  font-weight:normal;
-  color: #333;
-}
-
-/* hide the main twentyten image */
-#branding img {
-	display:none;
-}
-
-#site-title a img {
-  background: transparent;
-  display: block;
-  border: none;
-  margin: 0;
-  max-height: 50px;
-}
-
-#site-description {
-  width:auto;
-  float: left;
-  clear: left;
-  color: #000;
-  font-style: normal;
-  font-size: 13px;
-  letter-spacing: normal;
-  text-transform: none;
-  margin: -5px 0 10px 3px;
-  padding: 0;
-  font-family: 'Lucida Grande', 'Lucida Sans Unicode', Lucida, Arial, Helvetica, sans-serif;
-  font-family: 'Helvetica Neue', Arial, Helvetica, 'Nimbus Sans L', sans-serif;
-}
-
-/* ===========================
- * Top Bar
-*/
-
-#top-bar {
-  text-align: right;
-}
-
-#top-bar-login {
-  max-width: 150px;
-  display: inline-block;
-}
-
-#top-bar .search-form, #top-bar .search-form form {
-}
-
-#top-bar .search-form input.search {
-  width: 120px;
-}
-
-#top-bar-login .ckan-logged-in img {
-  margin-bottom: -3px;
-}
-
-
-/* =Menu
--------------------------------------------------------------- */
-
-#access {
-  border-top: 1px solid #aaa; 
-  border-bottom: 1px solid #aaa; 
-  background: transparent;
-}
-
-#access ul li a {
-  color: #b22;
-  text-decoration: none;
-  font-weight: bold;
-}
-
-#access ul li a.active {
-  color: black;
-  font-weight: bold;
-}
-
-#access ul li a:hover {
-  color: #333;
-}
-
-#access ul ul a {
-	background: #fff;
-}
-#access li:hover > a,
-#access ul ul :hover > a {
-	background: #fff;
-	color: #333;
-}
-#access ul li.current_page_item > a,
-#access ul li.current-menu-ancestor > a,
-#access ul li.current-menu-item > a,
-#access ul li.current-menu-parent > a {
-	color: #333;
-}
-* html #access ul li.current_page_item a,
-* html #access ul li.current-menu-ancestor a,
-* html #access ul li.current-menu-item a,
-* html #access ul li.current-menu-parent a,
-* html #access ul li a:hover {
-	color: #333;
-	cursor: default;
-  font-weight: bold;
-}
-
-/* ===========================
- * Main
- */
-
-#main {
-  padding-top: 20px;
-}
-
-#container {
-}
-
-.entry-content {
-  padding-top: 0;
-}
-
-/* ===========================
- * Sidebar
- */
-#primary
-{
-    padding-top:40px;    
-}
-#primary .widget-container
-{
-  background: #f9f2ce;
-  color: #333;
-  margin: 0 0 1em 0;
-  padding: 10px;
-	border: 1px solid #ebd897;
-	border-left: none;
-	border-top: none;
-	border-radius: 0.5em;
-	-moz-border-radius: 0.5em;
-	-webkit-border-radius: 0.5em;
-}
-
-#primary .widget-container h2 {
-  margin-bottom: 10px;
-}
-
-#primary .widget-container h4 {
-  margin-bottom: 10px;
-  font-weight:bold;
-}
-
-#primary .widget-container .widget_action{
-   text-align:right;
-   margin:18px 0 0 0;
-   font-weight:bold;
-}
-
-.hide-sidebar #primary { 
-   display: none;
-}
-
-.hide-sidebar #content {
-   margin: 0 20px 0 20px;
-}
-
-/* ==========================
- * Facets
- */
-
-.facet-box {
-
-}
-
-.facet-box h2 {
-    color: #000;
-    font-size: 1.2em;
-    font-weight: bold;
-    margin-top: 1em;
-}
-
-.facet-options {
-    margin-top: 0.5em;
-}
-
-.facet-options li {
-    padding-top: 0.2em;
-    font-size: 1.2em; 
-    color: #000; 
-}
-
-.register-link {
-    padding-top: 10px;
-}
-
-.register-link a {
-    color: white; 
-    background: #199150;
-    font-weight: bold;
-    padding: 5px;
-    width: 100%;
-    font-size: 1.3em;
-    -moz-border-radius: 2px;
-    -webkit-border-radius: 2px;
-    border-radius: 2px;
-    
-}
-
-.package-search-filters {
-    margin-top: 15px;
-}
-
-.search-field {
-    display: inline-block;
-    margin-right: 5px;
-    margin-bottom: 10px;
-    padding: 1px 1px 3px 2px;
-    font-size: 14px;
-    background-color: #eee;
-    line-height: 16px;
-    -moz-box-shadow: 1px 1px 3px #bbb;
-    -webkit-box-shadow: 1px 1px 3px #bbb;
-    box-shadow: 1px 1px 3px #bbb;
-    
-}
-
-.search-field-name::after {
-    content: ":";
-}
-
-.search-field-value {
-    font-weight: bold;
-}
-
-
-/* ===========================
- * Footer
- */
-
-#footer {
-  border-top: 1px solid;
-  margin: 1em auto 0 auto;
-  overflow: auto;
-}
-
-#footer ul {
-  margin-top: 0;
-}
-
-#footer-widget-area .widget-area {
-  float: none; 
-  width: 100%;
-  margin: 0;
-}
-
-#footer-widget-area .widget-container {
-  margin-bottom: 0;
-}
-
-#footer-widget-area .widget-container h3 {
-  display: inline-block;
-  margin-top: 0;
-  margin-right: 10px;
-  /* 
-   * IE 6 & 7 don't support inline-block, but we can use the hasLayout 
-   * magical property. 
-   * http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/ 
-   */ 
-  zoom: 1; 
-  *display: inline; 
-}
-
-#footer-widget-area .widget-container .textwidget {
-  display: inline;
-}
-
-
-#footer-widget-area .widget-container ul {
-  display: inline;
-  margin: 0.3em 0 0 0;
-}
-
-#footer ul li abbr {
-  border-bottom: none;
-}
-
-#footer-widget-area .widget-container ul li {
-  margin: 0 1em 0 0;
-  padding: 0;
-  display: inline-block;
-  /* 
-   * IE 6 & 7 don't support inline-block, but we can use the hasLayout 
-   * magical property. 
-   * http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/ 
-   */ 
-  zoom: 1; 
-  *display: inline; 
-}
-
-#footer-widget-area #fourth {
-	margin-right: 0;
-}
-
-#site-info {
-}
-
-#site-generator {
-  width: auto;
-}
-
-#site-generator a {
-  background-image: none;
-}
-
-img#footer-okf-logo {
-  margin-bottom: -4px;
-}
-
-
-/* ===========================
- * Forms
- */
-
-#content input, #content textarea {
-  line-height: 14px;
-  font-size: 14px;
-}
-
-form #log_message {
-  width: 80%;
-  height: 30px;
-}
-
-.entry-content label {
-  font-size: 14px;
-}
-
-#content form.ckan.package_create_form dt {
-  clear: both; 
-}
-
-#content form.ckan.package_create_form dl, #content form.ckan.package_create_form dd {
-  margin-bottom: 0;
-}
-
-#content form.ckan.package_create_form select {
-  margin-bottom: 12px;
-}
-
-form.simple-form label {
-    display: inline-block; 
-    float: left;
-    min-width: 40%;
-}
-
-form.simple-form fieldset input {
-    border: 1px solid #E7E7E7;
-    padding: 0.3em; 
-    width: 40%;
-}
-
-form.simple-form textarea {
-    width: 99%;
-}
-
-.purge-button {
-  border: none;
-  background: none;
-  background-color: #b33a3a;
-  color: white;
-  display: block;
-  margin-bottom: 1em;
-}
-
-.purge-button:hover {
-  border: none;
-}
-
-/* ===========================
- * Tables
- */
-
-#content tr td {
-  padding: 6px 10px;
-}
-
-#content tr th, #content thead th {
-  padding: 6px 12px;
-}
-
-caption {
-    caption-side:bottom;
-    text-align:left;
-    font-size:0.85em;
-    line-height:1.4em;
-    padding-top:0.5em;
-    color:#888;
-    padding-left:0.8em;
-}
-
-
-
-/* ============= */
-/* = Utilities = */
-/* ============= */
-
-.clearfix:after {
-	content: ".";
-	display: block;
-	height: 0;
-	clear: both;
-	visibility: hidden;
-}
-
-.clearfix { display: inline-block; } /* for IE/Mac */
-
-.cleared { clear: both; }
-hr.cleared {
-	height: 0 ! important;
-	visibility: hidden;
-}
-
-hr.nomargin { margin: 0; }
-
-/* ======================= */
-/* = Fixes to KForge CSS = */
-/* ======================= */
-
-table {
-	border-collapse: collapse;
-	border: none;
-	border-radius: 1em;
-	margin: 0 0 1.2em 0;
-}
-
-table th, table td {
-	border: 1px solid #ccc;
-	border-top-color: #eee;
-	border-left-color: #eee;
-	padding: 0.3em;
-}
-
-table td {
-	background: #f0f0f0;
-}
-
-table th {
-	background: #fff;
-}
-
-h1, h2, h3, h4, h5, h6 {
-	font-family: 'Lucida Grande', 'Lucida Sans Unicode', Lucida, Arial, Helvetica, sans-serif;
-	letter-spacing: -0.02em;
-}
-
-/* ================ */
-/* = Search boxes = */
-/* ================ */
-
-form.package-search input.search {
-  width: 99%;
-  padding: 5px;
-  font-size: 1.1em;
-  margin: 0px;
-  -webkit-appearance: textfield;
-}
-
-.package-search input.button {
-    display: inline-block;
-    float: right;
-    margin-top: 5px;
-    margin-right: 10px !important;
-    margin-bottom: 1px !important;
-}
-
-/* ========================================= */
-/* = Changes/additions to kforge forms.css = */
-/* ========================================= */
-
-input.openid {
-	background: transparent url(../images/icons/openid.png) 2px 2px no-repeat;
-	padding-left: 22px;
-}
-
-input.openid:focus {
-	background-position: 1px 1px;
-	padding-left: 21px;
-}
-
-/* ============== */
-/* = Pagination = */
-/* ============== */
-
-.pager {
-	width: 100%;
-	text-align: center;
-	margin: 0 0 1.2em 0;
-	clear: both;
-}
-
-.pager span, .pager a {
-	text-decoration: none;
-	margin: 0em;
-	border: none;
-	padding: 0.3em 0.1em;
-}
-
-.pager a:hover, .pager a:active {
-	color: #fff;
-	background-color: #c22;
-}
-
-.pager span.pager_dotdot {
-	color: #aaa;
-}
-
-.pager span.pager_curpage {
-	font-weight: bold;
-	border: 1px solid #ddd;
-}
-
-/* ======================= */
-/* = Various iconography = */
-/* ======================= */
-
-img.icon {
-	height: 25px;
-}
-
-a.icon {
-	display: block;
-	height: 0;
-	overflow: hidden;
-	padding-top: 20px;
-	width: 20px;
-}
-
-table.no-margin { margin: 0; }
-
-div.extras-new-field label {
-	display: inline;
-	line-height: 2.6em;
-}
-
-label.inline {
-	display:inline;
-	margin: 1em 0 0 1em;
-}
-
-dl.icons dt {
-	float: left;
-	clear: both;
-	margin: 0.4em 0 0 0;
-	height: 16px;
-	width: 16px;
-}
-
-dl.icons dt img {
-	vertical-align: middle;
-}
-
-dl.icons dd {
-	float: left;
-	margin: 0.4em 0 0 10px;
-}
-
-dl.icons dd.tiny {
-	font-size: 75%;
-	color: #888;
-	line-height: 1.2em;
-	margin: 0 0 0 26px;
-}
-
-/* ========================= */
-/* = Tag and Group listing = */
-/* ========================= */
-
-.item-list {
-  border-top: solid 1px #cbcbcb;
-  border-bottom: solid 1px #cbcbcb;
-  margin-top: 5px;
-}
-
-.item-list ul, ul.tags {
-  margin: 0 0 0.75em 0;
-  padding:0;
-  list-style: none;
-}
-
-.item-list ul li, ul.tags li {
-  padding-left: 0;
-  padding-right: 3px;
-}
-
-.tags a {
-	text-decoration: none;
-  color: #b00;
-}
-
-.tags a:hover {
-}
-
-/* tags small is for autocomplete list in package editor */
-.tags.small a {
-  padding-left: 6px;
-  padding-right: 6px;
-}
-
-/* =================== */
-/* = Package listing = */
-/* =================== */
-
-ul.packages {
-	padding-left: 0;
-        margin: 0 0 18px 0;
-}
-
-.packages .header {
-    font-weight: bold;
-}
-
-.packages .extract {
-	font-size: 0.9em;
-	padding-top:10px;
-}
-
-.packages li {
-	list-style: none;
-	padding: 0.4em 0 0.4em 0.0em;
-	border-left: 0.5em solid #fff;
-	border-bottom: 1px solid #ececec;
-	overflow: hidden;
-	/*white-space: nowrap;*/
-}
-
-.packages li a {
-	text-decoration: none;
-}
-
-.packages li img {
-	margin-bottom: -2px;
-}
-
-.search_meta {
-    float:right;
-}
-
-ul.package_formats {
-    float:right;    
-    padding:0 0 3px 0; margin:0;
-}
-
-ul.package_formats li {
-    display:inline;
-    margin:0;
-    padding:0 5px 0 5px;
-    border:none;
-    font-weight:normal;
-    font-size:0.8em;
-    color:#808080;
-    background:#ececec;
-}
-
-.openness {
-    clear:right;
-    float:right;
-    font-size:0.8em;
-}
-
-.openness img {
-    vertical-align:top;
-}
-
-.openness li {
-    margin:0;
-    padding:0;
-    border:none;    
-}
-
-/*
-.packages li.fullyopen {
-	border-left: 0.5em solid #AFC6E9;
-}
-*/
-
-.packages li .tags {
-	margin: 0 0 0 0.5em;
-	font-size: 80%;
-	opacity: 0.3;
-}
-
-.packages li:hover .tags {
-	opacity: 1;
-}
-
-.packages .name, 
-.packages .license {
-    color: #666;
-	font-weight: normal;
-	font-size: 0.9em;
-}
-
-/* ==================== */
-/* = Extra RHS styles = */
-/* ==================== */
-
-.sidebar dl {
-	margin: 0 1em 0.8em 1em;
-	padding: 0;
-}
-
-.sidebar hr {
-	width: 90%;
-	color: #EBDBA7;
-	background-color: #EBDBA7;
-	border: none;
-	height: 1px;
-}
-
-.sidebar .buttons {
-	margin-top: 0;
-}
-
-.sidebar .buttons a, .sidebar .buttons button {
-	margin-bottom: 0.3em;
-}
-
-.okdstripe {
-	/* Amusingly, this has to be a slightly different color to look the same
-	   as the stripe on a white background */
-	border-left: 0.5em solid #8FB0DE;
-	padding-left: 0.4em ! important;
-}
-
-/* ===================== */
-/* = Package read view = */
-/* ===================== */
-
-#primary .widget-container .formats ul {
-  background: transparent;
-}
-
-#primary .widget-container .formats ul li {
-  background: transparent;
-  display: inline;
-}
-
-#content .package .subsection h3,
-#content #comments h3, #content #comments h4 {
-  background-color: #444;
-  padding: 10px;
-  color: white;
-}
-
-.package h3, .package h4 {
-	font-weight: bold;
-	margin: 1em 0 0.6em 0;
-}
-
-.package div.tags {
-  margin: 20px 0;
-}
-
-.package .resources {
-  margin-bottom: 2em;
-}
-
-.package .resources table {
-  width: 100%;
-}
-
-.package h2.head {
-  margin-bottom: 0.3em!important;
-  line-height: 1.0;
-}
-
-.package .name, .group .name {
-	color: #888;
-	font-family: monospace;
-}
-
-.package div.url {
-  margin: 0 ;
-}
-
-.package .url a {
-	text-decoration: none;
-}
-
-.package .notes, .group .description {
-	padding: 0.2em 0 0.2em 0;
-	margin: 0 3% 0.5 0 ! important;
-}
-
-.package .notes span.nonegiven {
-	opacity: 0.5;
-}
-.package .notes span.nonegiven:hover {
-	opacity: 1;
-}
-
-.package .details table {
-  border-collapse: collapse;
-  background: transparent;
-  border-color: grey;
-  border-spacing: 2px 2px;
-}
-
-.package .details table tr {
-  border: none;
-  border-bottom: solid 1px #888;
-}
-
-.package .details td {
-  background: transparent;
-  border: none;
-}
-
-.package .details td.package-label {
-  width: 150px;
-}
-
-.package .api div {
-    background:#f0f0f0;
-    padding:10px;
-}
-
-.package .api h5 {
-    font-weight:bold;
-    margin-bottom:1em!important;
-    font-size:1em;
-}
-
-.package .api code {
-    background:#444;
-    color:#fff;
-    padding:3px 10px ;
-    margin-bottom:1em;
-    display:block;
-}
-.package .api code a {
-    color:#fff;
-}
-
-.relationship_comment {
-  font-style: italic;
-}
-
-p.atom-feed-link {
-  float: right;
-  display: inline;
-  font-size: 14px;
-}
-
-p.atom-feed-link a {
-  background: url('../images/icons/atom_feed.png') no-repeat;
-  padding-left: 20px;
-}
-
-p.atom-feed-link.package-history-link {
-  float: none;
-}
-
-#revision.widget-container
-{
-  background: #f9f2ce;
-  color: #333;
-  margin: 0 0 1em 0;
-  padding: 10px;
-	border: 1px solid #ebd897;
-	border-left: none;
-	border-top: none;
-	border-radius: 0.5em;
-	-moz-border-radius: 0.5em;
-	-webkit-border-radius: 0.5em;
-}
-
-/* ===================== */
-/* = User Listing      = */
-/* ===================== */
-
-body.user-list #content {
-  margin-right: 20px;
-}
-
-ul.userlist, ul.userlist ul {
-  list-style-type: none;
-  margin: 0;
-}
-
-ul.userlist li.user {
-  display: inline-block;
-  width: 200px;
-  padding: 5px;
-  font-size: 90%;
-  margin-bottom: 15px;
-}
-
-ul.userlist li ul span.edits {
-  color: #333;
-  font-size: 110%;
-  font-weight: bold;
-  margin-left: 3px;
-}
-
-ul.userlist li.user .username {
-}
-
-#content ul.userlist .username img {
-  margin-bottom: -3px;
-}
-
-ul.userlist .created {
-  font-size: 80%;
-}
-
-ul.userlist .badge {
-  color: #fc0;
-}
-
-body.user-list .sort {
-  float: right;
-}
-
-body.user-list .sort a {
-  font-size: 85%;
-  background: #eee;
-  padding: 5px;
-  border-bottom: 1px solid #ccc; 
-  border-right: 1px solid #ccc; 
-}
-
-/* ===================== */
-/* = Stateful stuff    = */
-/* ===================== */
-
-.state-deleted, .state-deleted a, .state-deleted * {
-  color: rgba(0, 0, 0, 0.4);
-}
-
-.state-deleted {
-  padding-left: 3px;
-}
-
-.state-deleted:hover * {
-  color: rgba(0, 0, 0, 0.8);
-}
-
-.state-notice {
-  text-transform: uppercase;
-  font-size: 120%;
-  background: #f4a83d;
-  padding: 15px;
-  text-align: center;
-  color: #fff;
-}


--- a/ckan/public/css/forms.css	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/public/css/forms.css	Sun Sep 04 13:47:43 2011 +0100
@@ -3,7 +3,7 @@
 fieldset {
   padding: 1em;
   margin: 0 0 1.5em 0;
-  border: 1px solid #ccc; }
+  border-bottom: 1px solid #ccc; }
  
 legend {
   font-weight: bold;
@@ -46,9 +46,13 @@
 input.title {
   font-size: 1.5em; }
 input.short {
-  width: 10em; }
+  width: 15em; }
+table input.short {
+  width: 12em; }
 input.medium-width {
   width: 25em; }
+table input.medium-width {
+  width: 20em; }
 input.long {
   width: 100%; }
  
@@ -61,7 +65,7 @@
 textarea.short {
     height: 1em; }
 textarea.wide {
-    width: 62.5em;
+    width: 55;
     height: 1em; }
  
 select[multiple], select.multiple {
@@ -176,3 +180,11 @@
 #preview {
   margin-bottom: 30px;
   }
+
+#openid_form {
+  width: 100%;
+}
+
+#openid_input_area {
+  padding: 0px;
+}


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/css/handheld.css	Sun Sep 04 13:47:43 2011 +0100
@@ -0,0 +1,8 @@
+* {
+  float: none;      
+  background: #fff;  
+  color: #000;
+}
+
+
+body { font-size: 80%; }
\ No newline at end of file


--- a/ckan/public/css/ie.css	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-.clearfix {
-  zoom: 1; /* triggers hasLayout */
-  display: block; /* resets display for IE/Win */
-}
\ No newline at end of file


--- a/ckan/public/css/jquery.autocomplete.css	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-.ac_results {
-	padding: 0px;
-	border: 1px solid black;
-	background-color: white;
-	overflow: hidden;
-	z-index: 99999;
-}
-
-.ac_results ul {
-	width: 100%;
-	list-style-position: outside;
-	list-style: none;
-	padding: 0;
-	margin: 0;
-}
-
-.ac_results li {
-	margin: 0px;
-	padding: 2px 5px;
-	cursor: default;
-	display: block;
-	/* 
-	if width will be 100% horizontal scrollbar will apear 
-	when scroll mode will be used
-	*/
-	/*width: 100%;*/
-	font: menu;
-	font-size: 12px;
-	/* 
-	it is very important, if line-height not setted or setted 
-	in relative units scroll will be broken in firefox
-	*/
-	line-height: 16px;
-	overflow: hidden;
-}
-
-.ac_loading {
-	background: white url('indicator.gif') right center no-repeat;
-}
-
-.ac_odd {
-	background-color: #eee;
-}
-
-.ac_over {
-	background-color: #0A246A;
-	color: white;
-}


--- a/ckan/public/css/stars.css	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/* based on http://www.pmob.co.uk/temp/star-rating.htm */
-
-div.inline-rating{
-	display:-moz-inline-block;
-	display:-moz-inline-box;
-	display:inline-block;
-	/* vertical-align:middle; */
-	margin-bottom: -1px;
-}
-
-.stars{
-	width:80px;
-	height:16px;
-	margin: 0;
-	padding:0;
-	list-style:none;
-	clear:both;
-	position:relative;
-	background: url(/images/stars.png) no-repeat 0 0;
-}
-
-.default0star {background-position:0 0}
-.default1star {background-position:0 -16px}
-.default2star {background-position:0 -32px}
-.default3star {background-position:0 -48px}
-.default4star {background-position:0 -64px}
-.default5star {background-position:0 -80px}
-
-ul.stars li {
-	cursor: pointer;
-	float:left;
-	text-indent:-999em;
-}
-
-ul.stars li a {
-	position:absolute;
-	left:0;
-	top:0;
-	width:16px;
-	height:16px;
-	text-decoration:none;
-	z-index: 200;
-}
-
-ul.stars li.one a {left:0}
-ul.stars li.two a {left:16px;}
-ul.stars li.three a {left:32px;}
-ul.stars li.four a {left:48px;}
-ul.stars li.five a {left:64px;}
-
-ul.stars li a:hover {
-	z-index:2;
-	width:80px;
-	height:16px;
-	overflow:hidden;
-	left:0;  
-	background: url(/images/stars.png) no-repeat 0 0
-}
-
-ul.stars li.one a:hover {background-position:0 -96px;}
-ul.stars li.two a:hover {background-position:0 -112px;}
-ul.stars li.three a:hover {background-position:0 -128px}
-ul.stars li.four a:hover {background-position:0 -144px}
-ul.stars li.five a:hover {background-position:0 -160px}


--- a/ckan/public/css/style.css	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/public/css/style.css	Sun Sep 04 13:47:43 2011 +0100
@@ -1,8 +1,684 @@
-/* This file is just for importing other css files */
- at import url(http://assets.okfn.org/themes/twentyten/style.css);
- at import url(ckan.css);
- at import url(buttons.css);
- at import url(stars.css);
- at import url(tabs.css);
- at import url(forms.css);
 
+.header.outer {
+  background-color: #e2e2e2;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e2e2e2), to(#cccccc)); 
+  background-image: -webkit-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:    -moz-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:     -ms-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:      -o-linear-gradient(top, #e2e2e2, #cccccc); 
+  background-image:         linear-gradient(top, #e2e2e2, #cccccc);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#e2e2e2', EndColorStr='#cccccc'); 
+
+  margin-bottom: 20px;
+     -moz-box-shadow: 0px 2px 15px #dddddd; 
+  -webkit-box-shadow: 0px 2px 15px #dddddd; 
+          box-shadow: 0px 2px 15px #dddddd; 
+  border-bottom: 1px solid #ccc;
+}
+
+header {
+  padding: 5px 0px 2px 0px;
+}
+
+header #logo {
+  float: left;
+}
+
+header #site-name {
+  font-size: 1.4em;
+  font-family: Ubuntu, sans-serif;
+  padding: 5px;
+  padding-left: 82px;
+  padding-bottom: 2px;
+  /*font-weight: bold;*/
+  color: #333;
+  text-shadow: 1px 1px 3px #ccc;
+}
+
+header #site-name a {
+  color: #000;
+}
+
+header .menu form {
+  display: inline;
+}
+
+header .menu input {
+  width: 200px;
+  margin-top: -1px;
+}
+
+header .menu a {
+  display: inline-block;
+  padding-top: 5px;
+  font-size: 1.1em;
+  text-decoration: none;
+  font-weight: bold;
+  margin-left: 1.5em;
+  text-shadow: 1px 1px 3px #ccc;
+}
+
+header .menu #menusearch {
+  float: right;
+}
+
+header .menu #mainmenu {
+  display: inline;
+}
+
+header .account {
+  float: right;
+}
+
+header .account img {
+  margin-bottom: -3px;
+}
+
+
+header .search {
+  margin: 1px;
+  margin-left: 1em;
+  border: 1px solid #ccc;
+  font-size: 1.1em;
+  padding: 0.4em;
+  font-weight: bold;
+
+     -moz-border-radius: 5px; 
+  -webkit-border-radius: 5px; 
+          border-radius: 5px; 
+  -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; 
+}
+
+.footer.outer {
+  border-top: 2px solid #ccc;
+  background-color: #dbdbdb;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#ffffff)); 
+  background-image: -webkit-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:    -moz-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:     -ms-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:      -o-linear-gradient(top, #dbdbdb, #ffffff); 
+  background-image:         linear-gradient(top, #dbdbdb, #ffffff);
+            fromilter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#dbdbdb', EndColorStr='#ffffff'); 
+}
+
+html, body {
+  height: 100%;
+}
+
+#wrap {
+    min-height: 100%;
+    height: auto !important;
+    height: 100%;
+    margin: 0 auto -230px;
+}
+
+footer, #push {
+    height: 205px;
+}
+
+footer {
+  margin-top: 5px;
+  padding-top: 1em;
+}
+
+footer a {
+  text-decoration: none;
+}
+
+footer #footer-okf-logo {
+  margin-bottom: -4px;
+}
+
+footer .xoxo h3 {
+  font-size: 1.2em;
+}
+
+h1, h2, h3, h4, h5 {
+  font-family: 'Ubuntu', Georgia; 
+}
+
+a, a:visited {
+  color: #bb2222;
+  text-decoration: none;
+}
+
+a:hover {
+  color: #183661;
+}
+
+
+/* Basic page elements */
+
+.page_heading {
+  margin-top: 1em;
+  margin-bottom: 1em;
+  font-size: 2.2em;
+  font-weight: normal;
+}
+
+#minornavigation {
+  border: 1px solid #e0e0e0;
+  background-color: #e2e2e2;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0f0), to(#e2e2e2)); 
+  background-image: -webkit-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:    -moz-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:     -ms-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:      -o-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:         linear-gradient(top, #f0f0f0, #e2e2e2);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f0f0f0', EndColorStr='#e2e2e2');
+
+     -moz-border-radius: 5px; 
+  -webkit-border-radius: 5px; 
+          border-radius: 5px; 
+  -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; 
+}
+
+#minornavigation ul.tabbed li.action {
+  float: right;
+}
+
+/* Side bar widgets */
+ul.widget-list {
+  list-style: none;
+  padding-left: 0px;
+}
+
+ul.widget-list li.widget-container {
+  border-bottom: 1px solid #e0e0e0;
+  margin-bottom: 1em;
+}
+
+ul.widget-list li.widget-container.boxed {
+  border-bottom: 0;
+  background-color: #FFF7C0;
+  padding: 15px;
+  padding-top: 10px;
+     -moz-border-radius: 15px; 
+  -webkit-border-radius: 15px; 
+          border-radius: 15px; 
+}
+
+/* Hints */
+
+.hint {
+  font-size: 0.8em;
+  color: #888;
+  margin-bottom: 0;
+}
+
+/* Tables */
+table th {
+  border: 1px solid #e0e0e0;
+  background-color: #e2e2e2;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0f0), to(#e2e2e2)); 
+  background-image: -webkit-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:    -moz-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:     -ms-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:      -o-linear-gradient(top, #f0f0f0, #e2e2e2); 
+  background-image:         linear-gradient(top, #f0f0f0, #e2e2e2);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f0f0f0', EndColorStr='#e2e2e2');
+}
+
+table caption {
+  caption-side: bottom; 
+  color: #888;
+  font-size: 0.9em;
+  background-color: white;
+}
+
+tbody tr:nth-child(even) td, tbody tr.even td {
+  background-color: #fff7c0;
+}
+
+/* ============== */
+/* = Navigation = */
+/* ============== */
+
+#minornavigation {
+  margin-bottom: 1em;
+}
+
+.nominor #minornavigation {
+  display: none;
+}
+
+#minornavigation ul {
+  list-style: none; 
+  padding: 7px;
+  margin: 0;
+}
+
+#minornavigation ul li {
+  display: inline-block;
+  margin-right: 2em;
+}
+
+#minornavigation ul li a {
+  text-decoration: none;
+  font-weight: bold;
+}
+
+#minornavigation ul li a img {
+  margin-bottom: -4px;
+  padding-right: 5px;
+}
+
+#sidebar {
+  margin-right: -10px;
+  padding-left: 9px;
+  overflow: hidden;
+}
+
+#sidebar h2, #sidebar h3 {
+  font-size: 1.3em;
+}
+
+#sidebar ul.property-list li ul {
+  margin-left: -2em;
+}
+
+#content {
+  border-right: 1px solid #e0e0e0;
+}
+
+/* ============== */
+/* = Pagination = */
+/* ============== */
+
+.pager {
+	width: 100%;
+	text-align: center;
+	margin: 0 0 1.2em 0;
+	clear: both;
+}
+
+.pager span, .pager a {
+	text-decoration: none;
+	margin: 0em;
+	border: none;
+	padding: 0.3em 0.1em;
+}
+
+.pager a:hover, .pager a:active {
+	color: #fff;
+	background-color: #c22;
+}
+
+.pager span.pager_dotdot {
+	color: #aaa;
+}
+
+.pager span.pager_curpage {
+	font-weight: bold;
+	border: 1px solid #ddd;
+}
+
+
+/* ==========================
+ * Facets
+ */
+
+.facet-box {
+
+}
+
+#sidebar .facet-box h2 {
+    color: #000;
+    font-size: 1.2em;
+}
+
+.facet-options {
+    margin-top: 0.5em;
+}
+
+.facet-options li {
+    padding-top: 0.2em;
+    color: #000; 
+}
+
+.register-link {
+    padding-top: 10px;
+}
+
+.package-search-filters {
+    margin-top: 15px;
+}
+
+.search-field {
+    display: inline-block;
+    margin-right: 5px;
+    margin-bottom: 10px;
+    padding: 2px 2px 4px 3px;
+    font-size: 14px;
+    background-color: #FFF7C0;
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+    line-height: 16px;
+    /*
+    -moz-box-shadow: 1px 1px 3px #bbb;
+    -webkit-box-shadow: 1px 1px 3px #bbb;
+    box-shadow: 1px 1px 3px #bbb;
+    */
+}
+
+.search-field img {
+    margin-bottom: -3px;
+}
+
+.search-field-name::after {
+    content: ":";
+}
+
+.search-field-value {
+    font-weight: bold;
+}
+
+/* ================ */
+/* = Forms common = */
+/* ================ */
+
+fieldset {
+  border: 0px;
+  border-bottom: 1px solid #e0e0e0;
+}
+
+
+/* ============== */
+/* = Login Form = */
+/* ============== */
+
+form.simple-form label {
+    display: inline-block; 
+    float: left;
+    min-width: 40%;
+    padding-top: 0.5em;
+    padding-bottom: 1em;
+}
+
+form.simple-form fieldset input {
+    border: 1px solid #E7E7E7;
+    padding: 0.5em; 
+    width: 40%;
+    margin-bottom: 1em
+}
+
+form.simple-form textarea {
+    width: 99%;
+}
+
+.purge-button {
+  border: none;
+  background: none;
+  background-color: #b33a3a;
+  color: white;
+  display: block;
+  margin-bottom: 1em;
+}
+
+.purge-button:hover {
+  border: none;
+}
+
+
+/* ===================== */
+/* = Package read view = */
+/* ===================== */
+
+.property-list {
+  list-style: none;
+  padding-left: 3em;
+}
+
+#sidebar .property-list li h3 {
+  font-size: 1.1em;
+  font-weight: bold; 
+  margin-bottom: 0.5em;
+  margin-left: -2em;
+}
+
+#sidebar .property-list li {
+  margin-bottom: 0.2em;
+}
+
+.package .api div {
+    background:#f0f0f0;
+    padding:10px;
+}
+
+.package .api h5 {
+    font-weight:bold;
+    margin-bottom:1em!important;
+    font-size:1em;
+}
+
+.package .api code {
+    background:#444;
+    color:#fff;
+    padding:3px 10px ;
+    margin-bottom:1em;
+    display:block;
+}
+.package .api code a {
+    color:#fff;
+}
+
+/* ===================== */
+/* = User Listing      = */
+/* ===================== */
+
+body.user-list #content {
+}
+
+ul.userlist, ul.userlist ul {
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+}
+
+ul.userlist li.user {
+  display: inline-block;
+  width: 200px;
+  margin-bottom: 15px;
+}
+
+ul.userlist li ul span.edits {
+  color: #333;
+  font-size: 1.1em;
+  font-weight: bold;
+  margin-left: 3px;
+}
+
+ul.userlist li.user .username {
+}
+
+#content ul.userlist .username img {
+  margin-bottom: -3px;
+}
+
+ul.userlist .created {
+  color: #888;
+}
+
+ul.userlist .badge {
+  color: #fc0;
+}
+
+body.user-list .sort {
+  float: right;
+}
+
+body.user-list .sort a {
+  background: #eee;
+  padding: 5px;
+  border-bottom: 1px solid #ccc; 
+  border-right: 1px solid #ccc; 
+}
+
+/* ===================== */
+/* = Stateful stuff    = */
+/* ===================== */
+
+.state-deleted, .state-deleted a, .state-deleted * {
+  color: rgba(0, 0, 0, 0.4);
+}
+
+.state-deleted {
+  padding-left: 3px;
+}
+
+.state-deleted:hover * {
+  color: rgba(0, 0, 0, 0.8);
+}
+
+.state-notice {
+  text-transform: uppercase;
+  font-size: 120%;
+  background: #f4a83d;
+  padding: 15px;
+  text-align: center;
+  color: #fff;
+}
+
+/* ================ */
+/* = Search boxes = */
+/* ================ */
+
+form.package-search input.search {
+  width: 99%;
+  font-size: 1.2em;
+  margin: 0px;
+  -webkit-appearance: textfield;
+  
+  border: 1px solid #ccc;
+  padding: 0.5em;
+  font-weight: bold;
+
+     -moz-border-radius: 5px; 
+  -webkit-border-radius: 5px; 
+          border-radius: 5px; 
+  -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; 
+}
+
+.package-search input.button {
+    display: inline-block;
+    float: right;
+    margin-top: 5px;
+    margin-right: 10px !important;
+    margin-bottom: 1px !important;
+}
+
+.package-search-filters {
+  margin-top: 1em;
+  margin-bottom: 1em;
+  color: #888;
+}
+
+.package-search-filters label {
+  padding-left: 1em;
+}
+
+/* =================== */
+/* = Package listing = */
+/* =================== */
+
+ul.packages {
+	padding-left: 0;
+    margin: 0 0 1em 0;
+}
+
+.packages .header {
+    padding-top: 0.5em;
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.packages .extract {
+	padding-top: 0.3em;
+}
+
+.packages li {
+	list-style: none;
+	padding: 1em 0 0.2em 0.0em;
+	border-bottom: 1px solid #ececec;
+	overflow: hidden;
+	/*white-space: nowrap;*/
+}
+
+.packages li a {
+	text-decoration: none;
+}
+
+.packages li img {
+	margin-bottom: -2px;
+}
+
+.search_meta {
+    float:right;
+}
+
+ul.package_formats {
+    float: right;
+    padding: 0 0 3px 0; 
+    margin: 0;
+    font-family: monospace;
+}
+
+ul.package_formats li {
+    display: inline;
+    margin: 0;
+    padding: 0 5px 0 5px;
+    border: none;
+    font-weight: normal;
+    font-size: 0.9em;
+    color: #808080;
+    background:#ececec;
+}
+
+.openness {
+    clear:right;
+    float:right;
+    font-size:0.8em;
+}
+
+.openness img {
+    vertical-align:top;
+}
+
+.openness li {
+    margin:0;
+    padding:0;
+    border:none;    
+}
+
+
+.signup {
+  color: white; 
+  border-bottom: 0;
+  background-color: #FFF7C0;
+  padding: 15px;
+  padding-top: 10px;
+     -moz-border-radius: 15px; 
+  -webkit-border-radius: 15px; 
+          border-radius: 15px;
+  padding-bottom: 10px;
+}
+
+.signup h2 {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: 1.2em;
+}
+
+.subscribe {
+  float: right;
+  margin-top: -6px;
+  margin-bottom: -10px;
+}
+
+.subscribe input[type='text'] {
+  border: 1px solid #ccc;
+  padding: 4px;
+  margin-right: 10px;
+}
+


--- a/ckan/public/css/tabs.css	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/* @override http://localhost:5000/style/tabs.css */
-
-ul.tabbed {
-	position: relative;
-	float: left;
-	width: 100%;
-	padding: 0;
-	margin: 0 0 1em 0;
-	list-style: none;
-	line-height: 1em;
-	border-bottom: 1px solid #aaa; 
-}
-
-ul.tabbed li {
-	float: left;
-	margin: 0 0 0 0.5em;
-	border-left: 1px solid #eaeaea;
-	border-top: 1px solid #eaeaea;
-	border-right: 1px solid #eaeaea; 
-	-moz-border-radius: 0.4em 0.4em 0 0;
-	-webkit-border-top-left-radius: 0.4em;
-	-webkit-border-top-right-radius: 0.4em;
-}
-
-ul.tabbed a {
-	display: block;
-	color: #bbb;
-	text-decoration: none;
-	font-weight: bold;
-	background: #fff;
-	margin: 0;
-	padding: 4px 0.6em;
-}
-
-ul.tabbed li a:hover,
-ul.tabbed li a:active {
-	color: #444;
-	background: #fff;
-	border-color: #aaa;
-	border-bottom-color: #fff;
-}
-
-ul.tabbed .hidden a {
-	display: none;
-}
-
-ul.tabbed a.active,
-ul.tabbed a.active:link,
-ul.tabbed a.active:visited
-{
-	position: relative;
-	top: 1px;
-	z-index: 102;
-	color: #444;
-	background: #fff;
-	border-color: #aaa;
-	border-bottom-color: #fff;
-	display: block;
-}
-
-ul.tabbed a img {
-  margin-bottom: -2px;
-}


--- a/ckan/public/css/tagcomplete.css	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-.tags a.active {
-	background: #2B69C6;
-	color: #fff;
-	text-decoration: none;
-	padding: 0.2em;
-	margin: 0 0.2em;
-}


Binary file ckan/public/img/collaborate.png has changed


Binary file ckan/public/img/find.png has changed


Binary file ckan/public/img/lod2.png has changed


Binary file ckan/public/img/logo.png has changed


Binary file ckan/public/img/share.png has changed


--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ckan/public/scripts/vendor/modernizr/1.7/modernizr.min.js	Sun Sep 04 13:47:43 2011 +0100
@@ -0,0 +1,2 @@
+// Modernizr v1.7  www.modernizr.com
+window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document)
\ No newline at end of file


--- a/ckan/templates/authorization_group/authz.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/authorization_group/authz.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,14 +3,10 @@
   py:strip=""><py:def function="page_title">${c.authorization_group_name} - Authorization - AuthorizationGroups</py:def>
+  <py:def function="page_heading">Authorization: ${c.authorization_group_name}</py:def><div py:match="content">
-    <h2>
-      Authorization for authorization group: ${c.authorization_group_name}
-    </h2>
-
-
-    <h2>Update Existing Roles</h2>
+    <h3>Update Existing Roles</h3><form id="theform" method="POST">
       ${authz_form_table('theform', c.roles, c.users, c.user_role_dict)}
@@ -19,7 +15,7 @@
       </button></form>
 
-    <h2>Add Roles for Any User</h2>
+    <h3>Add Roles for Any User</h3><form id="addform" method="POST">
       ${authz_add_table(c.roles)}
@@ -28,7 +24,7 @@
 
     <hr/>
 
-    <h2>Existing Roles for Authorization Groups</h2>
+    <h3>Existing Roles for Authorization Groups</h3><form id="authzgroup_form" method="POST">
       ${authz_form_group_table('authzgroup_form', c.roles, c.authz_groups, c.authz_groups_role_dict)}
@@ -37,7 +33,7 @@
       </button></form>
 
-    <h2>Add Roles for Any Authorization Group</h2>
+    <h3>Add Roles for Any Authorization Group</h3><form id="authzgroup_addform" method="POST">
       ${authz_add_group_table(c.roles)}


--- a/ckan/templates/authorization_group/edit.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/authorization_group/edit.html	Sun Sep 04 13:47:43 2011 +0100
@@ -2,13 +2,10 @@
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">${c.authorization_group_name} - Edit - AuthorizationGroups</py:def>
+  <py:def function="page_title">${c.authorization_group_name} - Edit - Authorization Groups</py:def>
+  <py:def function="page_heading">Edit: ${c.authorization_group.name}</py:def><div py:match="content">
-    <h2>
-      Edit Authorization Group: ${c.authorization_group_name}
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/authorization_group/index.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/authorization_group/index.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,10 +4,9 @@
   py:strip=""><py:def function="page_title">Authorization Groups</py:def>
+  <py:def function="page_heading">Authorization Groups</py:def><div py:match="content">
-    <h2>Authorization Groups</h2>
-    
     <p i18n:msg="item_count">There are <strong>${c.page.item_count}</strong> authorization groups.</p>
 
     ${c.page.pager()}


--- a/ckan/templates/authorization_group/new.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/authorization_group/new.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,12 +3,9 @@
   py:strip=""><py:def function="page_title">New - Authorization Groups</py:def>
+  <py:def function="page_heading">New Authorization Group</py:def><div py:match="content">
-    <h2>
-      New Authorization Group
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/authorization_group/read.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/authorization_group/read.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,26 +4,14 @@
   py:strip=""><py:def function="page_title">${c.authorization_group.name} - Authorization Groups</py:def>
+  <py:def function="page_heading">${c.authorization_group.name}</py:def><div py:match="content">
-   <div class="group">
-    <h2 class="head">
-      <span class="name">${c.authorization_group.name}</span>
-    </h2>
-    
-    <py:if test="c.group_admins">
-      <h3>Administrators:</h3> 
-        <py:for each="admin in c.authorization_group_admins">
-          <a href="${h.url_for(controller='user',action='read',id=admin.id)}">${admin.name}</a>
-        </py:for>
-    </py:if>      
-
-    <h3>Users:</h3>
+    <h3>Members</h3>
+    <p i18n:msg="item_count">There are ${c.page.item_count} users in this authorization group.</p>
     ${c.page.pager()}
     ${user_list(c.page.items)}
     ${c.page.pager()}
-    <p i18n:msg="item_count">There are ${c.page.item_count} users in this authorization group.</p>
-   </div></div><xi:include href="layout.html" />


--- a/ckan/templates/group/authz.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/group/authz.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,13 +3,10 @@
   py:strip=""><py:def function="page_title">${c.grouptitle or c.groupname} - Authorization - Groups</py:def>
+  <py:def function="page_heading">Authorization: ${c.grouptitle or c.groupname}</py:def><div py:match="content">
-    <h2>
-      Authorization for group: ${c.grouptitle or c.groupname}
-    </h2>
-
-    <h2>Update Existing Roles</h2>
+    <h3>Update Existing Roles</h3><form id="theform" method="POST">
       ${authz_form_table('theform', c.roles, c.users, c.user_role_dict)}
@@ -18,7 +15,7 @@
       </button></form>
 
-    <h2>Add Roles for Any User</h2>
+    <h3>Add Roles for Any User</h3><form id="addform" method="POST">
       ${authz_add_table(c.roles)}
@@ -27,7 +24,7 @@
 
     <hr/>
 
-    <h2>Existing Roles for Authorization Groups</h2>
+    <h3>Update Existing Roles for Authorization Groups</h3><form id="authzgroup_form" method="POST">
       ${authz_form_group_table('authzgroup_form', c.roles, c.authz_groups, c.authz_groups_role_dict)}
@@ -36,7 +33,7 @@
       </button></form>
 
-    <h2>Add Roles for Any Authorization Group</h2>
+    <h3>Add Roles for Any Authorization Group</h3><form id="authzgroup_addform" method="POST">
       ${authz_add_group_table(c.roles)}


--- a/ckan/templates/group/edit.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/group/edit.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,12 +3,18 @@
   py:strip=""><py:def function="page_title">${c.grouptitle or c.groupname} - Edit - Groups</py:def>
+  <py:def function="page_heading">Edit: ${c.grouptitle or c.groupname}</py:def>
+
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+
+    <!-- Package autocomplete --> 
+    <script type="text/javascript" src="${g.site_url}/scripts/jquery.autocomplete.pack.js"></script> 
+    <script type="text/javascript" src="${g.site_url}/scripts/autocompleter.js"></script> 
+    <link rel="stylesheet" href="${g.site_url}/css/jquery.autocomplete.css" /> 
+  </py:def><div py:match="content">
-    <h2>
-      Edit Group: ${c.groupname}
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/group/index.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/group/index.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,11 +4,13 @@
   py:strip=""><py:def function="page_title">Groups of Data Packages</py:def>
+  <py:def function="page_heading">Groups of Data Packages</py:def>
   
+  <py:def function="optional_head">
+    <style>#minornavigation { visibility: hidden; }</style>    
+  </py:def>
+ 
   <div py:match="content">
-    <h2>Groups</h2>
-    
-    <p i18n:msg="item_count">There are <strong>${c.page.item_count}</strong> groups.</p>
 
     ${c.page.pager()}
     ${group_list_from_dict(c.page.items)}


--- a/ckan/templates/group/layout.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/group/layout.html	Sun Sep 04 13:47:43 2011 +0100
@@ -7,8 +7,8 @@
   ><py:match path="primarysidebar">
-    <li class="widget-container widget_text">
-      <h2>Groups section</h2>
+    <li class="widget-container boxed widget_text">
+      <h3>Groups section</h3><p i18n:msg="">Whilst tags are great at collecting packages together, there are occasions when you want to restrict users from editing a collection. A <strong>group</strong> can be set-up to specify which users have permission to add or remove packages from it.</p><p><span class="ckan_logged_in" style="display: none;">
@@ -31,6 +31,10 @@
     <li py:if="h.check_access('group_edit_permissions',{'id':c.group.id})">
       ${h.subnav_link(c, h.icon('lock') + _('Authorization'), controller='group', action='authz', id=c.group.name)}
     </li>
+    <li class="action">
+    ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
+    controller='group', action='history', id=c.group.name, format='atom', days=7)}
+    </li></ul></py:match>
   


--- a/ckan/templates/group/new.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/group/new.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,12 +3,18 @@
   py:strip=""><py:def function="page_title">New - Groups</py:def>
+  <py:def function="page_heading">New Group</py:def>
+
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+
+    <!-- Package autocomplete and rack-up --> 
+    <script type="text/javascript" src="${g.site_url}/scripts/jquery.autocomplete.pack.js"></script> 
+    <script type="text/javascript" src="${g.site_url}/scripts/autocompleter.js"></script> 
+    <link rel="stylesheet" href="${g.site_url}/css/jquery.autocomplete.css" /> 
+  </py:def><div py:match="content">
-    <h2>
-      New Group
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/group/read.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/group/read.html	Sun Sep 04 13:47:43 2011 +0100
@@ -5,36 +5,39 @@
   
   <py:def function="page_title">${c.group.display_name} - Groups</py:def>
 
-  <div py:match="content">
-   <div class="group">
-    <h2 class="head">
+  <py:def function="page_heading"><py:if test="not c.group.title"><em>No Title</em></py:if>
+      ${c.group.title}
+  </py:def>
+  
+  <py:match path="primarysidebar">
+  
+    <li class="widget-container widget_text">
+      <div class="description">
+        ${c.group_description_formatted}
+      </div>
+      <ul class="property-list">
+        <py:if test="c.group_admins">
+        <li>
+        <h3>Administrators</h3> 
+          <ul py:for="admin in c.group_admins">
+            <li>${h.linked_user(admin)}</li>
+          </ul>
+        </li>
+        </py:if>
+      </ul>
+    </li>
+  </py:match>
 
-      ${c.group.title}
-      <span class="name">(${c.group.name})</span>
-    </h2>
-
-    <div class="description">
-      ${c.group_description_formatted}
-    </div>
-
-    <py:if test="c.group_admins">
-      <h3>Administrators:</h3> 
-        <py:for each="admin in c.group_admins">
-          ${h.linked_user(admin)}
-        </py:for>
-    </py:if>      
-
+  <py:match path="content"><h3>Packages:</h3><p i18n:msg="item_count">There are ${c.page.item_count} packages in this group.</p>
     ${c.page.pager()}
     ${package_list(c.page.items)}
     ${c.page.pager()}
-    
-   </div>
-  </div>
+  </py:match><xi:include href="layout.html" /></html>


--- a/ckan/templates/home/index.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/home/index.html	Sun Sep 04 13:47:43 2011 +0100
@@ -2,29 +2,168 @@
   xmlns:i18n="http://genshi.edgewall.org/i18n"
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
+  
+  <py:def function="page_title">Welcome</py:def>
+  <py:def function="body_class">hide-sidebar</py:def>
 
-  <py:def function="page_title">Home</py:def>
+  <py:def function="optional_head">
+      <style>
+        #minornavigation {
+          display: none;
+        }
+  
+        #sidebar {
+          display: none;
+        }
 
-  <div py:match="content">
-    <h2>Welcome to ${g.site_title}</h2>
-    <p i18n:msg="title">
-      ${g.site_title} is an
-      <a href="http://www.opendefinition.org/ossd/">open registry</a>
-      of data and content packages. Harnessing the CKAN software, this
-      site makes it easy to find, share and reuse content and data,
-      especially in ways that are machine automatable.
-    </p>
-    
-    <p i18n:msg="package_count"><strong>${c.package_count} registered data packages</strong> available.</p>
+        .front-page .action-box h1 {
+          padding-top: 0.6em;
+          padding-bottom: 0.5em;
+          font-size: 2.1em;
+        }
 
-    <xi:include href="../package/search_form.html" />
-    
-    <h4>Recently changed packages</h4>
-    ${package_list_from_dict(c.latest_packages)}
+        .front-page .action-box {
+          border-radius: 20px;
+          background:  #FFF7C0;
+        }
+        
+        .front-page .action-box-inner {
+          margin: 20px;
+          margin-bottom: 5px;
+          min-height: 15em;
+        }
+        .front-page .action-box-inner.collaborate {
+          background:url(/img/collaborate.png) no-repeat right top;
+        }
+        
+        .front-page .action-box-inner.share {
+          background:url(/img/share.png) no-repeat right top;
+        }
+        
+        .front-page .action-box-inner.find {
+          background:url(/img/find.png) no-repeat right top;
+        }
+        
+        .front-page .action-box-inner a {
+          font-weight: bold;
+        }
+       
+        .front-page .action-box-inner input {
+          font-family: 'Ubuntu';
+          border-radius: 10px;
+          background-color: #fff;
+          border: 0px;
+          font-size: 1.3em;
+          width: 90%;
+          border: 1px solid #999;
+          color: #666;
+          padding: 0.5em;
+        }
+        
+        .front-page .action-box-inner .create-button {
+          display: block;
+          float: right;
+          font-weight: normal;
+          font-family: 'Ubuntu';
+          margin-top: 1.5em;
+          border-radius: 10px;
+          background-color: #B22;
+          border: 0px;
+          font-size: 1.3em;
+          color: #fff;
+          padding: 0.5em;
+        }
+        
+        .front-page .action-box-inner .create-button:hover {
+          background-color: #822;
+        }
+        
+        .front-page .action-box-inner ul {
+        margin-top: 1em;
+        margin-bottom: 0;
+        }
 
-    <p><a href="${h.url_for(controller='revision', action='index',
-      id=None)}">View revision log »</a></p>
+        .front-page .whoelse {
+          margin-top: 1em;
+        }
+
+        .front-page .group {
+          overflow: hidden;
+        }
+        
+        .front-page .group h3 {
+          margin-bottom: 0.5em;
+        }
+        
+        .front-page .group p {
+          margin-bottom: 0em;
+          min-height: 6em;
+        }
+        
+        .front-page .group strong {
+          display: block;
+          margin-bottom: 1.5em;
+        }
+
+      </style>
+  </py:def>
+
+    <div py:match="//div[@id='content']" class="front-page">
+      <div class="span-24 last">
+        <h1>Welcome to ${g.site_title}!</h1>
+      </div>
+      <div class="span-8 action-box">
+        <div class="action-box-inner find">
+          <h1>Find data</h1>
+
+          <form action="/package" method="GET"> 
+            <input name="q" value="" class="search-field" placeholder="Find data packages" /> 
+          </form> 
+          ${g.site_title} contains <a href="/package">${c.package_count} data packages</a> that you can 
+          browse, learn about and download. 
+        </div>
+      </div>
+      <div class="span-8 action-box">
+        <div class="action-box-inner share">
+        <h1>Share data</h1>
+
+        Add your own datasets to share them with others and
+        to find other people interested in your data.
+        
+        <py:choose test="h.am_authorized(c, actions.PACKAGE_CREATE)">
+          <a py:when="" href="/package/new" class="create-button">Create a data package »</a>
+          <py:otherwise>
+            <a href="/user/login" class="create-button">Sign up »</a>
+          </py:otherwise>
+        </py:choose>
+        </div>
+      </div>
+      <div class="span-8 last action-box">
+        <div class="action-box-inner collaborate">
+        <h1>Collaborate</h1>
+
+        Find out more about working with open data by exploring 
+        these resources: 
+        <ul>
+          <li><a href="http://getthedata.org">GetTheData.org</a></li>
+          <li><a href="http://datapatterns.org">DataPatterns.org</a></li>
+          <li><a href="http://opendatamanual.org">Open Data Manual</a></li>
+        </ul>
+        </div>
+      </div>
+      <div class="span-24 last whoelse">
+        <h2>Who else is here?</h2>
+      </div>
+      <py:for each="i, group in enumerate(c.groups)">
+        <div class="span-8 group ${'last' if i % 3 == 2 else ''}">
+          <h3><a href="${h.url_for(controller='group', action='read', id=group.name)}">${group.title}</a></h3>
+          <p>
+            ${h.markdown_extract(group.description)}
+          </p>
+          <strong>${group.title} has ${len(group.packages)} data packages.</strong>
+        </div>
+      </py:for></div>
-
   <xi:include href="layout.html" /></html>
+


--- a/ckan/templates/home/license.html	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<html xmlns:py="http://genshi.edgewall.org/"
-  xmlns:i18n="http://genshi.edgewall.org/i18n"
-  xmlns:xi="http://www.w3.org/2001/XInclude"
-  py:strip="">
-  
-  <py:def function="page_title">License</py:def>
-
-  <div py:match="content">
-    <h2>${g.site_title} License</h2>
-
-    <p i18n:msg="">All material on this site is <a
-      href="http://opendefinition.org/">open</a> and can be freely used, reused
-    and redistributed. Formally, the data/database is licensed under the <a
-      href="http://opendatacommons.org/licenses/odbl/">Open Data Commons Open
-      Database License v1.0</a>, with all copyrightable content in that
-    database plus any additional content on this site licensed under a <a
-      href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons
-      Attribution Share-Alike v3.0 license</a>.</p>
-  </div>
-
-  <xi:include href="layout.html" />
-</html>


--- a/ckan/templates/layout_base.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/layout_base.html	Sun Sep 04 13:47:43 2011 +0100
@@ -1,18 +1,24 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html
-  xmlns="http://www.w3.org/1999/xhtml"
-  xmlns:i18n="http://genshi.edgewall.org/i18n"
-  xmlns:py="http://genshi.edgewall.org/"
-  xmlns:xi="http://www.w3.org/2001/XInclude"
-  >
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
+  <!--[if (gte IE 9)|!(IE)]><!--><html class="no-js" lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:i18n="http://genshi.edgewall.org/i18n"
+      xmlns:py="http://genshi.edgewall.org/"
+      xmlns:xi="http://www.w3.org/2001/XInclude"
+      ><!--<![endif]-->
+<xi:include href="_util.html" />
+<head>
+  <meta charset="utf-8" />
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 
-<xi:include href="_util.html" />
+  <title>${page_title()} - ${g.site_title}</title>
+  <meta name="description" content="" />
+  <meta name="author" content="" />
 
-<head>
-  <title>${page_title()} - ${g.site_title}</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <link rel="shortcut icon" href="${g.favicon}" type="image/x-icon" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="shortcut icon" href="${g.site_url}/favicon.ico" />
+
   <py:choose><py:when test="defined('optional_feed')">
     ${optional_feed()}
@@ -21,21 +27,28 @@
   <link rel="alternate" type="application/atom+xml" title="${g.site_title} - Recent Revision History" href="${h.url_for(controller='revision', action='list', id=None, format='atom', days=1)}" /></py:otherwise></py:choose>
+  <link href='http://fonts.googleapis.com/css?family=Ubuntu' rel='stylesheet' type='text/css' /><link rel="stylesheet" href="${g.site_url}/scripts/vendor/jqueryui/1.8.11/css/ui-lightness/jquery-ui.css" type="text/css" media="screen, print" />
-  <link rel="stylesheet" href="${g.site_url}/css/style.css" type="text/css" media="screen, print" />
-
-  <!--[if IE]>
-  <link rel="stylesheet" href="${g.site_url}/css/ie.css" type="text/css" media="screen, print" />
+  <link rel="stylesheet" href="${g.site_url}/css/boilerplate.css?v=2" />
+  <link rel="stylesheet" href="${g.site_url}/css/blueprint/screen.css" type="text/css" media="screen, projection" />
+  <link rel="stylesheet" href="${g.site_url}/css/blueprint/print.css" type="text/css" media="print" />
+  <!--[if lt IE 8]>
+    <link rel="stylesheet" href="${g.site_url}/css/blueprint/ie.css" type="text/css" media="screen, projection"><![endif]-->
+  <link rel="stylesheet" href="${g.site_url}/css/style.css?v=2" />
+  <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" /><script type="text/javascript" src="${g.site_url}/language.js"></script>
+  <script type="text/javascript" src="${g.site_url}/language.js"></script><script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery/1.5.2/jquery.min.js"></script><script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.cookie/jquery.cookie.min.js"></script><script type="text/javascript" src="${g.site_url}/scripts/vendor/jquery.placeholder/jquery.placeholder.js"></script><script type="text/javascript" src="${g.site_url}/scripts/vendor/jqueryui/1.8.11/jquery-ui.min.js"></script><script type="text/javascript" src="${g.site_url}/scripts/application.js?lang=${c.locale}"></script>
-  
+
+  <script src="${g.site_url}/scripts/vendor/modernizr/1.7/modernizr.min.js"></script>
+
   <script type="text/javascript">
     $(document).ready(function() {
         var ckan_user = $.cookie("ckan_display_name");
@@ -46,177 +59,135 @@
         $('input[placeholder], textarea[placeholder]').placeholder();
     });
   </script>
+
   <py:if test="defined('optional_head')">
     ${optional_head()}
   </py:if>
+
 </head>
 
-<body class="${value_of('body_class', default=lambda: c.body_class)()}
-             ${request.environ.get('pylons.routes_dict', {}).get('action')} 
+<body class="${request.environ.get('pylons.routes_dict', {}).get('action')} 
              ${request.environ.get('pylons.routes_dict', {}).get('controller').split(':')[-1]}">
-<div id="wrapper" class="hfeed">
-  <div id="header">
-  <div id="masthead">
-    <div id="branding" role="banner">
-       <h1 id="site-title">
-       <a href="${url('home')}" title="${g.site_title} Home">
-      <py:if test="g.site_logo">
-            <img src="${g.site_logo}" alt="${g.site_title} Logo" title="${g.site_title} Logo" style="display: inline;" />
-          </py:if>
-          <py:if test="not g.site_logo">
-            ${g.site_title}
-          </py:if>
+  <div id="wrap">
+    <div class="header outer">
+      <header class="container">
+        <div class="menu account">
+          <span class="ckan-logged-in" style="display: none;">
+            <a href="${h.url_for(controller='user',action='me',id=None)}">${h.icon('user')} My account</a>
+            <a href="${h.url_for('/user/logout')}">Logout</a>
+          </span>
+          <span class="ckan-logged-out">
+            <a href="${h.url_for(controller='user',action='login', id=None)}">Login</a>
+            <a href="${h.url_for(controller='user',action='register', id=None)}">Register</a>
+          </span>
+        </div>
+        <a href="${url('home')}">
+          <img width="64" src="${g.site_logo}" alt="${g.site_title} Logo" title="${g.site_title} Logo" id="logo" /></a>
-      </h1>
-      <div id="site-description">${g.site_description}</div>
-    </div><!-- /branding -->
+        <div id="site-name">
+          <a href="${url('home')}">${g.site_title} — ${g.site_description}</a>
+        </div>
+        <div class="menu">
+          <span id="menusearch">
+            <form action="${url(controller='package', action='search')}" method="GET">
+              <input name="q" value="${c.q if hasattr(c, 'q') else ''}" class="search" placeholder="Find data packages" />
+            </form>
+          </span>
+          <div id="mainmenu">
+            <span py:if="h.check_access('package_create')">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</span>
+            ${h.nav_link(c, _('Search'), controller='package', action='index', id=None, highlight_actions = 'new index')}
+            ${h.nav_link(c, _('Groups'), controller='group', action='index', id=None)}
+          </div>
+          ${h.nav_link(c, _('About'), controller='home', action='about', id=None)}
+        </div>
+      </header>
+    </div>
+    <py:with vars="messages = list(h._flash.pop_messages())">
+    <div class="class container flash-banner-box" py:if="len(messages)">
+      <div class="flash-banner ${m.category}" py:for="m in messages">
+        ${m.message}
+      </div>
+    </div>
+    </py:with>
 
-    <div id="top-bar">
-      <div id="top-bar-login">
-        <span class="ckan-logged-in" style="display: none;">
-          <a href="${h.url_for(controller='user',action='me',id=None)}">${h.icon('user')} My account</a>
-          · <a href="${h.url_for('/user/logout')}">Logout</a>
-        </span>
-        <span class="ckan-logged-out">
-                <a href="${h.url_for(controller='user',action='login', id=None)}">Login</a> ·
-                <a href="${h.url_for(controller='user',action='register', id=None)}">Register</a>
-        </span>
+    <div id="main" class="container" role="main">
+      <h1 py:if="defined('page_heading')" class="page_heading">${page_heading()}</h1>
+      <div id="minornavigation" class="span-24 last">
+          <minornavigation></minornavigation></div>
 
-      <div class="search-form">
-        <form action="${url(controller='package', action='search')}" method="GET">
-          <input type="search" class="search" name="q" value="" autocomplete="off" results="5" placeholder="Search..."/>
-        </form>
+      <div id="content" class="span-16 append-1">
+        <py:if test="defined('content')">
+          ${content()}
+        </py:if>
+        <content>
+          <p>Master content template placeholder … please replace me.</p>
+        </content></div>
-    </div><!-- /top-bar -->
-
-    <div id="access" role="navigation">
-      <div class="skip-link screen-reader-text">
-        <a href="#content" title="Skip to content">Skip to content</a>
-      </div> 
-      <div class="menu">
-        <ul>
-          <li>${h.nav_link(c, _('Home'), controller='home', action='index', id=None)}</li>
-          <li>${h.nav_link(c, _('Search'), controller='package', action='index', id=None, highlight_actions = 'search index')}</li>
-<?python
-access_package_create = h.check_access('package_create')
-?>
-          <li py:if="access_package_create">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</li>
-          <li>${h.nav_link(c, _('Tags'), controller='tag', action='index', id=None)}</li>
-          <li>${h.nav_link(c, _('Groups'), controller='group', action='index', id=None, highlight_actions = 'new index')}</li>
-          <li>${h.nav_link(c, _('About'), controller='home', action='about', id=None)}</li>
-      </ul>
-      </div><!-- .menu -->
-    </div><!-- #access -->
-
-  </div><!-- #masthead -->
-  </div><!-- #header -->  
-
-  <div id="main"> 
-  <py:with vars="messages = list(h._flash.pop_messages())">
-  <div class="flash-banner-box" py:if="len(messages)">
-    <div class="flash-banner ${m.category}" py:for="m in messages">
-      ${m.message}
+      <div id="sidebar" class="span-7 last">
+        <ul class="widget-list">
+          <py:if test="defined('primary_sidebar_extras')">
+            ${primary_sidebar_extras()}
+          </py:if>
+          <primarysidebar>
+            <!-- Primary Side Bar Goes Here -->
+          </primarysidebar>
+        </ul>
+      </div></div>
+    <br/><br/>
+    <div id="push"></div></div>
-  </py:with>
-
-    <div id="container"> 
-      <div id="minornavigation">
-        <minornavigation></minornavigation> 
-      </div>
-      <div id="content" role="main"> 
-        <div class="page type-page hentry">
-          <div class="entry-content">
-            <!-- support both options for defining content -->
-            <py:if test="defined('content')">
-            ${content()}
-            </py:if>
-            <content>
-                <p>Master content template placeholder … please replace me.</p>
-            </content>
-          </div><!-- .entry-content -->
-        </div>
-
-        <div id="comments">
-        </div><!-- #comments -->
-
-      </div><!-- #content -->
-    </div><!-- #container -->
-
-    <div id="primary" class="widget-area" role="complementary">
-      <ul class="xoxo">
-        <py:if test="defined('primary_sidebar_extras')">
-          ${primary_sidebar_extras()}
-        </py:if>
-        <primarysidebar>
-        <!-- Primary Side Bar Goes Here -->
-        </primarysidebar>
-      </ul>
-    </div><!-- #primary .widget-area -->
-
-  </div><!-- #main -->
-  
-<div id="footer" role="contentinfo"> 
-  <div id="colophon">
-    <div id="footer-widget-area" role="complementary">
-
-      <div id="first" class="widget-area">
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Packages</h3>
+  <div class="footer outer">
+    <footer class="container">
+        <div class="xoxo span-6">
+          <h3 class="widget-title">About ${g.site_title}</h3><div class="textwidget"><ul>
-                <li>${h.nav_link(c, _('Search'), controller='package', action='search', id=None)}</li>                
-                <li py:if="access_package_create">${h.nav_link(c, _('Register a new Package'), controller='package', action='new', id=None)}</li>
-                <li>${h.nav_link(c, _('Revision History'), controller='revision', action='index', id=None)}</li>
+                <li>${h.link_to(_('About'), h.url_for(controller='home', action='about', id=None))}</li>
+              <li>
+                <a href="http://twitter.com/ckanproject">Twitter @ckanproject</a>
+              </li><li>${h.link_to(_('API'), h.url_for(controller='api', action='get_api', id=None))}</li><li>${h.link_to(_('API Docs'), 'http://wiki.ckan.net/API')}</li>
-<?python
-  from pylons import config
-  dumps_url = config.get('ckan.dumps_url')
-  dumps_format = config.get('ckan.dumps_format', '')
-?>
-                <li py:if="dumps_url">${h.link_to(_('Full %s dump') % dumps_format, dumps_url)}</li>
+              <li>
+                <a href="http://okfn.org/contact/">Contact Us</a>
+              </li>
+              <li>
+                <a href="http://okfn.org/privacy-policy/">Privacy Policy</a>
+              </li></ul></div>
-          </li>
-        </ul>
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Groups & Tags</h3>
-          <div class="textwidget">
-            <ul>
-              <li>${h.nav_link(c, _('Tags'), controller='tag', action='index', id=None)}</li>
-              <li>${h.nav_link(c, _('Groups'), controller='group', action='index', id=None)}</li>
-              <li py:if="h.check_access('group_create')">${h.nav_link(c, _('Create a new Group'), controller='group', action='new', id=None)}</li>
-              <li>${h.nav_link(c, _('Authorization Groups'), controller='authorization_group', action='index', id=None)}</li>
-              <li class="page_item" py:if="h.check_access('authorization_group_create')">${h.nav_link(c, _('Create a new Authorization Group'), controller='authorization_group', action='new', id=None)}</li>
-            </ul>
-          </div>
-          </li>
-        </ul>
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">About</h3>
+        </div>
+        <div class="xoxo span-6">
+          <h3 class="widget-title">Sections</h3><div class="textwidget"><ul><li>
-                <a href="http://ckan.org/">Project Home Page</a>
+                <a href="${url(controller='tag', action='index')}">
+                  Tags
+                </a></li><li>
-                <a href="http://www.okfn.org/contact/">Contact Us</a>
+                <a href="${url(controller='revision', action='index')}">
+                  Revisions
+                </a></li><li>
-                <a href="http://www.okfn.org/privacy-policy/">Privacy Policy</a>
+                <a href="${url(controller='authorization_group', action='index')}">
+                  Authorization Groups
+                </a>
+              </li>
+              <li>
+                <a href="${url('/ckan-admin')}">
+                  Site Admin
+                </a></li></ul></div>
-          </li>
-        </ul>
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Language</h3>
+        </div>
+        <div class="xoxo span-6">
+          <h3 class="widget-title">Languages</h3><div class="textwidget"><ul><?python
@@ -229,66 +200,36 @@
                              locale=str(locale), 
                              return_to=current_url,
                              hash=current_url_hash)}">
-                  ${locale.display_name}
+                  ${locale.display_name or locale.english_name}
                 </a></li></ul></div>
-          </li>
-        </ul>
-      </div><!-- #first .widget-area -->
+        </div>
+        <div class="xoxo span-6 last">
+          <h3 class="widget-title">Meta</h3>
+          <p id="credits">
+          © 2011
+        <img src="http://assets.okfn.org/images/logo/okf_logo_white_and_green_tiny.png" id="footer-okf-logo" />
+        <a href="http://okfn.org/">Open Knowledge Foundation</a>
+        Licensed under the <a href="http://opendatacommons.org/licenses/odbl/1.0/">Open Database License</a>
+        <a href="http://opendefinition.org/"><img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/></a>
+        
+        <br/><br/>
+        Powered by <a href="http://ckan.org">CKAN</a>.<br/>
+      </p>
+        </div>
+    </footer>
+  </div><!-- eo #container -->
 
-      <div id="fourth" class="widget-area">
-        <ul class="xoxo">
-          <li class="widget-container widget_text">
-          <h3 class="widget-title">Credits</h3>
-          <div class="textwidget">
-            <ul>
-              <li i18n:msg="">
-                <img src="http://assets.okfn.org/images/logo/okf_logo_white_and_green_tiny.png" id="footer-okf-logo" />
-                An
-                <a href="http://www.okfn.org/">Open Knowledge Foundation</a> Project
-              </li>
-              <li>
-                © <a href="http://www.okfn.org/">Open Knowledge Foundation</a>
-              </li>
-              <li>
-                <a href="http://www.opendefinition.org/okd/">
-                <img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/oc_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/>
-                </a>
-              </li>
-              <li>
-                <a href="http://www.opendefinition.org/okd/">
-                <img alt="This Content and Data is Open" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="border: none ; margin-bottom: -4px;"/>
-                </a>
-              </li>
-            </ul>
-          </div>
-          </li>
-        </ul>
-      </div><!-- #fourth .widget-area -->
 
-    </div><!-- #footer-widget-area -->
-
-    <div id="site-info">
-      <a href="${url('/')}" title="${g.site_title}" rel="home">
-        ${g.site_title}</a>
-    </div><!-- #site-info -->
-
-    <div id="site-generator">
-      <a href="http://ckan.org/"
-        title="CKAN" rel="generator">
-        Powered by CKAN
-        <span i18n:msg="version">
-          v${c.__version__}
-        </span>
-      </a>
-    </div><!-- #site-generator -->
-  </div><!-- #colophon -->
-</div><!-- #footer --> 
-
-</div><!-- #wrapper -->
+  <py:if test="defined('optional_footer')">
+    ${optional_footer()}
+  </py:if>
 
 ${h.literal(getattr(g, 'template_footer_end', ''))}
 </body></html>
+
+
+


--- a/ckan/templates/package/authz.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/authz.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,13 +3,10 @@
   py:strip=""><py:def function="page_title">${c.pkgtitle or c.pkgname} - Authorization - Data Packages</py:def>
+  <py:def function="page_heading">Authorization: ${c.pkgtitle or c.pkgname}</py:def><div py:match="content">
-    <h2>
-      Authorization for Data Package: ${c.pkgname}
-    </h2>
-
-    <h2>Update Existing Roles</h2>
+    <h3>Update Existing Roles</h3><form id="theform" method="POST">
       ${authz_form_table('theform', c.roles, c.users, c.user_role_dict)}
@@ -18,7 +15,7 @@
       </button></form>
 
-    <h2>Add Roles for Any User</h2>
+    <h3>Add Roles for Any User</h3><form id="addform" method="POST">
       ${authz_add_table(c.roles)}
@@ -27,7 +24,7 @@
 
     <hr/>
 
-    <h2>Existing Roles for Authorization Groups</h2>
+    <h3>Update Existing Roles for Authorization Groups</h3><form id="authzgroup_form" method="POST">
       ${authz_form_group_table('authzgroup_form', c.roles, c.authz_groups, c.authz_groups_role_dict)}
@@ -36,7 +33,7 @@
       </button></form>
 
-    <h2>Add Roles for Any Authorization Group</h2>
+    <h3>Add Roles for Any Authorization Group</h3><form id="authzgroup_addform" method="POST">
       ${authz_add_group_table(c.roles)}


--- a/ckan/templates/package/edit.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/edit.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,7 +3,8 @@
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">${c.pkgtitle or c.pkgname} - Edit - Data Packages</py:def>
+  <py:def function="page_title">${c.pkg.title or c.pkg.name} - Edit - Data Packages</py:def>
+  <py:def function="page_heading">Edit: ${c.pkg.title or c.pkg.name}</py:def><py:def function="body_class">hide-sidebar</py:def>
 
@@ -14,10 +15,6 @@
   </py:def><div py:match="content" class="package">
-    <h2>
-      Edit Data Package: ${c.pkgname}
-    </h2>
-
     <div id="preview" style="margin-left: 20px;" py:if="c.preview"><hr /><h2>Preview</h2>


--- a/ckan/templates/package/history.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/history.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,6 +4,7 @@
   py:strip=""><py:def function="page_title">${c.pkg_dict.get('title', c.pkg_dict['name'])} - Data Packages - History</py:def>
+  <py:def function="page_heading">History: ${c.pkg.title or c.pkg.name}</py:def><!-- Sidebar --><py:match path="primarysidebar">
@@ -19,12 +20,6 @@
   </py:match><div py:match="content" class="package">
-
-    <!-- Title -->
-    <h2 class="head">
-        ${c.pkg_dict.get('title', c.pkg_dict['name'])} - History
-    </h2>
-
     <h3>Revisions</h3><form id="package-revisions" action="diff" method="post"
       xmlns:py="http://genshi.edgewall.org/"
@@ -39,7 +34,7 @@
 
       <table><tr>
-          <th></th><th>Revision ID</th><th>Package with timestamp</th><th>Author</th><th>Log Message</th>
+          <th></th><th>Revision</th><th>Timestamp</th><th>Author</th><th>Log Message</th></tr><py:for each="index, rev in enumerate(c.pkg_revisions)"><tr>


--- a/ckan/templates/package/layout.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/layout.html	Sun Sep 04 13:47:43 2011 +0100
@@ -16,6 +16,10 @@
       <li py:if="h.check_access('package_edit_permissions',{'id':c.pkg.id})">
         ${h.subnav_link(c, h.icon('lock') + _('Authorization'), controller='package', action='authz', id=c.pkg.name)}
       </li>
+      <li class="action">
+        ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
+        controller='package', action='history', id=c.pkg.name, format='atom', days=7)}
+      </li></ul></py:if></py:match>


--- a/ckan/templates/package/new.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/new.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,6 +4,7 @@
   py:strip=""><py:def function="page_title">New - Data Packages</py:def>
+  <py:def function="page_heading">Register a New Data Package</py:def><py:def function="body_class">hide-sidebar</py:def>
 
@@ -15,7 +16,8 @@
     <!-- Flexitable --><script type="text/javascript" src="${g.site_url}/scripts/flexitable.js"></script><link rel="stylesheet" href="${g.site_url}/css/flexitable.css" /> 
- 
+
+    <!-- Auto-generate 'name' field --><script type="text/javascript">
       jQuery(document).ready(function($) {
         CKAN.Utils.PackageSlugCreator.create($('#title'), $('#name'));
@@ -27,8 +29,6 @@
   </py:def><div py:match="content">
-    <h2>Register a New Data Package</h2>
-
     <div id="preview" style="margin-left: 20px;" py:if="c.preview"><hr /><h2>Preview</h2>


--- a/ckan/templates/package/read.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/read.html	Sun Sep 04 13:47:43 2011 +0100
@@ -1,13 +1,25 @@
 <html xmlns:py="http://genshi.edgewall.org/"
   xmlns:i18n="http://genshi.edgewall.org/i18n"
   xmlns:xi="http://www.w3.org/2001/XInclude"
+  xmlns:foaf="http://xmlns.com/foaf/0.1/"
+  xmlns:owl="http://www.w3.org/2002/07/owl#"
+  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+  xmlns:dc="http://purl.org/dc/terms/"
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns:dcat="http://www.w3.org/ns/dcat#"
+  typeof="dcat:Dataset"
+  about=""
   py:strip="">
 
-  <py:def function="page_title">${c.pkg_dict.get('title', c.pkg_dict['name'])} - Data Packages</py:def>
+  <py:def function="page_title">${c.pkg_dict.get('title', c.pkg_dict['name'])}
+  - Data Packages</py:def>
+  
+  <py:def function="page_heading" property="dc:title">${c.pkg_dict['title']}</py:def>
+  
       
   <py:match path="primarysidebar">
   
-    <li class="widget-container widget_text" py:if="not c.hide_welcome_message">
+    <li class="widget-container boxed widget_text" py:if="not c.hide_welcome_message"><h3>First time at ${g.site_title}?</h3><p>
           ${g.site_title} is a catalogue for data. ${h.subnav_link(c, _('Click here to find out more ...'), controller='home', action='about', id=None)}
@@ -15,47 +27,79 @@
     </li><li class="widget-container widget_text">
-        <h3>Tags</h3>
-        ${tag_list(c.pkg_dict.get('tags', ''))}
-        <p class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
-            ${h.subnav_link(c, 'Add a new Tag', controller='package', action='edit', id=c.pkg.name)}
-        </p>
+      <ul class="property-list">
+        <li py:if="c.pkg.url">
+          <h3>Source</h3>
+          <span property="foaf:homepage">${c.pkg_url_link}</span>
+        </li>
+        <li py:if="c.pkg_author_link">
+          <h3>Author</h3>
+          <span property="dc:creator">${c.pkg_author_link}</span>
+        </li>
+        <li py:if="c.pkg_maintainer_link">
+          <h3>Maintainer</h3>
+          <span property="dc:contributor">${c.pkg_maintainer_link}</span>
+        </li>
+        <li py:if="c.pkg.version">
+          <h3>Version</h3>
+          ${c.pkg.version}
+        </li>
+        <li py:if="c.eu_country">
+          <h3>Country</h3> ${h.code_to_country(c.eu_country)}
+        </li>
+        <li>
+          <h3>Tags</h3>
+          ${tag_list(c.pkg_dict.get('tags', ''))}
+          <span class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
+            ${h.subnav_link(c, 'add tags »', controller='package', action='edit', id=c.pkg.name)}
+          </span>
+        </li>
+        <li>
+          <h3>Groups</h3>
+          <py:if test="c.pkg.groups">        
+              <ul>
+                <li py:for="group in sorted(c.pkg.groups, key=lambda g: g.display_name)">
+                    <a href="${h.url_for(controller='group', action='read', id=group.name)}">${group.display_name}</a>
+                </li>
+              </ul>
+          </py:if>
+          <p class="hint">
+            <py:if test="not c.pkg.groups">
+               Groups are collections of packages maintained by users of ${g.site_title}. This package has not been added to any groups yet.
+            </py:if>
+
+
+            <p class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
+              ${h.subnav_link(c, 'add to a group »', controller='package', action='edit', id=c.pkg.name)}        
+            </p>
+          </p>
+        </li>
+        <li py:if="h.check_access('package_update',{'id':c.pkg.id})">
+          <li><h3>State</h3> ${c.pkg.state}</li>
+        </li>
+        <li py:if="c.harvest_catalogue_name">
+        <h3>Source</h3><a href="${c.harvest_dataset_url}">Source
+          page</a> on <a
+          href="${c.harvest_catalogue_url}">${c.harvest_catalogue_name}</a>
+        </li>
+        <li py:if="c.package_relationships">
+          <h3>Related packages</h3>
+          <ul>
+            <py:for each="pkg, relationship_str, comment in c.package_relationships">
+              <li>
+                ${h.literal(relationship_str % (h.link_to(pkg.name, h.url_for(controller="package", action="read", id=pkg.name))))}
+                <span py:if="comment is not None and len(comment)" class="relationship_comment">
+                    (${comment})
+                </span>
+              </li>
+            </py:for>
+          </ul>
+        </li>
+      </ul></li>
 
-    <li class="widget-container widget_text">
-        <h3>Groups</h3>
-        <py:if test="c.pkg.groups">        
-            <ul>
-              <li py:for="group in sorted(c.pkg.groups, key=lambda g: g.display_name)">
-                  <a href="${h.url_for(controller='group', action='read', id=group.name)}">${group.display_name}</a>
-              </li>
-            </ul>
-        </py:if>
-        <py:if test="not c.pkg.groups">
-             Groups are collections of packages maintained by users of ${g.site_title}. This package has not been added to any groups yet.
-        </py:if>
-        <p class="widget_action" py:if="h.check_access('package_update',{'id':c.pkg.id})">
-            ${h.subnav_link(c, 'Add to a Group', controller='package', action='edit', id=c.pkg.name)}        
-        </p>
-    </li>
     
-    <py:if test="c.package_relationships">
-        <li class="widget-container widget_text">
-              <h3>Related packages</h3>
-              <ul>
-                <py:for each="pkg, relationship_str, comment in c.package_relationships">
-                  <li>
-                    ${h.literal(relationship_str % (h.link_to(pkg.name, h.url_for(controller="package", action="read", id=pkg.name))))}
-                    <span py:if="comment is not None and len(comment)" class="relationship_comment">
-                        (${comment})
-                    </span>
-                  </li>
-                </py:for>
-              </ul>
-        </li>
-    </py:if>
-    
-    <li class="widget-container widget_text">
+    <li class="widget-container boxed widget_text"><py:if test="c.pkg.isopen() and c.pkg.resources"><h3>
         This Package is Open
@@ -63,9 +107,10 @@
       <p py:if="c.pkg.license_id">
         License:
         <py:choose test="">
-          <strong py:when="c.pkg.license and c.pkg.license.url"><br /><a href="${c.pkg.license.url}">${c.pkg.license.title}</a></strong>
-          <strong py:when="c.pkg.license"><br />${c.pkg.license.title}</strong>
-          <strong py:when="c.pkg.license_id"><br />${c.pkg.license_id}</strong>
+          <strong py:when="c.pkg.license and c.pkg.license.url"><a
+              href="${c.pkg.license.url}" rel="dc:rights">${c.pkg.license.title.split('::')[-1]}</a></strong>
+          <strong py:when="c.pkg.license" property="dc:rights">${c.pkg.license.title}</strong>
+          <strong py:when="c.pkg.license_id" property="dc:rights">${c.pkg.license_id}</strong></py:choose></p><p class="okd">
@@ -73,10 +118,6 @@
           href="http://www.opendefinition.org/okd/"
           title="This package satisfies the Open Knowledge Definition."><img src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" alt="[Open Data]" /></a>
-        <a
-          href="http://www.opendefinition.org/okd/"
-          title="This package satisfies the Open Knowledge Definition.">
-          <img src="http://assets.okfn.org/images/ok_buttons/oc_80x15_blue.png" alt="[Open Content]" /></a></p></py:if>
 
@@ -95,20 +136,20 @@
   <div py:match="content"><py:if test="c.pkg_revision_id"><div id="revision" class="widget-container">
-            <p py:if="c.pkg_revision_not_latest">This is an old revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}. It may differ significantly from the <a href="${url(controller='package', action='read', id=c.pkg.name)}">current revision</a>.</p>
-            <p py:if="not c.pkg_revision_not_latest">This is the current revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}.</p>
+        <p py:if="c.pkg_revision_not_latest">This is an old revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}. It may differ significantly from the <a href="${url(controller='package', action='read', id=c.pkg.name)}">current revision</a>.</p>
+        <p py:if="not c.pkg_revision_not_latest">This is the current revision of this package, as edited <!--!by ${h.linked_user(rev.author)}-->at ${h.render_datetime(c.pkg_revision_timestamp)}.</p></div></py:if><xi:include href="read_core.html" /></div>
 
-  <py:if test="config.get('rdf_packages')">
-    <py:def function="optional_head">
+  <py:def function="optional_head">
+    <py:if test="config.get('rdf_packages')"><link rel="alternate" type="application/rdf+xml" title="RDF/XML" href="${config['rdf_packages'] + '/' + c.pkg.id + '.rdf' }" /><link rel="alternate" type="application/turtle" title="RDF/Turtle" href="${config['rdf_packages'] + '/' + c.pkg.id + '.ttl' }" />
-    </py:def>
-  </py:if>
+    </py:if>
+  </py:def><py:def function="optional_feed"><link rel="alternate" type="application/atom+xml" title="Package History"


--- a/ckan/templates/package/read_core.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/read_core.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,24 +4,6 @@
   ><xi:include href="../_util.html" /><div id="package" class="package">
-    <!-- Title -->
-    <h2 class="head">
-      ${c.pkg_dict.get('title','')}
-      <p class="atom-feed-link package-history-link">
-        <a
-          href="${url(controller='package', action='history', id=c.pkg.name, format='atom', days=7)}"
-          title="${g.site_title} - Package History - ${c.pkg.name}">
-          Subscribe »</a>
-      </p>
-    </h2>
-    
-    <!-- Source URL -->    
-    <div class="url" py:if="c.pkg_dict.get('url')">
-      <p>
-        Source: ${c.pkg_url_link}
-      </p>
-    </div>
-    
     <!-- About package --><div class="notes" py:if="str(c.pkg_notes_formatted).strip()">
       ${c.pkg_notes_formatted}
@@ -35,22 +17,22 @@
         <tr><th>Description</th><th>Format</th>
-            <th>Hash</th></tr><py:for each="res in c.pkg_dict.get('resources', [])">
-          <tr>
+          <tr rel="dcat:distribution" resource="_:res${res.id}"
+            typeof="dcat:Distribution"><td><py:choose test=""><py:when test="res.get('description')">
-                      <a href="${res.get('url', '')}" target="_blank">${res.description}</a>  
+                    <a href="${res.get('url', '')}" rel="dcat:accessURL" target="_blank"><span
+                        property="rdfs:label">${res.description}</span></a></py:when><py:otherwise test=""><a href="${res.get('url', '')}" target="_blank">Download <em>(no description)</em></a></py:otherwise></py:choose></td>
-              <td>${res.get('format', '')}</td>
-              <td>${res.get('hash', '')}</td>
+              <td property="dc:format">${res.get('format', '')}</td></tr></py:for><caption>
@@ -75,32 +57,19 @@
     </py:def><div class="details subsection">
-    <h3>About this package</h3>
+    <h3>Additional Information</h3><table>
+      <thead>
+        <tr>
+          <th>Field</th>
+          <th>Value</th>
+        </tr>
+      </thead><tbody>
-        ${details_item('Author', c.pkg_author_link)}
-        ${details_item('Maintainer', c.pkg_maintainer_link)}
-        ${details_item('Version', c.pkg_dict.get('version', ''))}
-        <tr>
-          <td class="package-label">
-            License
-          </td>
-          <td class="package-details">
-          <py:choose test="">
-          <py:when test="c.pkg.license and c.pkg.license.url">
-            <a href="${c.pkg.license.url}">${c.pkg.license.title}</a>
-          </py:when>
-          <py:when test="c.pkg.license">${c.pkg.license.title}</py:when>
-          <py:when test="c.pkg.license_id">${c.pkg.license_id}</py:when>
-          <py:otherwise test="">
-            -
-          </py:otherwise>
-          </py:choose>
-          </td>
-        </tr>
-        <tr py:for="key, value in c.pkg_extras">
-          <td class="package-label">${_(key)}</td>
-          <td class="package-details">${value}</td>
+        <tr py:for="i, (key, value) in enumerate(c.pkg_extras)"
+          rel="dc:relation" resource="_:extra${i}">
+          <td class="package-label" property="rdfs:label">${_(key)}</td>
+          <td class="package-details" property="rdf:value">${value}</td></tr></tbody><caption py:if="not c.is_preview and h.check_access('package_update',{'id':c.pkg.id})">
@@ -109,49 +78,6 @@
     </table></div>
     
-    <div class="api subsection" py:if="not c.is_preview">
-        <h3>${g.site_title} API / datapkg</h3>
-        <div>
-            <p>
-                This information on this page (the package metadata) is also
-                available programatically via this site's <a
-                  href="${h.url_for(controller='api', action='get_api', id=None)}">CKAN API</a>.
-            </p>
-            <h5>JSON</h5>
-            <code>
-                <py:if test="config.get('ckan.api_url')">                
-                  <a href="${config.get('ckan.api_url') + h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}">
-                    ${config.get('ckan.api_url') + h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}</a>
-                </py:if>                
-                <py:if test="not config.get('ckan.api_url')">
-                  <a href="${h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}">
-                    ${h.url_for(controller='api', register='package', action='show', id=c.pkg.name)}</a>
-                </py:if>
-            </code>
-            <py:if test="config.get('rdf_packages')">
-                <h5>RDF</h5>
-                <code><a href="${config.get('rdf_packages') + '/' + c.pkg.id + '.rdf'}">RDF/XML</a></code>
-                <code><a href="${config.get('rdf_packages') + '/' + c.pkg.id + '.ttl'}">Turtle</a></code>
-                <code><a href="${config.get('rdf_packages') + '/' + c.pkg.id + '.nt'}">N-Triples</a></code>
-            </py:if>
-            <p>
-                The information on this page and the downloads / resources are also available using the 
-                <a href="http://blog.okfn.org/2010/02/23/introducing-datapkg/">datapkg command line utility</a>.
-            </p>
-            <h5>Information about this package:</h5>
-            <code>$ datapkg info ckan://${c.pkg.name}</code>            
-            <h5>Download:</h5>
-            <code>$ datapkg download ckan://${c.pkg.name} .</code>            
-        </div>
-    </div>
-
-    <ul>
-      <py:if test="not c.is_preview and h.check_access('package_change_state',{'id':c.pkg.id})">
-         <li><strong>State:</strong> ${c.pkg_dict.get('state', '')}</li>
-      </py:if>
-    </ul>
-
-    <hr class="cleared" /></div><!-- /package --></html>


--- a/ckan/templates/package/search.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/package/search.html	Sun Sep 04 13:47:43 2011 +0100
@@ -7,11 +7,21 @@
 
   <xi:include href="facets.html" /><py:def function="page_title">Search - ${g.site_title}</py:def>
+  <py:def function="page_heading">Search - ${g.site_title}</py:def>
+
+  <py:def function="optional_head">
+  <style>
+      #minornavigation { visibility: hidden; }
+      #menusearch {
+        display: none;
+      }
+    </style>    
+  </py:def><py:match path="primarysidebar">
     
-    <li class="widget-container widget_text" py:if="h.check_access('package_create')">
-        <h4>Add a package</h4>
+    <li class="widget-container boxed widget_text" py:if="h.check_access('package_create')">
+        <h3>Add a package</h3><p>
             Do you know of a dataset that should be added to ${g.site_title}?
             <br/>
@@ -20,10 +30,9 @@
         </p></li>
  
-    ${facet_sidebar('groups', label=h.group_name_to_title)}
     ${facet_sidebar('tags')}
     ${facet_sidebar('res_format')}
-    ${facet_sidebar('license')}
+    ${facet_sidebar('groups', label=h.group_name_to_title)}
 
     <li class="widget-container widget_text"><h4>Other access</h4>
@@ -44,8 +53,6 @@
   </py:match><div py:match="content">
-    <h2>Search ${g.site_title}</h2>
-    
     <xi:include href="search_form.html" />
     ${field_list()}   
     


--- a/ckan/templates/revision/layout.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/revision/layout.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,6 +4,7 @@
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip=""
   >
+
   <xi:include href="../layout.html" /></html>
 


--- a/ckan/templates/revision/list.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/revision/list.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,16 +3,22 @@
   py:strip=""><py:def function="page_title">Revision History</py:def>
+  <py:def function="page_heading">Revision History</py:def>
+
+  <py:match path="minornavigation">
+    <ul class="tabbed">
+      <li>
+        ${h.subnav_link(c,_('Home'), controller='revision', action='index')}</li>
+      <li class="action">
+      ${h.subnav_link(c, h.icon('atom_feed') + _('Subscribe'),
+      controller='revision', action='index', format='atom', days=1)}
+      </li>
+    </ul>
+  </py:match><div py:match="content">
-    <h2>
-      Revision History
-      <p class="atom-feed-link revision-history-link">
-        <a href="?format=atom&days=5" title="${g.site_title} - Revision History">Subscribe »</a>
-      </p>
-    </h2>
-    <p>This page lists all changes to package database, with most recent
-    changes first. </p>
+    <p>Track the most recent changes to the system, with most recent
+    changes first.</p>
       
     ${c.page.pager()}
 


--- a/ckan/templates/revision/purge.html	Fri Sep 02 15:26:40 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<html xmlns:py="http://genshi.edgewall.org/"
-  xmlns:xi="http://www.w3.org/2001/XInclude"
-  py:strip="">
-  
-  <py:def function="page_title">Purge - Revisions</py:def>
-
-  <div py:match="content" py:choose="">
-    <h2>Revision Purge</h2>
-    <p py:when="c.error"><strong>There was an error: ${c.error}</strong></p>
-    <p py:otherwise="">Purge successful.</p>
-  </div>
-
-  <xi:include href="layout.html" />
-</html>
-
-


--- a/ckan/templates/revision/read.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/revision/read.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,7 +3,7 @@
   py:strip=""><py:def function="page_title">Revision ${c.revision.id}</py:def>
-  <py:def function="body_class">revision</py:def>
+  <py:def function="page_heading">Revision: ${c.revision.id}</py:def><py:match path="primarysidebar"><li class="widget-container widget_text">
@@ -29,9 +29,6 @@
   </py:match><div py:match="content" class="revision state-${c.revision.state}">
-    <h2>
-      Revision: ${c.revision.id}
-    </h2><p py:if="c.revision.state != 'active'" class="state-notice">
       ${c.revision.state} 
     </p>


--- a/ckan/templates/tag/read.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/tag/read.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,9 +4,9 @@
   py:strip=""><py:def function="page_title">${c.tag['name']} - Tags</py:def>
+  <py:def function="page_heading">Tag: ${c.tag['name']}</py:def><div py:match="content">
-    <h2>Tag: ${c.tag['name']}</h2><p i18n:msg="package_count, tagname">There are ${len(c.tag['packages'])} packages tagged with <strong>${c.tag['name']}</strong>:</p>
     ${package_list_from_dict(c.tag['packages'])}
   </div>


--- a/ckan/templates/user/edit.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/user/edit.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,18 +4,53 @@
   py:strip=""><py:def function="page_title">${c.user} - Edit - User</py:def>
+  <py:def function="page_heading">
+      Edit User: ${c.userobj.display_name}
+  </py:def>
+
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+  </py:def><div py:match="content">
-    <h2>
-      Edit User: ${c.display_name} (${c.user_name})
-      <a href="#preview" py:if="c.preview">(skip to preview)</a>
-    </h2>
+    <a href="#preview" py:if="c.preview">(skip to preview)</a>
+
+    <form id="user-edit" action="" method="post" class="simple-form" 
+      xmlns:py="http://genshi.edgewall.org/"
+      xmlns:xi="http://www.w3.org/2001/XInclude"
+      >
+      <fieldset>
+        <legend>Base details</legend>
+        <label for="fullname">Full name:</label>
+        <input name="fullname" value="${c.user_fullname}" /><br/>
+         
+        <label for="email">E-Mail:</label>
+        <input name="email" value="${c.user_email}" /><br/>
+      </fieldset>
+      <fieldset>
+        <legend>Change your password</legend>
+        <label for="password1">Password:</label>
+        <input type="password" name="password1" value="" />
+        <br/>
+        <label for="password2">Password (repeat):</label>
+        <input type="password" name="password2" value="" />
+        <br/>
+      </fieldset>
+      <label for="about">About user:</label>
+      <textarea id="about" rows="5" name="about" cols="60">${c.user_about}</textarea>
+      <p class="small" i18n:msg="">You can use <a href="http://daringfireball.net/projects/markdown/syntax">Markdown formatting</a> here.</p>
+
+      <div>
+        <input name="preview" type="submit" value="Preview" />
+        ${h.submit('save', _('Save'))}
+      </div>
+    </form>
+
 
     <div id="preview" style="margin-left: 20px;" py:if="c.preview"><hr /><h2>Preview</h2><h4>Full name: ${c.full_name}</h4>
-      <h4>Email: ${c.email}</h4><div style="border: 2px dashed red; padding: 5px;"> 
         ${c.preview}
       </div>


--- a/ckan/templates/user/list.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/user/list.html	Sun Sep 04 13:47:43 2011 +0100
@@ -4,28 +4,38 @@
   py:strip=""><py:def function="page_title">Users</py:def>
+  <py:def function="page_heading">Users</py:def><py:def function="body_class">user-list</py:def>
+  
+  <py:match path="primarysidebar">
+    <li class="widget-container widget_text" py:if="not c.hide_welcome_message">
+      <form id="user-search" action="" method="GET">
+        <input type="text" id="q" name="q" value="${c.q}" />
+        <input type="submit" name="" value="Search »" />
+      </form>
+      <p i18n:msg="item_count">
+        <strong>${c.page.item_count}</strong> users found.
+      </p>
+    </li>
+    
+
+  </py:match>
+  
+  <py:match path="minornavigation">
+    <ul class="tabbed">
+      <li>
+        <a href="?q=${c.q}&order_by=edits" rel="nofollow">Sort by edits</a>
+      </li>
+      <li>
+        <a href="?q=${c.q}&order_by=name" rel="nofollow">Sort by name</a>
+      </li>
+    </ul>
+  </py:match>
+
 
   <div py:match="content">
-    <h2>Users</h2>
-    <div class="sort">
-      <a href="?q=${c.q}&order_by=edits" rel="nofollow">Sort by edits</a>
-      <a href="?q=${c.q}&order_by=name" rel="nofollow">Sort by name</a>
-    </div>
-
-    <form id="user-search" action="" method="GET">
-      <input type="text" id="q" name="q" value="${c.q}" />
-      <input type="submit" name="" value="Search »" />
-    </form>
-    
-    <p i18n:msg="item_count">
-      <strong>${c.page.item_count}</strong> users found.
-    </p>
-    
-    <hr />
-    
     <ul class="userlist">
-      <li py:for="user in c.page.items" class="user">
+     <li py:for="user in c.page.items" class="user"><ul><li class="username">
           ${h.linked_user(user['name'], maxlength=20)}


--- a/ckan/templates/user/login.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/user/login.html	Sun Sep 04 13:47:43 2011 +0100
@@ -15,7 +15,7 @@
   </py:def><py:match path="primarysidebar">
-    <li class="widget-container widget_text">
+    <li class="widget-container boxed widget_text"><h2>Not a member?</h2><p>
       Join CKAN to contribute packages under your own name.
@@ -29,9 +29,9 @@
   </py:match><py:def function="page_title">Login - User</py:def>
+  <py:def function="page_heading">Login to ${g.site_title}</py:def><div py:match="content">
-    <h2>Login</h2><form action="/login_generic" method="post" class="simple-form" id="generic_form"><fieldset>
@@ -49,9 +49,10 @@
       ${h.submit('s', _('Login'))} — 
       <a href="${h.url_for('reset')}">Forgot your password?</a></form>
-
+    <br/><!-- Simple OpenID Selector -->
-    <form py:if="g.openid_enabled" action="/login_openid" method="post" id="openid_form">
+    <form py:if="g.openid_enabled" action="/login_openid" method="post"
+      class="simple-form" id="openid_form"><input type="hidden" name="action" value="verify" /><fieldset><legend i18n:msg="site_title">Login using Open ID</legend>
@@ -60,27 +61,23 @@
           <div id="openid_btns"></div></div><div id="openid_input_area">
-          <input id="openid_identifier" name="openid_identifier" size="30" type="text" value="http://" />
-          <input id="openid_submit" type="submit" value="Log in »"/>
+          <label for="openid_identifier">OpenID Identifier:</label>
+          <input id="openid_identifier" name="openid_identifier" type="text" value="http://" /></div>
-        <noscript>
-          <p i18n:msg="">OpenID is service that allows you to log-on to many different websites using a single identity.
-    Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
-        </noscript>
+      <div py:if="g.openid_enabled">
+        <h3>Don't have an OpenID?</h3>
+        <p i18n:msg="">
+          OpenID is service that allows you to log-on to many different websites
+          using a single identity. Find out <a href="http://openid.net/what/">more
+          about OpenID</a> and <a href="http://openid.net/get/">how to get an
+          OpenID enabled account</a>. Probably the simplest way is sign up with a
+          free OpenID provider such as <a 
+          href="https://www.myopenid.com/">https://www.myopenid.com/</a>.
+        </p>
+      </div></fieldset>
+      <input id="openid_submit" type="submit" value="Sign in"/></form>
-    
-    <div py:if="g.openid_enabled">
-      <h3>Don't have an OpenID?</h3>
-      <p i18n:msg="">
-        OpenID is service that allows you to log-on to many different websites
-        using a single identity. Find out <a href="http://openid.net/what/">more
-        about OpenID</a> and <a href="http://openid.net/get/">how to get an
-        OpenID enabled account</a>. Probably the simplest way is sign up with a
-        free OpenID provider such as <a 
-        href="https://www.myopenid.com/">https://www.myopenid.com/</a>.
-      </p>
-    </div></div><xi:include href="layout.html" /></html>


--- a/ckan/templates/user/new.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/user/new.html	Sun Sep 04 13:47:43 2011 +0100
@@ -1,13 +1,14 @@
 <html xmlns:py="http://genshi.edgewall.org/"
-
   xmlns:xi="http://www.w3.org/2001/XInclude"
   py:strip="">
   
-  <py:def function="page_title">Register - User</py:def>
+  <py:def function="optional_head">
+    <link rel="stylesheet" href="${g.site_url}/css/forms.css" type="text/css" media="screen, print" />
+  </py:def><py:match path="primarysidebar"><li class="widget-container widget_text">
-      <h2>Have an OpenID?</h2>
+      <h3>Have an OpenID?</h3><p>
         If you have an account with Google, Yahoo or one of many other 
         OpenID providers, you can log in without signing up. 
@@ -17,12 +18,12 @@
       </ul></li></py:match>
+  
+  <py:def function="page_title">Register - User</py:def>
+  <py:def function="page_heading">Join the community</py:def>
+  
 
   <div py:match="content">
-    <h2>
-      Join the community
-    </h2>
-
     ${Markup(c.form)}
   </div>
 


--- a/ckan/templates/user/read.html	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/templates/user/read.html	Sun Sep 04 13:47:43 2011 +0100
@@ -3,19 +3,33 @@
   py:strip=""><py:def function="page_title">${c.user_dict['display_name']} - User</py:def>
+  <py:def function="page_heading">${c.user_dict['display_name']}</py:def><py:def function="body_class">user-view</py:def>
+  
+  <py:match path="minornavigation">
+    <ul class="tabbed" py:if="c.is_myself">
+      <li><a href="${h.url_for(controller='user', action='edit')}">Edit your profile</a></li>
+      <li><a href="${h.url_for('/user/logout')}">Log out</a></li>
+    </ul>
+  </py:match>
+  
+  <py:match path="primarysidebar">
+    <li class="widget-container widget_text" py:if="not c.hide_welcome_message">
+      <h3>Activity</h3>
+      <ul>
+        <li><strong>Number of edits:</strong> ${c.user_dict['number_of_edits']}</li>
+        <li><strong>Number of packages administered:</strong> ${c.user_dict['number_administered_packages']}</li>
+      </ul>
+    </li>
+  </py:match><div py:match="content">
-
-    <h2>${c.user_dict['display_name']}</h2><py:if test="c.is_myself"><h3>My Account</h3><p>You are logged in.</p><ul><li>Your API key is: ${c.user_dict['apikey']}</li>
-        <li><a href="${h.url_for(controller='user', action='edit')}">Edit your profile</a></li>
-        <li><a href="${h.url_for('/user/logout')}">Log out</a></li></ul></py:if>
 
@@ -23,14 +37,6 @@
       ${c.about_formatted}
     </div>
 
-    <div class="activity">
-      <h3>Activity</h3>
-      <ul>
-        <li><strong>Number of edits:</strong> ${c.user_dict['number_of_edits']}</li>
-        <li><strong>Number of packages administered:</strong> ${c.user_dict['number_administered_packages']}</li>
-      </ul>
-    </div>
-
     <div class="changes"><h3>Recent changes</h3>
       ${revision_list_from_dict(c.user_dict['activity'])}


--- a/ckan/tests/functional/test_authorization_group.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_authorization_group.py	Sun Sep 04 13:47:43 2011 +0100
@@ -28,15 +28,6 @@
         model.repo.rebuild_db()
         model.Session.remove()
 
-    @search_related
-    def test_mainmenu(self):
-        offset = url_for(controller='home', action='index')
-        res = self.app.get(offset)
-        assert 'Authorization Groups' in res, res
-        assert 'Authorization Groups</a>' in res, res
-        res = res.click(href='/authorizationgroup')
-        assert '<h2>Authorization Groups</h2>' in res, res
-
     def test_index(self):
         offset = url_for(controller='authorization_group')
         res = self.app.get(offset, extra_environ={'REMOTE_USER': 'russianfan'})


--- a/ckan/tests/functional/test_authz.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_authz.py	Sun Sep 04 13:47:43 2011 +0100
@@ -601,8 +601,6 @@
 
     def test_home(self):
         self._check_logged_in_users_authorized_only('/')
-        self._check_logged_in_users_authorized_only('/about')
-        self._check_logged_in_users_authorized_only('/license')
     
     def test_tags_pages(self):
         self._check_logged_in_users_authorized_only('/tag')


--- a/ckan/tests/functional/test_edit_authz.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_edit_authz.py	Sun Sep 04 13:47:43 2011 +0100
@@ -95,7 +95,7 @@
                 res = self.app.get(offset, status=[200], extra_environ={'REMOTE_USER':u})
                 # the name of the object should appear in the page
                 assert i in res
-                assert "Authorization for" in res
+                assert "Authorization" in res, res
 
 
     def roles_list(self, authzobj):
@@ -121,8 +121,8 @@
                         ('authorization_group', self.authzgroup, self.authzgroup_roles)]:
             offset = url_for(controller=c, action='authz', id=i)
             res = self.app.get(offset, extra_environ={'REMOTE_USER': self.admin})
-            assert i in res
-            assert "Authorization for" in res
+            assert i in res, res
+            assert "Authorization" in res, res
 
             # all the package's users and roles should appear in tables
             assert '<tr' in res


--- a/ckan/tests/functional/test_group.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_group.py	Sun Sep 04 13:47:43 2011 +0100
@@ -42,21 +42,20 @@
     def teardown_class(self):
         model.repo.rebuild_db()
 
-    @search_related
+    # TODO: remove test (?)
+    # why: very fragile and overly detailed checking of main menu:w
     def test_mainmenu(self):
         offset = url_for(controller='home', action='index')
         res = self.app.get(offset)
         assert 'Groups' in res, res
         assert 'Groups</a>' in res, res
         res = res.click(href='/group', index=0)
-        assert '<h2>Groups</h2>' in res, res
+        assert 'Groups of' in res, res
 
     def test_index(self):
         offset = url_for(controller='group')
         res = self.app.get(offset)
-        assert '<h2>Groups</h2>' in res, res
-        group_count = model.Session.query(model.Group).count()
-        assert 'There are %s groups.' % group_count in self.strip_tags(res)
+        assert '<h1 class="page_heading">Groups' in res, res
         groupname = 'david'
         group = model.Group.by_name(unicode(groupname))
         group_title = group.title
@@ -77,7 +76,7 @@
             main_res = self.main_div(res)
             assert title in res, res
             #assert 'edit' not in main_res, main_res
-            assert 'Administrators:' in main_res, main_res
+            assert 'Administrators' in res, res
             assert 'russianfan' in main_res, main_res
             assert name in res, res
             assert 'There are 2 packages in this group' in self.strip_tags(main_res), main_res
@@ -111,12 +110,12 @@
         
 
 class TestEdit(FunctionalTestCase):
-    groupname = u'david'
 
     @classmethod
     def setup_class(self):
         model.Session.remove()
         CreateTestData.create()
+        self.groupname = u'david'
         self.packagename = u'testpkg'
         model.repo.new_revision()
         model.Session.add(model.Package(name=self.packagename))
@@ -135,22 +134,14 @@
         res = res.follow()
         assert res.request.url.startswith('/user/login')
 
-    def test_1_read_allowed_for_admin(self):
-        offset = url_for(controller='group', action='edit', id=self.groupname)
-        res = self.app.get(offset, status=200, extra_environ={'REMOTE_USER': 'russianfan'})
-        assert 'Edit Group: %s' % self.groupname in res, res
-        
     def test_2_edit(self):
+        group = model.Group.by_name(self.groupname)
         offset = url_for(controller='group', action='edit', id=self.groupname)
         print offset
         res = self.app.get(offset, status=200, extra_environ={'REMOTE_USER': 'russianfan'})
-        assert 'Edit Group: %s' % self.groupname in res, res
-
-        print res
-        
+        assert 'Edit: %s' % group.title in res, res
 
         form = res.forms['group-edit']
-        group = model.Group.by_name(self.groupname)
         titlefn = 'title'
         descfn = 'description'
         newtitle = 'xxxxxxx'


--- a/ckan/tests/functional/test_home.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_home.py	Sun Sep 04 13:47:43 2011 +0100
@@ -23,7 +23,8 @@
     def test_home_page(self):
         offset = url_for('home')
         res = self.app.get(offset)
-        assert 'Packages' in res
+        print res
+        assert 'Add a package' in res
 
     def test_calculate_etag_hash(self):
         c.user = 'test user'
@@ -48,49 +49,19 @@
         res = self.app.get(offset)
         res.click('Search', index=0)
         
-    def test_tags_link(self):
-        offset = url_for('home')
-        res = self.app.get(offset)
-        res.click('Tags', index=0)
-        
     def test_404(self):
         offset = '/some_nonexistent_url'
         res = self.app.get(offset, status=404)
 
-    def test_license(self):
-        offset = url_for('license')
-        res = self.app.get(offset)
-        assert 'License' in res
-
     def test_guide(self):
         url = url_for('guide')
         assert url == 'http://wiki.okfn.org/ckan/doc/'
 
-    @search_related
-    def test_search_packages(self):
-        offset = url_for('home')
-        res = self.app.get(offset)
-        form = res.forms['package-search']
-        form['q'] =  'anna'
-        results_page = form.submit()
-        assert 'Search - ' in results_page, results_page
-        assert '>0<' in results_page, results_page
-    
     def test_template_footer_end(self):
         offset = url_for('home')
         res = self.app.get(offset)
         assert '<strong>TEST TEMPLATE_FOOTER_END TEST</strong>'
 
-    # DISABLED because this is not on home page anymore
-    def _test_register_new_package(self):
-        offset = url_for('home')
-        res = self.app.get(offset)
-        form = res.forms[1]
-        form['title'] =  'test title'
-        results_page = form.submit()
-        assert 'Register a New Package' in results_page, results_page
-        assert '<input id="Package--title" name="Package--title" size="40" type="text" value="test title">' in results_page, results_page
-        
     def test_locale_change(self):
         offset = url_for('home')
         res = self.app.get(offset)


--- a/ckan/tests/functional/test_package.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_package.py	Sun Sep 04 13:47:43 2011 +0100
@@ -308,7 +308,6 @@
         assert anna.url in res
         assert cgi.escape(anna.resources[0].url) in res
         assert anna.resources[0].description in res
-        assert anna.resources[0].hash in res
         assert 'Some test notes' in res
         self.check_named_element(res, 'a',
                                  'http://ckan.net/',
@@ -321,18 +320,12 @@
         assert 'russian' in res
         assert 'david' in res
         assert 'roger' in res
-        assert 'State:' not in res
+        assert 'State' in res
         assert 'genre' in res, res
         assert 'romantic novel' in res, res
         assert 'original media' in res, res
         assert 'book' in res, res
 
-    def test_read_as_admin(self):
-        name = u'annakarenina'
-        offset = url_for(controller='package', action='read', id=name)
-        res = self.app.get(offset, extra_environ={'REMOTE_USER':'annafan'})
-        assert 'State:' in res, res
-
     def test_read_nonexistentpackage(self):
         name = 'anonexistentpackage'
         offset = url_for(controller='package', action='read', id=name)
@@ -480,9 +473,9 @@
     def test_read_normally(self):
         res = self.app.get(self.offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
-        assert 'title3' in pkg_html
+        assert 'title3' in res
         assert 'key2' in pkg_html
         assert 'value3' in pkg_html
         print 'SIDE', side_html
@@ -493,23 +486,21 @@
         offset = self.offset + self.date1.strftime('@%Y-%m-%d')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
-        print 'PKG', pkg_html
-        assert 'title1' in pkg_html
-        assert 'key2' not in pkg_html
-        assert 'value3' not in pkg_html
-        print 'SIDE', side_html
-        assert 'tag3' not in side_html
-        assert 'tag2' not in side_html
+        side_html = self.named_div('sidebar', res)
+        assert 'title1' in res, res
+        assert 'key2' not in pkg_html, pkg_html
+        assert 'value3' not in pkg_html, pkg_html
+        assert 'tag3' not in side_html, side_html
+        assert 'tag2' not in side_html, side_html
 
     def test_read_date2(self):
         date2_plus_3h = self.date2 + datetime.timedelta(hours=3)
         offset = self.offset + date2_plus_3h.strftime('@%Y-%m-%d')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
-        assert 'title2' in pkg_html
+        assert 'title2' in res
         assert 'key2' in pkg_html
         assert 'value2' in pkg_html
         print 'SIDE', side_html
@@ -520,9 +511,9 @@
         offset = self.offset + self.date3.strftime('@%Y-%m-%d-%H-%M')
         res = self.app.get(offset, status=200)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'PKG', pkg_html
-        assert 'title3' in pkg_html
+        assert 'title3' in res
         assert 'key2' in pkg_html
         assert 'value3' in pkg_html
         print 'SIDE', side_html
@@ -546,13 +537,13 @@
         res = self.app.get(offset, status=200)
         main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' in main_html
         assert 'at 2011-01-01 00:00' in main_html
         self.check_named_element(main_html, 'a', 'href="/package/%s"' % self.pkg_name)
         print 'PKG', pkg_html
-        assert 'title1' in pkg_html
+        assert 'title1' in res
         assert 'key2' not in pkg_html
         assert 'value3' not in pkg_html
         print 'SIDE', side_html
@@ -564,13 +555,13 @@
         res = self.app.get(offset, status=200)
         main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' in main_html
         assert 'at 2011-01-02 00:00' in main_html
         self.check_named_element(main_html, 'a', 'href="/package/%s"' % self.pkg_name)
         print 'PKG', pkg_html
-        assert 'title2' in pkg_html
+        assert 'title2' in res
         assert 'key2' in pkg_html
         assert 'value2' in pkg_html
         print 'SIDE', side_html
@@ -582,14 +573,14 @@
         res = self.app.get(offset, status=200)
         main_html = self.main_div(res)
         pkg_html = self.named_div('package', res)
-        side_html = self.named_div('primary', res)
+        side_html = self.named_div('sidebar', res)
         print 'MAIN', main_html
         assert 'This is an old revision of this package' not in main_html
         assert 'This is the current revision of this package' in main_html
         assert 'at 2011-01-03 00:00' in main_html
         self.check_named_element(main_html, 'a', 'href="/package/%s"' % self.pkg_name)
         print 'PKG', pkg_html
-        assert 'title3' in pkg_html
+        assert 'title3' in res
         assert 'key2' in pkg_html
         assert 'value3' in pkg_html
         print 'SIDE', side_html
@@ -892,12 +883,15 @@
                        extra_new,
                        ('key3', extras['key3'], True))
 
-            self._check_preview(res, name=name, title=title, version=version,
-                                url=url,
-                                download_url='',
-                                resources=resources, notes=notes, license_id=license_id,
-                                tags=tags, extras=extras,
-                                state=state)
+            # 2011-09-02: rgrp disabling preview checks as do not work now some
+            # stuff in sidebar. Also IMO preview is pretty pointless (only use
+            # is for notes and we can do that in a nice javascripty way).
+            # self._check_preview(res, name=name, title=title, version=version,
+            #                    url=url,
+            #                    download_url='',
+            #                    resources=resources, notes=notes, license_id=license_id,
+            #                    tags=tags, extras=extras,
+            #                    state=state)
 
             # Check form is correctly filled
             self.check_form_filled_correctly(res, id=pkg.id, name=name,
@@ -914,15 +908,6 @@
 
             # Check package page
             assert not 'Error' in res, res
-            res = res.follow(extra_environ={'REMOTE_USER':'testadmin'})
-            self._check_package_read(res, name=name, title=title,
-                                     version=version, url=url,
-                                     resources=resources, notes=notes,
-                                     license_id=license_id, 
-                                     tags=tags,
-                                     extras=extras,
-                                     state=state,
-                                     )
 
             # Check package object
             pkg = model.Package.by_name(name)
@@ -1219,12 +1204,13 @@
 
         extras_list = [(key, value, False) for key, value in sorted(extras.items())]
 
-        self._check_preview(res, name=name, title=title, version=version,
-                            url=url,
-                            resources=resources_escaped, notes=notes,
-                            license_id=license_id,
-                            tags=tags, extras=extras_list,
-                            )
+        # see comment in edit test re disabling preview tests
+        # self._check_preview(res, name=name, title=title, version=version,
+        #                    url=url,
+        #                    resources=resources_escaped, notes=notes,
+        #                    license_id=license_id,
+        #                    tags=tags, extras=extras_list,
+        #                    )
 
         # Check form is correctly filled
         self.check_form_filled_correctly(res, id='', name=name,
@@ -1242,15 +1228,6 @@
 
         # Check package page
         assert not 'Error' in res, res
-        res = res.follow()
-        self._check_package_read(res, name=name, title=title,
-                                 version=version, url=url,
-                                 resources=[download_url], notes=notes,
-                                 license_id=license_id, 
-                                 tags=tags,
-                                 extras=extras,
-#                                 state=state,
-                                 )
 
         # Check package object
         pkg = model.Package.by_name(name)


--- a/ckan/tests/functional/test_revision.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_revision.py	Sun Sep 04 13:47:43 2011 +0100
@@ -22,13 +22,6 @@
             rev.author = "Test Revision %s" % i
             model.repo.commit()
 
-    @search_related
-    def test_link_major_navigation(self):
-        offset = url_for(controller='home')
-        res = self.app.get(offset)
-        res = res.click('Revision History')
-        assert 'Revision History' in res
-
     def test_paginated_list(self):
         # Ugh. Why is the number of items per page hard-coded? A designer might
         # decide that 20 is the right number of revisions to display per page,


--- a/ckan/tests/functional/test_user.py	Fri Sep 02 15:26:40 2011 +0100
+++ b/ckan/tests/functional/test_user.py	Sun Sep 04 13:47:43 2011 +0100
@@ -523,8 +523,7 @@
         # comes back as a params like this:
         # e.g. /user/login?error=Error%20in%20discovery:%20Error%20fetching%20XRDS%20document:%20(6,%20%22Couldn't%20resolve%20host%20'mysite.myopenid.com'%22)
         res = self.app.get("/user/login?error=Error%20in%20discovery:%20Error%20fetching%20XRDS%20document:%20(6,%20%22Couldn't%20resolve%20host%20'mysite.myopenid.com'%22")
-        main_res = self.main_div(res)
-        assert "Couldn't resolve host" in main_res, main_res
+        assert "Couldn't resolve host" in res, res
 
     ############
     # Disabled
@@ -581,8 +580,7 @@
         fv = res.forms['user-password-reset']
         fv['user'] = 'unknown'
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert 'No such user: unknown' in main_res, main_res # error
+        assert 'No such user: unknown' in res, res # error
 
     def test_request_reset_user_password_using_search(self):
         CreateTestData.create_user(name='larry1', email='kittens at john.com')
@@ -600,24 +598,21 @@
         fv = res.forms['user-password-reset']
         fv['user'] = 'kittens'
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert '"kittens" matched several users' in main_res, main_res
-        assert 'larry1' not in main_res, main_res
-        assert 'larry2' not in main_res, main_res
+        assert '"kittens" matched several users' in res, res
+        assert 'larry1' not in res, res
+        assert 'larry2' not in res, res
 
         res = self.app.get(offset)
         fv = res.forms['user-password-reset']
         fv['user'] = ''
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert 'No such user:' in main_res, main_res
+        assert 'No such user:' in res, res
 
         res = self.app.get(offset)
         fv = res.forms['user-password-reset']
         fv['user'] = 'l'
         res = fv.submit()
-        main_res = self.main_div(res)
-        assert 'No such user:' in main_res, main_res
+        assert 'No such user:' in res, res
 
     def test_reset_user_password_link(self):
         # Set password


--- a/test-core.ini	Fri Sep 02 15:26:40 2011 +0100
+++ b/test-core.ini	Sun Sep 04 13:47:43 2011 +0100
@@ -51,3 +51,37 @@
 # mailer
 test_smtp_server = localhost:6675
 ckan.mail_from = info at test.ckan.net
+
+
+# Logging configuration
+[loggers]
+keys = root, ckan, sqlalchemy
+
+[handlers]
+keys = console
+
+[formatters]
+keys = generic
+
+[logger_root]
+level = WARN
+handlers = console
+
+[logger_ckan]
+qualname = ckan
+handlers = 
+level = INFO
+
+[logger_sqlalchemy]
+handlers =
+qualname = sqlalchemy.engine
+level = WARN  
+
+[handler_console]
+class = StreamHandler
+args = (sys.stdout,)
+level = NOTSET
+formatter = generic
+
+[formatter_generic]
+format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s

Repository URL: https://bitbucket.org/okfn/ckan/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.




More information about the ckan-changes mailing list