Merge lp:~dylanmccall/harvest/ubuntu-branding into lp:harvest

Proposed by Dylan McCall
Status: Merged
Merged at revision: 303
Proposed branch: lp:~dylanmccall/harvest/ubuntu-branding
Merge into: lp:harvest
Diff against target: 1874 lines (+768/-712)
17 files modified
harvest/media/css/base.css (+179/-578)
harvest/media/css/opportunities.css (+378/-0)
harvest/media/css/reset.css (+1/-6)
harvest/media/css/welcome.css (+69/-0)
harvest/media/js/harvest.js (+22/-8)
harvest/templates/404.html (+6/-3)
harvest/templates/500.html (+5/-3)
harvest/templates/base.html (+47/-32)
harvest/templates/index.html (+19/-23)
harvest/templates/one_column.html (+0/-10)
harvest/templates/opportunities/filter.html (+3/-1)
harvest/templates/opportunities/include/filter_results.html (+13/-13)
harvest/templates/opportunities/include/opportunity.html (+2/-0)
harvest/templates/opportunities/include/package.html (+0/-14)
harvest/templates/opportunities/include/package_details.html (+12/-7)
harvest/templates/opportunities/opportunity_edit.html (+6/-8)
harvest/templates/opportunities/single_package.html (+6/-6)
To merge this branch: bzr merge lp:~dylanmccall/harvest/ubuntu-branding
Reviewer Review Type Date Requested Status
Daniel Holbach Approve
Review via email: mp+59868@code.launchpad.net

Description of the change

Big update to the templates. Sorry I didn't tell anyone in advance about this; I got carried away and did it all at once :P

This covers a few things. First, of course, it brings us a little more in line with the official Ubuntu brand. I went through the branding guide and borrowed some bits and pieces. Then cjohnston kindly pointed me to the wonderful Django template that already existed, but I was already almost done, so…

The main reason behind this change was to improve accessibility. The “edit” button beside each opportunity is now more visible (only 0.4 opacity instead of 0.1), and the secondary text describing an opportunity's status is a little darker. The funny green highlights are gone.
Those Edit buttons are still pretty bad, but to fix them nicely (making them NOT miles away from their corresponding opportunities) we should make the Edit buttons simpler; a single little button. For that to work we should get editing to happen via ajax, which is a different job.

I changed some copy. “N packages have no matching opportunities” is now “N selected packages have no matching opportunities.”

I changed two bits of behaviour: Edit buttons only appear when logged in and the package name filter disables itself when the edit field is cleared.

We still deviate from the official guidelines, and I'll cover the more blatant differences I am aware of:

The layout is fluid instead of fixed. This is intentional; the original redesign paid a lot of attention to flexibility.

