Index: skins/default/css.txt ================================================================== --- skins/default/css.txt +++ skins/default/css.txt @@ -1,236 +1,264 @@ +/* Overall page style */ + body { - margin: 0 auto; - background-color: white; - font-family: sans-serif; - font-size:14pt; - -moz-text-size-adjust: none; - -webkit-text-size-adjust: none; - -mx-text-size-adjust: none; + margin: 0 auto; + background-color: white; + font-family: sans-serif; + font-size: 14pt; + -moz-text-size-adjust: none; + -mx-text-size-adjust: none; + -webkit-text-size-adjust: none; } a { - color: #4183C4; - text-decoration: none; + color: #4183C4; + text-decoration: none; } a:hover { - color: #4183C4; - text-decoration: underline; -} -div.forumPosts a:visited { - color: #6A7F94; + color: #4183C4; + text-decoration: underline; } -hr { - color: #eee; -} + +/* Page title, above menu bars */ .title { - color: #4183C4; - float:left; + color: #4183C4; + float: left; } .title h1 { - display:inline; + display: inline; } .title h1:after { - content: " / "; - color: #777; - font-weight: normal; -} - -.content h1 { - font-size: 1.25em; -} -.content h2 { - font-size: 1.15em; -} -.content h3 { - font-size: 1.05em; - font-weight: bold; -} - -.section { - font-size: 1em; - font-weight: bold; - background-color: #f5f5f5; - border: 1px solid #d8d8d8; - border-radius: 3px 3px 0 0; - padding: 9px 10px 10px; - margin: 10px 0; -} - -.sectionmenu { - border: 1px solid #d8d8d8; - border-radius: 0 0 3px 3px; - border-top: 0; - margin-top: -10px; - margin-bottom: 10px; - padding: 10px; -} -.sectionmenu a { - display: inline-block; - margin-right: 1em; -} - + content: " / "; + color: #777; + font-weight: normal; +} .status { - float:right; - font-size:.7em; + float: right; + font-size: 0.7em; } + +/* Main menu and optional sub-menu */ + .mainmenu { - font-size:.8em; - clear:both; - background:#eaeaea linear-gradient(#fafafa, #eaeaea) repeat-x; - border:1px solid #eaeaea; - border-radius:5px; - overflow-x: auto; - overflow-y: hidden; - white-space: nowrap; - z-index: 21; /* just above hbdrop */ -} - + font-size: 0.8em; + clear: both; + background: #eaeaea linear-gradient(#fafafa, #eaeaea) repeat-x; + border: 1px solid #eaeaea; + border-radius: 5px; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + z-index: 21; /* just above hbdrop */ +} .mainmenu a { - text-decoration:none; - color: #777; - border-right:1px solid #eaeaea; + text-decoration: none; + color: #777; + border-right: 1px solid #eaeaea; } .mainmenu a.active, .mainmenu a:hover { - color: #000; - border-bottom:2px solid #D26911; -} - -div#hbdrop { - background-color: white; - border: 1px solid black; - border-top: white; - border-radius: 0 0 0.5em 0.5em; - display: none; - font-size: 80%; - left: 2em; - width: 90%; - padding-right: 1em; - position: absolute; - z-index: 20; /* just below mainmenu, but above timeline bubbles */ + color: #000; + border-bottom: 2px solid #D26911; +} +.mainmenu div#hbdrop { + background-color: white; + border: 1px solid black; + border-top: white; + border-radius: 0 0 0.5em 0.5em; + display: none; + font-size: 80%; + left: 2em; + width: 90%; + padding-right: 1em; + position: absolute; + z-index: 20; /* just below mainmenu, but above timeline bubbles */ } .submenu { - font-size: .7em; - padding: 10px; - border-bottom: 1px solid #ccc; + font-size: .7em; + padding: 10px; + border-bottom: 1px solid #ccc; } - .submenu a, .submenu label { - padding: 10px 11px; - text-decoration:none; - color: #777; + padding: 10px 11px; + text-decoration: none; + color: #777; } - +.submenu label { + white-space: nowrap; +} .submenu a:hover, .submenu label:hover { - padding: 6px 10px; - border: 1px solid #ccc; - border-radius: 5px; - color: #000; -} - -.content { - padding-top: 10px; - font-size:.8em; - color: #444; -} - -.udiff, .sbsdiff { - font-size: .85em !important; - overflow: auto; - border: 1px solid #ccc; - border-radius: 5px; -} -.content blockquote { - padding: 0 15px; -} -div.forumHierRoot blockquote, div.forumHier blockquote, div.forumEdit blockquote, div.forumTime blockquote, div.forumTimeline blockquote { - background-color: rgba(65, 131, 196, 0.1); - border-left: 3px solid #254769; - padding: .1em 1em; -} - -table.report { - cursor: auto; - border-radius: 5px; - border: 1px solid #ccc; - margin: 1em 0; -} -.report td, .report th { - border: 0; - font-size: .8em; - padding: 10px; -} -.report td:first-child { - border-top-left-radius: 5px; -} -.report tbody tr:last-child td:first-child { - border-bottom-left-radius: 5px; -} -.report td:last-child { - border-top-right-radius: 5px; -} -.report tbody tr:last-child { - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; -} -.report tbody tr:last-child td:last-child { - border-bottom-right-radius: 5px; -} -.report th { - cursor: pointer; -} -.report thead+tbody tr:hover { - background-color: #f5f9fc !important; -} - -td.tktDspLabel { - width: 70px; - text-align: right; - overflow: hidden; -} -td.tktDspValue { - text-align: left; - vertical-align: top; - background-color: #f8f8f8; - border: 1px solid #ccc; -} -td.tktDspValue pre { - white-space: pre-wrap; -} - -span.timelineDetail { - font-size: 90%; -} - -.footer { - border-top: 1px solid #ccc; - padding: 10px; - font-size:.7em; - margin-top: 10px; - color: #ccc; -} -div.timelineDate { - font-weight: bold; - white-space: nowrap; + padding: 6px 10px; + border: 1px solid #ccc; + border-radius: 5px; + color: #000; } span.submenuctrl, span.submenuctrl input, select.submenuctrl { color: #777; } span.submenuctrl { white-space: nowrap; } -div.submenu label { - white-space: nowrap; + + +/* Main document area; elements common to most pages. */ + +.content { + padding-top: 10px; + font-size: 0.8em; + color: #444; +} +.content blockquote { + padding: 0 15px; +} +.content h1 { + font-size: 1.25em; +} +.content h2 { + font-size: 1.15em; +} +.content h3 { + font-size: 1.05em; +} + +.section { + font-size: 1em; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #d8d8d8; + border-radius: 3px 3px 0 0; + padding: 9px 10px 10px; + margin: 10px 0; +} +.sectionmenu { + border: 1px solid #d8d8d8; + border-radius: 0 0 3px 3px; + border-top: 0; + margin-top: -10px; + margin-bottom: 10px; + padding: 10px; +} +.sectionmenu a { + display: inline-block; + margin-right: 1em; +} + +hr { + color: #eee; +} + + +/* Page footer */ + +.footer { + border-top: 1px solid #ccc; + padding: 10px; + font-size: 0.7em; + margin-top: 10px; + color: #ccc; +} + + +/* Exceptions for /info diff views */ + +.udiff, .sbsdiff { + font-size: .85em !important; + overflow: auto; + border: 1px solid #ccc; + border-radius: 5px; +} + + +/* Forum */ + +.forum a:visited { + color: #6A7F94; +} + +.forum blockquote { + background-color: rgba(65, 131, 196, 0.1); + border-left: 3px solid #254769; + padding: .1em 1em; +} + + +/* Tickets */ + +table.report { + cursor: auto; + border-radius: 5px; + border: 1px solid #ccc; + margin: 1em 0; +} +.report td, .report th { + border: 0; + font-size: .8em; + padding: 10px; +} +.report td:first-child { + border-top-left-radius: 5px; +} +.report tbody tr:last-child td:first-child { + border-bottom-left-radius: 5px; +} +.report td:last-child { + border-top-right-radius: 5px; +} +.report tbody tr:last-child { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +.report tbody tr:last-child td:last-child { + border-bottom-right-radius: 5px; +} +.report th { + cursor: pointer; +} +.report thead+tbody tr:hover { + background-color: #f5f9fc !important; +} + +td.tktDspLabel { + width: 70px; + text-align: right; + overflow: hidden; +} +td.tktDspValue { + text-align: left; + vertical-align: top; + background-color: #f8f8f8; + border: 1px solid #ccc; +} +td.tktDspValue pre { + white-space: pre-wrap; +} + + +/* Timeline */ + +span.timelineDetail { + font-size: 90%; +} +div.timelineDate { + font-weight: bold; + white-space: nowrap; } + + +/* Miscellaneous UI elements */ + .fossil-tooltip.help-buttonlet-content { background-color: lightyellow; } + + +/* Exceptions for specific screen sizes */ + @media screen and (max-width: 600px) { /* Spacing for mobile */ body { padding-left: 4px; padding-right: 4px; Index: skins/eagle/css.txt ================================================================== --- skins/eagle/css.txt +++ skins/eagle/css.txt @@ -381,11 +381,11 @@ border: 1px solid white; } div.forumTimeline { border: 1px solid white; } -div.forumHier, div.forumTime { +div.forumTime { border: 1px solid white; } div.forumSel { background-color: #808080; } Index: src/alerts.c ================================================================== --- src/alerts.c +++ src/alerts.c @@ -173,11 +173,11 @@ */ static int alert_webpages_disabled(void){ if( alert_tables_exist() ) return 0; style_header("Email Alerts Are Disabled"); @

Email alerts are disabled on this server

- style_footer(); + style_finish_page("alerts"); return 1; } /* ** Insert a "Subscriber List" submenu link if the current user @@ -308,11 +308,11 @@ @
@

@ db_end_transaction(0); - style_footer(); + style_finish_page("alerts"); } #if 0 /* ** Encode pMsg as MIME base64 and append it to pOut @@ -1435,11 +1435,11 @@ @

An email has been sent to "%h(zEAddr)". That email contains a @ hyperlink that you must click to activate your @ subscription.

} alert_sender_free(pSender); - style_footer(); + style_finish_page("alerts"); } return; } style_header("Signup For Email Alerts"); if( P("submit")==0 ){ @@ -1552,11 +1552,11 @@ @ Enter the 8 characters above in the "Security Code" box
@ } @ fossil_free(zErr); - style_footer(); + style_finish_page("alerts"); } /* ** Either shutdown or completely delete a subscription entry given ** by the hex value zName. Then paint a webpage that explains that @@ -1590,11 +1590,11 @@ @ edit or delete @ the corresponding user "%h(zLogin)"

} } db_finalize(&q); - style_footer(); + style_finish_page("alerts"); return; } /* ** WEBPAGE: alerts @@ -1914,11 +1914,11 @@ @ @ @ fossil_free(zErr); db_finalize(&q); - style_footer(); + style_finish_page("alerts"); db_commit_transaction(); return; } /* This is the message that gets sent to describe how to change @@ -2021,11 +2021,11 @@ }else{ @

An email has been sent to "%h(zEAddr)" that explains how to @ unsubscribe and/or modify your subscription settings

} alert_sender_free(pSender); - style_footer(); + style_finish_page("alerts"); return; } /* Non-logged-in users have to enter an email address to which is ** sent a message containing the unsubscribe link. @@ -2071,11 +2071,11 @@ @ @ Enter the 8 characters above in the "Security Code" box
@ @ fossil_free(zErr); - style_footer(); + style_finish_page("alerts"); } /* ** WEBPAGE: subscribers ** @@ -2182,11 +2182,11 @@ @ } @ db_finalize(&q); style_table_sorter(); - style_footer(); + style_finish_page("alerts"); } #if LOCAL_INTERFACE /* ** A single event that might appear in an alert is recorded as an @@ -2802,11 +2802,11 @@ login_check_credentials(); if( zAdminEmail==0 || zAdminEmail[0]==0 ){ style_header("Outbound Email Disabled"); @

Outbound email is disabled on this repository - style_footer(); + style_finish_page("alerts"); return; } if( P("submit")!=0 && P("subject")!=0 && P("msg")!=0 @@ -2834,11 +2834,11 @@ }else{ @

Your message has been sent to the repository administrator. @ Thank you for your input.

} alert_sender_free(pSender); - style_footer(); + style_finish_page("alerts"); return; } if( captcha_needed() ){ uSeed = captcha_seed(); zDecoded = captcha_decode(uSeed); @@ -2881,11 +2881,11 @@ @ @ Enter the 8 characters above in the "Security Code" box
@ } @ - style_footer(); + style_finish_page("alerts"); } /* ** Send an annoucement message described by query parameter. ** Permission to do this has already been verified. @@ -2989,11 +2989,11 @@ @ }else{ @

The announcement has been sent. @ Send another

} - style_footer(); + style_finish_page("alerts"); return; } else if( !alert_enabled() ){ style_header("Cannot Send Announcement"); @

Either you have no subscribers yet, or email alerts are not yet @ set up @@ -3043,7 +3043,7 @@ @ } @ @ @ - style_footer(); + style_finish_page("alerts"); } Index: src/attach.c ================================================================== --- src/attach.c +++ src/attach.c @@ -145,11 +145,11 @@ hyperlink_to_date(zDate, "."); free(zUrlTail); } db_finalize(&q); @ - style_footer(); + style_finish_page("attach"); return; } /* ** WEBPAGE: attachdownload @@ -205,16 +205,16 @@ ); } if( zUUID==0 || zUUID[0]==0 ){ style_header("No Such Attachment"); @ No such attachment.... - style_footer(); + style_finish_page("attach"); return; }else if( zUUID[0]=='x' ){ style_header("Missing"); @ Attachment has been deleted - style_footer(); + style_finish_page("attach"); return; }else{ g.perm.Read = 1; cgi_replace_parameter("name",zUUID); if( fossil_strcmp(g.zPath,"attachview")==0 ){ @@ -410,11 +410,11 @@ @ @ @ captcha_generate(0); @ - style_footer(); + style_finish_page("attach"); fossil_free(zTargetType); } /* ** WEBPAGE: ainfo @@ -622,11 +622,11 @@ @ (file is %d(sz) bytes of binary data) } @ manifest_destroy(pAttach); blob_reset(&attach); - style_footer(); + style_finish_page("attach"); } /* ** Output HTML to show a list of attachments. */ Index: src/backlink.c ================================================================== --- src/backlink.c +++ src/backlink.c @@ -91,11 +91,11 @@ blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); db_prepare(&q, "%s", blob_sql_text(&sql)); www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL, 0, 0, 0, 0, 0, 0); db_finalize(&q); - style_footer(); + style_finish_page("test"); } /* ** WEBPAGE: test-backlinks ** @@ -152,11 +152,11 @@ @ %h(zMtime) } @ @ db_finalize(&q); - style_footer(); + style_finish_page("test"); } /* ** Remove all prior backlinks for the wiki page given. Then ** add new backlinks for the latest version of the wiki page. Index: src/branch.c ================================================================== --- src/branch.c +++ src/branch.c @@ -514,11 +514,11 @@ @ } @ db_finalize(&q); style_table_sorter(); - style_footer(); + style_finish_page("branch"); } /* ** WEBPAGE: brlist ** Show a list of branches. With no query parameters, a sortable table @@ -622,11 +622,11 @@ } if( cnt ){ @ } db_finalize(&q); - style_footer(); + style_finish_page("branch"); } /* ** This routine is called while for each check-in that is rendered by ** the timeline of a "brlist" page. Add some additional hyperlinks @@ -698,7 +698,7 @@ if( PB("ng")==0 ) tmFlags |= TIMELINE_GRAPH; if( PB("brbg")!=0 ) tmFlags |= TIMELINE_BRCOLOR; if( PB("ubg")!=0 ) tmFlags |= TIMELINE_UCOLOR; www_print_timeline(&q, tmFlags, 0, 0, 0, 0, 0, brtimeline_extra); db_finalize(&q); - style_footer(); + style_finish_page("branch"); } Index: src/browse.c ================================================================== --- src/browse.c +++ src/browse.c @@ -336,11 +336,11 @@ /* If the "noreadme" query parameter is present, do not try to ** show the content of the README file. */ if( P("noreadme")!=0 ){ - style_footer(); + style_finish_page("dir"); return; } /* If the directory contains a readme file, then display its content below ** the list of files @@ -397,11 +397,11 @@ document_emit_js(); } } } db_finalize(&q); - style_footer(); + style_finish_page("dir"); } /* ** Objects used by the "tree" webpage. */ @@ -913,11 +913,11 @@ } } @ @ builtin_request_js("tree.js"); - style_footer(); + style_finish_page("tree"); /* We could free memory used by sTree here if we needed to. But ** the process is about to exit, so doing so would not really accomplish ** anything useful. */ } @@ -1167,7 +1167,7 @@ fossil_free(zAge); } @ db_finalize(&q1); db_finalize(&q2); - style_footer(); + style_finish_page("fileage"); } Index: src/builtin.c ================================================================== --- src/builtin.c +++ src/builtin.c @@ -103,11 +103,11 @@ char *zUrl = href("%R/builtin?name=%T&id=%.8s&mimetype=text/plain", z,fossil_exe_id()); @

  • %z(zUrl)%h(z) } @ - style_footer(); + style_finish_page("test"); } /* ** COMMAND: test-builtin-get ** Index: src/cache.c ================================================================== --- src/cache.c +++ src/cache.c @@ -384,11 +384,11 @@ @

    cache-file name: %h(zDbName)

    @

    cache-file size: %s(zBuf)

    fossil_free(zDbName); sqlite3_close(db); } - style_footer(); + style_finish_page("cache"); } /* ** WEBPAGE: cacheget ** @@ -407,11 +407,11 @@ zKey = PD("key",""); blob_zero(&content); if( cache_read(&content, zKey)==0 ){ style_header("Cache Download Error"); @ The cache does not contain any entry with this key: "%h(zKey)" - style_footer(); + style_finish_page("cache"); return; } cgi_set_content(&content); cgi_set_content_type("application/x-compressed"); } Index: src/captcha.c ================================================================== --- src/captcha.c +++ src/captcha.c @@ -590,11 +590,11 @@ } style_header("Captcha Test"); @
       @ %s(captcha_render(zPw))
       @ 
    - style_footer(); + style_finish_page("test"); } /* ** Check to see if the current request is coming from an agent that might ** be a spider. If the agent is not a spider, then return 0 without doing @@ -627,11 +627,11 @@ @
    cgi_query_parameters_to_hidden(); @

    Please demonstrate that you are human, not a spider or robot

    captcha_generate(1); @
    - style_footer(); + style_finish_page("captcha"); return 1; } /* ** Generate a WAV file that reads aloud the hex digits given by Index: src/clone.c ================================================================== --- src/clone.c +++ src/clone.c @@ -406,7 +406,7 @@ @

    Clone the repository using this command: @

         @ fossil  clone  %s(g.zBaseURL)  %h(zNm).fossil
         @ 
    } - style_footer(); + style_finish_page("download"); } Index: src/cookies.c ================================================================== --- src/cookies.c +++ src/cookies.c @@ -225,7 +225,7 @@ @
  • Raw cookie value: "%h(PD("fossil_display_settings",""))" for(i=0; i%h(cookies.aParam[i].zPName): "%h(cookies.aParam[i].zPValue)" } @ - style_footer(); + style_finish_page("cookies"); } Index: src/default.css ================================================================== --- src/default.css +++ src/default.css @@ -752,23 +752,19 @@ white-space: pre-wrap; } div.markdown code { white-space: pre-wrap; } -div.forumHier, div.forumTime { +div.forumTime { border: 1px solid black; padding-left: 1ex; padding-right: 1ex; margin-top: 1ex; -} -div.forumHier, div.forumTime, div.forumHierRoot { display: flex; flex-direction: column; } -div.forumHier > div > form, -div.forumTime > div > form, -div.forumHierRoot > div > form { +.forum div > form { margin: 0.5em 0; } .forum-post-collapser { /* Common style for the bottom-of-post and right-of-post expand/collapse widgets. */ Index: src/descendants.c ================================================================== --- src/descendants.c +++ src/descendants.c @@ -613,11 +613,11 @@ if( fBrBg ) tmFlags |= TIMELINE_BRCOLOR; if( fUBg ) tmFlags |= TIMELINE_UCOLOR; www_print_timeline(&q, tmFlags, 0, 0, 0, 0, 0, 0); db_finalize(&q); @
    - style_footer(); + style_finish_page("leaves"); } #if INTERFACE /* Flag parameters to compute_uses_file() */ #define USESFILE_DELETE 0x01 /* Include the check-ins where file deleted */ Index: src/diff.c ================================================================== --- src/diff.c +++ src/diff.c @@ -2556,11 +2556,11 @@ } @ %s(zPrefix) %h(z) } @ - style_footer(); + style_finish_page("annotate"); } /* ** COMMAND: annotate ** COMMAND: blame Index: src/dispatch.c ================================================================== --- src/dispatch.c +++ src/dispatch.c @@ -850,11 +850,11 @@ } } @ } - style_footer(); + style_finish_page("help"); } /* ** WEBPAGE: test-all-help ** @@ -901,11 +901,11 @@ help_to_html(aCommand[i].zHelp, cgi_output_blob()); @ } @ blob_reset(&buf); - style_footer(); + style_finish_page("help"); } static void multi_column_list(const char **azWord, int nWord){ int i, j, len; int mxLen = 0; Index: src/doc.c ================================================================== --- src/doc.c +++ src/doc.c @@ -555,11 +555,11 @@ } @ %s(zFlag)%h(aMime[i].zSuffix)%h(aMime[i].zMimetype) } @ style_table_sorter(); - style_footer(); + style_finish_page("mimetypes"); } /* ** Check to see if the file in the pContent blob is "embedded HTML". Return ** true if it is, and fill pTitle with the document title. @@ -770,11 +770,11 @@ }else{ style_header("%s", zDefaultTitle); wiki_convert(pBody, 0, WIKI_BUTTONS); } document_emit_js(); - style_footer(); + style_finish_page("doc"); }else if( fossil_strcmp(zMime, "text/x-markdown")==0 ){ Blob tail = BLOB_INITIALIZER; markdown_to_html(pBody, &title, &tail); if( blob_size(&title)>0 ){ style_header("%s", blob_str(&title)); @@ -781,30 +781,30 @@ }else{ style_header("%s", zDefaultTitle); } convert_href_and_output(&tail); document_emit_js(); - style_footer(); + style_finish_page("doc"); }else if( fossil_strcmp(zMime, "text/plain")==0 ){ style_header("%s", zDefaultTitle); @
         @ %h(blob_str(pBody))
         @ 
    document_emit_js(); - style_footer(); + style_finish_page("doc"); }else if( fossil_strcmp(zMime, "text/html")==0 && doc_is_embedded_html(pBody, &title) ){ if( blob_size(&title)==0 ) blob_append(&title,zFilename,-1); style_header("%s", blob_str(&title)); convert_href_and_output(pBody); document_emit_js(); - style_footer(); + style_finish_page("doc"); }else if( fossil_strcmp(zMime, "text/x-pikchr")==0 ){ style_adunit_config(ADUNIT_RIGHT_OK); style_header("%s", zDefaultTitle); wiki_render_by_mimetype(pBody, zMime); - style_footer(); + style_finish_page("doc"); #ifdef FOSSIL_ENABLE_TH1_DOCS }else if( Th_AreDocsEnabled() && fossil_strcmp(zMime, "application/x-th1")==0 ){ int raw = P("raw")!=0; if( !raw ){ @@ -821,11 +821,11 @@ }else{ Th_Render(blob_str(pBody)); } if( !raw ){ document_emit_js(); - style_footer(); + style_finish_page("doc"); } #endif }else{ fossil_free(style_csp(1)); cgi_set_content_type(zMime); @@ -1029,11 +1029,11 @@ style_header("Not Found"); @

    Document %h(zOrigName) not found if( fossil_strcmp(zCheckin,"ckout")!=0 ){ @ in %z(href("%R/tree?ci=%T",zCheckin))%h(zCheckin) } - style_footer(); + style_finish_page("doc"); return; } /* ** The default logo. @@ -1202,7 +1202,7 @@ */ void doc_search_page(void){ login_check_credentials(); style_header("Document Search"); search_screen(SRCH_DOC, 0); - style_footer(); + style_finish_page("docsrch"); } Index: src/event.c ================================================================== --- src/event.c +++ src/event.c @@ -113,11 +113,11 @@ } db_finalize(&q1); if( rid==0 || (specRid!=0 && specRid!=rid) ){ style_header("No Such Tech-Note"); @ Cannot locate a technical note called %h(zId). - style_footer(); + style_finish_page("event"); return; } zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); zVerbose = P("v"); if( !zVerbose ){ @@ -229,11 +229,11 @@ " FROM tag" " WHERE tagname GLOB 'event-%q*'", zId); attachment_list(zFullId, "


    Attachments:

    @

  • } @ db_finalize(&q); - style_footer(); + style_finish_page("ambiguous"); } /* ** Convert the name in CGI parameter zParamName into a rid and return that ** rid. If the CGI parameter is missing or is not a valid artifact tag, @@ -1328,11 +1328,11 @@ for(i=1; i<=mx; i+=n){ @
  • %z(href("%R/bloblist?s=%d&n=%d",i,n)) @ %d(i)..%d(i+n-1 } @ - style_footer(); + style_finish_page("bloblist"); return; } if( phantomOnly || privOnly || mx>n ){ style_submenu_element("Index", "bloblist"); } @@ -1407,11 +1407,11 @@ } @ } @ db_finalize(&q); - style_footer(); + style_finish_page("bloblist"); } /* ** Output HTML that shows a table of all public phantoms. */ @@ -1477,11 +1477,11 @@ } if( g.perm.Write ){ style_submenu_element("Artifact Stats", "artifact_stats"); } table_of_public_phantoms(); - style_footer(); + style_finish_page("phantoms"); } /* ** WEBPAGE: bigbloblist ** @@ -1541,11 +1541,11 @@ @ } @ db_finalize(&q); style_table_sorter(); - style_footer(); + style_finish_page("bigbloblist"); } /* ** COMMAND: test-unsent ** @@ -1665,7 +1665,7 @@ collision_report("SELECT (SELECT uuid FROM blob WHERE rid=objid)" " FROM event WHERE event.type='ci'" " ORDER BY 1"); @

    Hash Prefix Collisions on All Artifacts

    collision_report("SELECT uuid FROM blob ORDER BY 1"); - style_footer(); + style_finish_page("hash-collisions"); } Index: src/path.c ================================================================== --- src/path.c +++ src/path.c @@ -651,7 +651,7 @@ @ %z(href("%R/info/%!S",zUuid))%S(zUuid) } @ db_finalize(&q); style_table_sorter(); - style_footer(); + style_finish_page("test"); } Index: src/piechart.c ================================================================== --- src/piechart.c +++ src/piechart.c @@ -328,7 +328,7 @@ @
  • Case 2 @
  • Case 3 @
  • Case 4 @
  • Case 5 @ - style_footer(); + style_finish_page("test"); } Index: src/pikchrshow.c ================================================================== --- src/pikchrshow.c +++ src/pikchrshow.c @@ -373,11 +373,11 @@ } CX(""/*sbs-wrapper*/); builtin_fossil_js_bundle_or("fetch", "copybutton", "popupwidget", "storage", "pikchr", 0); builtin_request_js("fossil.page.pikchrshow.js"); builtin_fulfill_js_requests(); - style_footer(); + style_finish_page("pikchrshow"); } /* ** COMMAND: pikchr* ** Index: src/printf.c ================================================================== --- src/printf.c +++ src/printf.c @@ -1101,11 +1101,11 @@ cgi_set_content_type("text/html"); style_header("Bad Request"); etag_cancel(); @

    %h(z)

    cgi_set_status(400, "Bad Request"); - style_footer(); + style_finish_page("error"); cgi_reply(); }else if( !g.fQuiet ){ fossil_force_newline(); fossil_trace("%s\n", z); } Index: src/repolist.c ================================================================== --- src/repolist.c +++ src/repolist.c @@ -248,11 +248,11 @@ ** for display. */ login_check_credentials(); style_header("Repository List"); @ %s(blob_str(&html)) style_table_sorter(); - style_footer(); + style_finish_page("repolist"); }else{ /* If no repositories were found that had the "repolist_skin" ** property set, then use a default skin */ @ @ Index: src/report.c ================================================================== --- src/report.c +++ src/report.c @@ -97,11 +97,11 @@ Th_Render(zScript); blob_reset(&ril); if( g.thTrace ) Th_Trace("END_REPORTLIST
    \n", -1); - style_footer(); + style_finish_page("reportlist"); } /* ** Remove whitespace from both ends of a string. */ @@ -319,11 +319,11 @@ db_prepare(&q, "SELECT title, sqlcode, owner, cols " "FROM reportfmt WHERE rn=%d",rn); style_header("SQL For Report Format Number %d", rn); if( db_step(&q)!=SQLITE_ROW ){ @

    Unknown report number: %d(rn)

    - style_footer(); + style_finish_page("report"); db_finalize(&q); return; } zTitle = db_column_text(&q, 0); zSQL = db_column_text(&q, 1); @@ -341,11 +341,11 @@ @ output_color_key(zClrKey, 0, "border=0 cellspacing=0 cellpadding=3"); @ @ report_format_hints(); - style_footer(); + style_finish_page("report"); db_finalize(&q); } /* ** WEBPAGE: rptnew @@ -401,11 +401,11 @@ @ login_insert_csrf_secret(); @ @ @ - style_footer(); + style_finish_page("report"); return; }else if( P("can") ){ /* user cancelled */ cgi_redirect("reportlist"); return; @@ -493,20 +493,20 @@ if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){ @

    This report format is owned by %h(zOwner). You are not allowed @ to change it.

    @ report_format_hints(); - style_footer(); + style_finish_page("report"); return; } @ if( rn>0 ){ @ } @ report_format_hints(); - style_footer(); + style_finish_page("report"); } /* ** Output a bunch of text that provides information about report ** formats @@ -1048,11 +1048,11 @@ @

    Error: %h(zErr1)

    }else if( zErr2 ){ @

    Error: %h(zErr2)

    } style_table_sorter(); - style_footer(); + style_finish_page("report"); }else{ report_restrict_sql(&zErr1); db_exec_readonly(g.db, zSql, output_tab_separated, &count, &zErr2); report_unrestrict_sql(); cgi_set_content_type("text/plain"); Index: src/search.c ================================================================== --- src/search.c +++ src/search.c @@ -1212,11 +1212,11 @@ */ void search_page(void){ login_check_credentials(); style_header("Search"); search_screen(SRCH_ALL, 1); - style_footer(); + style_finish_page("search"); } /* ** This is a helper function for search_stext(). Writing into pOut @@ -1981,11 +1981,11 @@ int cnt1 = 0, cnt2 = 0, cnt3 = 0; login_check_credentials(); if( !g.perm.Admin ){ login_needed(0); return; } if( !search_index_exists() ){ @

    Indexed search is disabled - style_footer(); + style_finish_page("report"); return; } search_sql_setup(g.db); style_submenu_element("Setup","%R/srchsetup"); if( zId!=0 && (id = atoi(zId))>0 ){ @@ -2025,11 +2025,11 @@ style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=1",zDocId[0]); zName = mprintf("Unindexed '%c' docs",zDocId[0]); style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=0",zDocId[0]); } db_finalize(&q); - style_footer(); + style_finish_page("test"); return; } if( zType!=0 && zType[0]!=0 && zType[1]==0 && zIdxed!=0 && (zIdxed[0]=='1' || zIdxed[0]=='0') && zIdxed[1]==0 ){ @@ -2055,11 +2055,11 @@ @

  • @ %h(db_column_text(&q,1)) } @ db_finalize(&q); - style_footer(); + style_finish_page("test"); return; } style_header("Summary of ftsdocs"); db_prepare(&q, "SELECT type, sum(idxed IS TRUE), sum(idxed IS FALSE), count(*)" @@ -2099,7 +2099,7 @@ @ @ Total%d(cnt1)%d(cnt2) @ %d(cnt3) @ @ - style_footer(); + style_finish_page("test"); } Index: src/security_audit.c ================================================================== --- src/security_audit.c +++ src/security_audit.c @@ -585,11 +585,11 @@ table_of_public_phantoms(); @
  • } @ - style_footer(); + style_finish_page("secaudit"); } /* ** WEBPAGE: takeitprivate ** @@ -627,11 +627,11 @@ @
    @ @ @
    - style_footer(); + style_finish_page("takeitprivate"); } /* ** The maximum number of bytes of log to show */ @@ -668,11 +668,11 @@ @ If the server is running using one of @ the "fossil http" or "fossil server" commands then add @ a command-line option "--errorlog FILENAME" to that @ command. @ - style_footer(); + style_finish_page("errorlog"); return; } if( P("truncate1") && cgi_csrf_safe(1) ){ fclose(fopen(g.zErrlog,"w")); } @@ -688,20 +688,20 @@ @
    @

    Confirm that you want to truncate the %,lld(szFile)-byte error log: @ @ @

    - style_footer(); + style_finish_page("errorlog"); return; } @

    The server error log at "%h(g.zErrlog)" is %,lld(szFile) bytes in size. style_submenu_element("Download", "%R/errorlog?download"); style_submenu_element("Truncate", "%R/errorlog?truncate"); in = fossil_fopen(g.zErrlog, "rb"); if( in==0 ){ @

    Unable to open that file for reading!

    - style_footer(); + style_finish_page("errorlog"); return; } if( szFile>MXSHOWLOG && P("all")==0 ){ @
    @

    Only the last %,d(MXSHOWLOG) bytes are shown. @@ -714,7 +714,7 @@ while( fgets(z, sizeof(z), in) ){ @ %h(z)\ } fclose(in); @ - style_footer(); + style_finish_page("errorlog"); } Index: src/setup.c ================================================================== --- src/setup.c +++ src/setup.c @@ -175,11 +175,11 @@ setup_menu_entry("TH1", "admin_th1", "Enter raw TH1 commands"); } @ - style_footer(); + style_finish_page("setup"); } /* ** Generate a checkbox for an attribute. */ @@ -576,11 +576,11 @@ @


    @

    @
    db_end_transaction(0); - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: setup_login_group ** @@ -704,11 +704,11 @@ } db_finalize(&q); @ style_table_sorter(); } - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: setup_timeline ** @@ -843,11 +843,11 @@ @
    @

    @ db_end_transaction(0); - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: setup_settings ** @@ -936,11 +936,11 @@ } } @ @ db_end_transaction(0); - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: setup_config ** @@ -1032,11 +1032,11 @@ @ (Property: sitemap-contact) @
    @

    @ db_end_transaction(0); - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: setup_wiki ** @@ -1108,11 +1108,11 @@ @ (Property: "wiki-use-html") @
    @

    @ db_end_transaction(0); - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: setup_modreq ** @@ -1154,11 +1154,11 @@ @
    @

    @ db_end_transaction(0); - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: setup_adunit @@ -1235,11 +1235,11 @@ @ border: 1px solid #f11; @ background-color: #fcc; @ '>Demo Ad</div> @ @ - style_footer(); + style_finish_page("setup"); db_end_transaction(0); } /* ** WEBPAGE: setup_logo @@ -1437,11 +1437,11 @@ @
    @ @

    Note: Your browser has probably cached these @ images, so you may need to press the Reload button before changes will @ take effect.

    - style_footer(); + style_finish_page("setup"); db_end_transaction(0); } /* ** Prevent the RAW SQL feature from being used to ATTACH a different @@ -1599,11 +1599,11 @@ } sqlite3_finalize(pStmt); @ } } - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: admin_th1 @@ -1643,11 +1643,11 @@ @
    %h(zR)
    }else{ @
    %h(zR)
    } } - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: admin_log ** @@ -1710,11 +1710,11 @@ db_finalize(&stLog); @ if( counter>ofst+limit ){ @

    [Older]

    } - style_footer(); + style_finish_page("setup"); } /* ** WEBPAGE: srchsetup ** @@ -1790,11 +1790,11 @@ @ larger repositories.

    onoff_attribute("Use Porter Stemmer","search-stemmer","ss",0,0); @

    } @ - style_footer(); + style_finish_page("setup"); } /* ** A URL Alias originally called zOldName is now zNewName/zValue. ** Write SQL to make this change into pSql. @@ -1948,7 +1948,7 @@ @

    To delete an entry from the alias table, change its name or value to an @ empty string and press "Apply Changes". @ @

    To add a new alias, fill in the name and value in the bottom row @ of the table above and press "Apply Changes". - style_footer(); + style_finish_page("setup"); } Index: src/setupuser.c ================================================================== --- src/setupuser.c +++ src/setupuser.c @@ -180,11 +180,11 @@ fossil_free(zAge); } @ db_finalize(&s); style_table_sorter(); - style_footer(); + style_finish_page("setupuser"); } /* ** WEBPAGE: setup_ulist_notes ** @@ -226,11 +226,11 @@ @ @

  • The permission flags are as follows:

    capabilities_table(CAPCLASS_ALL); @
  • @ - style_footer(); + style_finish_page("setupuser"); } /* ** WEBPAGE: setup_ucap_list ** @@ -253,11 +253,11 @@ capabilities_table(CAPCLASS_WIKI); @

    Administrative capabilities

    capabilities_table(CAPCLASS_SUPER); @

    Miscellaneous capabilities

    capabilities_table(CAPCLASS_OTHER); - style_footer(); + style_finish_page("setupuser"); } /* ** Return true if zPw is a valid password string. A valid ** password string is: @@ -387,11 +387,11 @@ style_header("User Creation Error"); @ Empty login not allowed. @ @

    @ [Bummer]

    - style_footer(); + style_finish_page("setupuser"); return; } if( isValidPwString(zPw) ){ zPw = sha1_shared_secret(zPw, zLogin, 0); }else{ @@ -404,11 +404,11 @@ @ Login "%h(zLogin)" is already used by @ a different user. @ @

    @ [Bummer]

    - style_footer(); + style_finish_page("setupuser"); return; } login_verify_csrf_secret(); db_unprotect(PROTECT_USER); db_multi_exec( @@ -456,11 +456,11 @@ admin_log( "Error updating user '%q': %s'.", zLogin, zErr ); @ %h(zErr) @ @

    @ [Bummer]

    - style_footer(); + style_finish_page("setupuser"); return; } } cgi_redirect(cgi_referer("setup_ulist")); return; @@ -874,7 +874,7 @@ @ template for users who are allowed more access than @ anonymous, @ but less than a developer. @

    @ - style_footer(); + style_finish_page("setupuser"); } Index: src/shun.c ================================================================== --- src/shun.c +++ src/shun.c @@ -263,11 +263,11 @@ if( cnt==0 ){ @ no artifacts are shunned on this server } db_finalize(&q); @

    - style_footer(); + style_finish_page("shun"); fossil_free(zCanonical); } /* ** Remove from the BLOB table all artifacts that are in the SHUN table. @@ -403,11 +403,11 @@ @ } } db_finalize(&q); @ - style_footer(); + style_finish_page("rcvfromlist"); } /* ** WEBPAGE: rcvfrom ** @@ -549,7 +549,7 @@ @ } } @ db_finalize(&q); - style_footer(); + style_finish_page("rcvfrom"); } Index: src/sitemap.c ================================================================== --- src/sitemap.c +++ src/sitemap.c @@ -233,8 +233,8 @@ @ colors assigned to branch names @
  • %z(href("%R/test-captcha"))Random ASCII-art Captcha image
  • @ @ if( !isPopup ){ - style_footer(); + style_finish_page("sitemap"); } } Index: src/skins.c ================================================================== --- src/skins.c +++ src/skins.c @@ -401,11 +401,11 @@ @ @ @ login_insert_csrf_secret(); @ - style_footer(); + style_finish_page("skins"); return 1; } db_unprotect(PROTECT_CONFIG); db_multi_exec( "UPDATE config SET name='skin:%q' WHERE name='skin:%q';", @@ -441,11 +441,11 @@ @ @ @ login_insert_csrf_secret(); @ - style_footer(); + style_finish_page("skins"); return 1; } db_unprotect(PROTECT_CONFIG); db_multi_exec( "INSERT OR IGNORE INTO config(name, value, mtime)" @@ -492,11 +492,11 @@ @ @ @ login_insert_csrf_secret(); @ - style_footer(); + style_finish_page("skins"); db_end_transaction(1); return; } if( P("del2")!=0 && (zName = skinVarName(P("sn"), 1))!=0 ){ db_unprotect(PROTECT_CONFIG); @@ -645,11 +645,11 @@ @ } db_finalize(&q); @ - style_footer(); + style_finish_page("skins"); db_end_transaction(0); } /* ** Generate HTML for a @ ← Add a new email address @ @ - style_footer(); + style_finish_page("smtp"); db_end_transaction(0); } /* ** WEBPAGE: setup_smtp_route @@ -924,11 +924,11 @@ @ with USER.LOGIN=login-name. @ @ @

    To delete a route → erase all text from the "Routing" field then @ press the "Apply" button. - style_footer(); + style_finish_page("smtp"); } #if LOCAL_INTERFACE /* ** State information for the server Index: src/stat.c ================================================================== --- src/stat.c +++ src/stat.c @@ -288,11 +288,11 @@ if( g.perm.Admin && alert_enabled() ){ stats_for_email(); } @ - style_footer(); + style_finish_page("stat"); } /* ** COMMAND: dbstat ** @@ -507,11 +507,11 @@ }else{ @

    %h(zRemote)

    } @ } - style_footer(); + style_finish_page("stat"); } /* ** WEBPAGE: repo_schema ** @@ -565,11 +565,11 @@ db_finalize(&q); }else{ style_submenu_element("Stat1","repo_stat1"); } } - style_footer(); + style_finish_page("stat"); } /* ** WEBPAGE: repo_stat1 ** @@ -597,11 +597,11 @@ @ INSERT INTO sqlite_stat1 VALUES('%z(zUrl)%h(zTab)','%h(zIdx)','%h(zStat)'); } @ db_finalize(&q); } - style_footer(); + style_finish_page("stat"); } /* ** WEBPAGE: repo-tabsize ** @@ -669,11 +669,11 @@ @

    %h(file_tail(g.zLocalDbName)) Size: %s(zBuf)

    @
    piechart_render(800,500,PIE_OTHER|PIE_PERCENT); @
    } - style_footer(); + style_finish_page("stat"); } /* ** Gather statistics on artifact types, counts, and sizes. ** @@ -810,11 +810,11 @@ sumCmpr = db_column_int64(&q, 4); sumExp = db_column_int64(&q, 5); db_finalize(&q); if( nTotal==0 ){ @ No artifacts in this repository! - style_footer(); + style_finish_page("stat"); return; } avgCmpr = (double)sumCmpr/nTotal; avgExp = (double)sumExp/nTotal; @@ -955,7 +955,7 @@ } @ db_finalize(&q); } style_table_sorter(); - style_footer(); + style_finish_page("stat"); } Index: src/statrep.c ================================================================== --- src/statrep.c +++ src/statrep.c @@ -825,7 +825,7 @@ break; case RPT_LASTCHNG: stats_report_last_change(); break; } - style_footer(); + style_finish_page("reports"); } Index: src/style.c ================================================================== --- src/style.c +++ src/style.c @@ -736,13 +736,28 @@ @ builtin_fulfill_js_requests(); } /* -** Draw the footer at the bottom of the page. +** Invoke this routine after all of the content for a webpage has been +** generated. This routine should be called once for every webpage, at +** or near the end of page generation. This routine does the following: +** +** * Populates the header of the page, including setting up appropriate +** submenu elements. The header generation is deferred until this point +** so that we know that all style_submenu_element() and similar have +** been received. +** +** * Finalizes the page content. +** +** * Appends the footer. +** +** The zPageType argument is a class name inserted in the
    that +** surrounds the page content. CSS can use this to have different styles +** according to the page type. */ -void style_footer(void){ +void style_finish_page(const char* zPageType){ const char *zFooter; const char *zAd = 0; unsigned int mAdFlags = 0; if( !headerHasBeenGenerated ) return; @@ -864,31 +879,25 @@ if( (mAdFlags & ADUNIT_RIGHT_OK)!=0 ){ @
    @
    cgi_append_content(zAd, -1); @
    - }else{ - if( zAd ){ - @
    - cgi_append_content(zAd, -1); - @
    - } - @
    - } + }else if( zAd ){ + @
    + cgi_append_content(zAd, -1); + @
    + } + + @
    cgi_destination(CGI_BODY); if( sideboxUsed ){ - /* Put the footer at the bottom of the page. - ** the additional clear/both is needed to extend the content - ** part to the end of an optional sidebox. - */ @
    } @
    - - + /* Put the footer at the bottom of the page. */ zFooter = skin_get("footer"); if( sqlite3_strlike("%%", zFooter, 0)==0 ){ style_load_all_js_files(); } if( g.thTrace ) Th_Trace("BEGIN_FOOTER
    \n", -1); @@ -1195,11 +1204,11 @@ @
           @ %h(blob_str(&g.httpHeader))
           @ 
    } } - style_footer(); + style_finish_page("error"); if( zErr ){ cgi_reply(); fossil_exit(1); } } Index: src/tag.c ================================================================== --- src/tag.c +++ src/tag.c @@ -724,11 +724,11 @@ @
  • %h(zName)
  • } } @ db_finalize(&q); - style_footer(); + style_finish_page("taglist"); } /* ** WEBPAGE: /tagtimeline ** @@ -781,7 +781,7 @@ if( PB("brbg")!=0 ) tmFlags |= TIMELINE_BRCOLOR; if( PB("ubg")!=0 ) tmFlags |= TIMELINE_UCOLOR; www_print_timeline(&q, tmFlags, 0, 0, 0, 0, 0, 0); db_finalize(&q); @
    - style_footer(); + style_finish_page("tagtimeline"); } Index: src/tar.c ================================================================== --- src/tar.c +++ src/tar.c @@ -785,11 +785,11 @@ } if( zExclude ){ @ zExclude = "%h(zExclude)"
    } @ zKey = "%h(zKey)" - style_footer(); + style_finish_page("tarball"); return; } if( referred_from_login() ){ style_header("Tarball Download"); @
    @@ -796,11 +796,11 @@ cgi_query_parameters_to_hidden(); @

    Tarball named %h(zName).tar.gz holding the content @ of check-in %h(zRid): @ @

    - style_footer(); + style_finish_page("tarball"); return; } blob_zero(&tarball); if( cache_read(&tarball, zKey)==0 ){ tarball_of_checkin(rid, &tarball, zName, pInclude, pExclude); Index: src/th_main.c ================================================================== --- src/th_main.c +++ src/th_main.c @@ -1478,11 +1478,11 @@ ){ if( argc!=1 ){ return Th_WrongNumArgs(interp, "styleFooter"); } if( Th_IsRepositoryOpen() ){ - style_footer(); + style_finish_page("th1"); /* TODO: add optional parameter to pass along? */ Th_SetResult(interp, 0, 0); return TH_OK; }else{ Th_SetResult(interp, "repository unavailable", -1); return TH_ERROR; Index: src/timeline.c ================================================================== --- src/timeline.c +++ src/timeline.c @@ -214,11 +214,11 @@ zBr = P(zNm); @
    } @ @ - style_footer(); + style_finish_page("test"); } /* ** Return a new timelineTable id. */ @@ -2625,11 +2625,11 @@ db_finalize(&q); if( zOlderButton ){ @ %z(chref("button","%z",zOlderButton))More ↓ } document_emit_js(/*handles pikchrs rendered above*/); - style_footer(); + style_finish_page("timeline"); } /* ** The input query q selects various records. Print a human-readable ** summary of those records. @@ -3117,11 +3117,11 @@ @ %z(href("%R/timeline?c=%t",zId))(more context)\ @ www_print_timeline(&q, TIMELINE_GRAPH, 0, 0, 0, 0, 0, 0); } db_finalize(&q); - style_footer(); + style_finish_page("timeline"); } /* ** COMMAND: test-timewarp-list @@ -3223,7 +3223,7 @@ if( cnt==0 ){ @

    No timewarps in this repository

    }else{ @
    } - style_footer(); + style_finish_page("timewarps"); } Index: src/tkt.c ================================================================== --- src/tkt.c +++ src/tkt.c @@ -617,11 +617,11 @@ " WHERE tkt_uuid GLOB '%q*'", zUuid); if( zFullName ){ attachment_list(zFullName, "

    Attachments:

    db_end_transaction(0); - style_footer(); + style_finish_page("tktsetup"); } Index: src/unversioned.c ================================================================== --- src/unversioned.c +++ src/unversioned.c @@ -546,11 +546,11 @@ if( !g.perm.Read ){ login_needed(g.anon.Read); return; } etag_check(ETAG_DATA,0); style_header("Unversioned Files"); if( !db_table_exists("repository","unversioned") ){ @ No unversioned files on this server - style_footer(); + style_finish_page("uvlist"); return; } if( PB("byage") ) zOrderBy = "mtime DESC"; if( PB("showdel") ) showDel = 1; db_prepare(&q, @@ -632,11 +632,11 @@ @ @
    }else{ @ No unversioned files on this server. } - style_footer(); + style_finish_page("uvlist"); } /* ** WEBPAGE: juvlist ** Index: src/user.c ================================================================== --- src/user.c +++ src/user.c @@ -772,7 +772,7 @@ @ @ @ style_table_sorter(); - style_footer(); + style_finish_page("access_log"); } Index: src/webmail.c ================================================================== --- src/webmail.c +++ src/webmail.c @@ -513,11 +513,11 @@ style_submenu_element("Delete", "%s", url_render(pUrl,"trash","1",zENum,"1")); } db_end_transaction(0); - style_footer(); + style_finish_page("webmail"); return; } /* ** Scan the query parameters looking for parameters with name of the @@ -613,11 +613,11 @@ return; } if( !db_table_exists("repository","emailbox") ){ style_header("Webmail Not Available"); @

    This repository is not configured to provide webmail

    - style_footer(); + style_finish_page("webmail"); return; } add_content_sql_commands(g.db); emailid = atoi(PD("id","0")); url_initialize(&url, "webmail"); @@ -757,11 +757,11 @@ @ for(i=0; i - style_footer(); + style_finish_page("webmail"); db_end_transaction(0); } /* ** WEBPAGE: emailblob @@ -854,11 +854,11 @@ } @ db_finalize(&q); style_table_sorter(); } - style_footer(); + style_finish_page("webmail"); } /* ** WEBPAGE: emailoutq ** @@ -911,7 +911,7 @@ } } @ db_finalize(&q); style_table_sorter(); - style_footer(); + style_finish_page("webmail"); } Index: src/wiki.c ================================================================== --- src/wiki.c +++ src/wiki.c @@ -66,11 +66,11 @@ if( !wiki_name_is_wellformed((const unsigned char *)z) ){ style_header("Wiki Page Name Error"); @ The wiki name "%h(z)" is not well-formed. @ Rules for wiki page names: well_formed_wiki_name_rules(); - style_footer(); + style_finish_page("wiki"); return 1; } return 0; } @@ -141,11 +141,11 @@ @ To fill in this page, first go to @ %z(href("%R/setup_config"))setup/config @ and establish a "Project Name". Then create a @ wiki page with that name. The content of that wiki page @ will be displayed in place of this message.

    - style_footer(); + style_finish_page("wiki"); } /* ** Return true if the given pagename is the name of the sandbox */ @@ -242,11 +242,11 @@ blob_materialize(&x); interwiki_append_map_table(&x); safe_html_context(DOCSRC_TRUSTED); wiki_render_by_mimetype(&x, fTxt ? "text/plain" : "text/x-markdown"); blob_reset(&x); - style_footer(); + style_finish_page("wiki"); } /* ** WEBPAGE: wiki_rules ** @@ -266,11 +266,11 @@ blob_materialize(&x); interwiki_append_map_table(&x); safe_html_context(DOCSRC_TRUSTED); wiki_render_by_mimetype(&x, fTxt ? "text/plain" : "text/x-fossil-wiki"); blob_reset(&x); - style_footer(); + style_finish_page("wiki"); } /* ** WEBPAGE: markup_help ** @@ -280,11 +280,11 @@ style_header("Fossil Markup Styles"); @ - style_footer(); + style_finish_page("wiki"); } /* ** Returns non-zero if moderation is required for wiki changes and wiki ** attachments. @@ -369,11 +369,11 @@ if( search_restrict(SRCH_WIKI)!=0 ){ @
  • %z(href("%R/wikisrch"))Search for wiki pages containing key @ words
  • } @ - style_footer(); + style_finish_page("wiki"); return; } /* ** WEBPAGE: wikisrch @@ -384,11 +384,11 @@ void wiki_srchpage(void){ login_check_credentials(); style_header("Wiki Search"); wiki_standard_submenu(W_HELP|W_LIST|W_SANDBOX); search_screen(SRCH_WIKI, 0); - style_footer(); + style_finish_page("wiki"); } /* Return values from wiki_page_type() */ #if INTERFACE # define WIKITYPE_UNKNOWN (-1) @@ -597,11 +597,11 @@ blob_reset(&wiki); } attachment_list(zPageName, "

    Attachments:

    - style_footer(); + style_finish_page("wiki"); } /* ** Add a new wiki page to the repository. The page name is ** given by the zPageName parameter. rid must be zero to create Index: src/xfersetup.c ================================================================== --- src/xfersetup.c +++ src/xfersetup.c @@ -85,11 +85,11 @@ client_sync(syncFlags, 0, 0, 0); @ } } - style_footer(); + style_finish_page("xfersetup"); } /* ** Common implementation for the transfer setup editor pages. */ @@ -150,11 +150,11 @@ @

    Default %s(zTitle)

    @
         @ %h(zDfltValue)
         @ 
    } - style_footer(); + style_finish_page("xfersetup"); } static const char *zDefaultXferCommon = 0; /* Index: src/zip.c ================================================================== --- src/zip.c +++ src/zip.c @@ -955,11 +955,11 @@ } if( zExclude ){ @ zExclude = "%h(zExclude)"
    } @ zKey = "%h(zKey)" - style_footer(); + style_finish_page("zip"); return; } if( referred_from_login() ){ style_header("%s Archive Download", zType); @
    @@ -966,11 +966,11 @@ cgi_query_parameters_to_hidden(); @

    %s(zType) Archive named %h(zName).%s(g.zPath) @ holding the content of check-in %h(zRid): @ @

    - style_footer(); + style_finish_page("zip"); return; } blob_zero(&zip); if( cache_read(&zip, zKey)==0 ){ zip_of_checkin(eType, rid, &zip, zName, pInclude, pExclude);