Fossil SCM
Enhance the /setup_skin page to enable renaming of custom skins.
Commit
2431ddf61b96b5c7ff51d9660c8570af4d4d11ef
Parent
967050341d834fb…
1 file changed
+40
-15
+40
-15
| --- src/skins.c | ||
| +++ src/skins.c | ||
| @@ -102,10 +102,45 @@ | ||
| 102 | 102 | azType[i], z |
| 103 | 103 | ); |
| 104 | 104 | } |
| 105 | 105 | return blob_str(&val); |
| 106 | 106 | } |
| 107 | + | |
| 108 | +/* | |
| 109 | +** Respond to a Rename button press. Return TRUE if a dialog was painted. | |
| 110 | +** Return FALSE to continue with the main Skins page. | |
| 111 | +*/ | |
| 112 | +static int skinRename(void){ | |
| 113 | + const char *zOldName; | |
| 114 | + const char *zNewName; | |
| 115 | + if( P("rename")==0 ) return 0; | |
| 116 | + zOldName = P("sn"); | |
| 117 | + zNewName = P("newname"); | |
| 118 | + if( zOldName==0 ) return 0; | |
| 119 | + if( zNewName==0 || zNewName[0]==0 ){ | |
| 120 | + style_header("Rename A Skin"); | |
| 121 | + @ <form action="%s(g.zTop)/setup_skin" method="post"><div> | |
| 122 | + @ <table border="0"><tr> | |
| 123 | + @ <tr><td align="right">Current name:<td align="left"><b>%h(zOldName)</b> | |
| 124 | + @ <tr><td align="right">New name:<td align="left"> | |
| 125 | + @ <input type="text" size="35" name="newname" value="%h(zOldName)"> | |
| 126 | + @ <tr><td><td> | |
| 127 | + @ <input type="hidden" name="sn" value="%h(zOldName)"> | |
| 128 | + @ <input type="submit" name="rename" value="Rename"> | |
| 129 | + @ <input type="submit" name="canren" value="Cancel"> | |
| 130 | + @ </table> | |
| 131 | + login_insert_csrf_secret(); | |
| 132 | + @ </div></form> | |
| 133 | + style_footer(); | |
| 134 | + return 1; | |
| 135 | + } | |
| 136 | + db_multi_exec( | |
| 137 | + "UPDATE config SET name='skin:%q' WHERE name='skin:%q';", | |
| 138 | + zNewName, zOldName | |
| 139 | + ); | |
| 140 | + return 0; | |
| 141 | +} | |
| 107 | 142 | |
| 108 | 143 | /* |
| 109 | 144 | ** WEBPAGE: setup_skin |
| 110 | 145 | */ |
| 111 | 146 | void setup_skin(void){ |
| @@ -141,21 +176,11 @@ | ||
| 141 | 176 | return; |
| 142 | 177 | } |
| 143 | 178 | if( P("del2")!=0 && (zName = skinVarName(P("sn"), 1))!=0 ){ |
| 144 | 179 | db_multi_exec("DELETE FROM config WHERE name=%Q", zName); |
| 145 | 180 | } |
| 146 | - if( P("save")!=0 && (zName = skinVarName(P("save"),0))!=0 ){ | |
| 147 | - if( db_exists("SELECT 1 FROM config WHERE name=%Q", zName) | |
| 148 | - || fossil_strcmp(zName, "Default")==0 ){ | |
| 149 | - zErr = mprintf("Skin name \"%h\" already exists. " | |
| 150 | - "Choose a different name.", P("sn")); | |
| 151 | - }else{ | |
| 152 | - db_multi_exec("INSERT INTO config(name,value,mtime) VALUES(%Q,%Q,now())", | |
| 153 | - zName, zCurrent | |
| 154 | - ); | |
| 155 | - } | |
| 156 | - } | |
| 181 | + if( skinRename() ) return; | |
| 157 | 182 | |
| 158 | 183 | /* The user pressed one of the "Install" buttons. */ |
| 159 | 184 | if( P("load") && (z = P("sn"))!=0 && z[0] ){ |
| 160 | 185 | int seen = 0; |
| 161 | 186 | |
| @@ -228,21 +253,21 @@ | ||
| 228 | 253 | while( db_step(&q)==SQLITE_ROW ){ |
| 229 | 254 | const char *zN = db_column_text(&q, 0); |
| 230 | 255 | const char *zV = db_column_text(&q, 1); |
| 231 | 256 | i++; |
| 232 | 257 | @ <tr><td>%d(i).<td>%h(zN)<td> <td> |
| 258 | + @ <form action="%s(g.zTop)/setup_skin" method="post"> | |
| 233 | 259 | if( fossil_strcmp(zV, zCurrent)==0 ){ |
| 234 | 260 | @ (Currently In Use) |
| 235 | 261 | }else{ |
| 236 | - @ <form action="%s(g.zTop)/setup_skin" method="post"> | |
| 237 | - @ <input type="hidden" name="sn" value="%h(zN)"> | |
| 238 | 262 | @ <input type="submit" name="load" value="Install"> |
| 239 | 263 | @ <input type="submit" name="del1" value="Delete"> |
| 240 | - @ </form> | |
| 241 | 264 | } |
| 242 | - @ </tr> | |
| 265 | + @ <input type="submit" name="rename" value="Rename"> | |
| 266 | + @ <input type="hidden" name="sn" value="%h(zN)"> | |
| 267 | + @ </form></tr> | |
| 243 | 268 | } |
| 244 | 269 | db_finalize(&q); |
| 245 | 270 | @ </table> |
| 246 | 271 | style_footer(); |
| 247 | 272 | db_end_transaction(0); |
| 248 | 273 | } |
| 249 | 274 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -102,10 +102,45 @@ | |
| 102 | azType[i], z |
| 103 | ); |
| 104 | } |
| 105 | return blob_str(&val); |
| 106 | } |
| 107 | |
| 108 | /* |
| 109 | ** WEBPAGE: setup_skin |
| 110 | */ |
| 111 | void setup_skin(void){ |
| @@ -141,21 +176,11 @@ | |
| 141 | return; |
| 142 | } |
| 143 | if( P("del2")!=0 && (zName = skinVarName(P("sn"), 1))!=0 ){ |
| 144 | db_multi_exec("DELETE FROM config WHERE name=%Q", zName); |
| 145 | } |
| 146 | if( P("save")!=0 && (zName = skinVarName(P("save"),0))!=0 ){ |
| 147 | if( db_exists("SELECT 1 FROM config WHERE name=%Q", zName) |
| 148 | || fossil_strcmp(zName, "Default")==0 ){ |
| 149 | zErr = mprintf("Skin name \"%h\" already exists. " |
| 150 | "Choose a different name.", P("sn")); |
| 151 | }else{ |
| 152 | db_multi_exec("INSERT INTO config(name,value,mtime) VALUES(%Q,%Q,now())", |
| 153 | zName, zCurrent |
| 154 | ); |
| 155 | } |
| 156 | } |
| 157 | |
| 158 | /* The user pressed one of the "Install" buttons. */ |
| 159 | if( P("load") && (z = P("sn"))!=0 && z[0] ){ |
| 160 | int seen = 0; |
| 161 | |
| @@ -228,21 +253,21 @@ | |
| 228 | while( db_step(&q)==SQLITE_ROW ){ |
| 229 | const char *zN = db_column_text(&q, 0); |
| 230 | const char *zV = db_column_text(&q, 1); |
| 231 | i++; |
| 232 | @ <tr><td>%d(i).<td>%h(zN)<td> <td> |
| 233 | if( fossil_strcmp(zV, zCurrent)==0 ){ |
| 234 | @ (Currently In Use) |
| 235 | }else{ |
| 236 | @ <form action="%s(g.zTop)/setup_skin" method="post"> |
| 237 | @ <input type="hidden" name="sn" value="%h(zN)"> |
| 238 | @ <input type="submit" name="load" value="Install"> |
| 239 | @ <input type="submit" name="del1" value="Delete"> |
| 240 | @ </form> |
| 241 | } |
| 242 | @ </tr> |
| 243 | } |
| 244 | db_finalize(&q); |
| 245 | @ </table> |
| 246 | style_footer(); |
| 247 | db_end_transaction(0); |
| 248 | } |
| 249 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -102,10 +102,45 @@ | |
| 102 | azType[i], z |
| 103 | ); |
| 104 | } |
| 105 | return blob_str(&val); |
| 106 | } |
| 107 | |
| 108 | /* |
| 109 | ** Respond to a Rename button press. Return TRUE if a dialog was painted. |
| 110 | ** Return FALSE to continue with the main Skins page. |
| 111 | */ |
| 112 | static int skinRename(void){ |
| 113 | const char *zOldName; |
| 114 | const char *zNewName; |
| 115 | if( P("rename")==0 ) return 0; |
| 116 | zOldName = P("sn"); |
| 117 | zNewName = P("newname"); |
| 118 | if( zOldName==0 ) return 0; |
| 119 | if( zNewName==0 || zNewName[0]==0 ){ |
| 120 | style_header("Rename A Skin"); |
| 121 | @ <form action="%s(g.zTop)/setup_skin" method="post"><div> |
| 122 | @ <table border="0"><tr> |
| 123 | @ <tr><td align="right">Current name:<td align="left"><b>%h(zOldName)</b> |
| 124 | @ <tr><td align="right">New name:<td align="left"> |
| 125 | @ <input type="text" size="35" name="newname" value="%h(zOldName)"> |
| 126 | @ <tr><td><td> |
| 127 | @ <input type="hidden" name="sn" value="%h(zOldName)"> |
| 128 | @ <input type="submit" name="rename" value="Rename"> |
| 129 | @ <input type="submit" name="canren" value="Cancel"> |
| 130 | @ </table> |
| 131 | login_insert_csrf_secret(); |
| 132 | @ </div></form> |
| 133 | style_footer(); |
| 134 | return 1; |
| 135 | } |
| 136 | db_multi_exec( |
| 137 | "UPDATE config SET name='skin:%q' WHERE name='skin:%q';", |
| 138 | zNewName, zOldName |
| 139 | ); |
| 140 | return 0; |
| 141 | } |
| 142 | |
| 143 | /* |
| 144 | ** WEBPAGE: setup_skin |
| 145 | */ |
| 146 | void setup_skin(void){ |
| @@ -141,21 +176,11 @@ | |
| 176 | return; |
| 177 | } |
| 178 | if( P("del2")!=0 && (zName = skinVarName(P("sn"), 1))!=0 ){ |
| 179 | db_multi_exec("DELETE FROM config WHERE name=%Q", zName); |
| 180 | } |
| 181 | if( skinRename() ) return; |
| 182 | |
| 183 | /* The user pressed one of the "Install" buttons. */ |
| 184 | if( P("load") && (z = P("sn"))!=0 && z[0] ){ |
| 185 | int seen = 0; |
| 186 | |
| @@ -228,21 +253,21 @@ | |
| 253 | while( db_step(&q)==SQLITE_ROW ){ |
| 254 | const char *zN = db_column_text(&q, 0); |
| 255 | const char *zV = db_column_text(&q, 1); |
| 256 | i++; |
| 257 | @ <tr><td>%d(i).<td>%h(zN)<td> <td> |
| 258 | @ <form action="%s(g.zTop)/setup_skin" method="post"> |
| 259 | if( fossil_strcmp(zV, zCurrent)==0 ){ |
| 260 | @ (Currently In Use) |
| 261 | }else{ |
| 262 | @ <input type="submit" name="load" value="Install"> |
| 263 | @ <input type="submit" name="del1" value="Delete"> |
| 264 | } |
| 265 | @ <input type="submit" name="rename" value="Rename"> |
| 266 | @ <input type="hidden" name="sn" value="%h(zN)"> |
| 267 | @ </form></tr> |
| 268 | } |
| 269 | db_finalize(&q); |
| 270 | @ </table> |
| 271 | style_footer(); |
| 272 | db_end_transaction(0); |
| 273 | } |
| 274 |