Start implementing pretty style

This commit is contained in:
Chris Done 2014-06-03 15:10:35 +02:00
parent 993f4da01c
commit 8a3ce6bd6c
20 changed files with 761 additions and 706 deletions

View File

@ -1,3 +1,6 @@
((haskell-mode . ((haskell-indent-spaces . 4) ((haskell-mode . ((haskell-indent-spaces . 4)
(haskell-process-use-ghci . t))) (haskell-process-use-ghci . t)))
(hamlet-mode . ((hamlet/basic-offset . 4)))) (hamlet-mode . ((hamlet/basic-offset . 4)
(haskell-process-use-ghci . t)))
(html-mode . ((haskell-process-use-ghci . t)))
(css-mode . ((haskell-process-use-ghci . t))))

View File

@ -1,24 +1,25 @@
module Foundation where module Foundation where
import ClassyPrelude.Yesod import ClassyPrelude.Yesod
import Yesod.Auth import Data.BlobStore
import Yesod.Auth.BrowserId import Data.Slug (safeMakeSlug, HasGenIO (getGenIO), randomSlug, Slug)
import Yesod.Auth.GoogleEmail import Data.Text (Text)
import Yesod.Default.Config
import Yesod.Default.Util (addStaticContentExternal)
import qualified Settings
import Settings.Development (development)
import qualified Database.Persist import qualified Database.Persist
import Settings.StaticFiles import Model
import Settings (widgetFile, Extra (..)) import qualified Settings
import Model import Settings (widgetFile, Extra (..))
import Text.Jasmine (minifym) import Settings.Development (development)
import Text.Hamlet (hamletFile) import Settings.StaticFiles
import Yesod.Core.Types (Logger)
import Data.Slug (safeMakeSlug, HasGenIO (getGenIO), randomSlug, Slug)
import qualified System.Random.MWC as MWC import qualified System.Random.MWC as MWC
import Data.BlobStore import Text.Hamlet (hamletFile)
import Types import Text.Jasmine (minifym)
import Types
import Yesod.Auth
import Yesod.Auth.BrowserId
import Yesod.Auth.GoogleEmail
import Yesod.Core.Types (Logger)
import Yesod.Default.Config
import Yesod.Default.Util (addStaticContentExternal)
-- | The site argument for your application. This can be a good place to -- | The site argument for your application. This can be a good place to
-- keep settings and values requiring initialization before your application -- keep settings and values requiring initialization before your application

View File

@ -2,11 +2,12 @@ module Import
( module Import ( module Import
) where ) where
import ClassyPrelude.Yesod as Import import ClassyPrelude.Yesod as Import
import Foundation as Import import Data.Text as Import (Text)
import Model as Import import Foundation as Import
import Types as Import import Model as Import
import Settings as Import import Settings as Import
import Settings.Development as Import import Settings.Development as Import
import Settings.StaticFiles as Import import Settings.StaticFiles as Import
import Yesod.Auth as Import import Types as Import
import Yesod.Auth as Import

91
design/favicon.svg Normal file
View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg11681"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="New document 88">
<defs
id="defs11683" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="14.487233"
inkscape:cy="20.91782"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="2880"
inkscape:window-height="1760"
inkscape:window-x="0"
inkscape:window-y="40"
inkscape:window-maximized="0" />
<metadata
id="metadata11686">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g6924"
transform="matrix(3.2215059,0,0,3.2215059,-19.967388,-829.48138)">
<rect
ry="2.8380694"
rx="2.8380694"
y="257.47974"
x="6.191123"
height="19.866486"
width="19.866486"
id="rect6269"
style="color:#000000;fill:#0981c3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.79500002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<g
id="g6919">
<text
xml:space="preserve"
style="font-size:8.5334816px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Impact;-inkscape-font-specification:Impact"
x="11.092716"
y="272.1561"
id="text5279-1-1-2-8-7-2"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5281-4-7-5-0-7-2"
x="11.092716"
y="272.1561"
style="font-size:14.99260807px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:Impact;-inkscape-font-specification:Impact">S</tspan></text>
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.79500002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect6209-0"
width="11.008171"
height="1.4448224"
x="10.625607"
y="272.2153" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because it is too large Load Diff

