Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Improvements to handling of the cookie for "sticky" display settings. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | sticky-timeline-style |
Files: | files | file ages | folders |
SHA3-256: |
3ec843970d10dc705150b76e9c2db4f8 |
User & Date: | drh 2017-11-28 22:16:32.175 |
Context
2017-11-29
| ||
02:20 | Fixes to the cookie handler. Simpler class structure on timelines. ... (check-in: 92af2148 user: drh tags: sticky-timeline-style) | |
2017-11-28
| ||
22:16 | Improvements to handling of the cookie for "sticky" display settings. ... (check-in: 3ec84397 user: drh tags: sticky-timeline-style) | |
21:43 | Change the style selector query parameter on /timeline to "ss". Other code cleanup. The new style selector is working, but needs default CSS. ... (check-in: f64fa4f1 user: drh tags: sticky-timeline-style) | |
Changes
Changes to src/cookies.c.
︙ | ︙ | |||
52 53 54 55 56 57 58 59 60 61 62 63 64 65 | ** web page. This routine is a destructor for this module and should ** be called once. */ #include "cookies.h" #include <assert.h> #include <string.h> /* ** State information private to this module */ #define COOKIE_NPARAM 10 static struct { const char *zCookieName; /* name of the user preferences cookie */ | > > > > > | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | ** web page. This routine is a destructor for this module and should ** be called once. */ #include "cookies.h" #include <assert.h> #include <string.h> #if INTERFACE /* the standard name of the display settings cookie for fossil */ # define DISPLAY_SETTINGS_COOKIE "fossil_display_settings" #endif /* ** State information private to this module */ #define COOKIE_NPARAM 10 static struct { const char *zCookieName; /* name of the user preferences cookie */ |
︙ | ︙ | |||
103 104 105 106 107 108 109 | } cookies.nParam++; } } #define COOKIE_READ 1 #define COOKIE_WRITE 2 | | > > > > > | > | | > > > > | | > > > > | | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | } cookies.nParam++; } } #define COOKIE_READ 1 #define COOKIE_WRITE 2 static void cookie_readwrite( const char *zQP, /* Name of the query parameter */ const char *zPName, /* Name of the cooking setting */ const char *zDflt, /* Default value for the query parameter */ int flags /* READ or WRITE or both */ ){ const char *zQVal = P(zQP); int i; assert( cookies.zCookieName!=0 ); for(i=0; i<cookies.nParam && strcmp(zPName,cookies.aParam[i].zPName); i++){} if( zQVal==0 && (flags & COOKIE_READ)!=0 && i<cookies.nParam ){ cgi_set_parameter_nocopy(zQP, cookies.aParam[i].zPValue, 1); return; } if( zQVal==0 ) zQVal = zDflt; if( (flags & COOKIE_WRITE)!=0 && i<COOKIE_NPARAM && (i==cookies.nParam || strcmp(zQVal, cookies.aParam[i].zPValue)) ){ if( i==cookies.nParam ){ cookies.aParam[i].zPName = zPName; cookies.nParam++; } cookies.aParam[i].zPValue = (char*)zQVal; cookies.bChanged = 1; } } /* If query parameter zQP is missing, initialize it using the zPName ** value from the user preferences cookie */ void cookie_read_parameter(const char *zQP, const char *zPName){ cookie_readwrite(zQP, zPName, 0, COOKIE_READ); } /* Update the zPName value of the user preference cookie to match ** the value of query parameter zQP. */ void cookie_write_parameter( const char *zQP, const char *zPName, const char *zDflt ){ cookie_readwrite(zQP, zPName, zDflt, COOKIE_WRITE); } /* Use the zPName user preference value as a default for zQP and record ** any changes to the zQP value back into the cookie. */ void cookie_link_parameter( const char *zQP, /* The query parameter */ const char *zPName, /* The name of the cookie value */ const char *zDflt /* Default value for the parameter */ ){ cookie_readwrite(zQP, zPName, zDflt, COOKIE_READ|COOKIE_WRITE); } /* Update the user preferences cookie, if necessary, and shut down this ** module */ void cookie_render(void){ assert( cookies.zCookieName!=0 ); |
︙ | ︙ | |||
173 174 175 176 177 178 179 | ** WEBPAGE: cookies ** ** Show the current display settings contained in the ** "fossil_display_settings" cookie. */ void cookie_page(void){ int i; | > > > > | > > > | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | ** WEBPAGE: cookies ** ** Show the current display settings contained in the ** "fossil_display_settings" cookie. */ void cookie_page(void){ int i; if( PB("clear") ){ cgi_set_cookie(DISPLAY_SETTINGS_COOKIE, "", 0, 1); cgi_replace_parameter(DISPLAY_SETTINGS_COOKIE, ""); } cookie_parse(DISPLAY_SETTINGS_COOKIE); style_header("User Preference Cookie Values"); if( cookies.nParam ){ style_submenu_element("Clear", "%R/cookies?clear"); } @ <p>The following are user preference settings held in the @ "fossil_display_settings" cookie. @ <ul> @ <li>Raw cookie value: "%h(PD("fossil_display_settings",""))" for(i=0; i<cookies.nParam; i++){ @ <li>%h(cookies.aParam[i].zPName): "%h(cookies.aParam[i].zPValue)" } @ </ul> style_footer(); } |
Changes to src/timeline.c.
︙ | ︙ | |||
1645 1646 1647 1648 1649 1650 1651 | "n", "Normal", "c", "Compact", "d", "Detailed", "j", "Columnar", }; /* Set number of rows to display */ | | | > | | 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 | "n", "Normal", "c", "Compact", "d", "Detailed", "j", "Columnar", }; /* Set number of rows to display */ cookie_parse(DISPLAY_SETTINGS_COOKIE); cookie_read_parameter("n","n"); z = P("n"); if( z==0 ) z = db_get("timeline-default-length",0); if( z ){ if( fossil_strcmp(z,"all")==0 ){ nEntry = 0; }else{ nEntry = atoi(z); if( nEntry<=0 ){ cgi_replace_query_parameter("n","10"); nEntry = 10; } } }else{ cgi_replace_query_parameter("n","50"); nEntry = 50; } cookie_write_parameter("n","n",0); cookie_link_parameter("ss","ss","n"); cViewStyle = PD("ss","n")[0]; style_submenu_multichoice("ss", 4, azViewStyles, 0); /* To view the timeline, must have permission to read project data. */ pd_rid = name_to_typed_rid(P("dp"),"ci"); |
︙ | ︙ | |||
1688 1689 1690 1691 1692 1693 1694 | cookie_read_parameter("y","y"); zType = P("y"); if( zType==0 ){ zType = g.perm.Read ? "ci" : "all"; cgi_set_parameter("y", zType); } if( zType[0]=='a' || zType[0]=='c' ){ | | | 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 | cookie_read_parameter("y","y"); zType = P("y"); if( zType==0 ){ zType = g.perm.Read ? "ci" : "all"; cgi_set_parameter("y", zType); } if( zType[0]=='a' || zType[0]=='c' ){ cookie_write_parameter("y","y",zType); } cookie_render(); url_initialize(&url, "timeline"); cgi_query_parameters_to_url(&url); /* Convert r=TAG to t=TAG&rel. */ if( zBrName && !related ){ |
︙ | ︙ |