Merge pull request #309 from TomK32/master
Small improvements to make the web output valid HTML
This commit is contained in:
		
						commit
						29267ecaf2
					
				| @ -124,12 +124,11 @@ instance Yesod App where | ||||
|     --     hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet") | ||||
| 
 | ||||
|         pc <- widgetToPageContent $ do | ||||
|             $(widgetFile "normalize") | ||||
|             addStylesheet $ StaticR css_bootstrap_min_css | ||||
|              -- load these things early, in HEAD: | ||||
|             toWidgetHead [hamlet| | ||||
|                           <script type="text/javascript" src="@{StaticR js_jquery_min_js}"></script> | ||||
|                           <script type="text/javascript" src="@{StaticR js_typeahead_bundle_min_js}"></script> | ||||
|                           <script type="text/javascript" src="@{StaticR js_jquery_min_js}"> | ||||
|                           <script type="text/javascript" src="@{StaticR js_typeahead_bundle_min_js}"> | ||||
|                          |] | ||||
|             addScript $ StaticR js_bootstrap_min_js | ||||
|             -- addScript $ StaticR js_typeahead_bundle_min_js | ||||
| @ -347,7 +346,9 @@ addform _ vd@VD{..} = [hamlet| | ||||
|     ^{postingfields vd n} | ||||
|   <span style="padding-left:2em;"> | ||||
|    <span .small> | ||||
|      Tab in last field for <a .small href="#" onclick="addformAddPosting(); return false;">more</a> (or ctrl +, ctrl -) | ||||
|      Tab in last field for | ||||
|      <a href="#" onclick="addformAddPosting(); return false;">more | ||||
|      (or ctrl +, ctrl -) | ||||
| |] | ||||
|  where | ||||
|   defdate = "today" :: String | ||||
|  | ||||
| @ -138,7 +138,7 @@ searchform VD{..} = [hamlet| | ||||
| --   <tr#addbuttonrow> | ||||
| --    <td> | ||||
| --     <span.help>^{formathelp} | ||||
| --    <td align=right> | ||||
| --    <td> | ||||
| --     <span.help> | ||||
| --      Are you sure ? This will overwrite the journal. # | ||||
| --     <input type=hidden name=action value=edit> | ||||
| @ -193,7 +193,7 @@ balanceReportAsHtml _ vd@VD{..} (items',total) = | ||||
|    <td colspan=2> | ||||
|   <tr> | ||||
|    <td> | ||||
|    <td.balance align=right>#{mixedAmountAsHtml total} | ||||
|    <td.balance>#{mixedAmountAsHtml total} | ||||
| |] | ||||
|  where | ||||
|    l = ledgerFromJournal Any j | ||||
| @ -210,11 +210,11 @@ balanceReportAsHtml _ vd@VD{..} (items',total) = | ||||
|        | ||||
|      <a href="@?{acctonlyquery}" title="Show transactions affecting this account but not subaccounts">only | ||||
| 
 | ||||
|  <td.balance align=right>#{mixedAmountAsHtml abal} | ||||
|  <td.balance>#{mixedAmountAsHtml abal} | ||||
| |] | ||||
|      where | ||||
|        hassubs = not $ maybe False (null.asubs) $ ledgerAccount l acct | ||||
|  -- <td.numpostings align=right title="#{numpostings} transactions in this account">(#{numpostings}) | ||||
|  -- <td.numpostings title="#{numpostings} transactions in this account">(#{numpostings}) | ||||
|        -- numpostings = maybe 0 (length.apostings) $ ledgerAccount l acct | ||||
|        depthclass = "depth"++show aindent | ||||
|        inacctclass = case inacctmatcher of | ||||
|  | ||||
| @ -35,7 +35,7 @@ getJournalR = do | ||||
|   hledgerLayout vd "journal" [hamlet| | ||||
|        <h2#contenttitle>#{title} | ||||
|        <!-- p>Journal entries record movements of commodities between accounts. --> | ||||
|        <a#addformlink role="button" style="cursor:pointer;" onClick="addformReset(true);" data-toggle="modal" data-target="#addmodal"  title="Add a new transaction to the journal" style="margin-top:1em;">Add a transaction | ||||
|        <a#addformlink role="button" style="cursor:pointer; margin-top:1em;" onClick="addformReset(true);" data-toggle="modal" data-target="#addmodal"  itle="Add a new transaction to the journal" >Add a transaction | ||||
|        ^{maincontent} | ||||
|      |] | ||||
| 
 | ||||
| @ -59,20 +59,21 @@ journalTransactionsReportAsHtml _ vd (_,items) = [hamlet| | ||||
|  where | ||||
| -- .#{datetransition} | ||||
|    itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute | ||||
|    itemAsHtml VD{..} (n, _, _, _, (t, _, split, _, amt, _)) = [hamlet| | ||||
| <tr ##{date} .item.#{evenodd}.#{firstposting} style="vertical-align:top;" title="#{show t}"> | ||||
|    itemAsHtml VD{..} (n, _, _, _, (torig, _, split, _, amt, _)) = [hamlet| | ||||
| <tbody ##{tindex torig}> | ||||
|   <tr .item.#{evenodd}.#{firstposting} style="vertical-align:top;" title="#{show torig}"> | ||||
|    <td.date>#{date} | ||||
|    <td.description colspan=2>#{elideRight 60 desc} | ||||
|    <td.amount style="text-align:right;"> | ||||
|     $if showamt | ||||
|      \#{mixedAmountAsHtml amt} | ||||
| $forall p' <- tpostings t | ||||
|  <tr .item.#{evenodd}.posting title="#{show t}"> | ||||
|   $forall p' <- tpostings torig | ||||
|    <tr .item.#{evenodd}.posting title="#{show torig}"> | ||||
|     <td.date> | ||||
|     <td.description> | ||||
|     <td.account> | ||||
|        | ||||
|    <a href="@?{acctlink (paccount p')}##{date}" title="#{paccount p'}">#{elideAccountName 40 $ paccount p'} | ||||
|      <a href="@?{acctlink (paccount p')}##{tindex torig}" title="#{paccount p'}">#{elideAccountName 40 $ paccount p'} | ||||
|     <td.amount style="text-align:right;">#{mixedAmountAsHtml $ pamount p'} | ||||
|   <tr.#{evenodd}> | ||||
|    <td>  | ||||
| @ -86,7 +87,7 @@ $forall p' <- tpostings t | ||||
|        -- datetransition | newm = "newmonth" | ||||
|        --                | newd = "newday" | ||||
|        --                | otherwise = "" :: String | ||||
|        (firstposting, date, desc) = (False, show $ tdate t, tdescription t) | ||||
|        (firstposting, date, desc) = (False, show $ tdate torig, tdescription torig) | ||||
|        -- acctquery = (here, [("q", pack $ accountQuery acct)]) | ||||
|        showamt = not split || not (isZeroMixedAmount amt) | ||||
| 
 | ||||
|  | ||||
| @ -73,8 +73,9 @@ registerItemsHtml _ vd (balancelabel,items) = [hamlet| | ||||
|    itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, TransactionsReportItem) -> HtmlUrl AppRoute | ||||
|    itemAsHtml VD{..} (n, newd, newm, _, (torig, tacct, split, acct, amt, bal)) = [hamlet| | ||||
| 
 | ||||
| <tr ##{date} .item.#{evenodd}.#{firstposting}.#{datetransition} title="#{show torig}" style="vertical-align:top;"> | ||||
|  <td.date><a href="@{JournalR}##{date}">#{date} | ||||
| <tr ##{tindex torig} .item.#{evenodd}.#{firstposting}.#{datetransition} title="#{show torig}" style="vertical-align:top;"> | ||||
|  <td.date> | ||||
|   <a href="@{JournalR}##{tindex torig}">#{date} | ||||
|  <td.description title="#{show torig}">#{elideRight 30 desc} | ||||
|  <td.account>#{elideRight 40 acct} | ||||
|  <td.amount style="text-align:right; white-space:nowrap;"> | ||||
| @ -119,7 +120,7 @@ registerChartHtml percommoditytxnreports = | ||||
|           $forall i <- reverse items | ||||
|            [ | ||||
|             #{dayToJsTimestamp $ triDate i}, | ||||
|             #{simpleMixedAmountQuantity $ triCommodityBalance c i}, | ||||
|             #{simpleMixedAmountQuantity $ triCommodityBalance c i} | ||||
|            ], | ||||
|           /* [] */ | ||||
|         ], | ||||
| @ -145,6 +146,7 @@ registerChartHtml percommoditytxnreports = | ||||
|             '#{showMixedAmountWithZeroCommodity $ triCommodityAmount c i}', | ||||
|             '#{showMixedAmountWithZeroCommodity $ triCommodityBalance c i}', | ||||
|             '#{concat $ intersperse "\\n" $ lines  $ show $ triOrigTransaction i}', | ||||
|             #{tindex $ triOrigTransaction i} | ||||
|            ], | ||||
|           /* [] */ | ||||
|         ], | ||||
|  | ||||
| @ -92,10 +92,6 @@ extra-source-files: | ||||
|       static/js/typeahead.bundle.min.js | ||||
|       templates/default-layout-wrapper.hamlet | ||||
|       templates/default-layout.hamlet | ||||
|       templates/homepage.hamlet | ||||
|       templates/homepage.julius | ||||
|       templates/homepage.lucius | ||||
|       templates/normalize.lucius | ||||
| 
 | ||||
| source-repository head | ||||
|     type: git | ||||
|  | ||||
| @ -98,10 +98,6 @@ extra-source-files: | ||||
|   - static/js/typeahead.bundle.min.js | ||||
|   - templates/default-layout-wrapper.hamlet | ||||
|   - templates/default-layout.hamlet | ||||
|   - templates/homepage.hamlet | ||||
|   - templates/homepage.julius | ||||
|   - templates/homepage.lucius | ||||
|   - templates/normalize.lucius | ||||
| 
 | ||||
| # XXX not supported | ||||
| # flag threaded | ||||
|  | ||||
| @ -8,7 +8,7 @@ body                                                                 { backgroun | ||||
| .registerreport .odd                                                 { background-color:#ded; } | ||||
| /* .transactionsreport .odd                                             { background-color:#eee; } */ | ||||
| .filtering                                                           { background-color:#e0e0e0; } | ||||
| a:link, a:visited { color:#00e; } | ||||
| a:link, a:visited { color:#00e !important; } | ||||
| /* a:link:hover, a:visited:hover { color:red; } */ | ||||
| /* #main                                                                { border-color:#e0e0e0; } see below */ | ||||
| /* .journalreport td                                                    { border-color:thin solid #e0e0e0; } see below */ | ||||
| @ -25,6 +25,9 @@ a:link, a:visited { color:#00e; } | ||||
| #editform textarea                                                   { background-color:#eee; } | ||||
| .negative                                                            { color:#800; } | ||||
| .help                                                                {  } | ||||
| .highlighted { | ||||
|   background-color: #F4F466 !important; | ||||
| } | ||||
| 
 | ||||
| #sidebar .hoverlinks { visibility:hidden; } | ||||
| /* #sidebar .mouseover { background-color:rgba(208,208,208,0.5); } */ | ||||
| @ -119,10 +122,15 @@ body                        { margin:0; } | ||||
| .description                { padding-left:1em; white-space:normal; } | ||||
| .account                    { padding-left:1em; white-space:normal; } | ||||
| .amount                     { padding-left:1em; white-space:nowrap; } | ||||
| .balance                    { padding-left:1em; padding-right:0.3em; white-space:nowrap; } | ||||
| .balance                    { padding-left:1em; white-space:nowrap; } | ||||
| tr td:last-child { padding-right:0.3em; } | ||||
| tr td:first-child { padding-left:0.3em; } | ||||
| .amount, .balance { width:2em; }  /* minimise width */ | ||||
| .positive                   { } | ||||
| 
 | ||||
| td.balance, td.numpostings { | ||||
|   text-align: right; | ||||
| } | ||||
| /* table.transactionsreport         { border-spacing: 0; } */ | ||||
| /* .transactionsreport td           {  } */ | ||||
| /* .transactionsreport pre          { margin-top:0; } */ | ||||
| @ -260,3 +268,8 @@ tr.firstposting td          { } | ||||
| .twitter-typeahead { | ||||
|   width:100%; | ||||
| } | ||||
| 
 | ||||
| code { | ||||
|   font-weight: bold; | ||||
|   color: black; | ||||
| } | ||||
|  | ||||
| @ -26,6 +26,15 @@ $(document).ready(function() { | ||||
|   $('body, #addform input, #addform select').bind('keydown', 'ctrl+-',       addformDeletePosting); | ||||
|   $('#addform tr.posting:last > td:first input').bind('keydown', 'tab', addformAddPostingWithTab); | ||||
| 
 | ||||
| 
 | ||||
|   // highlight the entry from the url hash
 | ||||
|   if (window.location.hash && $(window.location.hash)[0]) { | ||||
|     $(window.location.hash).addClass('highlighted'); | ||||
|   } | ||||
|   $(window).on('hashchange', function(event) { | ||||
|     $('.highlighted').removeClass('highlighted'); | ||||
|     $(window.location.hash).addClass('highlighted'); | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| //----------------------------------------------------------------------
 | ||||
| @ -36,58 +45,39 @@ function registerChart($container, series) { | ||||
|   return $container.plot( | ||||
|     series, | ||||
|     { /* general chart options */ | ||||
|       // series: {
 | ||||
|       // },
 | ||||
|       // yaxis: {
 | ||||
|       //   /* ticks: 6, */
 | ||||
|       // },
 | ||||
|       xaxis: { | ||||
|         mode: "time", | ||||
|         timeformat: "%Y/%m/%d" | ||||
|         /* ticks: 6, */ | ||||
|       }, | ||||
|       legend: { | ||||
|         position: 'sw' | ||||
|       }, | ||||
|       grid: { | ||||
|         markings: | ||||
|          function (axes) { | ||||
|           var now = Date.now(); | ||||
|           var markings = [ | ||||
|             // {
 | ||||
|             //   xaxis: { to: now },        // past
 | ||||
|             //   yaxis: { from: 0, to: 0 }, // =0
 | ||||
|             //  color: '#d88',
 | ||||
|             //  lineWidth:1
 | ||||
|             // },
 | ||||
|             { | ||||
|               xaxis: { to: now }, // past
 | ||||
|               yaxis: { to: 0 },   // <0
 | ||||
|               color: '#ffdddd', | ||||
|             }, | ||||
| 
 | ||||
|             // {
 | ||||
|             //   xaxis: { from: now, to: now }, // now
 | ||||
|             //  color: '#bbb',
 | ||||
|             // },
 | ||||
| 
 | ||||
|             { | ||||
|               xaxis: { from: now }, // future
 | ||||
|               yaxis: { from: 0 },   // >0
 | ||||
|               // color: '#dddddd',
 | ||||
|               color: '#e0e0e0', | ||||
|             }, | ||||
|             { | ||||
|               xaxis: { from: now }, // future
 | ||||
|               yaxis: { to: 0 },     // <0
 | ||||
|               // color: '#ddbbbb',
 | ||||
|               color: '#e8c8c8', | ||||
|             }, | ||||
|             { | ||||
|               // xaxis: { from: now },      // future
 | ||||
|               yaxis: { from: 0, to: 0 }, // =0
 | ||||
|               color: '#bb0000', | ||||
|               lineWidth:1 | ||||
|             }, | ||||
|           ]; | ||||
|           // console.log(markings);
 | ||||
|           return markings; | ||||
|         }, | ||||
|         hoverable: true, | ||||
| @ -113,15 +103,16 @@ function registerChart($container, series) { | ||||
| 
 | ||||
| function registerChartClick(ev, pos, item) { | ||||
|   if (item) { | ||||
|     var date = $.plot.dateGenerator(item.datapoint[0], {}); | ||||
|     var dateid = $.plot.formatDate(date, '%Y-%m-%d'); | ||||
|     $target = $('#'+dateid); | ||||
|     if ($target.length) | ||||
|     targetselector = '#'+item.series.data[item.dataIndex][5]; | ||||
|     $target = $(targetselector); | ||||
|     if ($target.length) { | ||||
|       window.location.hash = targetselector; | ||||
|       $('html, body').animate({ | ||||
|         scrollTop: $target.offset().top | ||||
|       }, 1000); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| //----------------------------------------------------------------------
 | ||||
| // ADD FORM
 | ||||
| @ -254,33 +245,20 @@ function addformDeletePosting() { | ||||
| // SIDEBAR
 | ||||
| 
 | ||||
| function sidebarToggle() { | ||||
|   //console.log('sidebarToggle');
 | ||||
|   var visible = $('#sidebar').is(':visible'); | ||||
|   //console.log('sidebar visibility was',visible);
 | ||||
|   // if opening sidebar, start an ajax fetch of its content
 | ||||
|   if (!visible) { | ||||
|     //console.log('getting sidebar content');
 | ||||
|     $.get("sidebar" | ||||
|          ,null | ||||
|          ,function(data) { | ||||
|             //console.log( "success" );
 | ||||
|             $("#sidebar-body" ).html(data); | ||||
|           }) | ||||
|           .done(function() { | ||||
|             //console.log( "success 2" );
 | ||||
|           }) | ||||
|           .fail(function() { | ||||
|             //console.log( "error" );
 | ||||
|             alert("Loading the sidebar did fail"); | ||||
|           }); | ||||
|   } | ||||
|   // localStorage.setItem('sidebarVisible', !visible);
 | ||||
|   // set a cookie to communicate the new sidebar state to the server
 | ||||
|   $.cookie('showsidebar', visible ? '0' : '1'); | ||||
|   // horizontally slide the sidebar in or out
 | ||||
|   // how to make it smooth, without delayed content pop-in ?
 | ||||
|   //$('#sidebar').animate({'width': 'toggle'});
 | ||||
|   //$('#sidebar').animate({'width': visible ? 'hide' : '+=20m'});
 | ||||
|   //$('#sidebar-spacer').width(200);
 | ||||
|   $('#sidebar').animate({'width': visible ? 'hide' : 'show'}); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -61,11 +61,11 @@ $newline never | ||||
|                     <p> | ||||
|                       <b>Keyboard shortcuts | ||||
|                       <ul> | ||||
|                         <li> <b><tt>h</tt></b> or maybe <b><tt>?</tt></b> - view this help (escape or click to exit) | ||||
|                         <li> <b><tt>j</tt></b> - go to the Journal view (home) | ||||
|                         <li> <b><tt>a</tt></b> - add a transaction (escape to cancel) | ||||
|                         <li> <b><tt>s</tt></b> - toggle sidebar | ||||
|                         <li> <b><tt>f</tt></b> - focus search form ("find") | ||||
|                         <li> <code>h</code> or maybe <code>?</code> - view this help (escape or click to exit) | ||||
|                         <li> <code>j</code> - go to the Journal view (home) | ||||
|                         <li> <code>a</code> - add a transaction (escape to cancel) | ||||
|                         <li> <code>s</code> - toggle sidebar | ||||
|                         <li> <code>f</code> - focus search form ("find") | ||||
|                     <p> | ||||
|                       <b>General | ||||
|                       <ul> | ||||
| @ -79,19 +79,19 @@ $newline never | ||||
|                     <p> | ||||
|                       <b>Search | ||||
|                       <ul> | ||||
|                         <li> <b><tt>acct:REGEXP</tt></b> - filter on to/from account | ||||
|                         <li> <b><tt>desc:REGEXP</tt></b> - filter on description | ||||
|                         <li> <b><tt>date:PERIODEXP</tt></b>, <b><tt>date2:PERIODEXP</tt></b> - filter on date or secondary date | ||||
|                         <li> <b><tt>code:REGEXP</tt></b> - filter on transaction's code (eg check number) | ||||
|                         <li> <b><tt>status:*</tt></b>, <b><tt>status:!</tt></b>, <b><tt>status:</tt></b> - filter on transaction's cleared status (cleared, pending, uncleared) | ||||
|                         <!-- <li> <b><tt>empty:BOOL</tt></b> - filter on whether amount is zero --> | ||||
|                         <li> <b><tt>amt:N</tt></b>, <b><tt>amt:<N</tt></b>, <b><tt>amt:>N</tt></b> - filter on the unsigned amount magnitude. Or with a sign before N, filter on the signed value. (Single-commodity amounts only.) | ||||
|                         <li> <b><tt>cur:REGEXP</tt></b> - filter on the currency/commodity symbol (must match all of it). Dollar sign must be written as <tt>\$</tt> | ||||
|                         <li> <b><tt>tag:NAME</tt></b>, <b><tt>tag:NAME=REGEX</tt></b> - filter on tag name, or tag name and value | ||||
|                         <!-- <li> <b><tt>depth:N</tt></b> - filter out accounts below this depth --> | ||||
|                         <li> <b><tt>real:BOOL</tt></b> - filter on postings' real/virtual-ness | ||||
|                         <li> <code>acct:REGEXP</code> - filter on to/from account | ||||
|                         <li> <code>desc:REGEXP</code> - filter on description | ||||
|                         <li> <code>date:PERIODEXP</code>, <code>date2:PERIODEXP</code> - filter on date or secondary date | ||||
|                         <li> <code>code:REGEXP</code> - filter on transaction's code (eg check number) | ||||
|                         <li> <code>status:*</code>, <code>status:!</code>, <code>status:</code> - filter on transaction's cleared status (cleared, pending, uncleared) | ||||
|                         <!-- <li> <code>empty:BOOL</code> - filter on whether amount is zero --> | ||||
|                         <li> <code>amt:N</code>, <code>amt:<N</code>, <code>amt:>N</code> - filter on the unsigned amount magnitude. Or with a sign before N, filter on the signed value. (Single-commodity amounts only.) | ||||
|                         <li> <code>cur:REGEXP</code> - filter on the currency/commodity symbol (must match all of it). Dollar sign must be written as <code>\$</code> | ||||
|                         <li> <code>tag:NAME</code>, <code>tag:NAME=REGEX</code> - filter on tag name, or tag name and value | ||||
|                         <!-- <li> <code>depth:N</code> - filter out accounts below this depth --> | ||||
|                         <li> <code>real:BOOL</code> - filter on postings' real/virtual-ness | ||||
|                         <li> Enclose search patterns containing spaces in single or double quotes | ||||
|                         <li> Prepend <b><tt>not:</tt></b> to negate a search term | ||||
|                         <li> Prepend <code>not:</code> to negate a search term | ||||
|                         <li> Multiple search terms on different fields are AND'ed, multiple search terms on the same field are OR'ed | ||||
|                         <li> These search terms also work with command-line hledger | ||||
| 
 | ||||
|  | ||||
| @ -1,38 +0,0 @@ | ||||
| <h1>_{MsgHello} | ||||
| 
 | ||||
| <ol> | ||||
|   <li>Now that you have a working project you should use the # | ||||
|     \<a href="http://www.yesodweb.com/book/">Yesod book</a> to learn more. # | ||||
|     You can also use this scaffolded site to explore some basic concepts. | ||||
| 
 | ||||
|   <li> This page was generated by the #{handlerName} handler in # | ||||
|     \<em>Handler/Home.hs</em>. | ||||
| 
 | ||||
|   <li> The #{handlerName} handler is set to generate your site's home screen in Routes file # | ||||
|     <em>config/routes | ||||
| 
 | ||||
|   <li> The HTML you are seeing now is actually composed by a number of <em>widgets</em>, # | ||||
|     most of them are brought together by the <em>defaultLayout</em> function which # | ||||
|     is defined in the <em>Foundation.hs</em> module, and used by <em>#{handlerName}</em>. # | ||||
|     All the files for templates and wigdets are in <em>templates</em>. | ||||
| 
 | ||||
|   <li> | ||||
|     A Widget's Html, Css and Javascript are separated in three files with the # | ||||
|     \<em>.hamlet</em>, <em>.lucius</em> and <em>.julius</em> extensions.  | ||||
| 
 | ||||
|   <li ##{aDomId}>If you had javascript enabled then you wouldn't be seeing this. | ||||
|      | ||||
|   <li #form> | ||||
|     This is an example trivial Form. Read the # | ||||
|     \<a href="http://www.yesodweb.com/book/forms">Forms chapter</a> # | ||||
|     on the yesod book to learn more about them. | ||||
|     $maybe (info,con) <- submission | ||||
|       <div .message> | ||||
|         Your file's type was <em>#{fileContentType info}</em>. You say it has: <em>#{con}</em> | ||||
|     <form method=post action=@{HomeR}#form enctype=#{formEnctype}> | ||||
|       ^{formWidget} | ||||
|       <input type="submit" value="Send it!"> | ||||
| 
 | ||||
|   <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a # | ||||
|     test suite that performs tests on this page. # | ||||
|     You can run your tests by doing: <pre>yesod test</pre> | ||||
| @ -1 +0,0 @@ | ||||
| document.getElementById("#{aDomId}").innerHTML = "This text was added by the Javascript part of the homepage widget."; | ||||
| @ -1,6 +0,0 @@ | ||||
| h1 { | ||||
|     text-align: center | ||||
| } | ||||
| h2##{aDomId} { | ||||
|     color: #990 | ||||
| } | ||||
| @ -1,439 +0,0 @@ | ||||
| /*! normalize.css 2011-08-12T17:28 UTC · http://github.com/necolas/normalize.css */ | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    HTML5 display definitions | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| /* | ||||
|  * Corrects block display not defined in IE6/7/8/9 & FF3 | ||||
|  */ | ||||
| 
 | ||||
| article, | ||||
| aside, | ||||
| details, | ||||
| figcaption, | ||||
| figure, | ||||
| footer, | ||||
| header, | ||||
| hgroup, | ||||
| nav, | ||||
| section { | ||||
|     display: block; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Corrects inline-block display not defined in IE6/7/8/9 & FF3 | ||||
|  */ | ||||
| 
 | ||||
| audio, | ||||
| canvas, | ||||
| video { | ||||
|     display: inline-block; | ||||
|     *display: inline; | ||||
|     *zoom: 1; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Prevents modern browsers from displaying 'audio' without controls | ||||
|  */ | ||||
| 
 | ||||
| audio:not([controls]) { | ||||
|     display: none; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4 | ||||
|  * Known issue: no IE6 support | ||||
|  */ | ||||
| 
 | ||||
| [hidden] { | ||||
|     display: none; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Base | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| /* | ||||
|  * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units | ||||
|  *    http://clagnut.com/blog/348/#c790 | ||||
|  * 2. Keeps page centred in all browsers regardless of content height | ||||
|  * 3. Prevents iOS text size adjust after orientation change, without disabling user zoom | ||||
|  *    www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ | ||||
|  */ | ||||
| 
 | ||||
| html { | ||||
|     font-size: 100%; /* 1 */ | ||||
|     overflow-y: scroll; /* 2 */ | ||||
|     -webkit-text-size-adjust: 100%; /* 3 */ | ||||
|     -ms-text-size-adjust: 100%; /* 3 */ | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Addresses margins handled incorrectly in IE6/7 | ||||
|  */ | ||||
| 
 | ||||
| body { | ||||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| /*  | ||||
|  * Addresses font-family inconsistency between 'textarea' and other form elements. | ||||
|  */ | ||||
| 
 | ||||
| body, | ||||
| button, | ||||
| input, | ||||
| select, | ||||
| textarea { | ||||
|     font-family: sans-serif; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Links | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| a { | ||||
|     color: #00e; | ||||
| } | ||||
| 
 | ||||
| a:visited { | ||||
|     color: #551a8b; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Addresses outline displayed oddly in Chrome | ||||
|  */ | ||||
| 
 | ||||
| a:focus { | ||||
|     outline: thin dotted; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Improves readability when focused and also mouse hovered in all browsers | ||||
|  * people.opera.com/patrickl/experiments/keyboard/test | ||||
|  */ | ||||
| 
 | ||||
| a:hover, | ||||
| a:active { | ||||
|     outline: 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Typography | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| /* | ||||
|  * Addresses styling not present in IE7/8/9, S5, Chrome | ||||
|  */ | ||||
| 
 | ||||
| abbr[title] { | ||||
|     border-bottom: 1px dotted; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Addresses style set to 'bolder' in FF3/4, S4/5, Chrome | ||||
| */ | ||||
| 
 | ||||
| b,  | ||||
| strong {  | ||||
|     font-weight: bold;  | ||||
| } | ||||
| 
 | ||||
| blockquote { | ||||
|     margin: 1em 40px; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Addresses styling not present in S5, Chrome | ||||
|  */ | ||||
| 
 | ||||
| dfn { | ||||
|     font-style: italic; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Addresses styling not present in IE6/7/8/9 | ||||
|  */ | ||||
| 
 | ||||
| mark { | ||||
|     background: #ff0; | ||||
|     color: #000; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Corrects font family set oddly in IE6, S4/5, Chrome | ||||
|  * en.wikipedia.org/wiki/User:Davidgothberg/Test59 | ||||
|  */ | ||||
| 
 | ||||
| pre, | ||||
| code, | ||||
| kbd, | ||||
| samp { | ||||
|     font-family: monospace, serif; | ||||
|     _font-family: 'courier new', monospace; | ||||
|     font-size: 1em; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Improves readability of pre-formatted text in all browsers | ||||
|  */ | ||||
| 
 | ||||
| pre { | ||||
|     white-space: pre; | ||||
|     white-space: pre-wrap; | ||||
|     word-wrap: break-word; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Addresses CSS quotes not supported in IE6/7 | ||||
|  * 2. Addresses quote property not supported in S4 | ||||
|  */ | ||||
| 
 | ||||
| /* 1 */ | ||||
| 
 | ||||
| q { | ||||
|     quotes: none; | ||||
| } | ||||
| 
 | ||||
| /* 2 */ | ||||
| 
 | ||||
| q:before, | ||||
| q:after { | ||||
|     content: ''; | ||||
|     content: none; | ||||
| } | ||||
| 
 | ||||
| small { | ||||
|     font-size: 75%; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Prevents sub and sup affecting line-height in all browsers | ||||
|  * gist.github.com/413930 | ||||
|  */ | ||||
| 
 | ||||
| sub, | ||||
| sup { | ||||
|     font-size: 75%; | ||||
|     line-height: 0; | ||||
|     position: relative; | ||||
|     vertical-align: baseline; | ||||
| } | ||||
| 
 | ||||
| sup { | ||||
|     top: -0.5em; | ||||
| } | ||||
| 
 | ||||
| sub { | ||||
|     bottom: -0.25em; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Lists | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| ul, | ||||
| ol { | ||||
|     margin: 1em 0; | ||||
|     padding: 0 0 0 40px; | ||||
| } | ||||
| 
 | ||||
| dd { | ||||
|     margin: 0 0 0 40px; | ||||
| } | ||||
| 
 | ||||
| nav ul, | ||||
| nav ol { | ||||
|     list-style: none; | ||||
|     list-style-image: none; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Embedded content | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| /* | ||||
|  * 1. Removes border when inside 'a' element in IE6/7/8/9 | ||||
|  * 2. Improves image quality when scaled in IE7 | ||||
|  *    code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ | ||||
|  */ | ||||
| 
 | ||||
| img { | ||||
|     border: 0; /* 1 */ | ||||
|     -ms-interpolation-mode: bicubic; /* 2 */ | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Corrects overflow displayed oddly in IE9  | ||||
|  */ | ||||
| 
 | ||||
| svg:not(:root) { | ||||
|     overflow: hidden; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Figures | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| /* | ||||
|  * Addresses margin not present in IE6/7/8/9, S5, O11 | ||||
|  */ | ||||
| 
 | ||||
| figure { | ||||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Forms | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| /* | ||||
|  * Corrects margin displayed oddly in IE6/7 | ||||
|  */ | ||||
| 
 | ||||
| form { | ||||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Define consistent margin and padding | ||||
|  */ | ||||
| 
 | ||||
| fieldset { | ||||
|     margin: 0 2px; | ||||
|     padding: 0.35em 0.625em 0.75em; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Corrects color not being inherited in IE6/7/8/9 | ||||
|  * 2. Corrects alignment displayed oddly in IE6/7 | ||||
|  */ | ||||
| 
 | ||||
| legend { | ||||
|     border: 0; /* 1 */ | ||||
|     *margin-left: -7px; /* 2 */ | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Corrects font size not being inherited in all browsers | ||||
|  * 2. Addresses margins set differently in IE6/7, F3/4, S5, Chrome | ||||
|  * 3. Improves appearance and consistency in all browsers | ||||
|  */ | ||||
| 
 | ||||
| button, | ||||
| input, | ||||
| select, | ||||
| textarea { | ||||
|     font-size: 100%; /* 1 */ | ||||
|     margin: 0; /* 2 */ | ||||
|     vertical-align: baseline; /* 3 */ | ||||
|     *vertical-align: middle; /* 3 */ | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Addresses FF3/4 setting line-height using !important in the UA stylesheet | ||||
|  * 2. Corrects inner spacing displayed oddly in IE6/7 | ||||
|  */ | ||||
| 
 | ||||
| button, | ||||
| input { | ||||
|     line-height: normal; /* 1 */ | ||||
|     *overflow: visible;  /* 2 */ | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Corrects overlap and whitespace issue for buttons and inputs in IE6/7 | ||||
|  * Known issue: reintroduces inner spacing | ||||
|  */ | ||||
| 
 | ||||
| table button, | ||||
| table input { | ||||
|     *overflow: auto; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Improves usability and consistency of cursor style between image-type 'input' and others | ||||
|  * 2. Corrects inability to style clickable 'input' types in iOS | ||||
|  */ | ||||
| 
 | ||||
| button, | ||||
| html input[type="button"],  | ||||
| input[type="reset"],  | ||||
| input[type="submit"] { | ||||
|     cursor: pointer; /* 1 */ | ||||
|     -webkit-appearance: button; /* 2 */ | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Addresses box sizing set to content-box in IE8/9 | ||||
|  * 2. Addresses excess padding in IE8/9 | ||||
|  */ | ||||
| 
 | ||||
| input[type="checkbox"], | ||||
| input[type="radio"] { | ||||
|     box-sizing: border-box; /* 1 */ | ||||
|     padding: 0; /* 2 */ | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Addresses appearance set to searchfield in S5, Chrome | ||||
|  * 2. Addresses box sizing set to border-box in S5, Chrome (include -moz to future-proof) | ||||
|  */ | ||||
| 
 | ||||
| input[type="search"] { | ||||
|     -webkit-appearance: textfield; /* 1 */ | ||||
|     -moz-box-sizing: content-box; | ||||
|     -webkit-box-sizing: content-box; /* 2 */ | ||||
|     box-sizing: content-box; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Corrects inner padding displayed oddly in S5, Chrome on OSX | ||||
|  */ | ||||
| 
 | ||||
| input[type="search"]::-webkit-search-decoration { | ||||
|     -webkit-appearance: none; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * Corrects inner padding and border displayed oddly in FF3/4 | ||||
|  * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ | ||||
|  */ | ||||
| 
 | ||||
| button::-moz-focus-inner, | ||||
| input::-moz-focus-inner { | ||||
|     border: 0; | ||||
|     padding: 0; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  * 1. Removes default vertical scrollbar in IE6/7/8/9 | ||||
|  * 2. Improves readability and alignment in all browsers | ||||
|  */ | ||||
| 
 | ||||
| textarea { | ||||
|     overflow: auto; /* 1 */ | ||||
|     vertical-align: top; /* 2 */ | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* ============================================================================= | ||||
|    Tables | ||||
|    ========================================================================== */ | ||||
| 
 | ||||
| /*  | ||||
|  * Remove most spacing between table cells | ||||
|  */ | ||||
| 
 | ||||
| table { | ||||
|     border-collapse: collapse; | ||||
|     border-spacing: 0; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user