View File

@ -110,7 +110,7 @@
@media (min-width: 1200px) { @media (min-width: 1200px) {
.row { .row {
margin-left: -30px; margin-left: -20px;
*zoom: 1; *zoom: 1;
} }
.row:before, .row:before,
@ -125,85 +125,85 @@
[class*="span"] { [class*="span"] {
float: left; float: left;
min-height: 1px; min-height: 1px;
margin-left: 30px; margin-left: 20px;
} }
.container, .container,
.navbar-static-top .container, .navbar-static-top .container,
.navbar-fixed-top .container, .navbar-fixed-top .container,
.navbar-fixed-bottom .container { .navbar-fixed-bottom .container {
width: 1170px; width: 724px;
} }
.span12 { .span12 {
width: 1170px; width: 724px;
} }
.span11 { .span11 {
width: 1070px; width: 662px;
} }
.span10 { .span10 {
width: 970px; width: 600px;
} }
.span9 { .span9 {
width: 870px; width: 538px;
} }
.span8 { .span8 {
width: 770px; width: 476px;
} }
.span7 { .span7 {
width: 670px; width: 414px;
} }
.span6 { .span6 {
width: 570px; width: 352px;
} }
.span5 { .span5 {
width: 470px; width: 290px;
} }
.span4 { .span4 {
width: 370px; width: 228px;
} }
.span3 { .span3 {
width: 270px; width: 166px;
} }
.span2 { .span2 {
width: 170px; width: 104px;
} }
.span1 { .span1 {
width: 70px; width: 42px;
} }
.offset12 { .offset12 {
margin-left: 1230px; margin-left: 764px;
} }
.offset11 { .offset11 {
margin-left: 1130px; margin-left: 702px;
} }
.offset10 { .offset10 {
margin-left: 1030px; margin-left: 640px;
} }
.offset9 { .offset9 {
margin-left: 930px; margin-left: 578px;
} }
.offset8 { .offset8 {
margin-left: 830px; margin-left: 516px;
} }
.offset7 { .offset7 {
margin-left: 730px; margin-left: 454px;
} }
.offset6 { .offset6 {
margin-left: 630px; margin-left: 392px;
} }
.offset5 { .offset5 {
margin-left: 530px;
}
.offset4 {
margin-left: 430px;
}
.offset3 {
margin-left: 330px; margin-left: 330px;
} }
.offset4 {
margin-left: 268px;
}
.offset3 {
margin-left: 206px;
}
.offset2 { .offset2 {
margin-left: 230px; margin-left: 144px;
} }
.offset1 { .offset1 {
margin-left: 130px; margin-left: 82px;
} }
.row-fluid { .row-fluid {
width: 100%; width: 100%;
@ -223,8 +223,8 @@
float: left; float: left;
width: 100%; width: 100%;
min-height: 30px; min-height: 30px;
margin-left: 2.564102564102564%; margin-left: 2.7624309392265194%;
*margin-left: 2.5109110747408616%; *margin-left: 2.709239449864817%;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
@ -233,151 +233,151 @@
margin-left: 0; margin-left: 0;
} }
.row-fluid .controls-row [class*="span"] + [class*="span"] { .row-fluid .controls-row [class*="span"] + [class*="span"] {
margin-left: 2.564102564102564%; margin-left: 2.7624309392265194%;
} }
.row-fluid .span12 { .row-fluid .span12 {
width: 100%; width: 100%;
*width: 99.94680851063829%; *width: 99.94680851063829%;
} }
.row-fluid .span11 { .row-fluid .span11 {
width: 91.45299145299145%; width: 91.43646408839778%;
*width: 91.39979996362975%; *width: 91.38327259903608%;
} }
.row-fluid .span10 { .row-fluid .span10 {
width: 82.90598290598291%; width: 82.87292817679558%;
*width: 82.8527914166212%; *width: 82.81973668743387%;
} }
.row-fluid .span9 { .row-fluid .span9 {
width: 74.35897435897436%; width: 74.30939226519337%;
*width: 74.30578286961266%; *width: 74.25620077583166%;
} }
.row-fluid .span8 { .row-fluid .span8 {
width: 65.81196581196582%; width: 65.74585635359117%;
*width: 65.75877432260411%; *width: 65.69266486422946%;
} }
.row-fluid .span7 { .row-fluid .span7 {
width: 57.26495726495726%; width: 57.18232044198895%;
*width: 57.21176577559556%; *width: 57.12912895262725%;
} }
.row-fluid .span6 { .row-fluid .span6 {
width: 48.717948717948715%; width: 48.61878453038674%;
*width: 48.664757228587014%; *width: 48.56559304102504%;
} }
.row-fluid .span5 { .row-fluid .span5 {
width: 40.17094017094017%; width: 40.05524861878453%;
*width: 40.11774868157847%; *width: 40.00205712942283%;
} }
.row-fluid .span4 { .row-fluid .span4 {
width: 31.623931623931625%; width: 31.491712707182323%;
*width: 31.570740134569924%; *width: 31.43852121782062%;
} }
.row-fluid .span3 { .row-fluid .span3 {
width: 23.076923076923077%; width: 22.92817679558011%;
*width: 23.023731587561375%; *width: 22.87498530621841%;
} }
.row-fluid .span2 { .row-fluid .span2 {
width: 14.52991452991453%; width: 14.3646408839779%;
*width: 14.476723040552828%; *width: 14.311449394616199%;
} }
.row-fluid .span1 { .row-fluid .span1 {
width: 5.982905982905983%; width: 5.801104972375691%;
*width: 5.929714493544281%; *width: 5.747913483013988%;
} }
.row-fluid .offset12 { .row-fluid .offset12 {
margin-left: 105.12820512820512%; margin-left: 105.52486187845304%;
*margin-left: 105.02182214948171%; *margin-left: 105.41847889972962%;
} }
.row-fluid .offset12:first-child { .row-fluid .offset12:first-child {
margin-left: 102.56410256410257%; margin-left: 102.76243093922652%;
*margin-left: 102.45771958537915%; *margin-left: 102.6560479605031%;
} }
.row-fluid .offset11 { .row-fluid .offset11 {
margin-left: 96.58119658119658%; margin-left: 96.96132596685082%;
*margin-left: 96.47481360247316%; *margin-left: 96.8549429881274%;
} }
.row-fluid .offset11:first-child { .row-fluid .offset11:first-child {
margin-left: 94.01709401709402%; margin-left: 94.1988950276243%;
*margin-left: 93.91071103837061%; *margin-left: 94.09251204890089%;
} }
.row-fluid .offset10 { .row-fluid .offset10 {
margin-left: 88.03418803418803%; margin-left: 88.39779005524862%;
*margin-left: 87.92780505546462%; *margin-left: 88.2914070765252%;
} }
.row-fluid .offset10:first-child { .row-fluid .offset10:first-child {
margin-left: 85.47008547008548%; margin-left: 85.6353591160221%;
*margin-left: 85.36370249136206%; *margin-left: 85.52897613729868%;
} }
.row-fluid .offset9 { .row-fluid .offset9 {
margin-left: 79.48717948717949%; margin-left: 79.8342541436464%;
*margin-left: 79.38079650845607%; *margin-left: 79.72787116492299%;
} }
.row-fluid .offset9:first-child { .row-fluid .offset9:first-child {
margin-left: 76.92307692307693%; margin-left: 77.07182320441989%;
*margin-left: 76.81669394435352%; *margin-left: 76.96544022569647%;
} }
.row-fluid .offset8 { .row-fluid .offset8 {
margin-left: 70.94017094017094%; margin-left: 71.2707182320442%;
*margin-left: 70.83378796144753%; *margin-left: 71.16433525332079%;
} }
.row-fluid .offset8:first-child { .row-fluid .offset8:first-child {
margin-left: 68.37606837606839%; margin-left: 68.50828729281768%;
*margin-left: 68.26968539734497%; *margin-left: 68.40190431409427%;
} }
.row-fluid .offset7 { .row-fluid .offset7 {
margin-left: 62.393162393162385%; margin-left: 62.70718232044199%;
*margin-left: 62.28677941443899%; *margin-left: 62.600799341718584%;
} }
.row-fluid .offset7:first-child { .row-fluid .offset7:first-child {
margin-left: 59.82905982905982%; margin-left: 59.94475138121547%;
*margin-left: 59.72267685033642%; *margin-left: 59.838368402492065%;
} }
.row-fluid .offset6 { .row-fluid .offset6 {
margin-left: 53.84615384615384%; margin-left: 54.14364640883978%;
*margin-left: 53.739770867430444%; *margin-left: 54.037263430116376%;
} }
.row-fluid .offset6:first-child { .row-fluid .offset6:first-child {
margin-left: 51.28205128205128%; margin-left: 51.38121546961326%;
*margin-left: 51.175668303327875%; *margin-left: 51.27483249088986%;
} }
.row-fluid .offset5 { .row-fluid .offset5 {
margin-left: 45.299145299145295%; margin-left: 45.58011049723757%;
*margin-left: 45.1927623204219%; *margin-left: 45.47372751851417%;
} }
.row-fluid .offset5:first-child { .row-fluid .offset5:first-child {
margin-left: 42.73504273504273%; margin-left: 42.81767955801105%;
*margin-left: 42.62865975631933%; *margin-left: 42.71129657928765%;
} }
.row-fluid .offset4 { .row-fluid .offset4 {
margin-left: 36.75213675213675%; margin-left: 37.01657458563536%;
*margin-left: 36.645753773413354%; *margin-left: 36.91019160691196%;
} }
.row-fluid .offset4:first-child { .row-fluid .offset4:first-child {
margin-left: 34.18803418803419%; margin-left: 34.25414364640884%;
*margin-left: 34.081651209310785%; *margin-left: 34.14776066768544%;
} }
.row-fluid .offset3 { .row-fluid .offset3 {
margin-left: 28.205128205128204%; margin-left: 28.45303867403315%;
*margin-left: 28.0987452264048%; *margin-left: 28.346655695309746%;
} }
.row-fluid .offset3:first-child { .row-fluid .offset3:first-child {
margin-left: 25.641025641025642%; margin-left: 25.69060773480663%;
*margin-left: 25.53464266230224%; *margin-left: 25.584224756083227%;
} }
.row-fluid .offset2 { .row-fluid .offset2 {
margin-left: 19.65811965811966%; margin-left: 19.88950276243094%;
*margin-left: 19.551736679396257%; *margin-left: 19.783119783707537%;
} }
.row-fluid .offset2:first-child { .row-fluid .offset2:first-child {
margin-left: 17.094017094017094%; margin-left: 17.12707182320442%;
*margin-left: 16.98763411529369%; *margin-left: 17.02068884448102%;
} }
.row-fluid .offset1 { .row-fluid .offset1 {
margin-left: 11.11111111111111%; margin-left: 11.32596685082873%;
*margin-left: 11.004728132387708%; *margin-left: 11.219583872105325%;
} }
.row-fluid .offset1:first-child { .row-fluid .offset1:first-child {
margin-left: 8.547008547008547%; margin-left: 8.56353591160221%;
*margin-left: 8.440625568285142%; *margin-left: 8.457152932878806%;
} }
input, input,
textarea, textarea,
@ -385,76 +385,67 @@
margin-left: 0; margin-left: 0;
} }
.controls-row [class*="span"] + [class*="span"] { .controls-row [class*="span"] + [class*="span"] {
margin-left: 30px; margin-left: 20px;
} }
input.span12, input.span12,
textarea.span12, textarea.span12,
.uneditable-input.span12 { .uneditable-input.span12 {
width: 1156px; width: 710px;
} }
input.span11, input.span11,
textarea.span11, textarea.span11,
.uneditable-input.span11 { .uneditable-input.span11 {
width: 1056px; width: 648px;
} }
input.span10, input.span10,
textarea.span10, textarea.span10,
.uneditable-input.span10 { .uneditable-input.span10 {
width: 956px; width: 586px;
} }
input.span9, input.span9,
textarea.span9, textarea.span9,
.uneditable-input.span9 { .uneditable-input.span9 {
width: 856px; width: 524px;
} }
input.span8, input.span8,
textarea.span8, textarea.span8,
.uneditable-input.span8 { .uneditable-input.span8 {
width: 756px; width: 462px;
} }
input.span7, input.span7,
textarea.span7, textarea.span7,
.uneditable-input.span7 { .uneditable-input.span7 {
width: 656px; width: 400px;
} }
input.span6, input.span6,
textarea.span6, textarea.span6,
.uneditable-input.span6 { .uneditable-input.span6 {
width: 556px; width: 338px;
} }
input.span5, input.span5,
textarea.span5, textarea.span5,
.uneditable-input.span5 { .uneditable-input.span5 {
width: 456px; width: 276px;
} }
input.span4, input.span4,
textarea.span4, textarea.span4,
.uneditable-input.span4 { .uneditable-input.span4 {
width: 356px; width: 214px;
} }
input.span3, input.span3,
textarea.span3, textarea.span3,
.uneditable-input.span3 { .uneditable-input.span3 {
width: 256px; width: 152px;
} }
input.span2, input.span2,
textarea.span2, textarea.span2,
.uneditable-input.span2 { .uneditable-input.span2 {
width: 156px; width: 90px;
} }
input.span1, input.span1,
textarea.span1, textarea.span1,
.uneditable-input.span1 { .uneditable-input.span1 {
width: 56px; width: 28px;
}
.thumbnails {
margin-left: -30px;
}
.thumbnails > li {
margin-left: 30px;
}
.row-fluid .thumbnails {
margin-left: 0;
} }
} }

