From 9ef84f9234b84de16a5f5d18f43c126fdb35da9a Mon Sep 17 00:00:00 2001 From: cameronrich Date: Fri, 7 Nov 2014 00:38:49 +0000 Subject: [PATCH] * RSA_decrypt now checks the integrity of the first 11 bytes. * The size of the output buffer in RSA_decrypt is now checked and cleared. * get_random now returns an error code * Various system calls now check the return code to remove gcc warnings. git-svn-id: svn://svn.code.sf.net/p/axtls/code/trunk@237 9a5d90b5-6617-0410-8a86-bb477d3ed2e3 --- crypto/crypto.h | 6 +- crypto/crypto_misc.c | 15 +- crypto/rsa.c | 45 +- httpd/proc.c | 15 +- ssl/test/ssltest.c | 44 +- ssl/tls1_svr.c | 13 +- www/index.html | 9696 +++++++++++++++++++++--------------------- 7 files changed, 4939 insertions(+), 4895 deletions(-) diff --git a/crypto/crypto.h b/crypto/crypto.h index 8a314a332..128a56bab 100644 --- a/crypto/crypto.h +++ b/crypto/crypto.h @@ -203,7 +203,7 @@ void RSA_pub_key_new(RSA_CTX **rsa_ctx, const uint8_t *pub_exp, int pub_len); void RSA_free(RSA_CTX *ctx); int RSA_decrypt(const RSA_CTX *ctx, const uint8_t *in_data, uint8_t *out_data, - int is_decryption); + int out_len, int is_decryption); bigint *RSA_private(const RSA_CTX *c, bigint *bi_msg); #if defined(CONFIG_SSL_CERT_VERIFICATION) || defined(CONFIG_SSL_GENERATE_X509_CERT) bigint *RSA_sign_verify(BI_CTX *ctx, const uint8_t *sig, int sig_len, @@ -220,8 +220,8 @@ void RSA_print(const RSA_CTX *ctx); EXP_FUNC void STDCALL RNG_initialize(void); EXP_FUNC void STDCALL RNG_custom_init(const uint8_t *seed_buf, int size); EXP_FUNC void STDCALL RNG_terminate(void); -EXP_FUNC void STDCALL get_random(int num_rand_bytes, uint8_t *rand_data); -void get_random_NZ(int num_rand_bytes, uint8_t *rand_data); +EXP_FUNC int STDCALL get_random(int num_rand_bytes, uint8_t *rand_data); +int get_random_NZ(int num_rand_bytes, uint8_t *rand_data); #ifdef __cplusplus } diff --git a/crypto/crypto_misc.c b/crypto/crypto_misc.c index 62eb6fe70..ccc64a28e 100644 --- a/crypto/crypto_misc.c +++ b/crypto/crypto_misc.c @@ -156,11 +156,12 @@ EXP_FUNC void STDCALL RNG_terminate(void) /** * Set a series of bytes with a random number. Individual bytes can be 0 */ -EXP_FUNC void STDCALL get_random(int num_rand_bytes, uint8_t *rand_data) +EXP_FUNC int STDCALL get_random(int num_rand_bytes, uint8_t *rand_data) { #if !defined(WIN32) && defined(CONFIG_USE_DEV_URANDOM) - /* use the Linux default */ - read(rng_fd, rand_data, num_rand_bytes); /* read from /dev/urandom */ + /* use the Linux default - read from /dev/urandom */ + if (read(rng_fd, rand_data, num_rand_bytes) < 0) + return -1; #elif defined(WIN32) && defined(CONFIG_WIN32_USE_CRYPTO_LIB) /* use Microsoft Crypto Libraries */ CryptGenRandom(gCryptProv, num_rand_bytes, rand_data); @@ -198,21 +199,25 @@ EXP_FUNC void STDCALL get_random(int num_rand_bytes, uint8_t *rand_data) /* insert the digest at the start of the entropy pool */ memcpy(entropy_pool, digest, MD5_SIZE); #endif + return 0; } /** * Set a series of bytes with a random number. Individual bytes are not zero. */ -void get_random_NZ(int num_rand_bytes, uint8_t *rand_data) +int get_random_NZ(int num_rand_bytes, uint8_t *rand_data) { int i; - get_random(num_rand_bytes, rand_data); + if (get_random(num_rand_bytes, rand_data)) + return -1; for (i = 0; i < num_rand_bytes; i++) { while (rand_data[i] == 0) /* can't be 0 */ rand_data[i] = (uint8_t)(rand()); } + + return 0; } /** diff --git a/crypto/rsa.c b/crypto/rsa.c index 143e66add..8f06cf896 100644 --- a/crypto/rsa.c +++ b/crypto/rsa.c @@ -134,21 +134,26 @@ void RSA_free(RSA_CTX *rsa_ctx) /** * @brief Use PKCS1.5 for decryption/verification. * @param ctx [in] The context - * @param in_data [in] The data to encrypt (must be < modulus size-11) - * @param out_data [out] The encrypted data. + * @param in_data [in] The data to decrypt (must be < modulus size-11) + * @param out_data [out] The decrypted data. + * @param out_len [int] The size of the decrypted buffer in bytes * @param is_decryption [in] Decryption or verify operation. * @return The number of bytes that were originally encrypted. -1 on error. * @see http://www.rsasecurity.com/rsalabs/node.asp?id=2125 */ int RSA_decrypt(const RSA_CTX *ctx, const uint8_t *in_data, - uint8_t *out_data, int is_decryption) + uint8_t *out_data, int out_len, int is_decryption) { const int byte_size = ctx->num_octets; - int i, size; + int i = 0, size; bigint *decrypted_bi, *dat_bi; uint8_t *block = (uint8_t *)alloca(byte_size); + int pad_count = 0; - memset(out_data, 0, byte_size); /* initialise */ + if (out_len < byte_size) /* check output has enough size */ + return -1; + + memset(out_data, 0, out_len); /* initialise */ /* decrypt */ dat_bi = bi_import(ctx->bi_ctx, in_data, byte_size); @@ -162,28 +167,37 @@ int RSA_decrypt(const RSA_CTX *ctx, const uint8_t *in_data, /* convert to a normal block */ bi_export(ctx->bi_ctx, decrypted_bi, block, byte_size); - i = 10; /* start at the first possible non-padded byte */ + if (block[i++] != 0) /* leading 0? */ + return -1; #ifdef CONFIG_SSL_CERT_VERIFICATION if (is_decryption == 0) /* PKCS1.5 signing pads with "0xff"s */ { - while (block[i++] == 0xff && i < byte_size); + if (block[i++] != 0x01) /* BT correct? */ + return -1; - if (block[i-2] != 0xff) - i = byte_size; /*ensure size is 0 */ + while (block[i++] == 0xff && i < byte_size) + pad_count++; } else /* PKCS1.5 encryption padding is random */ #endif { - while (block[i++] && i < byte_size); + if (block[i++] != 0x02) /* BT correct? */ + return -1; + + while (block[i++] && i < byte_size) + pad_count++; } + + /* check separator byte - and padding must be 8 or more bytes */ + if (i == byte_size || pad_count < 8) + return -1; + size = byte_size - i; /* get only the bit we want */ - if (size > 0) - memcpy(out_data, &block[i], size); - - return size ? size : -1; + memcpy(out_data, &block[i], size); + return size; } /** @@ -249,7 +263,8 @@ int RSA_encrypt(const RSA_CTX *ctx, const uint8_t *in_data, uint16_t in_len, else /* randomize the encryption padding with non-zero bytes */ { out_data[1] = 2; - get_random_NZ(num_pads_needed, &out_data[2]); + if (get_random_NZ(num_pads_needed, &out_data[2]) < 0) + return -1; } out_data[2+num_pads_needed] = 0; diff --git a/httpd/proc.c b/httpd/proc.c index 32a72c7e5..07583d3f3 100644 --- a/httpd/proc.c +++ b/httpd/proc.c @@ -188,7 +188,12 @@ static void procdirlisting(struct connstruct *cn) { snprintf(buf, sizeof(buf), HTTP_VERSION " 200 OK\nContent-Type: text/html\n\n"); - write(cn->networkdesc, buf, strlen(buf)); + if (write(cn->networkdesc, buf, strlen(buf)) < 0) + { + printf("procdirlisting: could not write"); + TTY_FLUSH(); + } + removeconnection(cn); return; } @@ -625,7 +630,13 @@ static void proccgi(struct connstruct *cn) /* Send POST query data to CGI script */ if ((cn->reqtype == TYPE_POST) && (cn->content_length > 0)) { - write(spipe[1], cn->post_data, cn->content_length); + if (write(spipe[1], cn->post_data, cn->content_length) == -1) + { + printf("[CGI]: could write to pipe"); + TTY_FLUSH(); + return; + } + close(spipe[0]); close(spipe[1]); diff --git a/ssl/test/ssltest.c b/ssl/test/ssltest.c index d1c855fc1..cd7e4732f 100644 --- a/ssl/test/ssltest.c +++ b/ssl/test/ssltest.c @@ -57,6 +57,9 @@ //#define DEFAULT_CLNT_OPTION SSL_DISPLAY_BYTES|SSL_DISPLAY_STATES #define DEFAULT_CLNT_OPTION 0 +/* hack to remove gcc warning */ +#define SYSTEM(A) if (system(A) < 0) printf("system call error\n"); + static int g_port = 19001; /************************************************************************** @@ -545,7 +548,7 @@ static int RSA_test(void) } RSA_encrypt(rsa_ctx, (const uint8_t *)"abc", 3, enc_data2, 0); - RSA_decrypt(rsa_ctx, enc_data2, dec_data2, 1); + RSA_decrypt(rsa_ctx, enc_data2, dec_data2, sizeof(dec_data2), 1); if (memcmp("abc", dec_data2, 3)) { printf("Error: ENCRYPT/DECRYPT #2 failed\n"); @@ -823,7 +826,7 @@ static void do_client(client_t *clnt) g_port, clnt->openssl_option); } - system(openssl_buf); + SYSTEM(openssl_buf); } static int SSL_server_test( @@ -1326,7 +1329,7 @@ static void do_server(server_t *svr) "-accept %d -quiet %s ", g_port, svr->openssl_option); } - system(openssl_buf); + SYSTEM(openssl_buf); } static int SSL_client_test( @@ -1646,8 +1649,8 @@ cleanup: { ssl_display_error(ret); printf("Error: A client test failed\n"); - system("sh ../ssl/test/killopenssl.sh"); - system("sh ../ssl/test/killgnutls.sh"); + SYSTEM("sh ../ssl/test/killopenssl.sh"); + SYSTEM("sh ../ssl/test/killgnutls.sh"); exit(1); } else @@ -2065,7 +2068,7 @@ static void do_header_issue(void) pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); #endif sprintf(axtls_buf, "./axssl s_client -connect localhost:%d", g_port); - system(axtls_buf); + SYSTEM(axtls_buf); } static int header_issue(void) @@ -2099,7 +2102,12 @@ static int header_issue(void) } size = fread(buf, 1, sizeof(buf), f); - SOCKET_WRITE(client_fd, buf, size); + if (SOCKET_WRITE(client_fd, buf, size) < 0) + { + ret = SSL_ERROR_SOCK_SETUP_FAILURE; + goto error; + } + usleep(200000); ret = 0; @@ -2108,7 +2116,7 @@ error: SOCKET_CLOSE(client_fd); SOCKET_CLOSE(server_fd); TTY_FLUSH(); - system("killall axssl"); + SYSTEM("killall axssl"); return ret; } @@ -2208,29 +2216,29 @@ int main(int argc, char *argv[]) if (SSL_basic_test()) goto cleanup; - system("sh ../ssl/test/killopenssl.sh"); + SYSTEM("sh ../ssl/test/killopenssl.sh"); if (SSL_unblocked_test()) goto cleanup; - system("sh ../ssl/test/killopenssl.sh"); + SYSTEM("sh ../ssl/test/killopenssl.sh"); if (SSL_client_tests()) goto cleanup; - system("sh ../ssl/test/killopenssl.sh"); - system("sh ../ssl/test/killgnutls.sh"); + SYSTEM("sh ../ssl/test/killopenssl.sh"); + SYSTEM("sh ../ssl/test/killgnutls.sh"); if (SSL_server_tests()) goto cleanup; - system("sh ../ssl/test/killopenssl.sh"); + SYSTEM("sh ../ssl/test/killopenssl.sh"); - //if (header_issue()) - //{ - // printf("Header tests failed\n"); TTY_FLUSH(); - // goto cleanup; - //} + if (header_issue()) + { + printf("Header tests failed\n"); TTY_FLUSH(); + goto cleanup; + } ret = 0; /* all ok */ printf("**** ALL TESTS PASSED ****\n"); TTY_FLUSH(); diff --git a/ssl/tls1_svr.c b/ssl/tls1_svr.c index 1717ceff3..b4b0f648d 100644 --- a/ssl/tls1_svr.c +++ b/ssl/tls1_svr.c @@ -310,7 +310,9 @@ static int send_server_hello(SSL *ssl) buf[5] = ssl->version & 0x0f; /* server random value */ - get_random(SSL_RANDOM_SIZE, &buf[6]); + if (get_random(SSL_RANDOM_SIZE, &buf[6]) < 0) + return SSL_NOT_OK; + memcpy(ssl->dc->server_random, &buf[6], SSL_RANDOM_SIZE); offset = 6 + SSL_RANDOM_SIZE; @@ -391,7 +393,8 @@ static int process_client_key_xchg(SSL *ssl) /* rsa_ctx->bi_ctx is not thread-safe */ SSL_CTX_LOCK(ssl->ssl_ctx->mutex); - premaster_size = RSA_decrypt(rsa_ctx, &buf[offset], premaster_secret, 1); + premaster_size = RSA_decrypt(rsa_ctx, &buf[offset], premaster_secret, + sizeof(premaster_secret), 1); SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); if (premaster_size != SSL_SECRET_SIZE || @@ -400,7 +403,9 @@ static int process_client_key_xchg(SSL *ssl) premaster_secret[1] != (ssl->client_version & 0x0f)) { /* guard against a Bleichenbacher attack */ - get_random(SSL_SECRET_SIZE, premaster_secret); + if (get_random(SSL_SECRET_SIZE, premaster_secret) < 0) + return SSL_NOT_OK; + /* and continue - will die eventually when checking the mac */ } @@ -453,7 +458,7 @@ static int process_cert_verify(SSL *ssl) /* rsa_ctx->bi_ctx is not thread-safe */ SSL_CTX_LOCK(ssl->ssl_ctx->mutex); - n = RSA_decrypt(x509_ctx->rsa_ctx, &buf[6], dgst_buf, 0); + n = RSA_decrypt(x509_ctx->rsa_ctx, &buf[6], dgst_buf, sizeof(dgst_buf), 0); SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); if (n != SHA1_SIZE + MD5_SIZE) diff --git a/www/index.html b/www/index.html index 2c5f2bbfd..e4f28c62d 100755 --- a/www/index.html +++ b/www/index.html @@ -51,163 +51,163 @@ DAMAGE. // Miscellaneous options var config = { - numRssItems: 20, // Number of items in the RSS feed - animFast: 0.12, // Speed for animations (lower == slower) - animSlow: 0.01, // Speed for EasterEgg animations - cascadeFast: 20, // Speed for cascade animations (higher == slower) - cascadeSlow: 60, // Speed for EasterEgg cascade animations - cascadeDepth: 5, // Depth of cascade animation - displayStartupTime: false // Whether to display startup time - }; + numRssItems: 20, // Number of items in the RSS feed + animFast: 0.12, // Speed for animations (lower == slower) + animSlow: 0.01, // Speed for EasterEgg animations + cascadeFast: 20, // Speed for cascade animations (higher == slower) + cascadeSlow: 60, // Speed for EasterEgg cascade animations + cascadeDepth: 5, // Depth of cascade animation + displayStartupTime: false // Whether to display startup time + }; // Messages config.messages = { - messageClose: {}, - dates: {} + messageClose: {}, + dates: {} }; // Options that can be set in the options panel and/or cookies config.options = { - chkRegExpSearch: false, - chkCaseSensitiveSearch: false, - chkAnimate: true, - chkSaveBackups: true, - chkAutoSave: false, - chkGenerateAnRssFeed: false, - chkSaveEmptyTemplate: false, - chkOpenInNewWindow: true, - chkToggleLinks: false, - chkHttpReadOnly: true, - chkForceMinorUpdate: false, - chkConfirmDelete: true, - chkInsertTabs: false, - txtBackupFolder: "", - txtMainTab: "tabTimeline", - txtMoreTab: "moreTabAll", - txtMaxEditRows: "30" - }; - + chkRegExpSearch: false, + chkCaseSensitiveSearch: false, + chkAnimate: true, + chkSaveBackups: true, + chkAutoSave: false, + chkGenerateAnRssFeed: false, + chkSaveEmptyTemplate: false, + chkOpenInNewWindow: true, + chkToggleLinks: false, + chkHttpReadOnly: true, + chkForceMinorUpdate: false, + chkConfirmDelete: true, + chkInsertTabs: false, + txtBackupFolder: "", + txtMainTab: "tabTimeline", + txtMoreTab: "moreTabAll", + txtMaxEditRows: "30" + }; + // List of notification functions to be called when certain tiddlers are changed or deleted config.notifyTiddlers = [ - {name: "StyleSheetLayout", notify: refreshStyles}, - {name: "StyleSheetColors", notify: refreshStyles}, - {name: "StyleSheet", notify: refreshStyles}, - {name: "StyleSheetPrint", notify: refreshStyles}, - {name: "PageTemplate", notify: refreshPageTemplate}, - {name: "SiteTitle", notify: refreshPageTitle}, - {name: "SiteSubtitle", notify: refreshPageTitle}, - {name: "ColorPalette", notify: refreshColorPalette}, - {name: null, notify: refreshDisplay} - ]; + {name: "StyleSheetLayout", notify: refreshStyles}, + {name: "StyleSheetColors", notify: refreshStyles}, + {name: "StyleSheet", notify: refreshStyles}, + {name: "StyleSheetPrint", notify: refreshStyles}, + {name: "PageTemplate", notify: refreshPageTemplate}, + {name: "SiteTitle", notify: refreshPageTitle}, + {name: "SiteSubtitle", notify: refreshPageTitle}, + {name: "ColorPalette", notify: refreshColorPalette}, + {name: null, notify: refreshDisplay} + ]; // Default tiddler templates var DEFAULT_VIEW_TEMPLATE = 1; var DEFAULT_EDIT_TEMPLATE = 2; config.tiddlerTemplates = { - 1: "ViewTemplate", - 2: "EditTemplate" - }; + 1: "ViewTemplate", + 2: "EditTemplate" + }; // More messages (rather a legacy layout that shouldn't really be like this) config.views = { - wikified: { - tag: {} - }, - editor: { - tagChooser: {} - } - }; + wikified: { + tag: {} + }, + editor: { + tagChooser: {} + } + }; // Macros; each has a 'handler' member that is inserted later config.macros = { - today: {}, - version: {}, - search: {sizeTextbox: 15}, - tiddler: {}, - tag: {}, - tags: {}, - tagging: {}, - timeline: {}, - allTags: {}, - list: { - all: {}, - missing: {}, - orphans: {}, - shadowed: {} - }, - closeAll: {}, - permaview: {}, - saveChanges: {}, - slider: {}, - option: {}, - newTiddler: {}, - newJournal: {}, - sparkline: {}, - tabs: {}, - gradient: {}, - message: {}, - view: {}, - edit: {}, - tagChooser: {}, - toolbar: {}, - br: {}, - plugins: {}, - refreshDisplay: {}, - importTiddlers: {} - }; + today: {}, + version: {}, + search: {sizeTextbox: 15}, + tiddler: {}, + tag: {}, + tags: {}, + tagging: {}, + timeline: {}, + allTags: {}, + list: { + all: {}, + missing: {}, + orphans: {}, + shadowed: {} + }, + closeAll: {}, + permaview: {}, + saveChanges: {}, + slider: {}, + option: {}, + newTiddler: {}, + newJournal: {}, + sparkline: {}, + tabs: {}, + gradient: {}, + message: {}, + view: {}, + edit: {}, + tagChooser: {}, + toolbar: {}, + br: {}, + plugins: {}, + refreshDisplay: {}, + importTiddlers: {} + }; // Commands supported by the toolbar macro config.commands = { - closeTiddler: {}, - closeOthers: {}, - editTiddler: {}, - saveTiddler: {hideReadOnly: true}, - cancelTiddler: {}, - deleteTiddler: {hideReadOnly: true}, - permalink: {}, - references: {}, - jump: {} - }; + closeTiddler: {}, + closeOthers: {}, + editTiddler: {}, + saveTiddler: {hideReadOnly: true}, + cancelTiddler: {}, + deleteTiddler: {hideReadOnly: true}, + permalink: {}, + references: {}, + jump: {} + }; // Browser detection... In a very few places, there's nothing else for it but to // know what browser we're using. config.userAgent = navigator.userAgent.toLowerCase(); config.browser = { - isIE: config.userAgent.indexOf("msie") != -1 && config.userAgent.indexOf("opera") == -1, - ieVersion: /MSIE (\d.\d)/i.exec(config.userAgent), // config.browser.ieVersion[1], if it exists, will be the IE version string, eg "6.0" - isSafari: config.userAgent.indexOf("applewebkit") != -1, - isBadSafari: !((new RegExp("[\u0150\u0170]","g")).test("\u0150")), - firefoxDate: /Gecko\/(\d{8})/i.exec(config.userAgent), // config.browser.firefoxDate[1], if it exists, will be Firefox release date as "YYYYMMDD" - isOpera: config.userAgent.indexOf("opera") != -1, - isLinux: config.userAgent.indexOf("linux") != -1, - isUnix: config.userAgent.indexOf("x11") != -1, - isMac: config.userAgent.indexOf("mac") != -1, - isWindows: config.userAgent.indexOf("win") != -1 - }; + isIE: config.userAgent.indexOf("msie") != -1 && config.userAgent.indexOf("opera") == -1, + ieVersion: /MSIE (\d.\d)/i.exec(config.userAgent), // config.browser.ieVersion[1], if it exists, will be the IE version string, eg "6.0" + isSafari: config.userAgent.indexOf("applewebkit") != -1, + isBadSafari: !((new RegExp("[\u0150\u0170]","g")).test("\u0150")), + firefoxDate: /Gecko\/(\d{8})/i.exec(config.userAgent), // config.browser.firefoxDate[1], if it exists, will be Firefox release date as "YYYYMMDD" + isOpera: config.userAgent.indexOf("opera") != -1, + isLinux: config.userAgent.indexOf("linux") != -1, + isUnix: config.userAgent.indexOf("x11") != -1, + isMac: config.userAgent.indexOf("mac") != -1, + isWindows: config.userAgent.indexOf("win") != -1 + }; // Basic regular expressions config.textPrimitives = { - upperLetter: "[A-Z\u00c0-\u00de\u0150\u0170]", - lowerLetter: "[a-z0-9_\\-\u00df-\u00ff\u0151\u0171]", - anyLetter: "[A-Za-z0-9_\\-\u00c0-\u00de\u00df-\u00ff\u0150\u0170\u0151\u0171]", - anyLetterStrict: "[A-Za-z0-9\u00c0-\u00de\u00df-\u00ff\u0150\u0170\u0151\u0171]" - }; + upperLetter: "[A-Z\u00c0-\u00de\u0150\u0170]", + lowerLetter: "[a-z0-9_\\-\u00df-\u00ff\u0151\u0171]", + anyLetter: "[A-Za-z0-9_\\-\u00c0-\u00de\u00df-\u00ff\u0150\u0170\u0151\u0171]", + anyLetterStrict: "[A-Za-z0-9\u00c0-\u00de\u00df-\u00ff\u0150\u0170\u0151\u0171]" + }; if(config.browser.isBadSafari) - config.textPrimitives = { - upperLetter: "[A-Z\u00c0-\u00de]", - lowerLetter: "[a-z0-9_\\-\u00df-\u00ff]", - anyLetter: "[A-Za-z0-9_\\-\u00c0-\u00de\u00df-\u00ff]", - anyLetterStrict: "[A-Za-z0-9\u00c0-\u00de\u00df-\u00ff]" - } + config.textPrimitives = { + upperLetter: "[A-Z\u00c0-\u00de]", + lowerLetter: "[a-z0-9_\\-\u00df-\u00ff]", + anyLetter: "[A-Za-z0-9_\\-\u00c0-\u00de\u00df-\u00ff]", + anyLetterStrict: "[A-Za-z0-9\u00c0-\u00de\u00df-\u00ff]" + } config.textPrimitives.sliceSeparator = "::"; config.textPrimitives.urlPattern = "[a-z]{3,8}:[^\\s:'\"][^\\s'\"]*(?:/|\\b)"; config.textPrimitives.unWikiLink = "~"; config.textPrimitives.wikiLink = "(?:(?:" + config.textPrimitives.upperLetter + "+" + - config.textPrimitives.lowerLetter + "+" + - config.textPrimitives.upperLetter + - config.textPrimitives.anyLetter + "*)|(?:" + - config.textPrimitives.upperLetter + "{2,}" + - config.textPrimitives.lowerLetter + "+))"; + config.textPrimitives.lowerLetter + "+" + + config.textPrimitives.upperLetter + + config.textPrimitives.anyLetter + "*)|(?:" + + config.textPrimitives.upperLetter + "{2,}" + + config.textPrimitives.lowerLetter + "+))"; config.textPrimitives.cssLookahead = "(?:(" + config.textPrimitives.anyLetter + "+)\\(([^\\)\\|\\n]+)(?:\\):))|(?:(" + config.textPrimitives.anyLetter + "+):([^;\\|\\n]+);)"; config.textPrimitives.cssLookaheadRegExp = new RegExp(config.textPrimitives.cssLookahead,"mg"); @@ -215,45 +215,45 @@ config.textPrimitives.cssLookaheadRegExp = new RegExp(config.textPrimitives.cssL config.textPrimitives.brackettedLink = "\\[\\[([^\\]]+)\\]\\]"; config.textPrimitives.titledBrackettedLink = "\\[\\[([^\\[\\]\\|]+)\\|([^\\[\\]\\|]+)\\]\\]"; config.textPrimitives.tiddlerForcedLinkRegExp = new RegExp("(?:" + config.textPrimitives.titledBrackettedLink + ")|(?:" + - config.textPrimitives.brackettedLink + ")|(?:" + - config.textPrimitives.urlPattern + ")","mg"); + config.textPrimitives.brackettedLink + ")|(?:" + + config.textPrimitives.urlPattern + ")","mg"); config.textPrimitives.tiddlerAnyLinkRegExp = new RegExp("("+ config.textPrimitives.wikiLink + ")|(?:" + - config.textPrimitives.titledBrackettedLink + ")|(?:" + - config.textPrimitives.brackettedLink + ")|(?:" + - config.textPrimitives.urlPattern + ")","mg"); + config.textPrimitives.titledBrackettedLink + ")|(?:" + + config.textPrimitives.brackettedLink + ")|(?:" + + config.textPrimitives.urlPattern + ")","mg"); // --------------------------------------------------------------------------------- // Shadow tiddlers // --------------------------------------------------------------------------------- config.shadowTiddlers = { - ColorPalette: "Background: #fff\n" + - "Foreground: #000\n" + - "PrimaryPale: #8cf\n" + - "PrimaryLight: #18f\n" + - "PrimaryMid: #04b\n" + - "PrimaryDark: #014\n" + - "SecondaryPale: #ffc\n" + - "SecondaryLight: #fe8\n" + - "SecondaryMid: #db4\n" + - "SecondaryDark: #841\n" + - "TertiaryPale: #eee\n" + - "TertiaryLight: #ccc\n" + - "TertiaryMid: #999\n" + - "TertiaryDark: #666\n" + - "Error: #f88\n", - StyleSheet: "", - StyleSheetColors: "/*{{{*/\nbody {\n background: [[ColorPalette::Background]];\n color: [[ColorPalette::Foreground]];\n}\n\na{\n color: [[ColorPalette::PrimaryMid]];\n}\n\na:hover{\n background: [[ColorPalette::PrimaryMid]];\n color: [[ColorPalette::Background]];\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::PrimaryPale]];\n}\n\n.button {\n color: [[ColorPalette::PrimaryDark]];\n border: 1px solid [[ColorPalette::Background]];\n}\n\n.button:hover {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n border-color: [[ColorPalette::SecondaryMid]];\n}\n\n.button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::SecondaryDark]];\n}\n\n.header {\n background: [[ColorPalette::PrimaryMid]];\n}\n\n.headerShadow {\n color: [[ColorPalette::Foreground]];\n}\n\n.headerShadow a {\n font-weight: normal;\n color: [[ColorPalette::Foreground]];\n}\n\n.headerForeground {\n color: [[ColorPalette::Background]];\n}\n\n.headerForeground a {\n font-weight: normal;\n color: [[ColorPalette::PrimaryPale]];\n}\n\n.tabSelected{\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border-left: 1px solid [[ColorPalette::TertiaryLight]];\n border-top: 1px solid [[ColorPalette::TertiaryLight]];\n border-right: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabUnselected {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::TertiaryMid]];\n}\n\n.tabContents {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabContents .button {\n border: 0;}\n\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel {\n background: [[ColorPalette::PrimaryPale]];\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: [[ColorPalette::PrimaryMid]];\n background: [[ColorPalette::Background]];\n}\n\n.wizard {\n background: [[ColorPalette::SecondaryLight]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard h1 {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.wizard h2 {\n color: [[ColorPalette::Foreground]];\n}\n\n.wizardStep {\n background: [[ColorPalette::Background]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-bottom: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard .button {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:hover {\n color: [[ColorPalette::PrimaryLight]];\n background: [[ColorPalette::PrimaryDark]];\n border-color: [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n#messageArea {\n border: 1px solid [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::SecondaryMid]];\n color: [[ColorPalette::PrimaryDark]];\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::Background]];\n}\n\n.popup {\n background: [[ColorPalette::PrimaryLight]];\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.popup hr {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::PrimaryDark]];\n border-bottom: 1px;\n}\n\n.listBreak div{\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n}\n\n.popup li.disabled {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.popup li a, .popup li a:visited {\n color: [[ColorPalette::TertiaryPale]];\n border: none;\n}\n\n.popup li a:hover {\n background: [[ColorPalette::PrimaryDark]];\n color: [[ColorPalette::Background]];\n border: none;\n}\n\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.title {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.subtitle {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.toolbar {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.tagging, .tagged {\n border: 1px solid [[ColorPalette::TertiaryPale]];\n background-color: [[ColorPalette::TertiaryPale]];\n}\n\n.selected .tagging, .selected .tagged {\n background-color: [[ColorPalette::TertiaryLight]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: [[ColorPalette::PrimaryDark]];\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: [[ColorPalette::TertiaryLight]];\n}\n\n.selected .footer {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n.sparkline {\n background: [[ColorPalette::PrimaryPale]];\n border: 0;\n}\n\n.sparktick {\n background: [[ColorPalette::PrimaryDark]];\n}\n\n.error, .errorButton {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::Error]];\n}\n\n.warning {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.cascade {\n background: [[ColorPalette::TertiaryPale]];\n color: [[ColorPalette::TertiaryMid]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.viewer blockquote {\n border-left: 3px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer table {\n border: 2px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer th, thead td {\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::Background]];\n}\n\n.viewer td, .viewer tr {\n border: 1px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer pre {\n border: 1px solid [[ColorPalette::SecondaryLight]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.viewer code {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.highlight, .marked {\n background: [[ColorPalette::SecondaryLight]];\n}\n\n.editor input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.editor textarea {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n width: 100%;\n}\n\n.editorFooter {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n/*}}}*/", - StyleSheetLayout: "/*{{{*/\n* html .tiddler {\n height: 1%;\n}\n\nbody {\n font-size: .75em;\n font-family: arial,helvetica;\n margin: 0;\n padding: 0;\n}\n\nh1,h2,h3,h4,h5 {\n font-weight: bold;\n text-decoration: none;\n padding-left: 0.4em;\n}\n\nh1 {font-size: 1.35em;}\nh2 {font-size: 1.25em;}\nh3 {font-size: 1.1em;}\nh4 {font-size: 1em;}\nh5 {font-size: .9em;}\n\nhr {\n height: 1px;\n}\n\na{\n text-decoration: none;\n}\n\ndt {font-weight: bold;}\n\nol { list-style-type: decimal }\nol ol { list-style-type: lower-alpha }\nol ol ol { list-style-type: lower-roman }\nol ol ol ol { list-style-type: decimal }\nol ol ol ol ol { list-style-type: lower-alpha }\nol ol ol ol ol ol { list-style-type: lower-roman }\nol ol ol ol ol ol ol { list-style-type: decimal }\n\n.txtOptionInput {\n width: 11em;\n}\n\n#contentWrapper .chkOptionInput {\n border: 0;\n}\n\n.externalLink {\n text-decoration: underline;\n}\n\n.indent {margin-left:3em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.tiddlyLinkExisting {\n font-weight: bold;\n}\n\n.tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler a bold */\na.tiddlyLinkNonExisting.shadow {\n font-weight: bold;\n}\n\n#mainMenu .tiddlyLinkExisting, \n#mainMenu .tiddlyLinkNonExisting,\n#sidebarTabs .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n#sidebarTabs .tiddlyLinkExisting {\n font-weight: bold;\n font-style: normal;\n}\n\n.header {\n position: relative;\n}\n\n.header a:hover {\n background: transparent;\n}\n\n.headerShadow {\n position: relative;\n padding: 4.5em 0em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: 4.5em 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n\n.siteTitle {\n font-size: 3em;\n}\n\n.siteSubtitle {\n font-size: 1.2em;\n}\n\n#mainMenu {\n position: absolute;\n left: 0;\n width: 10em;\n text-align: right;\n line-height: 1.6em;\n padding: 1.5em 0.5em 0.5em 0.5em;\n font-size: 1.1em;\n}\n\n#sidebar {\n position: absolute;\n right: 3px;\n width: 16em;\n font-size: .9em;\n}\n\n#sidebarOptions {\n padding-top: 0.3em;\n}\n\n#sidebarOptions a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarOptions input {\n margin: 0.4em 0.5em;\n}\n\n#sidebarOptions .sliderPanel {\n margin-left: 1em;\n padding: 0.5em;\n font-size: .85em;\n}\n\n#sidebarOptions .sliderPanel a {\n font-weight: bold;\n display: inline;\n padding: 0;\n}\n\n#sidebarOptions .sliderPanel input {\n margin: 0 0 .3em 0;\n}\n\n#sidebarTabs .tabContents {\n width: 15em;\n overflow: hidden;\n}\n\n.wizard {\n padding: 0.1em 0em 0em 2em;\n}\n\n.wizard h1 {\n font-size: 2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.4em 0em 0.2em 0em;\n}\n\n.wizard h2 {\n font-size: 1.2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.2em 0em 0.2em 0em;\n}\n\n.wizardStep {\n padding: 1em 1em 1em 1em;\n}\n\n.wizard .button {\n margin: 0.5em 0em 0em 0em;\n font-size: 1.2em;\n}\n\n#messageArea {\nposition:absolute; top:0; right:0; margin: 0.5em; padding: 0.5em;\n}\n\n*[id='messageArea'] {\nposition:fixed !important; z-index:99;}\n\n.messageToolbar {\ndisplay: block;\ntext-align: right;\n}\n\n#messageArea a{\n text-decoration: underline;\n}\n\n.popup {\n font-size: .9em;\n padding: 0.2em;\n list-style: none;\n margin: 0;\n}\n\n.popup hr {\n display: block;\n height: 1px;\n width: auto;\n padding: 0;\n margin: 0.2em 0em;\n}\n\n.listBreak {\n font-size: 1px;\n line-height: 1px;\n}\n\n.listBreak div {\n margin: 2px 0;\n}\n\n.popup li.disabled {\n padding: 0.2em;\n}\n\n.popup li a{\n display: block;\n padding: 0.2em;\n}\n\n.tabset {\n padding: 1em 0em 0em 0.5em;\n}\n\n.tab {\n margin: 0em 0em 0em 0.25em;\n padding: 2px;\n}\n\n.tabContents {\n padding: 0.5em;\n}\n\n.tabContents ul, .tabContents ol {\n margin: 0;\n padding: 0;\n}\n\n.txtMainTab .tabContents li {\n list-style: none;\n}\n\n.tabContents li.listLink {\n margin-left: .75em;\n}\n\n#displayArea {\n margin: 1em 17em 0em 14em;\n}\n\n\n.toolbar {\n text-align: right;\n font-size: .9em;\n visibility: hidden;\n}\n\n.selected .toolbar {\n visibility: visible;\n}\n\n.tiddler {\n padding: 1em 1em 0em 1em;\n}\n\n.missing .viewer,.missing .title {\n font-style: italic;\n}\n\n.title {\n font-size: 1.6em;\n font-weight: bold;\n}\n\n.missing .subtitle {\n display: none;\n}\n\n.subtitle {\n font-size: 1.1em;\n}\n\n.tiddler .button {\n padding: 0.2em 0.4em;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: both;\n}\n\n.footer {\n font-size: .9em;\n}\n\n.footer li {\ndisplay: inline;\n}\n\n* html .viewer pre {\n width: 99%;\n padding: 0 0 1em 0;\n}\n\n.viewer {\n line-height: 1.4em;\n padding-top: 0.5em;\n}\n\n.viewer .button {\n margin: 0em 0.25em;\n padding: 0em 0.25em;\n}\n\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul, .viewer ol{\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer table {\n border-collapse: collapse;\n margin: 0.8em 1.0em;\n}\n\n.viewer th, .viewer td, .viewer tr,.viewer caption{\n padding: 3px;\n}\n\n.viewer table.listView {\n font-size: 0.85em;\n margin: 0.8em 1.0em;\n}\n\n.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {\n padding: 0px 3px 0px 3px;\n}\n\n.viewer pre {\n padding: 0.5em;\n margin-left: 0.5em;\n font-size: 1.2em;\n line-height: 1.4em;\n overflow: auto;\n}\n\n.viewer code {\n font-size: 1.2em;\n line-height: 1.4em;\n}\n\n.editor {\nfont-size: 1.1em;\n}\n\n.editor input, .editor textarea {\n display: block;\n width: 100%;\n font: inherit;\n}\n\n.editorFooter {\n padding: 0.25em 0em;\n font-size: .9em;\n}\n\n.editorFooter .button {\npadding-top: 0px; padding-bottom: 0px;}\n\n.fieldsetFix {border: 0;\npadding: 0;\nmargin: 1px 0px 1px 0px;\n}\n\n.sparkline {\n line-height: 1em;\n}\n\n.sparktick {\n outline: 0;\n}\n\n.zoomer {\n font-size: 1.1em;\n position: absolute;\n padding: 1em;\n}\n\n.cascade {\n font-size: 1.1em;\n position: absolute;\n overflow: hidden;\n}\n/*}}}*/", - StyleSheetPrint: "/*{{{*/\n@media print {\n#mainMenu, #sidebar, #messageArea, .toolbar {display: none ! important;}\n#displayArea {margin: 1em 1em 0em 1em;}\n/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */\nnoscript {display:none;}\n}\n/*}}}*/", - PageTemplate: "\n
\n
\n \n\n
\n
\n \n\n
\n
\n\n\n
\n
\n
\n
\n", - ViewTemplate: "\n
\n
\n
, ( )
\n
\n
\n
\n
\n", - EditTemplate: "\n
\n
\n
\n
\n
\n", - MarkupPreHead: "\n\n", - MarkupPostHead: "", - MarkupPreBody: "", - MarkupPostBody: "" - }; + ColorPalette: "Background: #fff\n" + + "Foreground: #000\n" + + "PrimaryPale: #8cf\n" + + "PrimaryLight: #18f\n" + + "PrimaryMid: #04b\n" + + "PrimaryDark: #014\n" + + "SecondaryPale: #ffc\n" + + "SecondaryLight: #fe8\n" + + "SecondaryMid: #db4\n" + + "SecondaryDark: #841\n" + + "TertiaryPale: #eee\n" + + "TertiaryLight: #ccc\n" + + "TertiaryMid: #999\n" + + "TertiaryDark: #666\n" + + "Error: #f88\n", + StyleSheet: "", + StyleSheetColors: "/*{{{*/\nbody {\n background: [[ColorPalette::Background]];\n color: [[ColorPalette::Foreground]];\n}\n\na{\n color: [[ColorPalette::PrimaryMid]];\n}\n\na:hover{\n background: [[ColorPalette::PrimaryMid]];\n color: [[ColorPalette::Background]];\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::PrimaryPale]];\n}\n\n.button {\n color: [[ColorPalette::PrimaryDark]];\n border: 1px solid [[ColorPalette::Background]];\n}\n\n.button:hover {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n border-color: [[ColorPalette::SecondaryMid]];\n}\n\n.button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::SecondaryDark]];\n}\n\n.header {\n background: [[ColorPalette::PrimaryMid]];\n}\n\n.headerShadow {\n color: [[ColorPalette::Foreground]];\n}\n\n.headerShadow a {\n font-weight: normal;\n color: [[ColorPalette::Foreground]];\n}\n\n.headerForeground {\n color: [[ColorPalette::Background]];\n}\n\n.headerForeground a {\n font-weight: normal;\n color: [[ColorPalette::PrimaryPale]];\n}\n\n.tabSelected{\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border-left: 1px solid [[ColorPalette::TertiaryLight]];\n border-top: 1px solid [[ColorPalette::TertiaryLight]];\n border-right: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabUnselected {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::TertiaryMid]];\n}\n\n.tabContents {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabContents .button {\n border: 0;}\n\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel {\n background: [[ColorPalette::PrimaryPale]];\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: [[ColorPalette::PrimaryMid]];\n background: [[ColorPalette::Background]];\n}\n\n.wizard {\n background: [[ColorPalette::SecondaryLight]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard h1 {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.wizard h2 {\n color: [[ColorPalette::Foreground]];\n}\n\n.wizardStep {\n background: [[ColorPalette::Background]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-bottom: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard .button {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:hover {\n color: [[ColorPalette::PrimaryLight]];\n background: [[ColorPalette::PrimaryDark]];\n border-color: [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n#messageArea {\n border: 1px solid [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::SecondaryMid]];\n color: [[ColorPalette::PrimaryDark]];\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::Background]];\n}\n\n.popup {\n background: [[ColorPalette::PrimaryLight]];\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.popup hr {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::PrimaryDark]];\n border-bottom: 1px;\n}\n\n.listBreak div{\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n}\n\n.popup li.disabled {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.popup li a, .popup li a:visited {\n color: [[ColorPalette::TertiaryPale]];\n border: none;\n}\n\n.popup li a:hover {\n background: [[ColorPalette::PrimaryDark]];\n color: [[ColorPalette::Background]];\n border: none;\n}\n\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.title {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.subtitle {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.toolbar {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.tagging, .tagged {\n border: 1px solid [[ColorPalette::TertiaryPale]];\n background-color: [[ColorPalette::TertiaryPale]];\n}\n\n.selected .tagging, .selected .tagged {\n background-color: [[ColorPalette::TertiaryLight]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: [[ColorPalette::PrimaryDark]];\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: [[ColorPalette::TertiaryLight]];\n}\n\n.selected .footer {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n.sparkline {\n background: [[ColorPalette::PrimaryPale]];\n border: 0;\n}\n\n.sparktick {\n background: [[ColorPalette::PrimaryDark]];\n}\n\n.error, .errorButton {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::Error]];\n}\n\n.warning {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.cascade {\n background: [[ColorPalette::TertiaryPale]];\n color: [[ColorPalette::TertiaryMid]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.viewer blockquote {\n border-left: 3px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer table {\n border: 2px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer th, thead td {\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::Background]];\n}\n\n.viewer td, .viewer tr {\n border: 1px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer pre {\n border: 1px solid [[ColorPalette::SecondaryLight]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.viewer code {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.highlight, .marked {\n background: [[ColorPalette::SecondaryLight]];\n}\n\n.editor input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.editor textarea {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n width: 100%;\n}\n\n.editorFooter {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n/*}}}*/", + StyleSheetLayout: "/*{{{*/\n* html .tiddler {\n height: 1%;\n}\n\nbody {\n font-size: .75em;\n font-family: arial,helvetica;\n margin: 0;\n padding: 0;\n}\n\nh1,h2,h3,h4,h5 {\n font-weight: bold;\n text-decoration: none;\n padding-left: 0.4em;\n}\n\nh1 {font-size: 1.35em;}\nh2 {font-size: 1.25em;}\nh3 {font-size: 1.1em;}\nh4 {font-size: 1em;}\nh5 {font-size: .9em;}\n\nhr {\n height: 1px;\n}\n\na{\n text-decoration: none;\n}\n\ndt {font-weight: bold;}\n\nol { list-style-type: decimal }\nol ol { list-style-type: lower-alpha }\nol ol ol { list-style-type: lower-roman }\nol ol ol ol { list-style-type: decimal }\nol ol ol ol ol { list-style-type: lower-alpha }\nol ol ol ol ol ol { list-style-type: lower-roman }\nol ol ol ol ol ol ol { list-style-type: decimal }\n\n.txtOptionInput {\n width: 11em;\n}\n\n#contentWrapper .chkOptionInput {\n border: 0;\n}\n\n.externalLink {\n text-decoration: underline;\n}\n\n.indent {margin-left:3em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.tiddlyLinkExisting {\n font-weight: bold;\n}\n\n.tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler a bold */\na.tiddlyLinkNonExisting.shadow {\n font-weight: bold;\n}\n\n#mainMenu .tiddlyLinkExisting, \n#mainMenu .tiddlyLinkNonExisting,\n#sidebarTabs .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n#sidebarTabs .tiddlyLinkExisting {\n font-weight: bold;\n font-style: normal;\n}\n\n.header {\n position: relative;\n}\n\n.header a:hover {\n background: transparent;\n}\n\n.headerShadow {\n position: relative;\n padding: 4.5em 0em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: 4.5em 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n\n.siteTitle {\n font-size: 3em;\n}\n\n.siteSubtitle {\n font-size: 1.2em;\n}\n\n#mainMenu {\n position: absolute;\n left: 0;\n width: 10em;\n text-align: right;\n line-height: 1.6em;\n padding: 1.5em 0.5em 0.5em 0.5em;\n font-size: 1.1em;\n}\n\n#sidebar {\n position: absolute;\n right: 3px;\n width: 16em;\n font-size: .9em;\n}\n\n#sidebarOptions {\n padding-top: 0.3em;\n}\n\n#sidebarOptions a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarOptions input {\n margin: 0.4em 0.5em;\n}\n\n#sidebarOptions .sliderPanel {\n margin-left: 1em;\n padding: 0.5em;\n font-size: .85em;\n}\n\n#sidebarOptions .sliderPanel a {\n font-weight: bold;\n display: inline;\n padding: 0;\n}\n\n#sidebarOptions .sliderPanel input {\n margin: 0 0 .3em 0;\n}\n\n#sidebarTabs .tabContents {\n width: 15em;\n overflow: hidden;\n}\n\n.wizard {\n padding: 0.1em 0em 0em 2em;\n}\n\n.wizard h1 {\n font-size: 2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.4em 0em 0.2em 0em;\n}\n\n.wizard h2 {\n font-size: 1.2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.2em 0em 0.2em 0em;\n}\n\n.wizardStep {\n padding: 1em 1em 1em 1em;\n}\n\n.wizard .button {\n margin: 0.5em 0em 0em 0em;\n font-size: 1.2em;\n}\n\n#messageArea {\nposition:absolute; top:0; right:0; margin: 0.5em; padding: 0.5em;\n}\n\n*[id='messageArea'] {\nposition:fixed !important; z-index:99;}\n\n.messageToolbar {\ndisplay: block;\ntext-align: right;\n}\n\n#messageArea a{\n text-decoration: underline;\n}\n\n.popup {\n font-size: .9em;\n padding: 0.2em;\n list-style: none;\n margin: 0;\n}\n\n.popup hr {\n display: block;\n height: 1px;\n width: auto;\n padding: 0;\n margin: 0.2em 0em;\n}\n\n.listBreak {\n font-size: 1px;\n line-height: 1px;\n}\n\n.listBreak div {\n margin: 2px 0;\n}\n\n.popup li.disabled {\n padding: 0.2em;\n}\n\n.popup li a{\n display: block;\n padding: 0.2em;\n}\n\n.tabset {\n padding: 1em 0em 0em 0.5em;\n}\n\n.tab {\n margin: 0em 0em 0em 0.25em;\n padding: 2px;\n}\n\n.tabContents {\n padding: 0.5em;\n}\n\n.tabContents ul, .tabContents ol {\n margin: 0;\n padding: 0;\n}\n\n.txtMainTab .tabContents li {\n list-style: none;\n}\n\n.tabContents li.listLink {\n margin-left: .75em;\n}\n\n#displayArea {\n margin: 1em 17em 0em 14em;\n}\n\n\n.toolbar {\n text-align: right;\n font-size: .9em;\n visibility: hidden;\n}\n\n.selected .toolbar {\n visibility: visible;\n}\n\n.tiddler {\n padding: 1em 1em 0em 1em;\n}\n\n.missing .viewer,.missing .title {\n font-style: italic;\n}\n\n.title {\n font-size: 1.6em;\n font-weight: bold;\n}\n\n.missing .subtitle {\n display: none;\n}\n\n.subtitle {\n font-size: 1.1em;\n}\n\n.tiddler .button {\n padding: 0.2em 0.4em;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: both;\n}\n\n.footer {\n font-size: .9em;\n}\n\n.footer li {\ndisplay: inline;\n}\n\n* html .viewer pre {\n width: 99%;\n padding: 0 0 1em 0;\n}\n\n.viewer {\n line-height: 1.4em;\n padding-top: 0.5em;\n}\n\n.viewer .button {\n margin: 0em 0.25em;\n padding: 0em 0.25em;\n}\n\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul, .viewer ol{\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer table {\n border-collapse: collapse;\n margin: 0.8em 1.0em;\n}\n\n.viewer th, .viewer td, .viewer tr,.viewer caption{\n padding: 3px;\n}\n\n.viewer table.listView {\n font-size: 0.85em;\n margin: 0.8em 1.0em;\n}\n\n.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {\n padding: 0px 3px 0px 3px;\n}\n\n.viewer pre {\n padding: 0.5em;\n margin-left: 0.5em;\n font-size: 1.2em;\n line-height: 1.4em;\n overflow: auto;\n}\n\n.viewer code {\n font-size: 1.2em;\n line-height: 1.4em;\n}\n\n.editor {\nfont-size: 1.1em;\n}\n\n.editor input, .editor textarea {\n display: block;\n width: 100%;\n font: inherit;\n}\n\n.editorFooter {\n padding: 0.25em 0em;\n font-size: .9em;\n}\n\n.editorFooter .button {\npadding-top: 0px; padding-bottom: 0px;}\n\n.fieldsetFix {border: 0;\npadding: 0;\nmargin: 1px 0px 1px 0px;\n}\n\n.sparkline {\n line-height: 1em;\n}\n\n.sparktick {\n outline: 0;\n}\n\n.zoomer {\n font-size: 1.1em;\n position: absolute;\n padding: 1em;\n}\n\n.cascade {\n font-size: 1.1em;\n position: absolute;\n overflow: hidden;\n}\n/*}}}*/", + StyleSheetPrint: "/*{{{*/\n@media print {\n#mainMenu, #sidebar, #messageArea, .toolbar {display: none ! important;}\n#displayArea {margin: 1em 1em 0em 1em;}\n/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */\nnoscript {display:none;}\n}\n/*}}}*/", + PageTemplate: "\n
\n
\n \n\n
\n
\n \n\n
\n
\n\n\n
\n
\n
\n
\n", + ViewTemplate: "\n
\n
\n
, ( )
\n
\n
\n
\n
\n", + EditTemplate: "\n
\n
\n
\n
\n
\n", + MarkupPreHead: "\n\n", + MarkupPostHead: "", + MarkupPreBody: "", + MarkupPostBody: "" + }; // --------------------------------------------------------------------------------- // Translateable strings @@ -262,50 +262,50 @@ config.shadowTiddlers = { // Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone merge(config.options,{ - txtUserName: "YourName"}); + txtUserName: "YourName"}); merge(config.messages,{ - customConfigError: "Problems were encountered loading plugins. See PluginManager for details", - pluginError: "Error: %0", - pluginDisabled: "Not executed because disabled via 'systemConfigDisable' tag", - pluginForced: "Executed because forced via 'systemConfigForce' tag", - pluginVersionError: "Not executed because this plugin needs a newer version of TiddlyWiki", - nothingSelected: "Nothing is selected. You must select one or more items first", - savedSnapshotError: "It appears that this TiddlyWiki has been incorrectly saved. Please see http://www.tiddlywiki.com/#DownloadSoftware for details", - subtitleUnknown: "(unknown)", - undefinedTiddlerToolTip: "The tiddler '%0' doesn't yet exist", - shadowedTiddlerToolTip: "The tiddler '%0' doesn't yet exist, but has a pre-defined shadow value", - tiddlerLinkTooltip: "%0 - %1, %2", - externalLinkTooltip: "External link to %0", - noTags: "There are no tagged tiddlers", - notFileUrlError: "You need to save this TiddlyWiki to a file before you can save changes", - cantSaveError: "It's not possible to save changes. This could be because your browser doesn't support saving (instead, use FireFox if you can), or because the pathname to your TiddlyWiki file contains illegal characters", - invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki", - backupSaved: "Backup saved", - backupFailed: "Failed to save backup file", - rssSaved: "RSS feed saved", - rssFailed: "Failed to save RSS feed file", - emptySaved: "Empty template saved", - emptyFailed: "Failed to save empty template file", - mainSaved: "Main TiddlyWiki file saved", - mainFailed: "Failed to save main TiddlyWiki file. Your changes have not been saved", - macroError: "Error in macro <<%0>>", - macroErrorDetails: "Error while executing macro <<%0>>:\n%1", - missingMacro: "No such macro", - overwriteWarning: "A tiddler named '%0' already exists. Choose OK to overwrite it", - unsavedChangesWarning: "WARNING! There are unsaved changes in TiddlyWiki\n\nChoose OK to save\nChoose CANCEL to discard", - confirmExit: "--------------------------------\n\nThere are unsaved changes in TiddlyWiki. If you continue you will lose those changes\n\n--------------------------------", - saveInstructions: "SaveChanges", - unsupportedTWFormat: "Unsupported TiddlyWiki format '%0'", - tiddlerSaveError: "Error when saving tiddler '%0'", - tiddlerLoadError: "Error when loading tiddler '%0'", - wrongSaveFormat: "Cannot save with storage format '%0'. Using standard format for save.", - invalidFieldName: "Invalid field name %0", - fieldCannotBeChanged: "Field '%0' cannot be changed"}); + customConfigError: "Problems were encountered loading plugins. See PluginManager for details", + pluginError: "Error: %0", + pluginDisabled: "Not executed because disabled via 'systemConfigDisable' tag", + pluginForced: "Executed because forced via 'systemConfigForce' tag", + pluginVersionError: "Not executed because this plugin needs a newer version of TiddlyWiki", + nothingSelected: "Nothing is selected. You must select one or more items first", + savedSnapshotError: "It appears that this TiddlyWiki has been incorrectly saved. Please see http://www.tiddlywiki.com/#DownloadSoftware for details", + subtitleUnknown: "(unknown)", + undefinedTiddlerToolTip: "The tiddler '%0' doesn't yet exist", + shadowedTiddlerToolTip: "The tiddler '%0' doesn't yet exist, but has a pre-defined shadow value", + tiddlerLinkTooltip: "%0 - %1, %2", + externalLinkTooltip: "External link to %0", + noTags: "There are no tagged tiddlers", + notFileUrlError: "You need to save this TiddlyWiki to a file before you can save changes", + cantSaveError: "It's not possible to save changes. This could be because your browser doesn't support saving (instead, use FireFox if you can), or because the pathname to your TiddlyWiki file contains illegal characters", + invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki", + backupSaved: "Backup saved", + backupFailed: "Failed to save backup file", + rssSaved: "RSS feed saved", + rssFailed: "Failed to save RSS feed file", + emptySaved: "Empty template saved", + emptyFailed: "Failed to save empty template file", + mainSaved: "Main TiddlyWiki file saved", + mainFailed: "Failed to save main TiddlyWiki file. Your changes have not been saved", + macroError: "Error in macro <<%0>>", + macroErrorDetails: "Error while executing macro <<%0>>:\n%1", + missingMacro: "No such macro", + overwriteWarning: "A tiddler named '%0' already exists. Choose OK to overwrite it", + unsavedChangesWarning: "WARNING! There are unsaved changes in TiddlyWiki\n\nChoose OK to save\nChoose CANCEL to discard", + confirmExit: "--------------------------------\n\nThere are unsaved changes in TiddlyWiki. If you continue you will lose those changes\n\n--------------------------------", + saveInstructions: "SaveChanges", + unsupportedTWFormat: "Unsupported TiddlyWiki format '%0'", + tiddlerSaveError: "Error when saving tiddler '%0'", + tiddlerLoadError: "Error when loading tiddler '%0'", + wrongSaveFormat: "Cannot save with storage format '%0'. Using standard format for save.", + invalidFieldName: "Invalid field name %0", + fieldCannotBeChanged: "Field '%0' cannot be changed"}); merge(config.messages.messageClose,{ - text: "close", - tooltip: "close this message area"}); + text: "close", + tooltip: "close this message area"}); config.messages.dates.months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November","December"]; config.messages.dates.days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; @@ -313,48 +313,48 @@ config.messages.dates.shortMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", " config.messages.dates.shortDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; merge(config.views.wikified.tag,{ - labelNoTags: "no tags", - labelTags: "tags: ", - openTag: "Open tag '%0'", - tooltip: "Show tiddlers tagged with '%0'", - openAllText: "Open all", - openAllTooltip: "Open all of these tiddlers", - popupNone: "No other tiddlers tagged with '%0'"}); + labelNoTags: "no tags", + labelTags: "tags: ", + openTag: "Open tag '%0'", + tooltip: "Show tiddlers tagged with '%0'", + openAllText: "Open all", + openAllTooltip: "Open all of these tiddlers", + popupNone: "No other tiddlers tagged with '%0'"}); merge(config.views.wikified,{ - defaultText: "The tiddler '%0' doesn't yet exist. Double-click to create it", - defaultModifier: "(missing)", - shadowModifier: "(built-in shadow tiddler)", - createdPrompt: "created"}); + defaultText: "The tiddler '%0' doesn't yet exist. Double-click to create it", + defaultModifier: "(missing)", + shadowModifier: "(built-in shadow tiddler)", + createdPrompt: "created"}); merge(config.views.editor,{ - tagPrompt: "Type tags separated with spaces, [[use double square brackets]] if necessary, or add existing", - defaultText: "Type the text for '%0'"}); + tagPrompt: "Type tags separated with spaces, [[use double square brackets]] if necessary, or add existing", + defaultText: "Type the text for '%0'"}); merge(config.views.editor.tagChooser,{ - text: "tags", - tooltip: "Choose existing tags to add to this tiddler", - popupNone: "There are no tags defined", - tagTooltip: "Add the tag '%0'"}); + text: "tags", + tooltip: "Choose existing tags to add to this tiddler", + popupNone: "There are no tags defined", + tagTooltip: "Add the tag '%0'"}); merge(config.macros.search,{ - label: "search", - prompt: "Search this TiddlyWiki", - accessKey: "F", - successMsg: "%0 tiddlers found matching %1", - failureMsg: "No tiddlers found matching %0"}); + label: "search", + prompt: "Search this TiddlyWiki", + accessKey: "F", + successMsg: "%0 tiddlers found matching %1", + failureMsg: "No tiddlers found matching %0"}); merge(config.macros.tagging,{ - label: "tagging: ", - labelNotTag: "not tagging", - tooltip: "List of tiddlers tagged with '%0'"}); + label: "tagging: ", + labelNotTag: "not tagging", + tooltip: "List of tiddlers tagged with '%0'"}); merge(config.macros.timeline,{ - dateFormat: "DD MMM YYYY"}); + dateFormat: "DD MMM YYYY"}); merge(config.macros.allTags,{ - tooltip: "Show tiddlers tagged with '%0'", - noTags: "There are no tagged tiddlers"}); + tooltip: "Show tiddlers tagged with '%0'", + noTags: "There are no tagged tiddlers"}); config.macros.list.all.prompt = "All tiddlers in alphabetical order"; config.macros.list.missing.prompt = "Tiddlers that have links to them but are not defined"; @@ -362,155 +362,155 @@ config.macros.list.orphans.prompt = "Tiddlers that are not linked to from any ot config.macros.list.shadowed.prompt = "Tiddlers shadowed with default contents"; merge(config.macros.closeAll,{ - label: "close all", - prompt: "Close all displayed tiddlers (except any that are being edited)"}); + label: "close all", + prompt: "Close all displayed tiddlers (except any that are being edited)"}); merge(config.macros.permaview,{ - label: "permaview", - prompt: "Link to an URL that retrieves all the currently displayed tiddlers"}); + label: "permaview", + prompt: "Link to an URL that retrieves all the currently displayed tiddlers"}); merge(config.macros.saveChanges,{ - label: "save changes", - prompt: "Save all tiddlers to create a new TiddlyWiki", - accessKey: "S"}); + label: "save changes", + prompt: "Save all tiddlers to create a new TiddlyWiki", + accessKey: "S"}); merge(config.macros.newTiddler,{ - label: "new tiddler", - prompt: "Create a new tiddler", - title: "New Tiddler", - accessKey: "N"}); + label: "new tiddler", + prompt: "Create a new tiddler", + title: "New Tiddler", + accessKey: "N"}); merge(config.macros.newJournal,{ - label: "new journal", - prompt: "Create a new tiddler from the current date and time", - accessKey: "J"}); + label: "new journal", + prompt: "Create a new tiddler from the current date and time", + accessKey: "J"}); merge(config.macros.plugins,{ - skippedText: "(This plugin has not been executed because it was added since startup)", - noPluginText: "There are no plugins installed", - confirmDeleteText: "Are you sure you want to delete these tiddlers:\n\n%0", - listViewTemplate : { - columns: [ - {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'}, - {name: 'Title', field: 'title', tiddlerLink: 'title', title: "Title", type: 'TiddlerLink'}, - {name: 'Forced', field: 'forced', title: "Forced", tag: 'systemConfigForce', type: 'TagCheckbox'}, - {name: 'Disabled', field: 'disabled', title: "Disabled", tag: 'systemConfigDisable', type: 'TagCheckbox'}, - {name: 'Executed', field: 'executed', title: "Loaded", type: 'Boolean', trueText: "Yes", falseText: "No"}, - {name: 'Error', field: 'error', title: "Status", type: 'Boolean', trueText: "Error", falseText: "OK"}, - {name: 'Log', field: 'log', title: "Log", type: 'StringList'} - ], - rowClasses: [ - {className: 'error', field: 'error'}, - {className: 'warning', field: 'warning'} - ], - actions: [ - {caption: "More actions...", name: ''}, - {caption: "Remove systemConfig tag", name: 'remove'}, - {caption: "Delete these tiddlers forever", name: 'delete'} - ]} - }); + skippedText: "(This plugin has not been executed because it was added since startup)", + noPluginText: "There are no plugins installed", + confirmDeleteText: "Are you sure you want to delete these tiddlers:\n\n%0", + listViewTemplate : { + columns: [ + {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'}, + {name: 'Title', field: 'title', tiddlerLink: 'title', title: "Title", type: 'TiddlerLink'}, + {name: 'Forced', field: 'forced', title: "Forced", tag: 'systemConfigForce', type: 'TagCheckbox'}, + {name: 'Disabled', field: 'disabled', title: "Disabled", tag: 'systemConfigDisable', type: 'TagCheckbox'}, + {name: 'Executed', field: 'executed', title: "Loaded", type: 'Boolean', trueText: "Yes", falseText: "No"}, + {name: 'Error', field: 'error', title: "Status", type: 'Boolean', trueText: "Error", falseText: "OK"}, + {name: 'Log', field: 'log', title: "Log", type: 'StringList'} + ], + rowClasses: [ + {className: 'error', field: 'error'}, + {className: 'warning', field: 'warning'} + ], + actions: [ + {caption: "More actions...", name: ''}, + {caption: "Remove systemConfig tag", name: 'remove'}, + {caption: "Delete these tiddlers forever", name: 'delete'} + ]} + }); merge(config.macros.refreshDisplay,{ - label: "refresh", - prompt: "Redraw the entire TiddlyWiki display" - }); + label: "refresh", + prompt: "Redraw the entire TiddlyWiki display" + }); merge(config.macros.importTiddlers,{ - readOnlyWarning: "You cannot import tiddlers into a read-only TiddlyWiki. Try opening the TiddlyWiki file from a file:// URL", - defaultPath: "http://www.tiddlywiki.com/index.html", - fetchLabel: "fetch", - fetchPrompt: "Fetch the tiddlywiki file", - fetchError: "There were problems fetching the tiddlywiki file", - confirmOverwriteText: "Are you sure you want to overwrite these tiddlers:\n\n%0", - wizardTitle: "Import tiddlers from another TiddlyWiki file", - step1: "Step 1: Locate the TiddlyWiki file", - step1prompt: "Enter the URL or pathname here: ", - step1promptFile: "...or browse for a file: ", - step1promptFeeds: "...or select a pre-defined feed: ", - step1feedPrompt: "Choose...", - step2: "Step 2: Loading TiddlyWiki file", - step2Text: "Please wait while the file is loaded from: %0", - step3: "Step 3: Choose the tiddlers to import", - step4: "%0 tiddler(s) imported", - step5: "Done", - listViewTemplate: { - columns: [ - {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'}, - {name: 'Title', field: 'title', title: "Title", type: 'String'}, - {name: 'Snippet', field: 'text', title: "Snippet", type: 'String'}, - {name: 'Tags', field: 'tags', title: "Tags", type: 'Tags'} - ], - rowClasses: [ - ], - actions: [ - {caption: "More actions...", name: ''}, - {caption: "Import these tiddlers", name: 'import'} - ]} - }); + readOnlyWarning: "You cannot import tiddlers into a read-only TiddlyWiki. Try opening the TiddlyWiki file from a file:// URL", + defaultPath: "http://www.tiddlywiki.com/index.html", + fetchLabel: "fetch", + fetchPrompt: "Fetch the tiddlywiki file", + fetchError: "There were problems fetching the tiddlywiki file", + confirmOverwriteText: "Are you sure you want to overwrite these tiddlers:\n\n%0", + wizardTitle: "Import tiddlers from another TiddlyWiki file", + step1: "Step 1: Locate the TiddlyWiki file", + step1prompt: "Enter the URL or pathname here: ", + step1promptFile: "...or browse for a file: ", + step1promptFeeds: "...or select a pre-defined feed: ", + step1feedPrompt: "Choose...", + step2: "Step 2: Loading TiddlyWiki file", + step2Text: "Please wait while the file is loaded from: %0", + step3: "Step 3: Choose the tiddlers to import", + step4: "%0 tiddler(s) imported", + step5: "Done", + listViewTemplate: { + columns: [ + {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'}, + {name: 'Title', field: 'title', title: "Title", type: 'String'}, + {name: 'Snippet', field: 'text', title: "Snippet", type: 'String'}, + {name: 'Tags', field: 'tags', title: "Tags", type: 'Tags'} + ], + rowClasses: [ + ], + actions: [ + {caption: "More actions...", name: ''}, + {caption: "Import these tiddlers", name: 'import'} + ]} + }); merge(config.commands.closeTiddler,{ - text: "close", - tooltip: "Close this tiddler"}); + text: "close", + tooltip: "Close this tiddler"}); merge(config.commands.closeOthers,{ - text: "close others", - tooltip: "Close all other tiddlers"}); + text: "close others", + tooltip: "Close all other tiddlers"}); merge(config.commands.editTiddler,{ - text: "edit", - tooltip: "Edit this tiddler", - readOnlyText: "view", - readOnlyTooltip: "View the source of this tiddler"}); + text: "edit", + tooltip: "Edit this tiddler", + readOnlyText: "view", + readOnlyTooltip: "View the source of this tiddler"}); merge(config.commands.saveTiddler,{ - text: "done", - tooltip: "Save changes to this tiddler"}); + text: "done", + tooltip: "Save changes to this tiddler"}); merge(config.commands.cancelTiddler,{ - text: "cancel", - tooltip: "Undo changes to this tiddler", - warning: "Are you sure you want to abandon your changes to '%0'?", - readOnlyText: "done", - readOnlyTooltip: "View this tiddler normally"}); + text: "cancel", + tooltip: "Undo changes to this tiddler", + warning: "Are you sure you want to abandon your changes to '%0'?", + readOnlyText: "done", + readOnlyTooltip: "View this tiddler normally"}); merge(config.commands.deleteTiddler,{ - text: "delete", - tooltip: "Delete this tiddler", - warning: "Are you sure you want to delete '%0'?"}); + text: "delete", + tooltip: "Delete this tiddler", + warning: "Are you sure you want to delete '%0'?"}); merge(config.commands.permalink,{ - text: "permalink", - tooltip: "Permalink for this tiddler"}); + text: "permalink", + tooltip: "Permalink for this tiddler"}); merge(config.commands.references,{ - text: "references", - tooltip: "Show tiddlers that link to this one", - popupNone: "No references"}); + text: "references", + tooltip: "Show tiddlers that link to this one", + popupNone: "No references"}); merge(config.commands.jump,{ - text: "jump", - tooltip: "Jump to another open tiddler"}); + text: "jump", + tooltip: "Jump to another open tiddler"}); merge(config.shadowTiddlers,{ - DefaultTiddlers: "GettingStarted", - MainMenu: "GettingStarted", - SiteTitle: "My TiddlyWiki", - SiteSubtitle: "a reusable non-linear personal web notebook", - SiteUrl: "http://www.tiddlywiki.com/", - GettingStarted: "To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened\nYou'll also need to enter your username for signing your edits: <