harvest-dev team mailing list archive
-
harvest-dev team
-
Mailing list archive
-
Message #00568
[Merge] lp:~dylanmccall/harvest/bug-722947 into lp:harvest
Dylan McCall has proposed merging lp:~dylanmccall/harvest/bug-722947 into lp:harvest.
Requested reviews:
harvest-dev (harvest-dev)
Related bugs:
Bug #722947 in harvest: "Javascript does not work in Opera"
https://bugs.launchpad.net/harvest/+bug/722947
For more details, see:
https://code.launchpad.net/~dylanmccall/harvest/bug-722947/+merge/59873
This fixes a slightly simpler problem: harvest.js now acts on error messages while doing XHR stuff, fixing bug #722947. This branch depends on the branding change because there was a nearby change in base.html and I didn't want to subject anyone to the merge conflict. If that isn't merged, we can change this fairly quickly.
Since this adds a string people might read, I moved it and another string from harvest.js to base.html so they can be localized neatly with everything else.
Since the server code is invincible (:b), the quickest way to make it fail for testing this is to edit harvest/opportunities/filters.py and add under process_queryset (line 9) something like this:
raise Exception("Disaster!", "Panic!")
This way you'll get a server error when you enable the package name filter. It should look something like this:
http://people.ubuntu.com/~dylanmccall/harvest/bugs/lp722947/Fix-HarvestJsError.png
--
https://code.launchpad.net/~dylanmccall/harvest/bug-722947/+merge/59873
Your team harvest-dev is requested to review the proposed merge of lp:~dylanmccall/harvest/bug-722947 into lp:harvest.
=== added file 'harvest/media/css/background-dotted.png'
Binary files harvest/media/css/background-dotted.png 1970-01-01 00:00:00 +0000 and harvest/media/css/background-dotted.png 2011-05-04 05:31:29 +0000 differ
=== renamed file 'harvest/media/css/style.css' => 'harvest/media/css/base.css'
--- harvest/media/css/style.css 2011-05-02 00:20:31 +0000
+++ harvest/media/css/base.css 2011-05-04 05:31:29 +0000
@@ -1,10 +1,12 @@
body {
- background-color:rgb(255,255,255);
- color:rgb(51,51,51);
-
- font-family:'Ubuntu', 'UbuntuBeta', 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;
- font-size:14px;
- line-height:1.2em;
+ background-color:#FFFFFF;
+ background-image:url('background-dotted.png');
+ font-family:'Ubuntu', 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;
+ font-size:13px;
+ line-height:1.5em;
+ color:#333333;
+ padding:0px 30px;
+ min-width:600px; /* this is mainly for #results, but applied across the site for consistency */
}
.bottom {
@@ -12,12 +14,16 @@
clear:both;
}
+p {
+ margin-bottom:8px;
+}
+
strong, b {
- color:rgb(0,0,0);
+ color:#000000;
font-weight:bold;
}
small, .small {
- color:rgb(80,80,80);
+ color:#505050;
font-size:smaller;
}
em, i {
@@ -26,97 +32,144 @@
/* outline selected item for keyboard navigation */
*:focus {
- outline:rgb(244,116,33) dashed 1px;
+ outline:#dd4814 dashed 1px;
}
a:active {
outline:none;
}
a {
- color:rgb(110,64,84);
- text-decoration:inherit;
+ color:#DD4814;
}
a:hover,
a:focus {
- /*color:rgb(162,129,143);*/
text-decoration:underline;
}
input.placeheld {
/* only used in browsers that don't already do placeholder text */
- color:rgb(180,180,180);
+ color:#B4B4B4;
}
form label {
}
form .error input, form .error textarea, form .error input#new_note {
- border:solid 2px rgb(140,0,0);
+ border:solid 2px #8C0000;
}
form ul.errorlist {
font-size:smaller;
- color:rgb(140,0,0);
+ color:#8C0000;
}
-#container {
+#wrapper {
display:block;
- position:absolute;
- width:100%;
- min-width:600px;
- min-height:100%;
+ position:relative;
+ background-color:#F7F6F5;
+ z-index:2;
+
+ -moz-box-shadow:0px 0px 2px #BBB;
+ -webkit-box-shadow:0px 0px 2px #BBB;
+ box-shadow:0px 0px 2px #BBB;
+ -moz-border-radius:0px 0px 4px 4px;
+ border-radius:0px 0px 4px 4px;
}
#header {
display:block;
- width:100%;
- min-height:80px;
- padding-top:12px;
-}
-
-#header #sitetitle {
- display:inline;
- position:static;
- margin-left:40px;
- margin-right:40px;
- margin-bottom:10px;
-
- text-transform:lowercase;
- text-decoration:none;
- color:rgb(0,0,0);
- font-family:'Molengo', 'Ubuntu', 'UbuntuBeta', 'DejaVu Sans', 'Bitstream Vera Sans', sans-serif;
-}
-#header #sitetitle #sitelogo {
- width:auto; /* line up with #sitename font-size */
+}
+
+#extheader {
+ display:block;
+ background-color:#FFFFFF;
+}
+#extheader > ul {
+ margin:0px;
+ padding:0px;
+ height:20px;
+ list-style-type:none;
+ text-align:right;
+}
+#extheader > ul > li {
+ display:inline;
+ padding:3px 0px;
+ margin-right:14px;
+ font-size:10px;
+ line-height:14px;
+}
+#extheader a {
+ color:#333333;
+ text-decoration:none;
+}
+#extheader a:hover,
+#extheader a:focus {
+ text-decoration:underline;
+}
+
+#mainheader {
+ height:72px;
+
+ background-color:#D05630;
+ background-image:url('orangeheader-stripes.png');
+ background-repeat:repeat-x;
+ background-position:top left;
+ -moz-border-radius:0px 0px 4px 4px;
+ border-radius:0px 0px 4px 4px;
+ color:#FFFFFF;
+
+ padding:0px 20px;
+}
+
+#mainheader #sitetitle {
+ display:block;
+ float:left;
+ margin-top:24px;
+
+ text-transform:lowercase;
+ text-decoration:none;
+ color:#FFFFFF;
+}
+#mainheader #sitetitle #sitename {
+ display:inline;
+ font-size:36px;
+}
+#mainheader #sitetitle #releasename {
+ display:inline;
+ font-size:12px;
+ vertical-align:sub;
+}
+
+#mainheader #userdata {
+ display:block;
+ float:right;
+ margin-top:24px;
+
+ text-align:right;
+ font-size:16px;
+ line-height:24px;
+}
+#header #userdata .username {
+ font-style:italic;
+}
+#header #userdata .useraction {
+}
+.useraction a {
+ color:inherit;
+ text-transform:lowercase;
+}
+.useraction > ul {
+ display:inline;
+ margin:0px;
+ padding:0px;
height:36px;
-}
-#header #sitetitle #sitename {
- display:inline;
- position:static;
-
- font-size:36px;
-}
-#header #sitetitle #releasename {
- display:inline;
- position:static;
-
- font-size:12px;
- vertical-align:sub;
-}
-
-#header #userdata {
- float:right;
- margin-top:12px;
- margin-left:40px;
- margin-right:40px;
-
- text-align:right;
-}
-#header #userdata .username {
-}
-#header #userdata .loginbutton {
+ list-style-type:none;
+}
+.useraction > ul > li {
+ display:inline;
+ margin-left:6px;
}
#header > #messages {
@@ -124,537 +177,101 @@
margin:10px 0px;
padding:5px 10px;
font-size:18px;
- background-color:rgb(242,151,93);
- color:rgb(255,255,255);
+ background-color:#F2975D;
+ color:#FFFFFF;
}
-#content {
+#container {
clear:both;
- padding:0px 20px 140px 20px;
- padding-bottom:140px;
-}
-
-.sectiontitle {
- max-width:30em;
- letter-spacing:-0.1em;
+ padding:32px 16px 64px 16px;
+}
+
+h1 {
+ font-size:36px;
+ line-height:40px;
+ color:#333333;
+}
+#content > h1 {
+ /* header at top of page */
+ margin-bottom:32px;
+ padding:0px 8px;
+}
+
+h1 .subsection {
+ color:#AEA79F;
+}
+
+h2 {
font-size:24px;
- margin-bottom:12px;
- color:rgb(80,80,80);
-}
-
-#content > .one_column {
- max-width:60em;
-}
-
-
-
-
-#content_welcome > #start {
- display:table-cell;
- padding-right:60px;
- padding-bottom:60px;
- width:400px;
- min-width:300px;
-}
-
-#content_welcome #introduction {
+ line-height:28px;
+ margin-bottom:32px;
+ padding:0px 8px;
+ color:#333333;
+}
+
+h3 {
font-size:16px;
- line-height:1.2em;
+ line-height:20px;
+ font-weight:normal;
+ color:#333333;
+ margin-top:16px;
+ margin-bottom:8px;
}
-#content_welcome #start_links {
- margin:20px 0px 10px 0px;
-}
-#content_welcome #start_links a {
- display:inline-block;
- padding:8px 10px;
- background-color:rgb(221,72,20);
- border:rgb(229,116,77) solid 2px;
+#content .main {
+ display:block;
+ padding:8px 16px;
+ background-color:#FFFFFF;
+ -moz-box-shadow:0px 1px 2px #CCC;
+ -webkit-box-shadow:0px 1px 2px #CCC;
+ box-shadow:0px 1px 2px #CCC;
-moz-border-radius:4px;
- border-radius:4px; /* round border on bottom as well */
-
- font-size:20px;
- color:rgb(255,255,255);
-}
-#content_welcome #start_links a:hover,
-#content_welcome #start_links a:focus {
- background-color:rgb(184,58,15);
- border-color:rgb(173,83,52);
-}
-
-#content_welcome #statistics {
- font-size:10px;
- color:rgb(180,180,180);
-}
-#content_welcome #statistics * {
- font-style:italic;
-}
-
-#content_welcome #faq {
- display:table-cell;
- width:430px;
- min-width:430px;
- color:rgb(80,80,80);
-}
-
-#faq > div {
- display:table-cell;
- width:200px;
- padding-right:15px;
-}
-
-#faq li {
- margin-bottom:2em;
-}
-#faq .question {
- font-weight:bold;
- font-style:italic;
-}
-
-
-
-#filters {
- display:block;
- position:relative;
- float:left;
- min-width:160px;
-
- padding-right:20px;
- font-size:12px;
- line-height:1.4em;
- color:rgb(51,51,51);
-}
-#filters ul {
- display:block;
- margin-left:20px;
- width:100%;
-}
-#filters ul li {
- display:block;
- width:100%;
-}
-
-
-#filters a.item-toggle {
- display:inline-block;
- height:100%;
-
- color:inherit;
- text-decoration:inherit;
- font-style:inherit;
-}
-
-#filters .checkbox {
- /* checkbox element should always be the same size */
- display:inline-block;
- width:12px;
- color:inherit;
-}
-
-#filters .setfilter > .filter-value > ul > li:not([data-selected]) > .filter > .filter-value {
- /* parent filter is turned off */
- color:rgb(140,140,140);
-}
-
-#filters .setfilter > .filter-value > ul > li.prelight-off > .checkbox {
- /* prelight for an item about to be deselected */
- color:rgb(140,140,140);
- text-decoration:line-through;
-}
-#filters .setfilter > .filter-value > ul > li.prelight-on > .checkbox {
- /* prelight for an item about to be selected */
- color:inherit;
-}
-
-#filters .setfilter > .filter-value > ul > li.prelight-off > .filter > .filter-value {
- /* parent filter is about to be turned off */
- color:rgb(140,140,140);
-}
-#filters .setfilter > .filter-value > ul > li.prelight-on > .filter > .filter-value {
- /* parent filter is about to be turned on */
- color:inherit;
-}
-
-
-
-#filters > .filtergroup {
- /* a top-level filter group */
- display:block;
- margin-bottom:4em;
-}
-#filters > .filtergroup > .filter-label {
- /* titles for groups of filters ("Packages" and "Opportunities") */
- display:block;
- margin-bottom:8px;
- letter-spacing:-0.1em;
- color:rgb(80,80,80);
- font-size:16px;
-}
-#filters > .filtergroup > .filter-value > ul {
- margin-left:0px;
-}
-#filters > .filtergroup > .filter-value > ul > li {
- margin-bottom:5px;
-}
-
-#filters > .filtergroup > .filter-value > ul > li a.help {
- vertical-align:top;
- margin-left:1em;
- font-weight:bold;
-}
-
-#filters .editfilter input {
- width:8em;
- border:none;
- border-bottom:1px solid rgb(180,180,180);
-
- padding:0px 2px 0px 2px;
- background-color:inherit;
- color:inherit;
- font:inherit;
-}
-#filters .editfilter input.placeheld {
- color:rgb(180,180,180);
-}
-
-
-
-#results-pane {
- display:block;
- min-width:250px;
- max-width:1000px;
- overflow:auto;
-}
-
-#results-pane > #results-status {
- position:relative;
- display:none;
- z-index:10;
- text-align:center;
- background-image:url('results-status-shadow.png');
- background-repeat:repeat-x;
-}
-#results-pane > #results-status > div {
- min-height:30px; /* lines up height of #results-status background-image */
-}
-
-#results > .results-message {
- margin:2em auto;
- padding-left:20px;
- max-width:30em;
-
- text-align:justify;
- font-size:24px;
- line-height:1.5em;
- color:rgb(180,180,180);
-}
-
-#results > ul {
- margin-left:20px;
- margin-bottom:10px;
-}
-
-.sourcepackage {
- display:block;
- font-size:14px;
- line-height:21px;
-}
-li.sourcepackage {
- margin-top:5px;
- margin-bottom:10px;
- border:1px solid rgb(200,200,200);
- -moz-border-radius:3px;
- border-radius:3px; /* round border on bottom as well */
-}
-.sourcepackage > .sourcepackage-header {
- display:block;
- padding:8px 20px 8px 20px;
-}
-li.sourcepackage > .sourcepackage-header {
- -moz-border-radius:3px 3px 0px 0px;
- border-radius:3px 3px 0px 0px; /* lines up with li.sourcepackage's border */
-}
-a.sourcepackage-header {
- color:inherit;
- text-decoration:none;
-}
-.sourcepackage-header > .sourcepackage-name {
- display:inline;
- margin-right:10px;
- color:rgb(0,0,0);
- font-size:16px;
-}
-.sourcepackage-header > .status {
- display:none; /* harvest.js will override this where necessary */
-}
-.sourcepackage-header > .status img {
- width:16px;
- height:16px;
-}
-.sourcepackage-header > .sourcepackage-summary {
- display:inline;
- float:right;
- text-align:right;
- font-size:10px;
-}
-/* prelights */
-a.sourcepackage-header:hover,
-a.sourcepackage-header:focus {
- background-color:rgb(240,255,243);
-}
-a.sourcepackage-header:hover .sourcepackage-name,
-a.sourcepackage-header:focus .sourcepackage-name {
- text-decoration:underline;
-}
-
-.sourcepackage-details {
- display:block;
- /* inner padding should be left:20px, right:20px and bottom:5px */
-}
-
-/* collapsed state. (expanded is the default) */
-li.sourcepackage.collapsed {
- margin-bottom:5px;
- border-color:rgb(250,250,250);
- -moz-border-radius:3px 3px 0px 0px;
- border-radius:3px 3px 0px 0px;
-}
-.sourcepackage.collapsed > .sourcepackage-details {
- display:none;
-}
-
-.sourcepackage-details > .extra {
- margin-top:20px;
- padding:2px 20px 2px 20px;
- color:rgb(80,80,80);
- font-size:12px;
- border-top:1px solid rgb(250,250,250);
- /*background-color:rgb(200,200,200);*/
-}
-.sourcepackage-details > .extra > .actions {
- float:right;
- text-align:right;
- text-transform:lowercase;
-}
-.sourcepackage-details > .extra > .actions > a {
- margin:0px 0.25em;
-}
-
-
-li.sourcepackage > .sourcepackage-details > .opportunity-list {
- padding-left:20px;
- margin-bottom:5px;
-}
-
-.opportunity-list > .opportunity-list-title {
- display:block;
- color:rgb(80,80,80);
- font-size:12px;
- letter-spacing:-0.1em;
-}
-.opportunity-list > .opportunity-list-title > .opportunity-list-summary {
- margin-left:5px;
-}
-
-.opportunity-list > ul {
- margin-bottom:10px;
- padding-left:20px;
- list-style-image:url('opportunity-normal.png');
-}
-li.opportunity {
- padding:2px 20px 8px 5px;
-}
-li.opportunity:hover {
- background-color:rgb(250,250,250);
-}
-li.opportunity[data-opportunity-experience='1'] {
- list-style-image:url('opportunity-experience-1.png');
-}
-li.opportunity[data-opportunity-experience='2'] {
- list-style-image:url('opportunity-experience-2.png');
-}
-li.opportunity[data-opportunity-experience='3'] {
- list-style-image:url('opportunity-experience-3.png');
-}
-
-.opportunity > .opportunity-header {
- display:block;
- line-height:1em;
-}
-.opportunity[data-opportunity-irrelevant] > .opportunity-header > .opportunity-description,
-.opportunity[data-opportunity-applied] > .opportunity-header > .opportunity-description {
- text-decoration:line-through;
-}
-.opportunity-header > a.opportunity-description {
- color:rgb(0,0,0);
- font-size:16px;
-}
-.opportunity-header > .actions {
- float:right;
- text-align:right;
- font-size:12px;
- text-transform:lowercase;
-}
-li.opportunity > .opportunity-header > .actions {
- opacity:0.1; /* color:rgb(241,236,238) */
-}
-li.opportunity:hover > .opportunity-header > .actions {
- opacity:1;
-}
-.opportunity-goaway-button {
- font-size:10px;
-}
-.opportunity-header > .opportunity-summary {
- margin-left:10px;
- color:rgb(180,180,180);
- font-size:12px;
- text-transform:lowercase;
-}
-
-li.opportunity > .opportunity-details {
- display:block;
- margin-left:10px;
-}
-li.opportunity > .opportunity-details.edit {
- background-color:rgb(255,255,240);
-}
-
-.opportunity-notes {
- display:block;
- width:100%;
- max-width:35em;
- font-size:12px;
- line-height:1em;
-}
-.opportunity-notes input#new_note {
- width:100%;
- border:none;
- border-bottom:1px solid rgb(180,180,180);
-
- padding:2px 5px;
- background-color:inherit;
- color:inherit;
- font:inherit;
-}
-.opportunity-notes > ul {
- margin:10px 5px;
- max-height:10em;
-}
-.opportunity-notes > ul > li {
- margin-bottom:1em;
-}
-.opportunity-notes > ul > li:last-child {
- margin-bottom:0em;
-}
-.opportunity-notes > ul > li > .signature {
- display:inline-block;
- margin-left:1em;
- vertical-align:sub;
- color:rgb(80,80,80);
- font-style:italic;
- font-size:10px;
-}
-
-
-
-.opportunity-details.edit > form > div.opportunity-notes {
- float:left;
- margin-right:4em;
- margin-bottom:2em;
-}
-
-.opportunity-details.edit > form > ul.opportunity-switches {
- float:left;
-}
-.opportunity-details.edit > form > ul.opportunity-switches > li {
- white-space:nowrap;
- margin-bottom:0.5em;
-}
-.opportunity-details.edit > form > ul.opportunity-switches > li.separate-top {
- margin-bottom:2em;
-}
-
-.opportunity-details.edit > form > .actions {
- clear:both;
- padding-top:1em;
-}
-
-
+ border-radius:4px;
+}
#footer {
display:block;
- position:absolute;
- left:0px;
- right:0px;
- bottom:0px;
- min-height:100px;
-
- overflow:visible;
- background-image:url('footer-pattern.png');
- background-position:left bottom;
- background-repeat:repeat-x;
-
- padding-left:32px;
- padding-right:32px;
+ position:relative;
+ z-index:1;
+ padding:16px;
+ background-color:#F7F6F5;
}
+
#footnav {
display:block;
- height:20px;
-
- padding:2px;
- white-space:nowrap;
- background-color:rgb(255,255,255);
- font-size:16px;
+ font-size:14px;
+ line-height:16px;
+ padding-bottom:40px;
+}
+#footnav > ul {
+ display:block;
+ margin-bottom:16px;
+ padding:0px;
+ list-style-type:none;
+}
+#footnav > ul > li {
+ display:inline;
+ padding:0px;
+ margin-right:14px;
+}
+#footnav > ul > li.toplevel {
+ font-weight:bold;
}
#footnav a {
- margin-left:1em;
- margin-right:1em;
- color:rgb(0,0,0);
-}
-#footnav a:last-child {
-}
-#footnav .title {
- margin-left:0em;
- margin-right:4em;
+ color:#333333;
text-decoration:none;
+ font-weight:inherit;
+}
+#footnav a:hover,
+#footnav a:focus {
+ text-decoration:underline;
}
-#smallprint {
- margin-top:40px;
- bottom:3px;
- left:8px;
- right:8px;
-
- color:rgb(120,120,120);
+#footer #copyright,
+#footer #techdetails {
+ margin:8px 0px;
font-size:10px;
- line-height:1.2em;
-}
-#smallprint #techdetails,
-#smallprint #copyright {
- max-width:200px;
-
- padding:5px;
- overflow:hidden;
- white-space:nowrap;
- text-overflow:ellipsis;
- background-color:rgb(255,255,255);
-}
-#smallprint:hover #techdetails,
-#smallprint:hover #copyright,
-#smallprint:focus #techdetails,
-#smallprint:focus #copyright {
- max-width:none;
- overflow:visible;
-}
-#smallprint #copyright {
- float:left;
-
- text-align:left;
-}
-#smallprint #techdetails {
- float:right;
-
- text-align:right;
- text-transform:lowercase;
+ line-height:14px;
+ color:#AEA79F;
}
=== added file 'harvest/media/css/opportunities.css'
--- harvest/media/css/opportunities.css 1970-01-01 00:00:00 +0000
+++ harvest/media/css/opportunities.css 2011-05-04 05:31:29 +0000
@@ -0,0 +1,381 @@
+#filters {
+ display:block;
+ position:relative;
+ float:left;
+ min-width:160px;
+
+ padding-right:16px;
+ font-size:12px;
+ line-height:1.4em;
+ color:#333333;
+}
+#filters ul {
+ display:block;
+ margin-left:16px;
+ width:100%;
+}
+#filters ul li {
+ display:block;
+ width:100%;
+}
+
+
+#filters a.item-toggle {
+ display:inline-block;
+ height:100%;
+
+ color:inherit;
+ text-decoration:inherit;
+ font-style:inherit;
+}
+
+#filters .checkbox {
+ /* checkbox element should always be the same size */
+ display:inline-block;
+ width:12px;
+ color:inherit;
+}
+
+#filters .setfilter > .filter-value > ul > li:not([data-selected]) > .filter > .filter-value {
+ /* parent filter is turned off */
+ color:#8C8C8C;
+}
+
+#filters .setfilter > .filter-value > ul > li.prelight-off > .checkbox {
+ /* prelight for an item about to be deselected */
+ color:#8C8C8C;
+ text-decoration:line-through;
+}
+#filters .setfilter > .filter-value > ul > li.prelight-on > .checkbox {
+ /* prelight for an item about to be selected */
+ color:inherit;
+}
+
+#filters .setfilter > .filter-value > ul > li.prelight-off > .filter > .filter-value {
+ /* parent filter is about to be turned off */
+ color:#8C8C8C;
+}
+#filters .setfilter > .filter-value > ul > li.prelight-on > .filter > .filter-value {
+ /* parent filter is about to be turned on */
+ color:inherit;
+}
+
+
+
+#filters > .filtergroup {
+ /* a top-level filter group */
+ display:block;
+ margin-bottom:32px;
+}
+#filters > .filtergroup > .filter-label {
+ /* titles for groups of filters ("Packages" and "Opportunities") */
+ display:block;
+ margin-bottom:8px;
+ letter-spacing:-0.1em;
+ color:#505050;
+ font-size:16px;
+}
+#filters > .filtergroup > .filter-value > ul {
+ margin-left:0px;
+}
+#filters > .filtergroup > .filter-value > ul > li {
+ margin-bottom:5px;
+}
+
+#filters > .filtergroup > .filter-value > ul > li a.help {
+ vertical-align:top;
+ margin-left:8px;
+ font-weight:bold;
+}
+
+#filters .editfilter input {
+ width:8em;
+ border:none;
+ border-bottom:1px solid #ccc1c1;
+ padding:0px 2px 0px 2px;
+ background-color:inherit;
+ color:#333333;
+ font:inherit;
+}
+#filters .editfilter input:focus {
+ outline:2px solid #dd4814;
+}
+#filters .editfilter input.placeheld {
+ color:#B4B4B4;
+}
+
+
+
+#results-wrapper {
+ position:relative;
+ display:block;
+ overflow:auto;
+}
+
+#results-status {
+ position:relative;
+ width:100%;
+ display:none;
+ margin-top:8px;
+ z-index:10;
+ text-align:center;
+ background-image:url('results-status-shadow.png');
+ background-repeat:repeat-x;
+}
+#results-status > div {
+ min-height:19px; /* lines up height of #results-status background-image */
+}
+
+#results {
+ padding:8px;
+}
+
+#results > .results-message {
+ display:block;
+ margin-bottom:12px;
+ text-align:center;
+ font-size:16px;
+ line-height:24px;
+ color:#AEA79F;
+}
+
+#results > ul {
+ margin-left:0px;
+ margin-bottom:10px;
+}
+
+#results > .results-footnote {
+ display:block;
+ font-style:italic;
+ padding:8px 16px;
+}
+
+
+.sourcepackage {
+ display:block;
+ font-size:14px;
+ line-height:21px;
+}
+li.sourcepackage {
+ margin-top:5px;
+ margin-bottom:10px;
+ border-bottom:1px dotted #CCC;
+}
+.sourcepackage > .sourcepackage-header {
+ display:block;
+ padding:8px 16px;
+}
+li.sourcepackage > .sourcepackage-header {
+ -moz-border-radius:3px 3px 0px 0px;
+ border-radius:3px 3px 0px 0px; /* lines up with li.sourcepackage's border */
+}
+a.sourcepackage-header {
+ color:inherit;
+ text-decoration:none;
+}
+.sourcepackage-header > .sourcepackage-name {
+ display:inline;
+ margin-right:10px;
+ color:#000000;
+ font-size:16px;
+}
+.sourcepackage-header > .status {
+ display:none; /* harvest.js will override this where necessary */
+}
+.sourcepackage-header > .status img {
+ width:16px;
+ height:16px;
+}
+.sourcepackage-header > .sourcepackage-summary {
+ display:inline;
+ float:right;
+ text-align:right;
+ font-size:10px;
+}
+
+.sourcepackage-details {
+ display:block;
+ padding:0px 16px 4px 16px;
+}
+
+/* collapsed state. (expanded is the default) */
+li.sourcepackage.collapsed {
+ margin-bottom:5px;
+ border-color:#FAFAFA;
+ box-shadow:none;
+ -moz-border-radius:3px 3px 0px 0px;
+ border-radius:3px 3px 0px 0px;
+}
+.sourcepackage.collapsed > .sourcepackage-details {
+ display:none;
+}
+
+/* prelights */
+.sourcepackage.expanded > a.sourcepackage-header,
+.sourcepackage > a.sourcepackage-header:hover,
+.sourcepackage > a.sourcepackage-header:focus {
+ background-image:url('sourcepackage-header-stripes.png');
+ background-color:#DDDDDD;
+}
+a.sourcepackage-header:hover .sourcepackage-name,
+a.sourcepackage-header:focus .sourcepackage-name {
+ text-decoration:underline;
+}
+
+.sourcepackage-details > .extra {
+}
+.sourcepackage-details > .extra > .actions {
+ float:right;
+ text-align:right;
+ text-transform:lowercase;
+ color:#000000;
+ font-size:12px;
+}
+.sourcepackage-details > .extra > .actions > a {
+ margin:0px 16px;
+}
+
+.opportunity-list > .opportunity-list-title {
+ display:block;
+ color:#505050;
+ font-size:12px;
+ letter-spacing:-0.1em;
+}
+.opportunity-list > .opportunity-list-title > .opportunity-list-summary {
+ margin-left:5px;
+}
+
+.opportunity-list > ul {
+ margin-bottom:8px;
+ padding-left:16px;
+ list-style-image:url('opportunity-normal.png');
+}
+li.opportunity {
+ padding:4px 16px 4px 4px;
+}
+li.opportunity:hover {
+ background-color:#FAFAFA;
+}
+li.opportunity[data-opportunity-experience='1'] {
+ list-style-image:url('opportunity-experience-1.png');
+}
+li.opportunity[data-opportunity-experience='2'] {
+ list-style-image:url('opportunity-experience-2.png');
+}
+li.opportunity[data-opportunity-experience='3'] {
+ list-style-image:url('opportunity-experience-3.png');
+}
+
+.opportunity > .opportunity-header {
+ display:block;
+ line-height:1em;
+}
+.opportunity[data-opportunity-irrelevant] > .opportunity-header > .opportunity-description,
+.opportunity[data-opportunity-applied] > .opportunity-header > .opportunity-description {
+ text-decoration:line-through;
+}
+.opportunity-header > a.opportunity-description {
+ color:#000000;
+ font-size:16px;
+}
+.opportunity-header > .actions {
+ float:right;
+ text-align:right;
+ font-size:12px;
+ text-transform:lowercase;
+}
+li.opportunity > .opportunity-header > .actions {
+ opacity:0.4; /* color:#F1ECEE */
+}
+li.opportunity:hover > .opportunity-header > .actions {
+ opacity:1;
+}
+.opportunity-goaway-button {
+ font-size:10px;
+}
+.opportunity-header > .opportunity-summary {
+ margin-left:10px;
+ color:#707070;
+ font-size:12px;
+ text-transform:lowercase;
+}
+
+li.opportunity > .opportunity-details {
+ display:block;
+ margin-left:10px;
+}
+li.opportunity > .opportunity-details.edit {
+ background-color:#FFFFF0;
+}
+
+.opportunity-notes {
+ display:block;
+ width:100%;
+ max-width:35em;
+ font-size:12px;
+ line-height:1em;
+}
+.opportunity-notes input#new_note {
+ width:100%;
+ border:none;
+ border-bottom:1px solid #B4B4B4;
+
+ padding:2px 5px;
+ background-color:inherit;
+ color:inherit;
+ font:inherit;
+}
+.opportunity-notes > ul {
+ margin:10px 5px;
+ max-height:10em;
+}
+.opportunity-notes > ul > li {
+ margin-bottom:1em;
+}
+.opportunity-notes > ul > li:last-child {
+ margin-bottom:0em;
+}
+.opportunity-notes > ul > li > .signature {
+ display:inline-block;
+ margin-left:1em;
+ vertical-align:sub;
+ color:#505050;
+ font-style:italic;
+ font-size:10px;
+}
+
+
+
+.opportunity-details.edit > form > div.opportunity-notes {
+ float:left;
+ margin-right:4em;
+ margin-bottom:2em;
+}
+
+.opportunity-details.edit > form > ul.opportunity-switches {
+ float:left;
+}
+.opportunity-details.edit > form > ul.opportunity-switches > li {
+ white-space:nowrap;
+ margin-bottom:0.5em;
+}
+.opportunity-details.edit > form > ul.opportunity-switches > li.separate-top {
+ margin-bottom:2em;
+}
+
+.opportunity-details.edit > form > .actions {
+ clear:both;
+ padding-top:1em;
+}
+
+
+
+.main#results-wrapper {
+ max-width:1000px;
+}
+.main.sourcepackage-details {
+ max-width:1000px;
+}
+.main.opportunity-details {
+ max-width:1000px;
+}
=== added file 'harvest/media/css/orangeheader-stripes.png'
Binary files harvest/media/css/orangeheader-stripes.png 1970-01-01 00:00:00 +0000 and harvest/media/css/orangeheader-stripes.png 2011-05-04 05:31:29 +0000 differ
=== added file 'harvest/media/css/sourcepackage-header-stripes.png'
Binary files harvest/media/css/sourcepackage-header-stripes.png 1970-01-01 00:00:00 +0000 and harvest/media/css/sourcepackage-header-stripes.png 2011-05-04 05:31:29 +0000 differ
=== added file 'harvest/media/css/welcome.css'
--- harvest/media/css/welcome.css 1970-01-01 00:00:00 +0000
+++ harvest/media/css/welcome.css 2011-05-04 05:31:29 +0000
@@ -0,0 +1,67 @@
+#welcome {
+ padding:16px;
+ max-width:1000px;
+}
+
+#welcome #start {
+ display:table;
+}
+
+#welcome #introduction {
+ display:table-cell;
+ width:100%;
+ font-size:16px;
+ line-height:1.2em;
+ padding:8px;
+}
+#welcome #introduction p {
+ max-width:400px;
+}
+
+#welcome #statistics {
+ display:table-cell;
+ text-align:right;
+ min-width:250px;
+ padding:8px 8px 32px 8px;
+ font-size:10px;
+ color:#B4B4B4;
+}
+
+#start_links {
+ margin:20px 0px 10px 0px;
+}
+#start_links a {
+ display:inline-block;
+ padding:8px 10px;
+ background-color:#DD4814;
+ border:#E5744D solid 2px;
+ -moz-border-radius:4px;
+ border-radius:4px; /* round border on bottom as well */
+
+ font-size:20px;
+ color:#FFFFFF;
+}
+#start_links a:hover,
+#start_links a:focus {
+ background-color:#B83A0F;
+ border-color:#AD5334;
+}
+
+#welcome #faq {
+ display:table;
+ margin:16px 0px;
+ color:#505050;
+}
+
+#welcome #faq ul {
+ display:table-row;
+}
+
+#welcome #faq li {
+ display:table-cell;
+ margin:16px;
+ padding:8px 8px 32px 8px;
+}
+#welcome #faq .question {
+ font-weight:bold;
+}
=== modified file 'harvest/media/js/harvest.js'
--- harvest/media/js/harvest.js 2010-08-12 05:42:46 +0000
+++ harvest/media/js/harvest.js 2011-05-04 05:31:29 +0000
@@ -158,6 +158,14 @@
}
}
+ this.force_disable = function () {
+ /* Tells the parent (if there is one) to disable this item. */
+ parent_filter = this.get_parent_filtergroup();
+ if ( parent_filter && parent_filter.item_is_selected(this.container) ) {
+ parent_filter.disable_item(this.container);
+ }
+ }
+
/* Callback functions */
this.enabled = function() {} /* called when this filter is enabled */
@@ -290,9 +298,15 @@
var edit_field = this.value_node.children('input');
- this.edit_field_changed = function() {
- this.force_enable();
- this.value_changed();
+ this.edit_field_changed = function(event) {
+ if (event.target.value == "") {
+ /* Automatically disable when input is cleared. */
+ /* This may cause a problem with some filters in the future */
+ filter.force_disable();
+ } else {
+ filter.force_enable();
+ }
+ filter.value_changed();
}
this.get_value_serialized = function () {
@@ -304,7 +318,7 @@
}
/* we could handle 'change' instead of 'input' to only check value when typing has stopped */
- edit_field.bind('input', function () { filter.edit_field_changed(); } );
+ edit_field.bind('input', filter.edit_field_changed);
}
@@ -436,7 +450,7 @@
function Results (dom_node) {
- /* Attached to the single #results-pane in the document. Receives
+ /* Attached to the single #results-wrapper in the document. Receives
new query parameters from Filter objects, grabs and displays new
results in the contained #results element. */
@@ -456,8 +470,8 @@
this.future_query = {};
this.container = $(dom_node);
- this.output = $(dom_node).children('#results');
- this.status_bubble = $(dom_node).children('#results-status');
+ this.output = $('#results');
+ this.status_bubble = $('#results-status');
this.packages = {};
this.expanded_pkgs = [];
@@ -552,6 +566,13 @@
complete: function (xhr, status) {
results.hide_status('loading');
results.loading_xhr = null;
+
+ /* display statistics in the footer */
+ time_header = xhr.getResponseHeader('X-Django-Request-Time')
+ if (time_header) {
+ var time = parseFloat(time_header).toFixed(2);
+ $('#requeststats').html(HARVEST_REQUEST_RESULTS_TIME.replace("%d", time));
+ }
},
success: function (data, status, xhr) {
/* We have to work around this jquery bug: http://dev.jquery.com/ticket/6173
@@ -562,14 +583,17 @@
results.current_query = load_query;
results.future_query = {};
results.update_packages();
-
- /* display statistics in the footer */
- time_header = xhr.getResponseHeader('X-Django-Request-Time')
- if (time_header) {
- $('#requeststats').html('Results generated in '+parseFloat(time_header).toFixed(2) + ' seconds');
- }
}
},
+ error: function (xhr, status, error) {
+ /* Whatever the error was, tell the user */
+ /* FIXME: we need to translate this string */
+ var results_message = $(document.createElement('div'));
+ results_message.addClass('results-message');
+ results_message.text(HARVEST_REQUEST_ERROR_MESSAGE);
+ results.output.html("");
+ results.output.append(results_message);
+ },
});
}
@@ -656,7 +680,7 @@
}
function create_results () {
- return new Results($('#results-pane'));
+ return new Results($('#results-wrapper'));
}
=== modified file 'harvest/templates/404.html'
--- harvest/templates/404.html 2009-09-13 15:20:17 +0000
+++ harvest/templates/404.html 2011-05-04 05:31:29 +0000
@@ -2,9 +2,12 @@
{% load i18n %}
-{% block title %}{% trans "Page Not Found" %} - {{ block.super }}{% endblock %}
+{% block title %}{{ block.super }}: {% trans "Page Not Found" %}{% endblock %}
{% block content %}
- <h2>{% trans "Page Not Found" %}</h2>
- <p>{% trans "The requested page could not be found." %}</p>
+<h1>{% trans "Page Not Found" %}</h1>
+<div class="main">
+ <p>{% blocktrans %}The page you requested could not be found.</p>
+ <p>If you were linked here from somewhere else, chances are you're looking for the <a href="/opportunities">opportunities browser</a>.{% endblocktrans %}</p>
+</div>
{% endblock %}
=== modified file 'harvest/templates/500.html'
--- harvest/templates/500.html 2009-09-13 15:20:17 +0000
+++ harvest/templates/500.html 2011-05-04 05:31:29 +0000
@@ -2,9 +2,11 @@
{% load i18n %}
-{% block title %}{% trans "Server Error" %} - {{ block.super }}{% endblock %}
+{% block title %}{{ block.super }}: {% trans "Server Error" %}{% endblock %}
{% block content %}
- <h2>{% trans "Server Error" %}</h2>
- <p>{% trans "A server error has occurred." %}</p>
+<h1>{% trans "Server Error" %}</h1>
+<div class="main">
+ <p>{% blocktrans %}A server error has occurred.{% endblocktrans %}</p>
+</div>
{% endblock %}
=== modified file 'harvest/templates/base.html'
--- harvest/templates/base.html 2010-10-18 10:01:45 +0000
+++ harvest/templates/base.html 2011-05-04 05:31:29 +0000
@@ -8,10 +8,15 @@
<link rel="stortcut icon" href="{{ MEDIA_URL }}img/favicon.ico" type="image/x-icon" />
- <link href='http://fonts.googleapis.com/css?family=Molengo' rel='stylesheet' type='text/css' />
-
<link rel="stylesheet" href="{{ MEDIA_URL }}css/reset.css" />
- <link rel="stylesheet" href="{{ MEDIA_URL }}css/style.css" />
+ <link rel="stylesheet" href="{{ MEDIA_URL }}css/base.css" />
+ {% block extracss %}{% endblock %}
+
+ <script type="text/javascript">
+ /* Localized strings for harvest.js */
+ var HARVEST_REQUEST_RESULTS_TIME = "{% trans 'Results generated in %d seconds' %}";
+ var HARVEST_REQUEST_ERROR_MESSAGE = "{% trans 'An error has occurred getting new results' %}";
+ </script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-ui-effects-1.8.2.min.js"></script>
@@ -23,24 +28,36 @@
</head>
<body>
-<div id="container">
+
+<div id="wrapper">
<div id="header">
- <a id="sitetitle" href="{% url home %}" class="quiet">
- <img id="sitelogo" src="{{ MEDIA_URL }}img/logo_humanity-search-icon.png" />
- <h1 id="sitename">{% trans "Harvest" %}</h1>
- {% if harvest_version_name %}<span id="releasename">{{harvest_version_name}}</span>{% endif %}
- </a>
-
- <span id="userdata">
- {% if user.is_authenticated %}
- <span class="username">{{ user.username }}</span><br />
- <a class="loginbutton" href="/logout" tabindex="1">Log out</a>
- {% else %}
- <span class="username"></span><br />
- <a class="loginbutton" href="/openid/login">Log in</a>
- {% endif %}
- </span>
+ <div id="extheader">
+ <ul>
+ <li><a href="http://www.ubuntu.com">Ubuntu.com</a></li>
+ <li><a href="http://www.ubuntu.com/community">Community</a></li>
+ <li><a href="http://www.ubuntu.com/support">Support</a></li>
+ <li><a href="http://www.ubuntu.com/partners">Partners</a></li>
+ </ul>
+ </div>
+
+ <div id="mainheader">
+ <a id="sitetitle" href="{% url home %}" class="quiet">
+ <span id="sitename">{% trans "Harvest" %}</span>
+ {% if harvest_version_name %}<span id="releasename">{{harvest_version_name}}</span>{% endif %}
+ </a>
+
+ <span id="userdata">
+ <span class="username">{{ user.username }}</span>
+ <span class="useraction"><ul>
+ {% if user.is_authenticated %}
+ <li><a href="/logout">{% trans "Log out" %}</a></li>
+ {% else %}
+ <li><a href="/openid/login">{% trans "Log in" %}</a></li>
+ {% endif %}
+ </ul></span>
+ </span>
+ </div>
{% if messages %}
<div id="messages"><ul>
@@ -51,32 +68,36 @@
{% endif %}
</div>
-<div id="content">
+<div id="container">
+ <div id="content">
{% block content %}{% endblock %}
+ </div>
<div class="bottom"></div>
</div>
+</div>
+
<div id="footer">
- <div id="footnav"><nav>
- <a class="title" href="{% url home %}" tabindex="2">{% trans "Harvest" %}</a> <a href="http://answers.launchpad.net/harvest" target="_blank" tabindex="2">{% trans "Help" %}</a> <a href="http://bugs.launchpad.net/harvest" target="_blank" tabindex="2">{% trans "Bugs" %}</a> <a href="http://code.launchpad.net/harvest" target="_blank" tabindex="2">{% trans "Code" %}</a>
- </nav></div>
+ <div id="footnav">
+ <ul>
+ <li class="toplevel"><a href="{% url home %}">{% trans "Harvest" %}</a></li>
+ <li><a href="http://answers.launchpad.net/harvest" target="_blank">{% trans "Help" %}</a></li>
+ <li><a href="http://bugs.launchpad.net/harvest" target="_blank">{% trans "Bugs" %}</a></li>
+ <li><a href="http://code.launchpad.net/harvest" target="_blank">{% trans "Code" %}</a></li>
+ </ul>
+ </div>
- <div id="smallprint" tabindex="3">
- <span id="copyright">
+ <div id="copyright">
© 2008-2010 Canonical Ltd., Ubuntu Community
<br />Ubuntu and Canonical are registered trademarks of Canonical Ltd.
- </span>
-
- <span id="techdetails">
+ </div>
+
+ <div id="techdetails">
{% trans "Harvest" %} {{ harvest_version }}
<br /><span id="requeststats"></span>
- </span>
-
- <div class="bottom"></div>
</div>
</div>
-</div>
</body>
</html>
=== modified file 'harvest/templates/index.html'
--- harvest/templates/index.html 2010-10-12 02:55:53 +0000
+++ harvest/templates/index.html 2011-05-04 05:31:29 +0000
@@ -2,33 +2,33 @@
{% load i18n %}
+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/welcome.css" />{% endblock %}
+
{% block content %}
-<div id="content_welcome">
+<h1>{% trans "Welcome to Harvest" %}</h1>
+<div id="welcome" class="main">
<div id="start">
<div id="introduction">
- <h2 class="sectiontitle">{% trans "Welcome to Harvest" %}</h2>
<p>{% blocktrans %}Harvest makes it easy to find low-hanging opportunities in Ubuntu. It aggregates the mass of todo lists we use every day so it's simple to find and coordinate work.{% endblocktrans %}</p>
+ <div id="start_links"><nav>
+ <a href="{% url opportunities.views.filter %}">{% trans "Find opportunities" %}</a>
+ </nav></div>
</div>
- <div id="start_links"><nav>
- <a href="{% url opportunities.views.filter %}">{% trans "Find opportunities" %}</a>
- </nav></div>
-
<div id="statistics">
- <ul>
- <li>{% blocktrans count opportunities as counter %}{{ counter }} opportunity{% plural %}{{ counter }} opportunities{% endblocktrans %} {% blocktrans count sourcepackages as counter %}in {{ counter }} source package{% plural %}in {{ counter }} source packages{% endblocktrans %}</li>
- <li>{% blocktrans count opportunitylists as counter %}{{ counter }} opportunity list{% plural %}{{ counter }} opportunity lists{% endblocktrans %}</li>
- <li>{% blocktrans count notes as counter %}{{ counter }} note{% plural %}{{ counter }} notes{% endblocktrans %}</li>
- <li>{% blocktrans count users as counter %}{{ counter }} user{% plural %}{{ counter }} users{% endblocktrans %}</li>
- </ul>
+ <ul>
+ <li>{% blocktrans count opportunities as counter %}{{ counter }} opportunity{% plural %}{{ counter }} opportunities{% endblocktrans %} {% blocktrans count sourcepackages as counter %}in {{ counter }} source package{% plural %}in {{ counter }} source packages{% endblocktrans %}</li>
+ <li>{% blocktrans count opportunitylists as counter %}{{ counter }} opportunity list{% plural %}{{ counter }} opportunity lists{% endblocktrans %}</li>
+ <li>{% blocktrans count notes as counter %}{{ counter }} note{% plural %}{{ counter }} notes{% endblocktrans %}</li>
+ <li>{% blocktrans count users as counter %}{{ counter }} user{% plural %}{{ counter }} users{% endblocktrans %}</li>
+ </ul>
</div>
</div>
<div id="faq">
- <div>
<ul>
<li>
<span class="question">{% trans "What can I do with Harvest?" %}</span>
@@ -37,7 +37,7 @@
<li>
<span class="question">{% trans "Why should I log in?" %}</span>
- <p>{% blocktrans %}You can log in with your Launchpad account to help us organise opportunities in Harvest. Click an opportunity's Edit button to review it, then mark it Irrelevant if it doesn't apply to us or Applied if it's been handled.{% endblocktrans %}</p>
+ <p>{% blocktrans %}You can log in with your Launchpad account to help us organise opportunities in Harvest. Click an opportunity's Edit button to review it, then mark it Applied if it has been handled or Irrelevant if it doesn't relate to us.{% endblocktrans %}</p>
<li>
</li>
@@ -46,9 +46,6 @@
<p>{% blocktrans %}Notes are short messages you can stick to opportunities for other Harvest users to see. They don't use much space, so just add them whenever they might help. For example, if you mark an opportunity Irrelevant, you can add a note explaining why.{% endblocktrans %}</p>
</li>
</ul>
- </div>
-
- <div>
<ul>
<li>
<span class="question">{% trans "Why is Harvest the way it is?" %}</span>
@@ -60,7 +57,6 @@
<p>{% blocktrans %}If it's about the UI or the functionality of the site, please file a bug on <a href="http://bugs.launchpad.net/harvest/+filebug">harvest</a> in Launchpad. If it's about some piece of data in Harvest, it's likely a script that fetches it. In that case, please file your bug on <a href="http://bugs.launchpad.net/harvest-data/+filebug">harvest-data</a> instead. The <a href="http://bazaar.launchpad.net/~harvest-dev/harvest/trunk/annotate/head:/HACKING">hacking guide</a> explains more.{% endblocktrans %}</p>
</li>
</ul>
- </div>
</div>
</div>
=== removed file 'harvest/templates/one_column.html'
--- harvest/templates/one_column.html 2010-08-31 06:29:10 +0000
+++ harvest/templates/one_column.html 1970-01-01 00:00:00 +0000
@@ -1,10 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-
-{% block content %}
-<div class="one_column">
- <h2 class="sectiontitle">{% block pagetitle %}{% endblock %}</h2>
- {% block content_main %}{% endblock %}
-</div>
-{% endblock %}
-
=== modified file 'harvest/templates/opportunities/filter.html'
--- harvest/templates/opportunities/filter.html 2011-05-02 02:39:20 +0000
+++ harvest/templates/opportunities/filter.html 2011-05-04 05:31:29 +0000
@@ -1,6 +1,8 @@
{% extends "base.html" %}
{% load i18n %}
+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/opportunities.css" />{% endblock %}
+
{% block extrahead %}
<link rel="alternate" type="application/rss+xml" title="{% blocktrans %}25 newest opportunities{% endblocktrans %}" href="{% url rss_newest_opportunities %}" />
{% endblock %}
@@ -14,7 +16,7 @@
{{filters_opp.render}}
</div>
-<div id="results-pane">
+<div id="results-wrapper" class="main">
<div id="results-status"></div>
<div id="results">
{% include "opportunities/include/filter_results.html" %}
=== modified file 'harvest/templates/opportunities/include/filter_results.html'
--- harvest/templates/opportunities/include/filter_results.html 2010-08-13 22:09:49 +0000
+++ harvest/templates/opportunities/include/filter_results.html 2011-05-04 05:31:29 +0000
@@ -27,20 +27,20 @@
</div>
</li>
{% endfor %}
-
- {% with packages_list.get_hidden_packages|length as hidden_count %}
- {% if hidden_count %}
- <li><small>
- {% blocktrans count hidden_count as counter %}
- {{ counter }} package has no matching opportunities
- {% plural %}
- {{ counter }} packages have no matching opportunities
- {% endblocktrans %}
- </small></li>
- {% endif %}
- {% endwith %}
</ul>
+<div class="results-footnote">
+{% with packages_list.get_hidden_packages|length as hidden_count %}
+{% if hidden_count %}
+ {% blocktrans count hidden_count as counter %}
+ {{ counter }} selected package has no matching opportunities
+ {% plural %}
+ {{ counter }} selected packages have no matching opportunities
+ {% endblocktrans %}
+{% endif %}
+{% endwith %}
+</div>
+
{% else %}
<div class="results-message">
=== modified file 'harvest/templates/opportunities/include/opportunity.html'
--- harvest/templates/opportunities/include/opportunity.html 2010-10-05 13:31:20 +0000
+++ harvest/templates/opportunities/include/opportunity.html 2011-05-04 05:31:29 +0000
@@ -3,9 +3,11 @@
<div class="opportunity-header">
<a href="{{opportunity.url}}" class="opportunity-description" target="_blank">{{ opportunity.description }}</a>
<span class="actions">
+ {% if user.is_authenticated %}
<a href="{% url opportunity_edit opportunity.id %}?next={{request.get_full_path}}" target="_blank" class="opportunity-edit-button">{% trans 'edit' %}</a>
(<a href="{% url opportunity_applied opportunity.id %}?next={{request.get_full_path}}" class="opportunity-goaway-button" title="{% trans 'mark opportunity as applied' %}">{% trans 'applied' %}</a>
<a href="{% url opportunity_irrelevant opportunity.id %}?next={{request.get_full_path}}" class="opportunity-goaway-button" title="{% trans 'mark opportunity as irrelevant' %}">{% trans 'irrelevant' %}</a>)
+ {% endif %}
</span>
<span class="opportunity-summary">
{{ opportunity.summary|join:', ' }}
=== removed file 'harvest/templates/opportunities/include/package.html'
--- harvest/templates/opportunities/include/package.html 2010-07-30 21:45:23 +0000
+++ harvest/templates/opportunities/include/package.html 1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-{% load i18n %}
-
-<a class="sourcepackage-header" href="{{ package.get_expand_toggle_url }}">
- <h2 class="sourcepackage-name">{{ package.real.name }}</h2>
- <span class="status"></span>
- {% comment %}<span class="sourcepackage-summary"></span>{% endcomment %}
- <div class="bottom"></div>
-</a>
-<div class="sourcepackage-details">
- {% if package.expanded %}
- {% include "opportunities/include/package_details.html" %}
- {% endif %}
-</div>
-
=== modified file 'harvest/templates/opportunities/include/package_details.html'
--- harvest/templates/opportunities/include/package_details.html 2011-05-02 00:20:31 +0000
+++ harvest/templates/opportunities/include/package_details.html 2011-05-04 05:31:29 +0000
@@ -3,11 +3,11 @@
{% regroup package.get_visible_opportunities by opportunitylist as opportunities %}
{% for opplist in opportunities %}
<div class="opportunity-list {% if opplist.grouper.featured %}featured{% endif %}">
-<h3 class="opportunity-list-title">{{ opplist.grouper }}
+<h4 class="opportunity-list-title">{{ opplist.grouper }}
<span class="opportunity-list-summary">
{% if opplist.grouper.featured %}<img src="/media/img/opplist-featured.png" alt="{% trans 'featured' %}" title="{% trans 'featured' %}" />{% endif %}
</span>
-</h3>
+</h4>
<ul>
{# FIXME: use |dictsort:'experience'|dictsort:'description' here (see comment in wrappers.py) #}
{% for opportunity in opplist.list %}
@@ -17,15 +17,20 @@
</div>
{% endfor %}
+{% with package.get_hidden_opportunities.count as hidden_count %}
+{% ifnotequal hidden_count 0 %}{% ifnotequal hidden_count '' %}
+<div class="opportunity-list">
+<h4 class="opportunity-list-title">
+{% blocktrans count hidden_count as counter %}{{ counter }} hidden opportunity{% plural %}{{ counter }} hidden opportunities{% endblocktrans %}
+</h4>
+</div>
+{% endifnotequal %}{% endifnotequal %}
+{% endwith %}
+
<div class="extra">
<div class="actions">
<a href="{% url single_package package.real.name %}" target="_blank">{% trans "Permalink" %}</a>
<a href="{% url rss_single_package package.real.name %}" target="_blank">{% trans "RSS" %}</a>
</div>
- {% with package.get_hidden_opportunities.count as hidden_count %}
- {% ifnotequal hidden_count 0 %}
- {% blocktrans count hidden_count as counter %}{{ counter }} opportunity hidden{% plural %}{{ counter }} opportunities hidden{% endblocktrans %}
- {% endifnotequal %}
- {% endwith %}
<div class="bottom"></div>
</div>
=== modified file 'harvest/templates/opportunities/opportunity_edit.html'
--- harvest/templates/opportunities/opportunity_edit.html 2010-08-14 18:09:31 +0000
+++ harvest/templates/opportunities/opportunity_edit.html 2011-05-04 05:31:29 +0000
@@ -1,15 +1,13 @@
-{% extends "one_column.html" %}
+{% extends "base.html" %}
{% load i18n %}
+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/opportunities.css" />{% endblock %}
+
{% block title %}{{ block.super }}: {{ opportunity.description }}{% endblock %}
-{% block pagetitle %}
-Opportunity <a href="{{opportunity.url}}" class="opportunity-description" target="_blank">{{ opportunity.description }}</a> in {% with opportunity.sourcepackage.name as pkgname %}<a href="{% url single_package pkgname %}">{{ pkgname }}</a>{% endwith %}
-{% endblock %}
-
-{% block content_main %}
-<div class="opportunity-details edit">
+{% block content %}
+<h1>Opportunity <a href="{{opportunity.url}}" class="opportunity-description" target="_blank">{{ opportunity.description }}</a> in {% with opportunity.sourcepackage.name as pkgname %}<a href="{% url single_package pkgname %}">{{ pkgname }}</a>{% endwith %}</h1>
+<div class="main opportunity-details edit">
{% include "opportunities/include/opportunity_details_edit.html" %}
</div>
{% endblock %}
-
=== modified file 'harvest/templates/opportunities/single_package.html'
--- harvest/templates/opportunities/single_package.html 2011-05-02 01:22:44 +0000
+++ harvest/templates/opportunities/single_package.html 2011-05-04 05:31:29 +0000
@@ -1,17 +1,17 @@
-{% extends "one_column.html" %}
+{% extends "base.html" %}
{% load i18n %}
+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/opportunities.css" />{% endblock %}
+
{% block extrahead %}
<link rel="alternate" type="application/rss+xml" title="{% blocktrans with package.real.name as name %}Opportunities for {{name}}{% endblocktrans %}" href="{% url rss_single_package package.real.name %}" />
{% endblock %}
{% block title %}{{ block.super }}: {{ package.real.name }}{% endblock %}
-{% block pagetitle %}{{ package.real.name }}{% endblock %}
-
-{% block content_main %}
-<div class="sourcepackage-details">
+{% block content %}
+<h1>{{ package.real.name }}</h1>
+<div class="main sourcepackage-details">
{% include "opportunities/include/package_details.html" %}
</div>
{% endblock %}
-