BIN
static/img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

BIN
static/img/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

BIN
static/img/github.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
static/img/haskell.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 59 KiB

BIN
static/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
static/img/ping.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
static/img/screenie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -7,6 +7,7 @@ $newline never
<html class="no-js" lang="en"> <!--<![endif]--> <html class="no-js" lang="en"> <!--<![endif]-->
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="shortcut icon" href=@{StaticR img_favicon_ico} />
<title> <title>
#{pageTitle pc} #{pageTitle pc}
@ -16,7 +17,7 @@ $newline never
<meta name="author" content=""> <meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet" type="text/css">
^{pageHead pc} ^{pageHead pc}

View File

@ -1,27 +1,26 @@
<div .wrap> <div .wrap>
<div .container> <div .container>
<div .navbar role=navigation> <a .logo href=@{HomeR}>
<div .navbar-inner> <img src=@{StaticR img_logo_png}>
<a .brand href=@{HomeR}>
Stackage <div .navbar .navbar-default role=navigation>
<ul .nav> <ul .nav>
<li> <li>
<a href=@{AllSnapshotsR}> <a href=@{AllSnapshotsR}>
All Snapshots All Snapshots
<li> <li>
<a href=@{UploadStackageR}> <a href=@{UploadStackageR}>
Upload Upload
<ul .nav .pull-right> $maybe Entity _ user <- muser
$maybe Entity _ user <- muser <li>
<li> <a href=@{ProfileR}>
<a href=@{ProfileR}> <span .user-handle>
<span .user-handle> #{userHandle user}
#{userHandle user} <li>
<li> <a href=@{AuthR LogoutR}>Logout
<a href=@{AuthR LogoutR}>Logout $nothing
$nothing <li>
<li> <a href=@{AuthR LoginR}>Login
<a href=@{AuthR LoginR}>Login
$maybe msg <- mmsg $maybe msg <- mmsg
<div .container> <div .container>

