[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