insert save link only once
[MojoFacets.git] / public / edit_table.js
1 $(document).ready( function() {
2
3 var cell_blur = function() {
4         console.debug( 'cell_blur'
5 //              , this
6 //              , $(this).val()
7         );
8
9 /*
10         // FIXME primary key is fixed to 1st column
11         var pk = $('table tr th:nth(0) > a').text();
12         var id = $(this).parent().siblings(':nth(0)').text()
13 */
14         var _row_id = $(this).parent().parent().attr('title');
15
16         var x = $(this).parent().attr('cellIndex');
17         var y = $(this).parent().parent().attr('rowIndex');
18
19         var content = $(this).val();
20 //      $(this).replaceWith( content );
21
22         var name = $('table tr th:nth('+x+') > a').text();
23         console.info( x, y, _row_id, name, content );
24
25         var update = $(this);
26
27         $.post( '/data/edit', {
28                 path: document.title, _row_id: _row_id,
29                 name: name, content: content
30         } , function(data, textStatus) {
31                 console.debug( 'data:', data, 'status:', textStatus );
32                 if ( ! data ) {
33                         data = content; // fallback to submited data for 304
34                 } else {
35                         if ( $('a.save_changes').length == 0 )
36                         $('a.changes').before('<a class=save_changes href="/data/save">save</a>')
37                 }
38                 var vals = data.split('¶');
39                 data = vals.join('<span class=d>¶</span>');
40                 update.replaceWith( data );
41         });
42 }
43
44 var cell_click = function(event) {
45         console.debug( 'cell_click'
46                 , this
47                 , event
48                 , $(this).text()
49         );
50         var content = $(this).text() // we don't want para markup
51                 .replace(/^[ \n\r]+/,'')
52                 .replace(/[ \n\r]+$/,'')
53         ;
54 console.debug( 'content', content );
55         var rows = content.split('¶').length * 2 + 1;
56         var textarea = $('<textarea rows='+rows+'/>');
57         textarea.val( content );
58         $(this).html( textarea );
59         textarea.focus();
60         textarea.blur( cell_blur )
61 };
62
63
64 console.info('double-click on cell to edit it');
65 $('table td').live( 'dblclick', cell_click );
66
67 }); // document.ready
68
69