View File

@ -8,132 +8,101 @@ html {
} }
body { body {
background: #fff; background: #f0f0f0;
margin:0 0 4em; margin:0 0 4em;
padding:0; padding:0;
font-family: 'Open Sans'; /* font-family: 'Open Sans'; */
font-family: Sawasdee;
text-shadow: 1px 1px 1px #ffffff;
font-size: 20px;
line-height: 24px;
} }
.wrap { p {
background:#fff;
padding-bottom:2em;
padding-left: 15px;
padding-right: 15px;
}
h1 {
font-size: 30px;
line-height: 40px;
font-weight: normal;
}
h2 {
font-size: 25px;
margin-top: 15px;
}
.media-top {
margin-top: 20px; margin-top: 20px;
} }
h3 { .wrap {
font-size: 15px; padding-top: 2em;
padding-left: 15px;
padding-right: 15px;
padding-bottom: 2em;
} }
code { h1 {
color: #9f1ec0; font-weight: normal;
font-size: 50px;
line-height: 55px;
margin-bottom: 30px;
} }
a code { h2 {
color: inherit; font-weight: normal;
background: 0; color: #06537d;
padding: 0; font-size: 45px;
margin-top: 50px;
margin-bottom: 40px;
}
li + li {
margin-top: 0.5em;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Logo
*/
.logo {
display: block;
width: 300px;
border: 0; border: 0;
} }
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Navigation Navbar
*/ */
.navbar .nav > li > a {
padding-left: 0;
color: #0981c3 !important;
}
.navbar { .navbar {
margin-top: 10px; margin-top: 20px;
margin-bottom: 0; font-size: 25px;
.brand { .nav {
color: #0088cc; margin: auto;
padding-left: 0;
} }
.nav > li > a { li {
color: #0088cc; margin-top: 0;
}
.navbar-inner {
box-shadow: none;
border: 0;
background: inherit;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.user-handle {
max-width: 15em;
overflow: hidden;
white-space: nowrap;
display: inline-block;
text-overflow: ellipsis;
} }
} }
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Footer Footer
*/ */
.footer { .footer {
text-shadow: none;
background: #0981c3;
border-top: 1px solid #ddd; border-top: 1px solid #ddd;
background-color: #eee; color: #fff;
color: #777;
position: absolute; position: absolute;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
height: 4em; height: 4em;
line-height: 2em; line-height: 2em;
text-align: center;
a {
color: #fff;
font-weight: bold;
}
.span12 { .span12 {
padding: 0px 15px 0 0; padding: 0px 15px 0 0;
line-height: 4em; line-height: 4em;
} }
} }
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Responsiveness
*/
.container {
max-width: 724px;
}
.span12 {
width: auto;
}
@media (max-width: 979px) {
.navbar-inner {
padding-left: 0;
}
}
@media (max-width: 767px) {
.navbar .nav.pull-right {
float: none;
display: block;
clear: left;
margin-left: -15px;
}
}
@media (max-width: 480px) {
.navbar .brand + .nav {
float: none;
display: block;
clear: left;
margin-left: -15px;
}
}

View File

@ -1,87 +1,67 @@
<div .container> <div .container>
<h2 .recommended-snapshots>Recommended Snapshots
<ul .snapshots>
$forall (E.Value ident, E.Value title, E.Value uploaded, E.Value display, E.Value handle) <- stackages
<li>
<a href=@{StackageHomeR ident}>
#{title}
<h1> <h1>
Stackage is an infrastructure to create stable builds of complete package sets. Think “stable Hackage”. Stackage is an infrastructure to create stable builds
<div .recommended-snapshots> of complete package sets. Think “stable Hackage”.
<h2>Recommended Snapshots
<ul .snapshots> <h2 .how-stackage-works>How Stackage Works
$forall (E.Value ident, E.Value title, E.Value uploaded, E.Value display, E.Value handle) <- stackages <div .row .stackage-process>
<li> <div .span3>
<a href=@{StackageHomeR ident}> <img src=@{StaticR img_github_png} .github>
#{title} <div .span9>
<div .how-it-works> <p>
<h2>How Stackage Works Open a pull request on the Github repository.
<div .row .media-top> <div .row .stackage-process>
<div .span12> <div .span9>
<div .media> <p>
<a .pull-left> Once checked, it's merged and run through Jenkins.
<img .media-object src=@{StaticR img_open_pr_png}> <div .span3>
<div .media-body> <img src=@{StaticR img_jenkins_png} .jenkins>
<h4 .media-heading> <div .row .stackage-process>
Submission <div .span3>
<div .media> <img src=@{StaticR img_ping_png} .ping>
A contributor (either an author of a package, or a kind <div .span9>
soul) submits a patch to the Github repository. The pack <p>
will be checked and then be merged in. Authors are notified on Github if any problems arise with their package.
<div .media> <div .row .stackage-process>
<a .pull-left> <div .span9>
<img .media-object src=@{StaticR img_jenkins_png}> <p>
<div .media-body> If the build succeeds, a new Stackage snapshot is created.
<h4 .media-heading> <div .span3>
Testing <img src=@{StaticR img_stackage_png} .stackage>
<div .media> <div .row .stackage-process>
The update is sent to a Jenkins build system at <div .span3>
<a href="http://jenkins.stackage.org/"> <img src=@{StaticR img_haskell_png} .haskell>
jenkins.stackage.org <div .span9>
in the cloud. There is a daily build which takes <p>
about 8 hours. The community can start using the new snapshot immediately!
<div .media>
<a .pull-left> <div .row .steps-to-contribute>
<img .media-object src=@{StaticR img_bump_png}> <div .span12>
<div .media-body> <h2>Steps to Contribute
<h4 .media-heading> <ul>
Notification <li>Open the Stackage project on Github.
<div .media> <li>Fork it.
If a build failure occurs, the submitter is notified <li>Add a line to the Stackage.Config module.
via a Github issue and pinged via their <li>Push to your fork.
<code>@name</code>. Also, any authors of packages <li>Open a pull request.
which now fail to build will be notified. <p>
<div .media> Once you have submitted the pull request, a build will be started.
<a .pull-left> There is a dedicated jenkins server at this location: jenkins.stackage.org
<img .media-object src=@{StaticR img_stackage_png}> From there you can track the progress, status and
<div .media-body> results of Stackage builds.
<h4 .media-heading>
Snapshot <div .row .businesses>
<div .media> <div .span12>
If the build succeeds, a new snapshot is created. The new <h2>Stackage for businesses
snapshot is used by the community. <p>
<div .contributing> We're offering custom installations for businesses who want to
<h2>Contributing build their development platform upon Stackage. If you're
<p>The steps are simple: considering this for your business and want to find out more,
<ul> please email us at: sales@fpcomplete.com
<li>
Open the
<a href="https://github.com/fpco/stackage">
Stackage project on Github.
<li>Fork it.
<li>
<a href="https://github.com/fpco/stackage#get-your-package-included">
Add a line to the
<code>
Stackage.Config
module.
<li>Push to your fork.
<li>Open a pull request.
<p> Once you have submitted the pull request, a build will be
started. There is a dedicated jenkins server at this location:
<a href="http://jenkins.stackage.org/">
jenkins.stackage.org.
From here you can track the progress, status and results
of Stackage builds.
<div .businesses>
<h2>Stackage for businesses
<p> We're offering custom installations for businesses who want to
build their development platform upon Stackage. If you're
considering this for your business and want to find out more,
please email us at:
<a href="mailto:sales@fpcomplete.com">
sales@fpcomplete.com

View File

@ -1,19 +1,62 @@
h1 {
margin-top: 50px;
}
.recommended-snapshots {
margin-top: 30px;
}
.how-stackage-works {
margin-bottom: 50px;
}
.snapshots { .snapshots {
margin-left: 0; margin-left: 0;
padding-left: 0; padding-left: 0;
li { li {
list-style-type: none; list-style-type: none;
} margin-left: 0;
li + li { padding-left: 0;
margin-top: 0.5em; font-weight: bold;
} }
} }
.how-it-works { .stackage-process {
.media .pull-left { p {
font-size: 30px;
line-height: 35px;
}
.github {
width: 150px;
}
.jenkins {
width: 100px; width: 100px;
height: 100px; }
background: #eee; .ping {
border: 2px solid #eee; width: 100px;
}
.stackage {
width: 100px;
}
.haskell {
width: 120px;
} }
} }
.stackage-process + .stackage-process {
margin-top: 50px;
}
/* .steps-to-contribute { */
/* ul { */
/* margin-top: 30px; */
/* text-align: left; */
/* } */
/* ul, li, p { */
/* font-size: 20px; */
/* line-height: 25px; */
/* } */
/* li { */
/* margin-bottom: 0.5em */
/* } */
/* } */