Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Added style_emit_noscript_for_js_page() to emit a NOSCRIPT tag and an error message if JS is not available, and call it from the pages which *required* JS in order to work. Added a note about potential browser-induced SVG blurring when using the pikchrshow dark mode option. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
070716d835efaeb54be98f95a00451f0 |
| User & Date: | stephan 2020-09-12 06:13:58.036 |
Context
|
2020-09-12
| ||
| 06:20 | Imported latest upstream pikchr examples into pikchrshow. ... (check-in: ef7912ce4d user: stephan tags: trunk) | |
| 06:13 | Added style_emit_noscript_for_js_page() to emit a NOSCRIPT tag and an error message if JS is not available, and call it from the pages which *required* JS in order to work. Added a note about potential browser-induced SVG blurring when using the pikchrshow dark mode option. ... (check-in: 070716d835 user: stephan tags: trunk) | |
| 05:41 | pikchrshow: discovered that Firefox cannot flexbox a LEGEND element properly, so worked around that. ... (check-in: c92ff2daef user: stephan tags: trunk) | |
Changes
Changes to src/default.css.
| ︙ | ︙ | |||
1376 1377 1378 1379 1380 1381 1382 |
that of fossil-tooltip.
*/
.fossil-tooltip.help-buttonlet-content {
cursor: default;
text-align: left;
border-style: outset;
}
| > > > > > > | 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 |
that of fossil-tooltip.
*/
.fossil-tooltip.help-buttonlet-content {
cursor: default;
text-align: left;
border-style: outset;
}
noscript > .error {
/* Part of the style_emit_noscript_for_js_page() interface. */
padding: 1em;
font-size: 150%;
}
|
Changes to src/fileedit.c.
| ︙ | ︙ | |||
1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 |
}
return;
}
db_begin_transaction();
CheckinMiniInfo_init(&cimi);
style_header("File Editor");
/* As of this point, don't use return or fossil_fatal(). Write any
** error in (&err) and goto end_footer instead so that we can be
** sure to emit the error message, do any cleanup, and end the
** transaction cleanly.
*/
{
int isMissingArg = 0;
| > | 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 |
}
return;
}
db_begin_transaction();
CheckinMiniInfo_init(&cimi);
style_header("File Editor");
style_emit_noscript_for_js_page();
/* As of this point, don't use return or fossil_fatal(). Write any
** error in (&err) and goto end_footer instead so that we can be
** sure to emit the error message, do any cleanup, and end the
** transaction cleanly.
*/
{
int isMissingArg = 0;
|
| ︙ | ︙ |
Changes to src/fossil.page.pikchrshow.js.
| ︙ | ︙ | |||
136 137 138 139 140 141 142 |
////////////////////////////////////////////////////////////
// Move dark mode checkbox to the end and add a help buttonlet
D.append(
P.e.uiControls,
D.append(
P.e.cbDarkMode.parentNode/*the .input-with-label element*/,
F.helpButtonlets.create(
| | | > > > > | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
////////////////////////////////////////////////////////////
// Move dark mode checkbox to the end and add a help buttonlet
D.append(
P.e.uiControls,
D.append(
P.e.cbDarkMode.parentNode/*the .input-with-label element*/,
F.helpButtonlets.create(
D.div(),
'Dark mode changes the colors of rendered SVG to ',
'make them more visible in dark-themed skins. ',
'This only changes (using CSS) how they are rendered, ',
'not any actual colors written in the script.',
D.br(), D.br(),
'In some color combinations, certain browsers might ',
'cause the SVG image to blur considerably with this ',
'setting enabled!'
)
)
);
////////////////////////////////////////////////////////////
// File drag/drop pikchr scripts into P.e.taContent.
// Adapted from: https://stackoverflow.com/a/58677161
|
| ︙ | ︙ |
Changes to src/pikchrshow.c.
| ︙ | ︙ | |||
28 29 30 31 32 33 34 |
**
** A pikchr code editor and previewer, allowing users to experiment
** with pikchr code or prototype it for use in copy/pasting into forum
** posts, wiki pages, or embedded docs.
*/
void pikchrshow_page(void){
const char *zContent = 0;
| | | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
**
** A pikchr code editor and previewer, allowing users to experiment
** with pikchr code or prototype it for use in copy/pasting into forum
** posts, wiki pages, or embedded docs.
*/
void pikchrshow_page(void){
const char *zContent = 0;
int isDark; /* true if the current skin is "dark" */
login_check_credentials();
if( !g.perm.RdWiki && !g.perm.Read && !g.perm.RdForum ){
cgi_redirectf("%s/login?g=%s/pikchrshow", g.zTop, g.zTop);
}
zContent = P("content");
if(P("ajax")!=0){
|
| ︙ | ︙ | |||
55 56 57 58 59 60 61 62 |
}
fossil_free(zOut);
}else{
CX("<pre>No content! Nothing to render</pre>");
}
return;
}
isDark = skin_detail_boolean("white-foreground");
| > < | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
}
fossil_free(zOut);
}else{
CX("<pre>No content! Nothing to render</pre>");
}
return;
}
style_emit_noscript_for_js_page();
isDark = skin_detail_boolean("white-foreground");
if(!zContent){
zContent = "arrow right 200% \"Markdown\" \"Source\"\n"
"box rad 10px \"Markdown\" \"Formatter\" \"(markdown.c)\" fit\n"
"arrow right 200% \"HTML+SVG\" \"Output\"\n"
"arrow <-> down from last box.s\n"
"box same \"Pikchr\" \"Formatter\" \"(pikchr.c)\" fit\n";
}
|
| ︙ | ︙ | |||
126 127 128 129 130 131 132 |
CX("<div id='pikchrshow-form'>");
CX("<textarea id='content' name='content' rows='15'>%s</textarea>",
zContent/*safe-for-%s*/);
CX("<div id='pikchrshow-controls'>");
CX("<button id='pikchr-submit-preview'>Preview</button>");
style_labeled_checkbox("flipcolors-wrapper", "flipcolors",
"Dark mode?",
| | | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
CX("<div id='pikchrshow-form'>");
CX("<textarea id='content' name='content' rows='15'>%s</textarea>",
zContent/*safe-for-%s*/);
CX("<div id='pikchrshow-controls'>");
CX("<button id='pikchr-submit-preview'>Preview</button>");
style_labeled_checkbox("flipcolors-wrapper", "flipcolors",
"Dark mode?",
"1", isDark, 0);
CX("</div>"/*#pikchrshow-controls*/);
CX("</div>"/*#pikchrshow-form*/);
CX("<fieldset id='pikchrshow-output-wrapper'>");
CX("<legend></legend>"
/* Reminder: Firefox does not properly flexbox a LEGEND element,
always flowing it in column mode (at least when its fieldset
has a flexbox column layout). */);
|
| ︙ | ︙ |
Changes to src/style.c.
| ︙ | ︙ | |||
1454 1455 1456 1457 1458 1459 1460 |
}else{
CX("<script nonce='%s'>", style_nonce());
}
}else{
CX("</script>\n");
}
}
| > > > > > > > > > > > > | 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 |
}else{
CX("<script nonce='%s'>", style_nonce());
}
}else{
CX("</script>\n");
}
}
/*
** Emits a NOSCRIPT tag with an error message stating that JS is
** required for the current page. This "should" be called near the top
** of pages which *require* JS. The inner DIV has the CSS class
** 'error' and can be styled via a (noscript > .error) CSS selector.
*/
void style_emit_noscript_for_js_page(void){
CX("<noscript><div class='error'>"
"This page requires JavaScript (ES2015, a.k.a. ES6, or newer)."
"</div></noscript>");
}
|
Changes to src/wiki.c.
| ︙ | ︙ | |||
1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 |
found = wiki_fetch_by_name(zPageName, 0, &rid, 0);
if( (rid && !g.perm.WrWiki) || (!rid && !g.perm.NewWiki) ){
login_needed(rid ? g.anon.WrWiki : g.anon.NewWiki);
return;
}
}
style_header("Wiki Editor");
/* Status bar */
CX("<div id='fossil-status-bar' "
"title='Status message area. Double-click to clear them.'>"
"Status messages will go here.</div>\n"
/* will be moved into the tab container via JS */);
| > | 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 |
found = wiki_fetch_by_name(zPageName, 0, &rid, 0);
if( (rid && !g.perm.WrWiki) || (!rid && !g.perm.NewWiki) ){
login_needed(rid ? g.anon.WrWiki : g.anon.NewWiki);
return;
}
}
style_header("Wiki Editor");
style_emit_noscript_for_js_page();
/* Status bar */
CX("<div id='fossil-status-bar' "
"title='Status message area. Double-click to clear them.'>"
"Status messages will go here.</div>\n"
/* will be moved into the tab container via JS */);
|
| ︙ | ︙ |