TiddlyWiki.org

Changeset 5002

Show
Ignore:
Timestamp:
16/05/08 19:20:29 (3 months ago)
Author:
cdent
Message:

tiddlyweb - moves in the right detection for doing client
side collision detection on tiddler save, but not collision
resolution.

Handling resolution is likely going to require some work
in the SyncMachine? or at least the TiddlyWebAdaptor?.

There's a web page I've lost which describes how to
do contention handling with HTTP 409 or 412, Etags,
and good headers handling on the server side.

Your inputs and assistances desired.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/lib/TiddlyWebAdaptorPlugin

    r4227 r5002  
    178178                var list = []; 
    179179                for(var i=0; i < tiddlers.length; i++) { 
    180                     var tiddler = new Tiddler(tiddlers[i]) 
     180                    var tiddler = new Tiddler(tiddlers[i]['title']); 
     181                    tiddler.fields['server.page.revision'] = tiddlers[i]['revision']; 
    181182                    list.push(tiddler); 
    182183                } 
     
    219220                context.title = title; 
    220221        if(context.revision) { 
    221 // !!TODO set the uriTemplate 
    222                 var uriTemplate = '%0%1%2%3'; 
     222                var uriTemplate = '%0recipes/%1/tiddlers/%2/revisions/%3'; 
    223223        } else { 
    224224                uriTemplate = '%0recipes/%1/tiddlers/%2'; 
    225225        } 
    226         uri = uriTemplate.format([context.host,context.workspace,TiddlyWebAdaptor.normalizedTitle(title)]); 
     226        uri = uriTemplate.format([context.host,context.workspace,TiddlyWebAdaptor.normalizedTitle(title),context.revision]); 
    227227 
    228228        context.tiddler = new Tiddler(title); 
     
    251251                context.tiddler.tags = info['tags']; 
    252252                context.tiddler.fields['server.bag'] = info['bag']; 
     253                context.tiddler.fields['server.page.revision'] = info['revison'] 
    253254                context.tiddler.modifier = info['modifier']; 
    254255                context.tiddler.modified = Date.convertFromYYYYMMDDHHMM(info['modified']); 
     
    265266}; 
    266267 
    267 // NOT YET IMPLEMENTED 
    268268TiddlyWebAdaptor.prototype.getTiddlerRevisionList = function(title,limit,context,userParams,callback) 
    269269{ 
    270270        context = this.setContext(context,userParams,callback); 
    271 // !!TODO set the uriTemplate 
    272         var uriTemplate = '%0%1%2'; 
    273         if(!limit) 
    274                 limit = 10; 
    275         var uri = uriTemplate.format([context.host,context.workspace,TiddlyWebAdaptor.normalizedTitle(title),limit]); 
     271        var uriTemplate = '%0recipes/%1/tiddlers/%2/revisions'; 
     272        // no support for limit 
     273        var uri = uriTemplate.format([context.host,context.workspace,TiddlyWebAdaptor.normalizedTitle(title)]); 
    276274        var req = TiddlyWebAdaptor.doHttpGET(uri,TiddlyWebAdaptor.getTiddlerRevisionListCallback,context); 
    277275        return typeof req == 'string' ? req : true; 
    278276}; 
    279277 
    280 // NOT YET IMPLEMENTED 
    281278TiddlyWebAdaptor.getTiddlerRevisionListCallback = function(status,context,responseText,uri,xhr) 
    282279{ 
    283280        context.status = false; 
    284281        if(status) { 
    285                 var content = null; 
    286282                try { 
    287 // !!TODO: parse the responseText here 
    288                         var list = []; 
    289                         var tiddler = new Tiddler('example'); 
    290 // !!TODO: fill in tiddler fields as available 
    291                         //tiddler.modified = TiddlyWebAdaptor.dateFromEditTime(); 
    292                         //tiddler.modifier = ; 
    293                         //tiddler.tags = ; 
    294                         //tiddler.fields['server.page.id'] = ; 
    295                         //tiddler.fields['server.page.name'] = ; 
    296                         //tiddler.fields['server.page.revision'] = ; 
    297                         list.push(tiddler); 
     283                    eval('var info=' + responseText); 
    298284                } catch (ex) { 
    299285                        context.statusText = exceptionText(ex,TiddlyWebAdaptor.serverParsingErrorMessage); 
     
    302288                        return; 
    303289                } 
     290                var list = []; 
     291                for(var i=0; i&lt;info.length; i++) { 
     292                    var tiddler = new Tiddler(info[i]['title']); 
     293                    tiddler.modifier = info[i]['modifier']; 
     294                    tiddler.tags = info[i]['tags']; 
     295                    tiddler.fields['server.page.revision'] = info[i]['revision']; 
     296                    tiddler.modified = Date.convertFromYYYYMMDDHHMM(info[i]['modified']); 
     297                    tiddler.created = Date.convertFromYYYYMMDDHHMM(info[i]['created']); 
     298                    list.push(tiddler); 
     299                } 
    304300                var sortField = 'server.page.revision'; 
    305                 list.sort(function(a,b) {return a.fields[sortField] < b.fields[sortField] ? +1 : (a.fields[sortField] == b.fields[sortField] ? 0 : -1);}); 
     301                list.sort(function(a,b) { 
     302                    return a.fields[sortField] &lt; b.fields[sortField] 
     303                      ? +1 
     304                      : (a.fields[sortField] == b.fields[sortField] ? 0 : -1); 
     305                 }); 
    306306                context.revisions = list; 
    307307                context.status = true; 
     
    334334            text: tiddler.text, 
    335335            modifier: tiddler.modifier, 
    336             tags: tiddler.tags 
     336            tags: tiddler.tags, 
     337            revision: tiddler['server.page.revision'] 
    337338        }; 
    338339        payload = JSON.stringify(payload) 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/tiddlyweb/serializers/html.py

    r4997 r5002  
    7272 
    7373def tiddler_as(tiddler): 
    74     return """<div title="%s" revision="%s" modifier="%s" modified="%s" created="%s" tags="%s"> 
     74    return """<div title="%s" server.page.revision="%s" modifier="%s" modified="%s" created="%s" tags="%s"> 
    7575<pre>%s</pre> 
    7676</div> 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/tiddlyweb/serializers/json.py

    r4997 r5002  
    3131def bag_as(bag): 
    3232    """ 
    33     List the tiddlers in a bag as text
     33    List the tiddlers in a bag as json
    3434    We will likely want to expand this someday. 
    3535    """ 
    36     if bag.revbag: 
    37         return simplejson.dumps([(tiddler.title, tiddler.revision) for tiddler in bag.list_tiddlers()]) 
    38     else: 
    39         return simplejson.dumps([tiddler.title for tiddler in bag.list_tiddlers()]) 
     36    return simplejson.dumps([{'title':tiddler.title, 'revision':tiddler.revision} for tiddler in bag.list_tiddlers()]) 
    4037 
    4138def as_bag(bag, input): 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/tiddlyweb/serializers/wiki.py

    r4957 r5002  
    6868        host = '' 
    6969 
    70     return """<div title="%s" revision="%s" modifier="%s" server.workspace="%s" server.type="tiddlyweb" server.host="%s" server.bag="%s" modified="%s" created="%s" tags="%s"> 
     70    return """<div title="%s" server.page.revision="%s" modifier="%s" server.workspace="%s" server.type="tiddlyweb" server.host="%s" server.bag="%s" modified="%s" created="%s" tags="%s"> 
    7171<pre>%s</pre> 
    7272</div>