Start implementing pretty style
@ -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))))
|
||||
|
||||
@ -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
|
||||
|
||||
17
Import.hs
@ -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
@ -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 |
676
static/css/bootstrap.css
vendored
241
static/css/bootstrap.responsive.css
vendored
@ -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
|
After Width: | Height: | Size: 543 B |
BIN
static/img/favicon.png
Normal file
|
After Width: | Height: | Size: 595 B |
BIN
static/img/github.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
static/img/haskell.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 59 KiB |
BIN
static/img/logo.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
static/img/ping.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
static/img/screenie.png
Normal file
|
After Width: | Height: | Size: 271 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 41 KiB |
@ -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}
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 */
|
||||
/* } */
|
||||
/* } */
|
||||
|
||||