Hello Eric,

воскресенье, 31 августа 2014 г., 12:05:09 UTC+4 пользователь Eric Shulman 
написал:
>
> On Friday, August 29, 2014 11:55:40 AM UTC-7, Yakov wrote:
>>
>> 159: fixed, works; is it really necessary to surrond all the values with 
>> %22...%22? Even one-word, like true/false or numbers, like 
>> txtMaxEditRows:30? (it would ease migrating)
>> As far as I can see (from [1-3]), that would work as expected in both 
>> versions of cookie-handling.
>>
>
> Although many option values are single words, numbers, or true/false, 
> option values *can* contain whitespace, so at least some of the time, there 
> is a need for the surrounding quotes.  However, a valid browser cookie 
> should not contain any quotes, and cookies containing quotes are rejected 
> by some (but not all) browsers. This is the basis for issue #159, which 
> reported that Opera did not save the TiddlyWiki option values between 
> sessions.  Although I have not confirmed, I think that this error was also 
> responsible for preventing options from being saved in other browsers as 
> well.
>
> TWClassic uses String.encodeHashMap() [1] to construct a space-separated 
> string of name/value pairs, where each option name is followed by a colon 
> (:), and the option value is *always* enclosed in double-quotes, like this:
> name1:"value1" name2:"value2" name3:"value3"
>
> The fix for #159 did not change the way the individual option values are 
> encoded/decoded from the cookie text.  Rather, it simply converts the 
> *existing* use of quotes to %22 to avoid being rejected by the browser.  Of 
> course, since most option values are single-words, numbers, or true/false, 
> we could reduce -- but not completely eliminate -- the use of quotes in the 
> encoded cookie text, by changing String.encodeHashMap() to check for 
> whitespace in the option values, and only adding the surrounding quotes 
> when actually needed.  The resulting cookie text would still need to have 
> any quotes encoded as %22, so those option values could still be affected 
> by the "version skew" issue that #whatever reported above.
>
> So.. I now have two possible improvements for the 159 fix:
>
> 1) maintain backward-compatibility by adding a chkEncodeCookieQuotes 
> option (default to false) to completely bypass the %22 encoding/decoding. 
>  This will allow continued use of a mixed version environment (i.e., 
> TW2.8.1 or earlier running along side TW2.9.0) for browsers that DO accept 
> cookie values containing quotes.  Of course, because the cookie text would 
> then contain quotes, browsers that DONT accept quotes will reject any 
> changes to default option settings; thus, to enable the %22 encoding for 
> those browsers, the TW author cannot simply "set an option checkbox" (as 
> that setting would not be saved).  Instead, they would need to explicitly 
> add a systemConfig tiddler containing:
> config.options.chkEncodeCookieQuotes=true;
>  
>
2) reduce (but not eliminate) the use of quotes in cookie text by checking 
> for whitespace in String.encodeHashMap().  This limits the impact of the 
> %22 encoding, so that MOST option values would be backward compatible 
> unless they contain whitespace.
>
> My only concern about solution (2) is that String.encodeHashMap() is not 
> only used to encode the option cookie text, but is also used in the TWCore 
> for some handling of custom fields.  A quick review of the code suggests 
> that it would be "safe", but I prefer to keep changes as isolated as 
> possible to minimize their any unexpected impact on existing TiddlyWiki 
> uses.
>
> I think it would be ok to add a new argument to String.encodeHashMap:
String.encodeHashMap = function(hashmap,dontForceQuots)
and in those places where it was used previously, no changes will be 
applied unless the new argument is used. If dontForceQuots is true, quots 
around one-word values are not put.

As for the Java issue, it is probable that the old Opera is the source of 
the problem: after some tweaking, I succeeded in saving in Yandex browser 
(Chromium-based); I have to test saving to/including from an outer relative 
folder, though.

Best regards,
Yakov.
 

> [1] 
> https://github.com/TiddlyWiki/tiddlywiki/blob/master/js/Strings.js#L249
>
> I have a major problem though: I failed to save the new TW using 
>> TiddlySaver in these 4 combinations:
>> Windows 7 x64 + Opera 12.17 +
>> either my PC with old Java (as far as I can see 7 update 17) or another 
>> PC with the latest (7 update i-don't-remember-which) +
>> either old TiddlySaver I still use or the new one in the package.
>> On trying to save, the console sais:
>> javaLoadFile: TypeError: 'applet.loadFile' is not a function
>> javaSaveFile: TypeError: 'applet.saveFile' is not a function
>> javaDebugInformation() gives:
>> "Java Version: TypeError: Cannot convert 'method' to object
>> Last Exception: TypeError: Cannot convert 'method' to object
>> Last Exception Stack Trace: TypeError: Cannot convert 'method' to object
>> System Properties: TypeError: Cannot convert 'method' to object"
>> and that's in each case, including the fresh installation on the other PC.
>>
>
> Hmmm... I'm not sure what's happening here, but I don't see any problems 
> using the new TiddlySaver.jar with Chrome, so perhaps it's an Opera bug? 
>  Here's some info that might suggest an avenue of investigation to persue:
>
>
>    - The TiddlySaver.jar included with TW290 was re-built about 6 months 
>    ago by PVHL (to update the Certificate), and came from here:
>    
>    https://github.com/PVHL/tiddlywiki/tree/TiddlySaver1Beta1/java
>
>
>    - The only TWCore code change related to TiddlySaver was a fix 
>    to javaDebugInformation() to correct an erroneous function name.  Note 
> that 
>    javaDebugInformation is NOT called by the TWCore, and is only provided for 
>    use with debugging tools, so it should have NO effect on loading or using 
>    the TiddlySaver.jar, regardless of the version.
>    
>
> Your thoughts?
>
> -e
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/tiddlywiki.
For more options, visit https://groups.google.com/d/optout.

Reply via email to