Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Improvements to the Skin setup interface. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
33cc83ffb8550a8b7e78087242e6cf6e |
| User & Date: | drh 2024-02-23 17:25:24.654 |
Context
|
2024-02-23
| ||
| 17:30 | Remove the "default-skin" setting that was added by [24e015de71cfdc79]. check-in: 1975bfd279 user: drh tags: trunk | |
| 17:25 | Improvements to the Skin setup interface. check-in: 33cc83ffb8 user: drh tags: trunk | |
| 15:24 | Add the "default-skin" setting which defines which built-in skin to use if no skin is otherwise specified. On the /skins page, show how the current skin is selected, if that is relevant. Add the /fdscookie page that shows just the "fossil_display_settings" cookie rather than all cookies. check-in: 24e015de71 user: drh tags: trunk | |
Changes
Changes to src/setup.c.
| ︙ | ︙ | |||
141 142 143 144 145 146 147 |
"Configure URL aliases");
if( setup_user ){
setup_menu_entry("Notification", "setup_notification",
"Automatic notifications of changes via outbound email");
setup_menu_entry("Transfers", "xfersetup",
"Configure the transfer system for this repository");
}
| | | 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
"Configure URL aliases");
if( setup_user ){
setup_menu_entry("Notification", "setup_notification",
"Automatic notifications of changes via outbound email");
setup_menu_entry("Transfers", "xfersetup",
"Configure the transfer system for this repository");
}
setup_menu_entry("Skins", "setup_skin_admin",
"Select and/or modify the web interface \"skins\"");
setup_menu_entry("Moderation", "setup_modreq",
"Enable/Disable requiring moderator approval of Wiki and/or Ticket"
" changes and attachments.");
setup_menu_entry("Ad-Unit", "setup_adunit",
"Edit HTML text for an ad unit inserted after the menu bar");
setup_menu_entry("URLs & Checkouts", "urllist",
|
| ︙ | ︙ |
Changes to src/skins.c.
| ︙ | ︙ | |||
571 572 573 574 575 576 577 578 579 580 581 582 583 584 |
char *zName;
char *zErr = 0;
const char *zCurrent = 0; /* Current skin */
int i; /* Loop counter */
Stmt q;
int seenCurrent = 0;
int once;
login_check_credentials();
if( !g.perm.Admin ){
login_needed(0);
return;
}
db_begin_transaction();
| > > | 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 |
char *zName;
char *zErr = 0;
const char *zCurrent = 0; /* Current skin */
int i; /* Loop counter */
Stmt q;
int seenCurrent = 0;
int once;
const char *zInstalled = 0;
const char *zOverride = 0;
login_check_credentials();
if( !g.perm.Admin ){
login_needed(0);
return;
}
db_begin_transaction();
|
| ︙ | ︙ | |||
613 614 615 616 617 618 619 620 621 622 623 624 625 626 |
if( P("draftdel")!=0 ){
const char *zDraft = P("name");
if( sqlite3_strglob("draft[1-9]",zDraft)==0 ){
db_unprotect(PROTECT_CONFIG);
db_multi_exec("DELETE FROM config WHERE name GLOB '%q-*'", zDraft);
db_protect_pop();
}
}
if( skinRename() || skinSave(zCurrent) ){
db_end_transaction(0);
return;
}
/* The user pressed one of the "Install" buttons. */
| > > > > > | 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 |
if( P("draftdel")!=0 ){
const char *zDraft = P("name");
if( sqlite3_strglob("draft[1-9]",zDraft)==0 ){
db_unprotect(PROTECT_CONFIG);
db_multi_exec("DELETE FROM config WHERE name GLOB '%q-*'", zDraft);
db_protect_pop();
}
}
if( P("editdraft")!=0 ){
db_end_transaction(0);
cgi_redirectf("%R/setup_skin");
return;
}
if( skinRename() || skinSave(zCurrent) ){
db_end_transaction(0);
return;
}
/* The user pressed one of the "Install" buttons. */
|
| ︙ | ︙ | |||
676 677 678 679 680 681 682 |
}
@ <table border="0">
@ <tr><td colspan=4><h2>Built-in Skins:</h2></td></th>
for(i=0; i<count(aBuiltinSkin); i++){
z = aBuiltinSkin[i].zDesc;
@ <tr><td>%d(i+1).<td>%h(z)<td> <td>
if( fossil_strcmp(aBuiltinSkin[i].zSQL, zCurrent)==0 ){
| | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > | | > < | | | | | > > > | | > > > > | 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 |
}
@ <table border="0">
@ <tr><td colspan=4><h2>Built-in Skins:</h2></td></th>
for(i=0; i<count(aBuiltinSkin); i++){
z = aBuiltinSkin[i].zDesc;
@ <tr><td>%d(i+1).<td>%h(z)<td> <td>
if( fossil_strcmp(aBuiltinSkin[i].zSQL, zCurrent)==0 ){
@ (Installed)
zInstalled = z;
seenCurrent = 1;
}else{
@ <form action="%R/setup_skin_admin" method="post">
@ <input type="hidden" name="sn" value="%h(z)">
@ <input type="submit" name="load" value="Install">
login_insert_csrf_secret();
if( pAltSkin==&aBuiltinSkin[i] ){
zOverride = z;
@ (Currently Used)
}
@ </form>
}
@ </tr>
}
if( zOverride ){
@ <tr><td> <td colspan="3">
@ <p>Note: Built-in skin "%h(zOverride)" is currently being used because of
switch( iSkinSource ){
case SKIN_FROM_CMDLINE:
@ the --skin command-line option.
break;
case SKIN_FROM_CGI:
@ the "skin:" option on CGI script.
break;
case SKIN_FROM_QPARAM:
@ the "skin=NAME" query parameter.
break;
case SKIN_FROM_COOKIE:
@ the "skin" value of the
@ <a href='./fdscookie'>fossil_display_setting</a> cookie.
break;
case SKIN_FROM_SETTING:
@ the "default-skin" setting.
break;
default:
@ reasons unknown. (Fix me!)
break;
}
@ </tr>
}
db_prepare(&q,
"SELECT substr(name, 6), value FROM config"
" WHERE name GLOB 'skin:*'"
" ORDER BY name"
);
once = 1;
while( db_step(&q)==SQLITE_ROW ){
const char *zN = db_column_text(&q, 0);
const char *zV = db_column_text(&q, 1);
i++;
if( once ){
once = 0;
@ <tr><td colspan=4><h2>Backup skins saved as "skin:*' entries \
@ in the CONFIG table:</h2></td></tr>
}
@ <tr><td>%d(i).<td>%h(zN)<td> <td>
@ <form action="%R/setup_skin_admin" method="post">
login_insert_csrf_secret();
if( fossil_strcmp(zV, zCurrent)==0 ){
@ (Installed)
zInstalled = mprintf("%s", zN);
seenCurrent = 1;
}else{
@ <input type="submit" name="load" value="Install">
@ <input type="submit" name="del1" value="Delete">
}
@ <input type="submit" name="rename" value="Rename">
@ <input type="hidden" name="sn" value="%h(zN)">
@ </form></tr>
}
db_finalize(&q);
i++;
@ <tr><td colspan=4><h2>Current skin in css/details/footer/header/js \
@ entries in the CONFIG table:</h2></td></tr>
@ <tr><td>%d(i).<td><i>Current</i><td> <td>
@ <form action="%R/setup_skin_admin" method="post">
if( !seenCurrent ){
@ <input type="submit" name="save" value="Backup">
}
@ <input type="submit" name="editdraft" value="Edit">
login_insert_csrf_secret();
@ </form>
if( zInstalled ){
@ <tr><td> <td colspan="3"><p>
@ Note: The current skin is an exact copy of "%h(zInstalled)".
@ </tr>
}
db_prepare(&q,
"SELECT DISTINCT substr(name, 1, 6) FROM config"
" WHERE name GLOB 'draft[1-9]-*'"
" ORDER BY name"
);
once = 1;
|
| ︙ | ︙ | |||
1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 |
/* Publish the draft skin */
if( P("pub7")!=0 && PB("pub7ck1") && PB("pub7ck2") ){
skin_publish(iSkin);
}
style_set_current_feature("skins");
style_header("Customize Skin");
@ <p>Customize the look of this Fossil repository by making changes
@ to the CSS, Header, Footer, and Detail Settings in one of nine "draft"
@ configurations. Then, after verifying that all is working correctly,
@ publish the draft to become the new main Skin. Users can select a skin
@ of their choice from the built-in ones or the locally-edited one via
@ <a href='%R/skins'>the /skins page</a>.</p>
| > > > | 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 |
/* Publish the draft skin */
if( P("pub7")!=0 && PB("pub7ck1") && PB("pub7ck2") ){
skin_publish(iSkin);
}
style_set_current_feature("skins");
style_header("Customize Skin");
if( g.perm.Admin ){
style_submenu_element("Skin-Admin", "%R/setup_skin_admin");
}
@ <p>Customize the look of this Fossil repository by making changes
@ to the CSS, Header, Footer, and Detail Settings in one of nine "draft"
@ configurations. Then, after verifying that all is working correctly,
@ publish the draft to become the new main Skin. Users can select a skin
@ of their choice from the built-in ones or the locally-edited one via
@ <a href='%R/skins'>the /skins page</a>.</p>
|
| ︙ | ︙ |