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-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
import ClassyPrelude.Yesod
import Yesod.Auth
import Yesod.Auth.BrowserId
import Yesod.Auth.GoogleEmail
import Yesod.Default.Config
import Yesod.Default.Util (addStaticContentExternal)
import qualified Settings
import Settings.Development (development)
import ClassyPrelude.Yesod
import Data.BlobStore
import Data.Slug (safeMakeSlug, HasGenIO (getGenIO), randomSlug, Slug)
import Data.Text (Text)
import qualified Database.Persist
import Settings.StaticFiles
import Settings (widgetFile, Extra (..))
import Model
import Text.Jasmine (minifym)
import Text.Hamlet (hamletFile)
import Yesod.Core.Types (Logger)
import Data.Slug (safeMakeSlug, HasGenIO (getGenIO), randomSlug, Slug)
import Model
import qualified Settings
import Settings (widgetFile, Extra (..))
import Settings.Development (development)
import Settings.StaticFiles
import qualified System.Random.MWC as MWC
import Data.BlobStore
import Types
import Text.Hamlet (hamletFile)
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
-- keep settings and values requiring initialization before your application

View File

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

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]-->
<head>
<meta charset="UTF-8">
<link rel="shortcut icon" href=@{StaticR img_favicon_ico} />
<title>
#{pageTitle pc}
@ -16,7 +17,7 @@ $newline never
<meta name="author" content="">
<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}

View File

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

View File

@ -8,132 +8,101 @@ html {
}
body {
background: #fff;
background: #f0f0f0;
margin:0 0 4em;
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 {
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 {
p {
margin-top: 20px;
}
h3 {
font-size: 15px;
.wrap {
padding-top: 2em;
padding-left: 15px;
padding-right: 15px;
padding-bottom: 2em;
}
code {
color: #9f1ec0;
h1 {
font-weight: normal;
font-size: 50px;
line-height: 55px;
margin-bottom: 30px;
}
a code {
color: inherit;
background: 0;
padding: 0;
h2 {
font-weight: normal;
color: #06537d;
font-size: 45px;
margin-top: 50px;
margin-bottom: 40px;
}
li + li {
margin-top: 0.5em;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Logo
*/
.logo {
display: block;
width: 300px;
border: 0;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Navigation
Navbar
*/
.navbar .nav > li > a {
padding-left: 0;
color: #0981c3 !important;
}
.navbar {
margin-top: 10px;
margin-bottom: 0;
.brand {
color: #0088cc;
padding-left: 0;
margin-top: 20px;
font-size: 25px;
.nav {
margin: auto;
}
.nav > li > a {
color: #0088cc;
}
.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;
li {
margin-top: 0;
}
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Footer
*/
.footer {
text-shadow: none;
background: #0981c3;
border-top: 1px solid #ddd;
background-color: #eee;
color: #777;
color: #fff;
position: absolute;
bottom: 0;
width: 100%;
height: 4em;
line-height: 2em;
text-align: center;
a {
color: #fff;
font-weight: bold;
}
.span12 {
padding: 0px 15px 0 0;
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>
<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>
Stackage is an infrastructure to create stable builds of complete package sets. Think “stable Hackage”.
<div .recommended-snapshots>
<h2>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}
<div .how-it-works>
<h2>How Stackage Works
<div .row .media-top>
<div .span12>
<div .media>
<a .pull-left>
<img .media-object src=@{StaticR img_open_pr_png}>
<div .media-body>
<h4 .media-heading>
Submission
<div .media>
A contributor (either an author of a package, or a kind
soul) submits a patch to the Github repository. The pack
will be checked and then be merged in.
<div .media>
<a .pull-left>
<img .media-object src=@{StaticR img_jenkins_png}>
<div .media-body>
<h4 .media-heading>
Testing
<div .media>
The update is sent to a Jenkins build system at
<a href="http://jenkins.stackage.org/">
jenkins.stackage.org
in the cloud. There is a daily build which takes
about 8 hours.
<div .media>
<a .pull-left>
<img .media-object src=@{StaticR img_bump_png}>
<div .media-body>
<h4 .media-heading>
Notification
<div .media>
If a build failure occurs, the submitter is notified
via a Github issue and pinged via their
<code>@name</code>. Also, any authors of packages
which now fail to build will be notified.
<div .media>
<a .pull-left>
<img .media-object src=@{StaticR img_stackage_png}>
<div .media-body>
<h4 .media-heading>
Snapshot
<div .media>
If the build succeeds, a new snapshot is created. The new
snapshot is used by the community.
<div .contributing>
<h2>Contributing
<p>The steps are simple:
<ul>
<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
Stackage is an infrastructure to create stable builds
of complete package sets. Think “stable Hackage”.
<h2 .how-stackage-works>How Stackage Works
<div .row .stackage-process>
<div .span3>
<img src=@{StaticR img_github_png} .github>
<div .span9>
<p>
Open a pull request on the Github repository.
<div .row .stackage-process>
<div .span9>
<p>
Once checked, it's merged and run through Jenkins.
<div .span3>
<img src=@{StaticR img_jenkins_png} .jenkins>
<div .row .stackage-process>
<div .span3>
<img src=@{StaticR img_ping_png} .ping>
<div .span9>
<p>
Authors are notified on Github if any problems arise with their package.
<div .row .stackage-process>
<div .span9>
<p>
If the build succeeds, a new Stackage snapshot is created.
<div .span3>
<img src=@{StaticR img_stackage_png} .stackage>
<div .row .stackage-process>
<div .span3>
<img src=@{StaticR img_haskell_png} .haskell>
<div .span9>
<p>
The community can start using the new snapshot immediately!
<div .row .steps-to-contribute>
<div .span12>
<h2>Steps to Contribute
<ul>
<li>Open the Stackage project on Github.
<li>Fork it.
<li>Add a line to the 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: jenkins.stackage.org
From there you can track the progress, status and
results of Stackage builds.
<div .row .businesses>
<div .span12>
<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: 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 {
margin-left: 0;
padding-left: 0;
li {
list-style-type: none;
}
li + li {
margin-top: 0.5em;
margin-left: 0;
padding-left: 0;
font-weight: bold;
}
}
.how-it-works {
.media .pull-left {
.stackage-process {
p {
font-size: 30px;
line-height: 35px;
}
.github {
width: 150px;
}
.jenkins {
width: 100px;
height: 100px;
background: #eee;
border: 2px solid #eee;
}
.ping {
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 */
/* } */
/* } */