The orange header has the username / login / logout button, in this case presented as a normal link (because a big button to the right side didn't feel proper). The current brand guidelines don't really cover login stuff, so the closest example I could find was the wiki which puts that in secondary navigation. In Harvest's case there is no reason for secondary navigation — and login affects the whole site anyway —, so where primary navigation might go seems the right place.

The footer has a few external links spanning horizontally instead of a sitemap that runs vertically.

To post a comment you must log in.
308. By Dylan McCall

Improved readability of statistics in welcome page, removed colour change for FAQ.
Correct heading types specified in CSS.
Source package names in filter results changed to h3.

309. By Dylan McCall

Removed unused images.

310. By Dylan McCall

Removed custom keynav focus outline.
Removed reset rule for A elements, enabling default focus behaviour.

Revision history for this message
Daniel Holbach (dholbach) wrote :

Great work! :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'harvest/media/css/background-dotted.png'
2Binary files harvest/media/css/background-dotted.png 1970-01-01 00:00:00 +0000 and harvest/media/css/background-dotted.png 2011-05-05 18:46:15 +0000 differ
3=== renamed file 'harvest/media/css/style.css' => 'harvest/media/css/base.css'
4--- harvest/media/css/style.css 2011-05-02 00:20:31 +0000
5+++ harvest/media/css/base.css 2011-05-05 18:46:15 +0000
6@@ -1,10 +1,12 @@
7 body {
8- background-color:rgb(255,255,255);
9- color:rgb(51,51,51);
10-
11- font-family:'Ubuntu', 'UbuntuBeta', 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;
12- font-size:14px;
13- line-height:1.2em;
14+ background-color:#FFFFFF;
15+ background-image:url('background-dotted.png');
16+ font-family:'Ubuntu', 'Bitstream Vera Sans', 'DejaVu Sans', Tahoma, sans-serif;
17+ font-size:13px;
18+ line-height:1.5em;
19+ color:#333333;
20+ padding:0px 30px;
21+ min-width:600px; /* this is mainly for #results, but applied across the site for consistency */
22 }
23
24 .bottom {
25@@ -12,111 +14,152 @@
26 clear:both;
27 }
28
29+p {
30+ margin-bottom:8px;
31+}
32+
33 strong, b {
34- color:rgb(0,0,0);
35+ color:#000000;
36 font-weight:bold;
37 }
38 small, .small {
39- color:rgb(80,80,80);
40+ color:#505050;
41 font-size:smaller;
42 }
43 em, i {
44 font-style:italic;
45 }
46
47-/* outline selected item for keyboard navigation */
48-*:focus {
49- outline:rgb(244,116,33) dashed 1px;
50-}
51-a:active {
52- outline:none;
53-}
54
55 a {
56- color:rgb(110,64,84);
57- text-decoration:inherit;
58+ color:#DD4814;
59+ text-decoration:none;
60+ font-weight:inherit;
61 }
62 a:hover,
63 a:focus {
64- /*color:rgb(162,129,143);*/
65 text-decoration:underline;
66 }
67
68 input.placeheld {
69 /* only used in browsers that don't already do placeholder text */
70- color:rgb(180,180,180);
71+ color:#B4B4B4;
72 }
73
74 form label {
75 }
76 form .error input, form .error textarea, form .error input#new_note {
77- border:solid 2px rgb(140,0,0);
78+ border:solid 2px #8C0000;
79 }
80 form ul.errorlist {
81 font-size:smaller;
82- color:rgb(140,0,0);
83+ color:#8C0000;
84 }
85
86
87
88-#container {
89+#wrapper {
90 display:block;
91- position:absolute;
92- width:100%;
93- min-width:600px;
94- min-height:100%;
95+ position:relative;
96+ background-color:#F7F6F5;
97+ z-index:2;
98+
99+ -moz-box-shadow:0px 0px 2px #BBB;
100+ -webkit-box-shadow:0px 0px 2px #BBB;
101+ box-shadow:0px 0px 2px #BBB;
102+ -moz-border-radius:0px 0px 4px 4px;
103+ border-radius:0px 0px 4px 4px;
104 }
105
106
107
108 #header {
109 display:block;
110- width:100%;
111- min-height:80px;
112- padding-top:12px;
113 }
114
115-#header #sitetitle {
116+#extheader {
117+ display:block;
118+ background-color:#FFFFFF;
119+}
120+#extheader > ul {
121+ margin:0px;
122+ padding:0px;
123+ height:20px;
124+ list-style-type:none;
125+ text-align:right;
126+}
127+#extheader > ul > li {
128 display:inline;
129- position:static;
130- margin-left:40px;
131- margin-right:40px;
132- margin-bottom:10px;
133+ padding:3px 0px;
134+ margin-right:14px;
135+ font-size:10px;
136+ line-height:14px;
137+}
138+#extheader a {
139+ color:#333333;
140+}
141+
142+#mainheader {
143+ height:72px;
144+
145+ background-color:#D05630;
146+ background-image:url('orangeheader-stripes.png');
147+ background-repeat:repeat-x;
148+ background-position:top left;
149+ -moz-border-radius:0px 0px 4px 4px;
150+ border-radius:0px 0px 4px 4px;
151+ color:#FFFFFF;
152+
153+ padding:0px 20px;
154+}
155+
156+#mainheader #sitetitle {
157+ display:block;
158+ float:left;
159+ margin-top:24px;
160
161 text-transform:lowercase;
162 text-decoration:none;
163- color:rgb(0,0,0);
164- font-family:'Molengo', 'Ubuntu', 'UbuntuBeta', 'DejaVu Sans', 'Bitstream Vera Sans', sans-serif;
165-}
166-#header #sitetitle #sitelogo {
167- width:auto; /* line up with #sitename font-size */
168+ color:#FFFFFF;
169+}
170+#mainheader #sitetitle #sitename {
171+ display:inline;
172+ font-size:36px;
173+}
174+#mainheader #sitetitle #releasename {
175+ display:inline;
176+ font-size:12px;
177+ vertical-align:sub;
178+}
179+
180+#mainheader #userdata {
181+ display:block;
182+ float:right;
183+ margin-top:24px;
184+
185+ text-align:right;
186+ font-size:16px;
187+ line-height:24px;
188+}
189+#header #userdata .username {
190+ font-style:italic;
191+}
192+#header #userdata .useraction {
193+}
194+.useraction a {
195+ color:inherit;
196+ text-transform:lowercase;
197+}
198+.useraction > ul {
199+ display:inline;
200+ margin:0px;
201+ padding:0px;
202 height:36px;
203-}
204-#header #sitetitle #sitename {
205- display:inline;
206- position:static;
207-
208- font-size:36px;
209-}
210-#header #sitetitle #releasename {
211- display:inline;
212- position:static;
213-
214- font-size:12px;
215- vertical-align:sub;
216-}
217-
218-#header #userdata {
219- float:right;
220- margin-top:12px;
221- margin-left:40px;
222- margin-right:40px;
223-
224- text-align:right;
225-}
226-#header #userdata .username {
227-}
228-#header #userdata .loginbutton {
229+ list-style-type:none;
230+}
231+.useraction > ul > li {
232+ display:inline;
233+ margin-left:6px;
234 }
235
236 #header > #messages {
237@@ -124,537 +167,95 @@
238 margin:10px 0px;
239 padding:5px 10px;
240 font-size:18px;
241- background-color:rgb(242,151,93);
242- color:rgb(255,255,255);
243+ background-color:#F2975D;
244+ color:#FFFFFF;
245 }
246
247
248-#content {
249+#container {
250 clear:both;
251- padding:0px 20px 140px 20px;
252- padding-bottom:140px;
253-}
254-
255-.sectiontitle {
256- max-width:30em;
257- letter-spacing:-0.1em;
258+ padding:32px 16px 64px 16px;
259+}
260+
261+h1 {
262+ font-size:36px;
263+ line-height:40px;
264+ color:#333333;
265+}
266+#content > h1 {
267+ /* header at top of page */
268+ margin-bottom:32px;
269+ padding:0px 8px;
270+}
271+
272+h1 .subsection {
273+ color:#AEA79F;
274+}
275+
276+h2 {
277 font-size:24px;
278- margin-bottom:12px;
279- color:rgb(80,80,80);
280-}
281-
282-#content > .one_column {
283- max-width:60em;
284-}
285-
286-
287-
288-
289-#content_welcome > #start {
290- display:table-cell;
291- padding-right:60px;
292- padding-bottom:60px;
293- width:400px;
294- min-width:300px;
295-}
296-
297-#content_welcome #introduction {
298+ line-height:28px;
299+ margin-bottom:32px;
300+ padding:0px 8px;
301+ color:#333333;
302+}
303+
304+h3 {
305 font-size:16px;
306- line-height:1.2em;
307+ line-height:20px;
308+ font-weight:normal;
309+ color:#333333;
310+ margin-top:16px;
311+ margin-bottom:8px;
312 }
313
314-#content_welcome #start_links {
315- margin:20px 0px 10px 0px;
316-}
317-#content_welcome #start_links a {
318- display:inline-block;
319- padding:8px 10px;
320- background-color:rgb(221,72,20);
321- border:rgb(229,116,77) solid 2px;
322+#content .main {
323+ display:block;
324+ padding:8px 16px;
325+ background-color:#FFFFFF;
326+ -moz-box-shadow:0px 1px 2px #CCC;
327+ -webkit-box-shadow:0px 1px 2px #CCC;
328+ box-shadow:0px 1px 2px #CCC;
329 -moz-border-radius:4px;
330- border-radius:4px; /* round border on bottom as well */
331-
332- font-size:20px;
333- color:rgb(255,255,255);
334-}
335-#content_welcome #start_links a:hover,
336-#content_welcome #start_links a:focus {
337- background-color:rgb(184,58,15);
338- border-color:rgb(173,83,52);
339-}
340-
341-#content_welcome #statistics {
342- font-size:10px;
343- color:rgb(180,180,180);
344-}
345-#content_welcome #statistics * {
346- font-style:italic;
347-}
348-
349-#content_welcome #faq {
350- display:table-cell;
351- width:430px;
352- min-width:430px;
353- color:rgb(80,80,80);
354-}
355-
356-#faq > div {
357- display:table-cell;
358- width:200px;
359- padding-right:15px;
360-}
361-
362-#faq li {
363- margin-bottom:2em;
364-}
365-#faq .question {
366- font-weight:bold;
367- font-style:italic;
368-}
369-
370-
371-
372-#filters {
373- display:block;
374- position:relative;
375- float:left;
376- min-width:160px;
377-
378- padding-right:20px;
379- font-size:12px;
380- line-height:1.4em;
381- color:rgb(51,51,51);
382-}
383-#filters ul {
384- display:block;
385- margin-left:20px;
386- width:100%;
387-}
388-#filters ul li {
389- display:block;
390- width:100%;
391-}
392-
393-
394-#filters a.item-toggle {
395- display:inline-block;
396- height:100%;
397-
398- color:inherit;
399- text-decoration:inherit;
400- font-style:inherit;
401-}
402-
403-#filters .checkbox {
404- /* checkbox element should always be the same size */
405- display:inline-block;
406- width:12px;
407- color:inherit;
408-}
409-
410-#filters .setfilter > .filter-value > ul > li:not([data-selected]) > .filter > .filter-value {
411- /* parent filter is turned off */
412- color:rgb(140,140,140);
413-}
414-
415-#filters .setfilter > .filter-value > ul > li.prelight-off > .checkbox {
416- /* prelight for an item about to be deselected */
417- color:rgb(140,140,140);
418- text-decoration:line-through;
419-}
420-#filters .setfilter > .filter-value > ul > li.prelight-on > .checkbox {
421- /* prelight for an item about to be selected */
422- color:inherit;
423-}
424-
425-#filters .setfilter > .filter-value > ul > li.prelight-off > .filter > .filter-value {
426- /* parent filter is about to be turned off */
427- color:rgb(140,140,140);
428-}
429-#filters .setfilter > .filter-value > ul > li.prelight-on > .filter > .filter-value {
430- /* parent filter is about to be turned on */
431- color:inherit;
432-}
433-
434-
435-
436-#filters > .filtergroup {
437- /* a top-level filter group */
438- display:block;
439- margin-bottom:4em;
440-}
441-#filters > .filtergroup > .filter-label {
442- /* titles for groups of filters ("Packages" and "Opportunities") */
443- display:block;
444- margin-bottom:8px;
445- letter-spacing:-0.1em;
446- color:rgb(80,80,80);
447- font-size:16px;
448-}
449-#filters > .filtergroup > .filter-value > ul {
450- margin-left:0px;
451-}
452-#filters > .filtergroup > .filter-value > ul > li {
453- margin-bottom:5px;
454-}
455-
456-#filters > .filtergroup > .filter-value > ul > li a.help {
457- vertical-align:top;
458- margin-left:1em;
459- font-weight:bold;
460-}
461-
462-#filters .editfilter input {
463- width:8em;
464- border:none;
465- border-bottom:1px solid rgb(180,180,180);
466-
467- padding:0px 2px 0px 2px;
468- background-color:inherit;
469- color:inherit;
470- font:inherit;
471-}
472-#filters .editfilter input.placeheld {
473- color:rgb(180,180,180);
474-}
475-
476-
477-
478-#results-pane {
479- display:block;
480- min-width:250px;
481- max-width:1000px;
482- overflow:auto;
483-}
484-
485-#results-pane > #results-status {
486- position:relative;
487- display:none;
488- z-index:10;
489- text-align:center;
490- background-image:url('results-status-shadow.png');
491- background-repeat:repeat-x;
492-}
493-#results-pane > #results-status > div {
494- min-height:30px; /* lines up height of #results-status background-image */
495-}
496-
497-#results > .results-message {
498- margin:2em auto;
499- padding-left:20px;
500- max-width:30em;
501-
502- text-align:justify;
503- font-size:24px;
504- line-height:1.5em;
505- color:rgb(180,180,180);
506-}
507-
508-#results > ul {
509- margin-left:20px;
510- margin-bottom:10px;
511-}
512-
513-.sourcepackage {
514- display:block;
515- font-size:14px;
516- line-height:21px;
517-}
518-li.sourcepackage {
519- margin-top:5px;
520- margin-bottom:10px;
521- border:1px solid rgb(200,200,200);
522- -moz-border-radius:3px;
523- border-radius:3px; /* round border on bottom as well */
524-}
525-.sourcepackage > .sourcepackage-header {
526- display:block;
527- padding:8px 20px 8px 20px;
528-}
529-li.sourcepackage > .sourcepackage-header {
530- -moz-border-radius:3px 3px 0px 0px;
531- border-radius:3px 3px 0px 0px; /* lines up with li.sourcepackage's border */
532-}
533-a.sourcepackage-header {
534- color:inherit;
535- text-decoration:none;
536-}
537-.sourcepackage-header > .sourcepackage-name {
538- display:inline;
539- margin-right:10px;
540- color:rgb(0,0,0);
541- font-size:16px;
542-}
543-.sourcepackage-header > .status {
544- display:none; /* harvest.js will override this where necessary */
545-}
546-.sourcepackage-header > .status img {
547- width:16px;
548- height:16px;
549-}
550-.sourcepackage-header > .sourcepackage-summary {
551- display:inline;
552- float:right;
553- text-align:right;
554- font-size:10px;
555-}
556-/* prelights */
557-a.sourcepackage-header:hover,
558-a.sourcepackage-header:focus {
559- background-color:rgb(240,255,243);
560-}
561-a.sourcepackage-header:hover .sourcepackage-name,
562-a.sourcepackage-header:focus .sourcepackage-name {
563- text-decoration:underline;
564-}
565-
566-.sourcepackage-details {
567- display:block;
568- /* inner padding should be left:20px, right:20px and bottom:5px */
569-}
570-
571-/* collapsed state. (expanded is the default) */
572-li.sourcepackage.collapsed {
573- margin-bottom:5px;
574- border-color:rgb(250,250,250);
575- -moz-border-radius:3px 3px 0px 0px;
576- border-radius:3px 3px 0px 0px;
577-}
578-.sourcepackage.collapsed > .sourcepackage-details {
579- display:none;
580-}
581-
582-.sourcepackage-details > .extra {
583- margin-top:20px;
584- padding:2px 20px 2px 20px;
585- color:rgb(80,80,80);
586- font-size:12px;
587- border-top:1px solid rgb(250,250,250);
588- /*background-color:rgb(200,200,200);*/
589-}
590-.sourcepackage-details > .extra > .actions {
591- float:right;
592- text-align:right;
593- text-transform:lowercase;
594-}
595-.sourcepackage-details > .extra > .actions > a {
596- margin:0px 0.25em;
597-}
598-
599-
600-li.sourcepackage > .sourcepackage-details > .opportunity-list {
601- padding-left:20px;
602- margin-bottom:5px;
603-}
604-
605-.opportunity-list > .opportunity-list-title {
606- display:block;
607- color:rgb(80,80,80);
608- font-size:12px;
609- letter-spacing:-0.1em;
610-}
611-.opportunity-list > .opportunity-list-title > .opportunity-list-summary {
612- margin-left:5px;
613-}
614-
615-.opportunity-list > ul {
616- margin-bottom:10px;
617- padding-left:20px;
618- list-style-image:url('opportunity-normal.png');
619-}
620-li.opportunity {
621- padding:2px 20px 8px 5px;
622-}
623-li.opportunity:hover {
624- background-color:rgb(250,250,250);
625-}
626-li.opportunity[data-opportunity-experience='1'] {
627- list-style-image:url('opportunity-experience-1.png');
628-}
629-li.opportunity[data-opportunity-experience='2'] {
630- list-style-image:url('opportunity-experience-2.png');
631-}
632-li.opportunity[data-opportunity-experience='3'] {
633- list-style-image:url('opportunity-experience-3.png');
634-}
635-
636-.opportunity > .opportunity-header {
637- display:block;
638- line-height:1em;
639-}
640-.opportunity[data-opportunity-irrelevant] > .opportunity-header > .opportunity-description,
641-.opportunity[data-opportunity-applied] > .opportunity-header > .opportunity-description {
642- text-decoration:line-through;
643-}
644-.opportunity-header > a.opportunity-description {
645- color:rgb(0,0,0);
646- font-size:16px;
647-}
648-.opportunity-header > .actions {
649- float:right;
650- text-align:right;
651- font-size:12px;
652- text-transform:lowercase;
653-}
654-li.opportunity > .opportunity-header > .actions {
655- opacity:0.1; /* color:rgb(241,236,238) */
656-}
657-li.opportunity:hover > .opportunity-header > .actions {
658- opacity:1;
659-}
660-.opportunity-goaway-button {
661- font-size:10px;
662-}
663-.opportunity-header > .opportunity-summary {
664- margin-left:10px;
665- color:rgb(180,180,180);
666- font-size:12px;
667- text-transform:lowercase;
668-}
669-
670-li.opportunity > .opportunity-details {
671- display:block;
672- margin-left:10px;
673-}
674-li.opportunity > .opportunity-details.edit {
675- background-color:rgb(255,255,240);
676-}
677-
678-.opportunity-notes {
679- display:block;
680- width:100%;
681- max-width:35em;
682- font-size:12px;
683- line-height:1em;
684-}
685-.opportunity-notes input#new_note {
686- width:100%;
687- border:none;
688- border-bottom:1px solid rgb(180,180,180);
689-
690- padding:2px 5px;
691- background-color:inherit;
692- color:inherit;
693- font:inherit;
694-}
695-.opportunity-notes > ul {
696- margin:10px 5px;
697- max-height:10em;
698-}
699-.opportunity-notes > ul > li {
700- margin-bottom:1em;
701-}
702-.opportunity-notes > ul > li:last-child {
703- margin-bottom:0em;
704-}
705-.opportunity-notes > ul > li > .signature {
706- display:inline-block;
707- margin-left:1em;
708- vertical-align:sub;
709- color:rgb(80,80,80);
710- font-style:italic;
711- font-size:10px;
712-}
713-
714-
715-
716-.opportunity-details.edit > form > div.opportunity-notes {
717- float:left;
718- margin-right:4em;
719- margin-bottom:2em;
720-}
721-
722-.opportunity-details.edit > form > ul.opportunity-switches {
723- float:left;
724-}
725-.opportunity-details.edit > form > ul.opportunity-switches > li {
726- white-space:nowrap;
727- margin-bottom:0.5em;
728-}
729-.opportunity-details.edit > form > ul.opportunity-switches > li.separate-top {
730- margin-bottom:2em;
731-}
732-
733-.opportunity-details.edit > form > .actions {
734- clear:both;
735- padding-top:1em;
736-}
737-
738-
739+ border-radius:4px;
740+}
741
742 #footer {
743 display:block;
744- position:absolute;
745- left:0px;
746- right:0px;
747- bottom:0px;
748- min-height:100px;
749-
750- overflow:visible;
751- background-image:url('footer-pattern.png');
752- background-position:left bottom;
753- background-repeat:repeat-x;
754-
755- padding-left:32px;
756- padding-right:32px;
757+ position:relative;
758+ z-index:1;
759+ padding:16px;
760+ background-color:#F7F6F5;
761 }
762+
763 #footnav {
764 display:block;
765- height:20px;
766-
767- padding:2px;
768- white-space:nowrap;
769- background-color:rgb(255,255,255);
770- font-size:16px;
771+ font-size:14px;
772+ line-height:16px;
773+ padding-bottom:40px;
774+}
775+#footnav > ul {
776+ display:block;
777+ margin-bottom:16px;
778+ padding:0px;
779+ list-style-type:none;
780+}
781+#footnav > ul > li {
782+ display:inline;
783+ padding:0px;
784+ margin-right:14px;
785+}
786+#footnav > ul > li.toplevel {
787+ font-weight:bold;
788 }
789 #footnav a {
790- margin-left:1em;
791- margin-right:1em;
792- color:rgb(0,0,0);
793-}
794-#footnav a:last-child {
795-}
796-#footnav .title {
797- margin-left:0em;
798- margin-right:4em;
799- text-decoration:none;
800+ color:#333333;
801 }
802
803-#smallprint {
804- margin-top:40px;
805- bottom:3px;
806- left:8px;
807- right:8px;
808-
809- color:rgb(120,120,120);
810+#footer #copyright,
811+#footer #techdetails {
812+ margin:8px 0px;
813 font-size:10px;
814- line-height:1.2em;
815-}
816-#smallprint #techdetails,
817-#smallprint #copyright {
818- max-width:200px;
819-
820- padding:5px;
821- overflow:hidden;
822- white-space:nowrap;
823- text-overflow:ellipsis;
824- background-color:rgb(255,255,255);
825-}
826-#smallprint:hover #techdetails,
827-#smallprint:hover #copyright,
828-#smallprint:focus #techdetails,
829-#smallprint:focus #copyright {
830- max-width:none;
831- overflow:visible;
832-}
833-#smallprint #copyright {
834- float:left;
835-
836- text-align:left;
837-}
838-#smallprint #techdetails {
839- float:right;
840-
841- text-align:right;
842- text-transform:lowercase;
843+ line-height:14px;
844+ color:#AEA79F;
845 }
846
847=== removed file 'harvest/media/css/footer-pattern.png'
848Binary files harvest/media/css/footer-pattern.png 2010-07-03 05:45:47 +0000 and harvest/media/css/footer-pattern.png 1970-01-01 00:00:00 +0000 differ
849=== added file 'harvest/media/css/opportunities.css'
850--- harvest/media/css/opportunities.css 1970-01-01 00:00:00 +0000
851+++ harvest/media/css/opportunities.css 2011-05-05 18:46:15 +0000
852@@ -0,0 +1,378 @@
853+#filters {
854+ display:block;
855+ position:relative;
856+ float:left;
857+ min-width:160px;
858+
859+ padding-right:16px;
860+ font-size:12px;
861+ line-height:1.4em;
862+ color:#333333;
863+}
864+#filters ul {
865+ display:block;
866+ margin-left:16px;
867+ width:100%;
868+}
869+#filters ul li {
870+ display:block;
871+ width:100%;
872+}
873+
874+
875+#filters a.item-toggle {
876+ display:inline-block;
877+ height:100%;
878+
879+ color:inherit;
880+ text-decoration:inherit;
881+ font-style:inherit;
882+}
883+
884+#filters .checkbox {
885+ /* checkbox element should always be the same size */
886+ display:inline-block;
887+ width:12px;
888+ color:inherit;
889+}
890+
891+#filters .setfilter > .filter-value > ul > li:not([data-selected]) > .filter > .filter-value {
892+ /* parent filter is turned off */
893+ color:#8C8C8C;
894+}
895+
896+#filters .setfilter > .filter-value > ul > li.prelight-off > .checkbox {
897+ /* prelight for an item about to be deselected */
898+ color:#8C8C8C;
899+ text-decoration:line-through;
900+}
901+#filters .setfilter > .filter-value > ul > li.prelight-on > .checkbox {
902+ /* prelight for an item about to be selected */
903+ color:inherit;
904+}
905+
906+#filters .setfilter > .filter-value > ul > li.prelight-off > .filter > .filter-value {
907+ /* parent filter is about to be turned off */
908+ color:#8C8C8C;
909+}
910+#filters .setfilter > .filter-value > ul > li.prelight-on > .filter > .filter-value {
911+ /* parent filter is about to be turned on */
912+ color:inherit;
913+}
914+
915+
916+
917+#filters > .filtergroup {
918+ /* a top-level filter group */
919+ display:block;
920+ margin-bottom:32px;
921+}
922+#filters > .filtergroup > .filter-label {
923+ /* titles for groups of filters ("Packages" and "Opportunities") */
924+ display:block;
925+ margin-bottom:8px;
926+ letter-spacing:-0.1em;
927+ color:#505050;
928+ font-size:16px;
929+}
930+#filters > .filtergroup > .filter-value > ul {
931+ margin-left:0px;
932+}
933+#filters > .filtergroup > .filter-value > ul > li {
934+ margin-bottom:5px;
935+}
936+
937+#filters > .filtergroup > .filter-value > ul > li a.help {
938+ vertical-align:top;
939+ margin-left:8px;
940+ font-weight:bold;
941+}
942+
943+#filters .editfilter input {
944+ width:8em;
945+ border:none;
946+ border-bottom:1px solid #ccc1c1;
947+ padding:0px 2px 0px 2px;
948+ background-color:inherit;
949+ color:#333333;
950+ font:inherit;
951+}
952+#filters .editfilter input.placeheld {
953+ color:#B4B4B4;
954+}
955+
956+
957+
958+#results-wrapper {
959+ position:relative;
960+ display:block;
961+ overflow:auto;
962+}
963+
964+#results-status {
965+ position:relative;
966+ width:100%;
967+ display:none;
968+ margin-top:8px;
969+ z-index:10;
970+ text-align:center;
971+ background-image:url('results-status-shadow.png');
972+ background-repeat:repeat-x;
973+}
974+#results-status > div {
975+ min-height:19px; /* lines up height of #results-status background-image */
976+}
977+
978+#results {
979+ padding:8px;
980+}
981+
982+#results > .results-message {
983+ display:block;
984+ margin-bottom:12px;
985+ text-align:center;
986+ font-size:16px;
987+ line-height:24px;
988+ color:#AEA79F;
989+}
990+
991+#results > ul {
992+ margin-left:0px;
993+ margin-bottom:10px;
994+}
995+
996+#results > .results-footnote {
997+ display:block;
998+ font-style:italic;
999+ padding:8px 16px;
1000+}
1001+
1002+
1003+.sourcepackage {
1004+ display:block;
1005+ font-size:14px;
1006+ line-height:21px;
1007+}
1008+li.sourcepackage {
1009+ margin-top:5px;
1010+ margin-bottom:10px;
1011+ border-bottom:1px dotted #CCC;
1012+}
1013+.sourcepackage > .sourcepackage-header {
1014+ display:block;
1015+ padding:8px 16px;
1016+}
1017+li.sourcepackage > .sourcepackage-header {
1018+ -moz-border-radius:3px 3px 0px 0px;
1019+ border-radius:3px 3px 0px 0px; /* lines up with li.sourcepackage's border */
1020+}
1021+a.sourcepackage-header {
1022+ color:inherit;
1023+ text-decoration:none;
1024+}
1025+.sourcepackage-header > h3.sourcepackage-name {
1026+ display:inline;
1027+ margin:0px;
1028+ margin-right:10px;
1029+ color:#000000;
1030+}
1031+.sourcepackage-header > .status {
1032+ display:none; /* harvest.js will override this where necessary */
1033+}
1034+.sourcepackage-header > .status img {
1035+ width:16px;
1036+ height:16px;
1037+}
1038+.sourcepackage-header > .sourcepackage-summary {
1039+ display:inline;
1040+ float:right;
1041+ text-align:right;
1042+ font-size:10px;
1043+}
1044+
1045+.sourcepackage-details {
1046+ display:block;
1047+ padding:0px 16px 4px 16px;
1048+}
1049+
1050+/* collapsed state. (expanded is the default) */
1051+li.sourcepackage.collapsed {
1052+ margin-bottom:5px;
1053+ border-color:#FAFAFA;
1054+ box-shadow:none;
1055+ -moz-border-radius:3px 3px 0px 0px;
1056+ border-radius:3px 3px 0px 0px;
1057+}
1058+.sourcepackage.collapsed > .sourcepackage-details {
1059+ display:none;
1060+}
1061+
1062+/* prelights */
1063+.sourcepackage.expanded > a.sourcepackage-header,
1064+.sourcepackage > a.sourcepackage-header:hover,
1065+.sourcepackage > a.sourcepackage-header:focus {
1066+ background-image:url('sourcepackage-header-stripes.png');
1067+ background-color:#DDDDDD;
1068+}
1069+a.sourcepackage-header:hover .sourcepackage-name,
1070+a.sourcepackage-header:focus .sourcepackage-name {
1071+ text-decoration:underline;
1072+}
1073+
1074+.sourcepackage-details > .extra {
1075+}
1076+.sourcepackage-details > .extra > .actions {
1077+ float:right;
1078+ text-align:right;
1079+ text-transform:lowercase;
1080+ color:#000000;
1081+ font-size:12px;
1082+}
1083+.sourcepackage-details > .extra > .actions > a {
1084+ margin:0px 16px;
1085+}
1086+
1087+.opportunity-list > h4.opportunity-list-title {
1088+ display:block;
1089+ color:#505050;
1090+ font-size:12px;
1091+ letter-spacing:-0.1em;
1092+}
1093+.opportunity-list > .opportunity-list-title > .opportunity-list-summary {
1094+ margin-left:5px;
1095+}
1096+
1097+.opportunity-list > ul {
1098+ margin-bottom:8px;
1099+ padding-left:16px;
1100+ list-style-image:url('opportunity-normal.png');
1101+}
1102+li.opportunity {
1103+ padding:4px 16px 4px 4px;
1104+}
1105+li.opportunity:hover {
1106+ background-color:#FAFAFA;
1107+}
1108+li.opportunity[data-opportunity-experience='1'] {
1109+ list-style-image:url('opportunity-experience-1.png');
1110+}
1111+li.opportunity[data-opportunity-experience='2'] {
1112+ list-style-image:url('opportunity-experience-2.png');
1113+}
1114+li.opportunity[data-opportunity-experience='3'] {
1115+ list-style-image:url('opportunity-experience-3.png');
1116+}
1117+
1118+.opportunity > .opportunity-header {
1119+ display:block;
1120+ line-height:1em;
1121+}
1122+.opportunity[data-opportunity-irrelevant] > .opportunity-header > .opportunity-description,
1123+.opportunity[data-opportunity-applied] > .opportunity-header > .opportunity-description {
1124+ text-decoration:line-through;
1125+}
1126+.opportunity-header > a.opportunity-description {
1127+ color:#000000;
1128+ font-size:16px;
1129+}
1130+.opportunity-header > .actions {
1131+ float:right;
1132+ text-align:right;
1133+ font-size:12px;
1134+ text-transform:lowercase;
1135+}
1136+li.opportunity > .opportunity-header > .actions {
1137+ opacity:0.4; /* color:#F1ECEE */
1138+}
1139+li.opportunity:hover > .opportunity-header > .actions {
1140+ opacity:1;
1141+}
1142+.opportunity-goaway-button {
1143+ font-size:10px;
1144+}
1145+.opportunity-header > .opportunity-summary {
1146+ margin-left:10px;
1147+ color:#707070;
1148+ font-size:12px;
1149+ text-transform:lowercase;
1150+}
1151+
1152+li.opportunity > .opportunity-details {
1153+ display:block;
1154+ margin-left:10px;
1155+}
1156+li.opportunity > .opportunity-details.edit {
1157+ background-color:#FFFFF0;
1158+}
1159+
1160+.opportunity-notes {
1161+ display:block;
1162+ width:100%;
1163+ max-width:35em;
1164+ font-size:12px;
1165+ line-height:1em;
1166+}
1167+.opportunity-notes input#new_note {
1168+ width:100%;
1169+ border:none;
1170+ border-bottom:1px solid #B4B4B4;
1171+
1172+ padding:2px 5px;
1173+ background-color:inherit;
1174+ color:inherit;
1175+ font:inherit;
1176+}
1177+.opportunity-notes > ul {
1178+ margin:10px 5px;
1179+ max-height:10em;
1180+}
1181+.opportunity-notes > ul > li {
1182+ margin-bottom:1em;
1183+}
1184+.opportunity-notes > ul > li:last-child {
1185+ margin-bottom:0em;
1186+}
1187+.opportunity-notes > ul > li > .signature {
1188+ display:inline-block;
1189+ margin-left:1em;
1190+ vertical-align:sub;
1191+ color:#505050;
1192+ font-style:italic;
1193+ font-size:10px;
1194+}
1195+
1196+
1197+
1198+.opportunity-details.edit > form > div.opportunity-notes {
1199+ float:left;
1200+ margin-right:4em;
1201+ margin-bottom:2em;
1202+}
1203+
1204+.opportunity-details.edit > form > ul.opportunity-switches {
1205+ float:left;
1206+}
1207+.opportunity-details.edit > form > ul.opportunity-switches > li {
1208+ white-space:nowrap;
1209+ margin-bottom:0.5em;
1210+}
1211+.opportunity-details.edit > form > ul.opportunity-switches > li.separate-top {
1212+ margin-bottom:2em;
1213+}
1214+
1215+.opportunity-details.edit > form > .actions {
1216+ clear:both;
1217+ padding-top:1em;
1218+}
1219+
1220+
1221+
1222+.main#results-wrapper {
1223+ max-width:1000px;
1224+}
1225+.main.sourcepackage-details {
1226+ max-width:1000px;
1227+}
1228+.main.opportunity-details {
1229+ max-width:1000px;
1230+}
1231
1232=== added file 'harvest/media/css/orangeheader-stripes.png'
1233Binary files harvest/media/css/orangeheader-stripes.png 1970-01-01 00:00:00 +0000 and harvest/media/css/orangeheader-stripes.png 2011-05-05 18:46:15 +0000 differ
1234=== modified file 'harvest/media/css/reset.css'
1235--- harvest/media/css/reset.css 2010-07-27 02:56:27 +0000
1236+++ harvest/media/css/reset.css 2011-05-05 18:46:15 +0000
1237@@ -1,6 +1,6 @@
1238 html, body, div, span, applet, object, iframe,
1239 h1, h2, h3, h4, h5, h6, p, blockquote, pre,
1240-a, abbr, acronym, address, big, cite, code,
1241+abbr, acronym, address, big, cite, code,
1242 del, dfn, em, font, img, ins, kbd, q, s, samp,
1243 small, strike, strong, sub, sup, tt, var,
1244 b, u, i, center,
1245@@ -33,11 +33,6 @@
1246 content: none;
1247 }
1248
1249-/* remember to define focus styles! */
1250-:focus {
1251- outline: 0;
1252-}
1253-
1254 /* remember to highlight inserts somehow! */
1255 ins {
1256 text-decoration: none;
1257
1258=== added file 'harvest/media/css/sourcepackage-header-stripes.png'
1259Binary 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-05 18:46:15 +0000 differ
1260=== added file 'harvest/media/css/welcome.css'
1261--- harvest/media/css/welcome.css 1970-01-01 00:00:00 +0000
1262+++ harvest/media/css/welcome.css 2011-05-05 18:46:15 +0000
1263@@ -0,0 +1,69 @@
1264+#welcome {
1265+ padding:16px;
1266+ max-width:1000px;
1267+}
1268+
1269+#welcome #start {
1270+ display:table;
1271+}
1272+
1273+#welcome #introduction {
1274+ display:table-cell;
1275+ width:100%;
1276+ font-size:16px;
1277+ line-height:1.2em;
1278+ padding:8px;
1279+}
1280+#welcome #introduction p {
1281+ max-width:400px;
1282+}
1283+
1284+#welcome #statistics {
1285+ display:table-cell;
1286+ text-align:right;
1287+ min-width:250px;
1288+ padding:8px 8px 32px 8px;
1289+ font-size:10px;
1290+ color:#707070;
1291+}
1292+
1293+#start_links {
1294+ margin:20px 0px 10px 0px;
1295+}
1296+#start_links a {
1297+ display:inline-block;
1298+ padding:8px 10px;
1299+ background-color:#DD4814;
1300+ border:#E5744D solid 2px;
1301+ -moz-border-radius:4px;
1302+ border-radius:4px; /* round border on bottom as well */
1303+
1304+ font-size:20px;
1305+ color:#FFFFFF;
1306+}
1307+#start_links a:hover,
1308+#start_links a:focus {
1309+ background-color:#B83A0F;
1310+ border-color:#AD5334;
1311+}
1312+
1313+#welcome #faq {
1314+ display:table;
1315+ margin:32px 0px;
1316+}
1317+
1318+#welcome #faq ul {
1319+ display:table-row;
1320+}
1321+
1322+#welcome #faq li {
1323+ display:table-cell;
1324+ margin:16px;
1325+ padding:8px 8px 32px 8px;
1326+}
1327+#welcome #faq h3.question {
1328+ display:block;
1329+ font-weight:bold;
1330+ font-size:inherit;
1331+ margin:0px;
1332+}
1333
1334=== removed file 'harvest/media/img/logo_humanity-search-icon.png'
1335Binary files harvest/media/img/logo_humanity-search-icon.png 2010-07-03 05:45:47 +0000 and harvest/media/img/logo_humanity-search-icon.png 1970-01-01 00:00:00 +0000 differ
1336=== modified file 'harvest/media/js/harvest.js'
1337--- harvest/media/js/harvest.js 2010-08-12 05:42:46 +0000
1338+++ harvest/media/js/harvest.js 2011-05-05 18:46:15 +0000
1339@@ -158,6 +158,14 @@
1340 }
1341 }
1342
1343+ this.force_disable = function () {
1344+ /* Tells the parent (if there is one) to disable this item. */
1345+ parent_filter = this.get_parent_filtergroup();
1346+ if ( parent_filter && parent_filter.item_is_selected(this.container) ) {
1347+ parent_filter.disable_item(this.container);
1348+ }
1349+ }
1350+
1351
1352 /* Callback functions */
1353 this.enabled = function() {} /* called when this filter is enabled */
1354@@ -290,9 +298,15 @@
1355 var edit_field = this.value_node.children('input');
1356
1357
1358- this.edit_field_changed = function() {
1359- this.force_enable();
1360- this.value_changed();
1361+ this.edit_field_changed = function(event) {
1362+ if (event.target.value == "") {
1363+ /* Automatically disable when input is cleared. */
1364+ /* This may cause a problem with some filters in the future */
1365+ filter.force_disable();
1366+ } else {
1367+ filter.force_enable();
1368+ }
1369+ filter.value_changed();
1370 }
1371
1372 this.get_value_serialized = function () {
1373@@ -304,7 +318,7 @@
1374 }
1375
1376 /* we could handle 'change' instead of 'input' to only check value when typing has stopped */
1377- edit_field.bind('input', function () { filter.edit_field_changed(); } );
1378+ edit_field.bind('input', filter.edit_field_changed);
1379 }
1380
1381
1382@@ -436,7 +450,7 @@
1383
1384
1385 function Results (dom_node) {
1386- /* Attached to the single #results-pane in the document. Receives
1387+ /* Attached to the single #results-wrapper in the document. Receives
1388 new query parameters from Filter objects, grabs and displays new
1389 results in the contained #results element. */
1390
1391@@ -456,8 +470,8 @@
1392 this.future_query = {};
1393
1394 this.container = $(dom_node);
1395- this.output = $(dom_node).children('#results');
1396- this.status_bubble = $(dom_node).children('#results-status');
1397+ this.output = $('#results');
1398+ this.status_bubble = $('#results-status');
1399
1400 this.packages = {};
1401 this.expanded_pkgs = [];
1402@@ -656,7 +670,7 @@
1403 }
1404
1405 function create_results () {
1406- return new Results($('#results-pane'));
1407+ return new Results($('#results-wrapper'));
1408 }
1409
1410
1411
1412=== modified file 'harvest/templates/404.html'
1413--- harvest/templates/404.html 2009-09-13 15:20:17 +0000
1414+++ harvest/templates/404.html 2011-05-05 18:46:15 +0000
1415@@ -2,9 +2,12 @@
1416
1417 {% load i18n %}
1418
1419-{% block title %}{% trans "Page Not Found" %} - {{ block.super }}{% endblock %}
1420+{% block title %}{{ block.super }}: {% trans "Page Not Found" %}{% endblock %}
1421
1422 {% block content %}
1423- <h2>{% trans "Page Not Found" %}</h2>
1424- <p>{% trans "The requested page could not be found." %}</p>
1425+<h1>{% trans "Page Not Found" %}</h1>
1426+<div class="main">
1427+ <p>{% blocktrans %}The page you requested could not be found.</p>
1428+ <p>If you were linked here from somewhere else, chances are you're looking for the <a href="/opportunities">opportunities browser</a>.{% endblocktrans %}</p>
1429+</div>
1430 {% endblock %}
1431
1432=== modified file 'harvest/templates/500.html'
1433--- harvest/templates/500.html 2009-09-13 15:20:17 +0000
1434+++ harvest/templates/500.html 2011-05-05 18:46:15 +0000
1435@@ -2,9 +2,11 @@
1436
1437 {% load i18n %}
1438
1439-{% block title %}{% trans "Server Error" %} - {{ block.super }}{% endblock %}
1440+{% block title %}{{ block.super }}: {% trans "Server Error" %}{% endblock %}
1441
1442 {% block content %}
1443- <h2>{% trans "Server Error" %}</h2>
1444- <p>{% trans "A server error has occurred." %}</p>
1445+<h1>{% trans "Server Error" %}</h1>
1446+<div class="main">
1447+ <p>{% blocktrans %}A server error has occurred.{% endblocktrans %}</p>
1448+</div>
1449 {% endblock %}
1450
1451=== modified file 'harvest/templates/base.html'
1452--- harvest/templates/base.html 2010-10-18 10:01:45 +0000
1453+++ harvest/templates/base.html 2011-05-05 18:46:15 +0000
1454@@ -8,10 +8,9 @@
1455
1456 <link rel="stortcut icon" href="{{ MEDIA_URL }}img/favicon.ico" type="image/x-icon" />
1457
1458- <link href='http://fonts.googleapis.com/css?family=Molengo' rel='stylesheet' type='text/css' />
1459-
1460 <link rel="stylesheet" href="{{ MEDIA_URL }}css/reset.css" />
1461- <link rel="stylesheet" href="{{ MEDIA_URL }}css/style.css" />
1462+ <link rel="stylesheet" href="{{ MEDIA_URL }}css/base.css" />
1463+ {% block extracss %}{% endblock %}
1464
1465 <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-1.4.2.min.js"></script>
1466 <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-ui-effects-1.8.2.min.js"></script>
1467@@ -23,24 +22,36 @@
1468 </head>
1469
1470 <body>
1471-<div id="container">
1472+
1473+<div id="wrapper">
1474
1475 <div id="header">
1476- <a id="sitetitle" href="{% url home %}" class="quiet">
1477- <img id="sitelogo" src="{{ MEDIA_URL }}img/logo_humanity-search-icon.png" />
1478- <h1 id="sitename">{% trans "Harvest" %}</h1>
1479- {% if harvest_version_name %}<span id="releasename">{{harvest_version_name}}</span>{% endif %}
1480- </a>
1481-
1482- <span id="userdata">
1483- {% if user.is_authenticated %}
1484- <span class="username">{{ user.username }}</span><br />
1485- <a class="loginbutton" href="/logout" tabindex="1">Log out</a>
1486- {% else %}
1487- <span class="username"></span><br />
1488- <a class="loginbutton" href="/openid/login">Log in</a>
1489- {% endif %}
1490- </span>
1491+ <div id="extheader">
1492+ <ul>
1493+ <li><a href="http://www.ubuntu.com">Ubuntu.com</a></li>
1494+ <li><a href="http://www.ubuntu.com/community">Community</a></li>
1495+ <li><a href="http://www.ubuntu.com/support">Support</a></li>
1496+ <li><a href="http://www.ubuntu.com/partners">Partners</a></li>
1497+ </ul>
1498+ </div>
1499+
1500+ <div id="mainheader">
1501+ <a id="sitetitle" href="{% url home %}" class="quiet">
1502+ <span id="sitename">{% trans "Harvest" %}</span>
1503+ {% if harvest_version_name %}<span id="releasename">{{harvest_version_name}}</span>{% endif %}
1504+ </a>
1505+
1506+ <span id="userdata">
1507+ <span class="username">{{ user.username }}</span>
1508+ <span class="useraction"><ul>
1509+ {% if user.is_authenticated %}
1510+ <li><a href="/logout">{% trans "Log out" %}</a></li>
1511+ {% else %}
1512+ <li><a href="/openid/login">{% trans "Log in" %}</a></li>
1513+ {% endif %}
1514+ </ul></span>
1515+ </span>
1516+ </div>
1517
1518 {% if messages %}
1519 <div id="messages"><ul>
1520@@ -51,32 +62,36 @@
1521 {% endif %}
1522 </div>
1523
1524-<div id="content">
1525+<div id="container">
1526+ <div id="content">
1527 {% block content %}{% endblock %}
1528+ </div>
1529 <div class="bottom"></div>
1530 </div>
1531
1532+</div>
1533+
1534 <div id="footer">
1535- <div id="footnav"><nav>
1536- <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>
1537- </nav></div>
1538+ <div id="footnav">
1539+ <ul>
1540+ <li class="toplevel"><a href="{% url home %}">{% trans "Harvest" %}</a></li>
1541+ <li><a href="http://answers.launchpad.net/harvest" target="_blank">{% trans "Help" %}</a></li>
1542+ <li><a href="http://bugs.launchpad.net/harvest" target="_blank">{% trans "Bugs" %}</a></li>
1543+ <li><a href="http://code.launchpad.net/harvest" target="_blank">{% trans "Code" %}</a></li>
1544+ </ul>
1545+ </div>
1546
1547- <div id="smallprint" tabindex="3">
1548- <span id="copyright">
1549+ <div id="copyright">
1550 &copy; 2008-2010 Canonical Ltd., Ubuntu Community
1551 <br />Ubuntu and Canonical are registered trademarks of Canonical Ltd.
1552- </span>
1553-
1554- <span id="techdetails">
1555+ </div>
1556+
1557+ <div id="techdetails">
1558 {% trans "Harvest" %} {{ harvest_version }}
1559 <br /><span id="requeststats"></span>
1560- </span>
1561-
1562- <div class="bottom"></div>
1563 </div>
1564 </div>
1565
1566-</div>
1567 </body>
1568
1569 </html>
1570
1571=== modified file 'harvest/templates/index.html'
1572--- harvest/templates/index.html 2010-10-12 02:55:53 +0000
1573+++ harvest/templates/index.html 2011-05-05 18:46:15 +0000
1574@@ -2,65 +2,61 @@
1575
1576 {% load i18n %}
1577
1578+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/welcome.css" />{% endblock %}
1579+
1580 {% block content %}
1581
1582-<div id="content_welcome">
1583+<h1>{% trans "Welcome to Harvest" %}</h1>
1584
1585+<div id="welcome" class="main">
1586
1587 <div id="start">
1588 <div id="introduction">
1589- <h2 class="sectiontitle">{% trans "Welcome to Harvest" %}</h2>
1590 <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>
1591+ <div id="start_links"><nav>
1592+ <a href="{% url opportunities.views.filter %}">{% trans "Find opportunities" %}</a>
1593+ </nav></div>
1594 </div>
1595
1596- <div id="start_links"><nav>
1597- <a href="{% url opportunities.views.filter %}">{% trans "Find opportunities" %}</a>
1598- </nav></div>
1599-
1600 <div id="statistics">
1601- <ul>
1602- <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>
1603- <li>{% blocktrans count opportunitylists as counter %}{{ counter }} opportunity list{% plural %}{{ counter }} opportunity lists{% endblocktrans %}</li>
1604- <li>{% blocktrans count notes as counter %}{{ counter }} note{% plural %}{{ counter }} notes{% endblocktrans %}</li>
1605- <li>{% blocktrans count users as counter %}{{ counter }} user{% plural %}{{ counter }} users{% endblocktrans %}</li>
1606- </ul>
1607+ <ul>
1608+ <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>
1609+ <li>{% blocktrans count opportunitylists as counter %}{{ counter }} opportunity list{% plural %}{{ counter }} opportunity lists{% endblocktrans %}</li>
1610+ <li>{% blocktrans count notes as counter %}{{ counter }} note{% plural %}{{ counter }} notes{% endblocktrans %}</li>
1611+ <li>{% blocktrans count users as counter %}{{ counter }} user{% plural %}{{ counter }} users{% endblocktrans %}</li>
1612+ </ul>
1613 </div>
1614 </div>
1615
1616 <div id="faq">
1617- <div>
1618 <ul>
1619 <li>
1620- <span class="question">{% trans "What can I do with Harvest?" %}</span>
1621+ <h3 class="question">{% trans "What can I do with Harvest?" %}</h3>
1622 <p>{% blocktrans %}Harvest helps find bugs that could be easy to address, as well as changes that can improve packages. When updating your packages, take a look at the available opportunities to get a feel for what's new both in and outside Ubuntu.{% endblocktrans %}</p>
1623 </li>
1624
1625 <li>
1626- <span class="question">{% trans "Why should I log in?" %}</span>
1627- <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>
1628+ <h3 class="question">{% trans "Why should I log in?" %}</h3>
1629+ <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>
1630 <li>
1631 </li>
1632
1633 <li>
1634- <span class="question">{% trans "What are Notes?" %}</span>
1635+ <h3 class="question">{% trans "What are Notes?" %}</h3>
1636 <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>
1637 </li>
1638 </ul>
1639- </div>
1640-
1641- <div>
1642 <ul>
1643 <li>
1644- <span class="question">{% trans "Why is Harvest the way it is?" %}</span>
1645+ <h3 class="question">{% trans "Why is Harvest the way it is?" %}</h3>
1646 <p>{% blocktrans %}Harvest is based on a simple design: let others do the hard work of assembling lists. Harvest just knows packages, lists and opportunities. It doesn't know what an open or fixed bug is or who upstream is.{% endblocktrans %}</p>
1647 </li>
1648
1649 <li>
1650- <span class="question">{% trans "I found a bug. What do I do?" %}</span>
1651+ <h3 class="question">{% trans "I found a bug. What do I do?" %}</h3>
1652 <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>
1653 </li>
1654 </ul>
1655- </div>
1656 </div>
1657
1658 </div>
1659
1660=== removed file 'harvest/templates/one_column.html'
1661--- harvest/templates/one_column.html 2010-08-31 06:29:10 +0000
1662+++ harvest/templates/one_column.html 1970-01-01 00:00:00 +0000
1663@@ -1,10 +0,0 @@
1664-{% extends "base.html" %}
1665-{% load i18n %}
1666-
1667-{% block content %}
1668-<div class="one_column">
1669- <h2 class="sectiontitle">{% block pagetitle %}{% endblock %}</h2>
1670- {% block content_main %}{% endblock %}
1671-</div>
1672-{% endblock %}
1673-
1674
1675=== modified file 'harvest/templates/opportunities/filter.html'
1676--- harvest/templates/opportunities/filter.html 2011-05-02 02:39:20 +0000
1677+++ harvest/templates/opportunities/filter.html 2011-05-05 18:46:15 +0000
1678@@ -1,6 +1,8 @@
1679 {% extends "base.html" %}
1680 {% load i18n %}
1681
1682+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/opportunities.css" />{% endblock %}
1683+
1684 {% block extrahead %}
1685 <link rel="alternate" type="application/rss+xml" title="{% blocktrans %}25 newest opportunities{% endblocktrans %}" href="{% url rss_newest_opportunities %}" />
1686 {% endblock %}
1687@@ -14,7 +16,7 @@
1688 {{filters_opp.render}}
1689 </div>
1690
1691-<div id="results-pane">
1692+<div id="results-wrapper" class="main">
1693 <div id="results-status"></div>
1694 <div id="results">
1695 {% include "opportunities/include/filter_results.html" %}
1696
1697=== modified file 'harvest/templates/opportunities/include/filter_results.html'
1698--- harvest/templates/opportunities/include/filter_results.html 2010-08-13 22:09:49 +0000
1699+++ harvest/templates/opportunities/include/filter_results.html 2011-05-05 18:46:15 +0000
1700@@ -15,7 +15,7 @@
1701 {% for package in packages_list.get_visible_packages %}
1702 <li data-package-id="{{ package.real.id }}" class="sourcepackage {% if package.expanded %}expanded{% else %}collapsed{% endif %}">
1703 <a class="sourcepackage-header" href="{{ package.get_expand_toggle_url }}">
1704- <h2 class="sourcepackage-name">{{ package.real.name }}</h2>
1705+ <h3 class="sourcepackage-name">{{ package.real.name }}</h3>
1706 <span class="status"></span>
1707 {% comment %}<span class="sourcepackage-summary"></span>{% endcomment %}
1708 <div class="bottom"></div>
1709@@ -27,20 +27,20 @@
1710 </div>
1711 </li>
1712 {% endfor %}
1713-
1714- {% with packages_list.get_hidden_packages|length as hidden_count %}
1715- {% if hidden_count %}
1716- <li><small>
1717- {% blocktrans count hidden_count as counter %}
1718- {{ counter }} package has no matching opportunities
1719- {% plural %}
1720- {{ counter }} packages have no matching opportunities
1721- {% endblocktrans %}
1722- </small></li>
1723- {% endif %}
1724- {% endwith %}
1725 </ul>
1726
1727+<div class="results-footnote">
1728+{% with packages_list.get_hidden_packages|length as hidden_count %}
1729+{% if hidden_count %}
1730+ {% blocktrans count hidden_count as counter %}
1731+ {{ counter }} selected package has no matching opportunities
1732+ {% plural %}
1733+ {{ counter }} selected packages have no matching opportunities
1734+ {% endblocktrans %}
1735+{% endif %}
1736+{% endwith %}
1737+</div>
1738+
1739 {% else %}
1740
1741 <div class="results-message">
1742
1743=== modified file 'harvest/templates/opportunities/include/opportunity.html'
1744--- harvest/templates/opportunities/include/opportunity.html 2010-10-05 13:31:20 +0000
1745+++ harvest/templates/opportunities/include/opportunity.html 2011-05-05 18:46:15 +0000
1746@@ -3,9 +3,11 @@
1747 <div class="opportunity-header">
1748 <a href="{{opportunity.url}}" class="opportunity-description" target="_blank">{{ opportunity.description }}</a>
1749 <span class="actions">
1750+ {% if user.is_authenticated %}
1751 <a href="{% url opportunity_edit opportunity.id %}?next={{request.get_full_path}}" target="_blank" class="opportunity-edit-button">{% trans 'edit' %}</a>
1752 (<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>
1753 <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>)
1754+ {% endif %}
1755 </span>
1756 <span class="opportunity-summary">
1757 {{ opportunity.summary|join:', ' }}
1758
1759=== removed file 'harvest/templates/opportunities/include/package.html'
1760--- harvest/templates/opportunities/include/package.html 2010-07-30 21:45:23 +0000
1761+++ harvest/templates/opportunities/include/package.html 1970-01-01 00:00:00 +0000
1762@@ -1,14 +0,0 @@
1763-{% load i18n %}
1764-
1765-<a class="sourcepackage-header" href="{{ package.get_expand_toggle_url }}">
1766- <h2 class="sourcepackage-name">{{ package.real.name }}</h2>
1767- <span class="status"></span>
1768- {% comment %}<span class="sourcepackage-summary"></span>{% endcomment %}
1769- <div class="bottom"></div>
1770-</a>
1771-<div class="sourcepackage-details">
1772- {% if package.expanded %}
1773- {% include "opportunities/include/package_details.html" %}
1774- {% endif %}
1775-</div>
1776-
1777
1778=== modified file 'harvest/templates/opportunities/include/package_details.html'
1779--- harvest/templates/opportunities/include/package_details.html 2011-05-02 00:20:31 +0000
1780+++ harvest/templates/opportunities/include/package_details.html 2011-05-05 18:46:15 +0000
1781@@ -3,11 +3,11 @@
1782 {% regroup package.get_visible_opportunities by opportunitylist as opportunities %}
1783 {% for opplist in opportunities %}
1784 <div class="opportunity-list {% if opplist.grouper.featured %}featured{% endif %}">
1785-<h3 class="opportunity-list-title">{{ opplist.grouper }}
1786+<h4 class="opportunity-list-title">{{ opplist.grouper }}
1787 <span class="opportunity-list-summary">
1788 {% if opplist.grouper.featured %}<img src="/media/img/opplist-featured.png" alt="{% trans 'featured' %}" title="{% trans 'featured' %}" />{% endif %}
1789 </span>
1790-</h3>
1791+</h4>
1792 <ul>
1793 {# FIXME: use |dictsort:'experience'|dictsort:'description' here (see comment in wrappers.py) #}
1794 {% for opportunity in opplist.list %}
1795@@ -17,15 +17,20 @@
1796 </div>
1797 {% endfor %}
1798
1799+{% with package.get_hidden_opportunities.count as hidden_count %}
1800+{% ifnotequal hidden_count 0 %}{% ifnotequal hidden_count '' %}
1801+<div class="opportunity-list">
1802+<h4 class="opportunity-list-title">
1803+{% blocktrans count hidden_count as counter %}{{ counter }} hidden opportunity{% plural %}{{ counter }} hidden opportunities{% endblocktrans %}
1804+</h4>
1805+</div>
1806+{% endifnotequal %}{% endifnotequal %}
1807+{% endwith %}
1808+
1809 <div class="extra">
1810 <div class="actions">
1811 <a href="{% url single_package package.real.name %}" target="_blank">{% trans "Permalink" %}</a>
1812 <a href="{% url rss_single_package package.real.name %}" target="_blank">{% trans "RSS" %}</a>
1813 </div>
1814- {% with package.get_hidden_opportunities.count as hidden_count %}
1815- {% ifnotequal hidden_count 0 %}
1816- {% blocktrans count hidden_count as counter %}{{ counter }} opportunity hidden{% plural %}{{ counter }} opportunities hidden{% endblocktrans %}
1817- {% endifnotequal %}
1818- {% endwith %}
1819 <div class="bottom"></div>
1820 </div>
1821
1822=== modified file 'harvest/templates/opportunities/opportunity_edit.html'
1823--- harvest/templates/opportunities/opportunity_edit.html 2010-08-14 18:09:31 +0000
1824+++ harvest/templates/opportunities/opportunity_edit.html 2011-05-05 18:46:15 +0000
1825@@ -1,15 +1,13 @@
1826-{% extends "one_column.html" %}
1827+{% extends "base.html" %}
1828 {% load i18n %}
1829
1830+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/opportunities.css" />{% endblock %}
1831+
1832 {% block title %}{{ block.super }}: {{ opportunity.description }}{% endblock %}
1833
1834-{% block pagetitle %}
1835-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 %}
1836-{% endblock %}
1837-
1838-{% block content_main %}
1839-<div class="opportunity-details edit">
1840+{% block content %}
1841+<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>
1842+<div class="main opportunity-details edit">
1843 {% include "opportunities/include/opportunity_details_edit.html" %}
1844 </div>
1845 {% endblock %}
1846-
1847
1848=== modified file 'harvest/templates/opportunities/single_package.html'
1849--- harvest/templates/opportunities/single_package.html 2011-05-02 01:22:44 +0000
1850+++ harvest/templates/opportunities/single_package.html 2011-05-05 18:46:15 +0000
1851@@ -1,17 +1,17 @@
1852-{% extends "one_column.html" %}
1853+{% extends "base.html" %}
1854 {% load i18n %}
1855
1856+{% block extracss %}<link rel="stylesheet" href="{{ MEDIA_URL }}css/opportunities.css" />{% endblock %}
1857+
1858 {% block extrahead %}
1859 <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 %}" />
1860 {% endblock %}
1861
1862 {% block title %}{{ block.super }}: {{ package.real.name }}{% endblock %}
1863
1864-{% block pagetitle %}{{ package.real.name }}{% endblock %}
1865-
1866-{% block content_main %}
1867-<div class="sourcepackage-details">
1868+{% block content %}
1869+<h1>{{ package.real.name }}</h1>
1870+<div class="main sourcepackage-details">
1871 {% include "opportunities/include/package_details.html" %}
1872 </div>
1873 {% endblock %}
1874-

Subscribers

People subscribed via source and target branches

to all changes: