Index: section_browse.msn =================================================================== --- section_browse.msn (revision 617) +++ section_browse.msn (revision 618) @@ -63,42 +63,10 @@ return dumped_text; } -$(document).ready(function(){ - $('.move-up').on('click', function( ev ){ - ev.preventDefault(); - var $nID = $(this).data('id'); - $.ajax({ - 'url' : '/contenido/ajax/document_move.html', - 'data' : { 's' : <% ref $section ? $section->id : 0 %>, 'id' : $nID, 'move' : 'up' }, - 'dataType' : 'json', - 'success' : function( data ){ - if ( data.error ) { - alert( data.error ); - } else if ( data.before ) { - var $nBefore = data.before; - $('#row-' + $nID).insertBefore('#row-' + $nBefore); - } - } - }); - }); - $('.move-down').on('click', function( ev ){ - ev.preventDefault(); - var $nID = $(this).data('id'); - $.ajax({ - 'url' : '/contenido/ajax/document_move.html', - 'data' : { 's' : <% ref $section ? $section->id : 0 %>, 'id' : $nID, 'move' : 'down' }, - 'dataType' : 'json', - 'success' : function( data ){ - if ( data.error ) { - alert( data.error ); - } else if ( data.after ) { - var $nAfter = data.after; - $('#row-' + $nID).insertAfter('#row-' + $nAfter); - } - } - }); - }); +var oMenus = { +% my $cls_count = scalar keys %document_classes; % foreach my $class ( keys %document_classes ) { +% $cls_count--; % my $class_name = $class; % $class_name =~ s/:/-/g; % my ($prop) = grep { $_->{attr} eq 'status' } $class->new( $keeper )->structure; @@ -114,33 +82,110 @@ % push @menu, "'$key' : { 'name' : '$name' }"; % } % } - $.contextMenu({ - selector: '.context-menu-<% $class_name %>', - trigger: 'left', - callback: function(key, options) { - var nID = parseInt($(this).data('id')); - if ( nID != key ) { - $.ajax({ - 'url' : '/contenido/ajax/document_status.html', - 'data' : { 'class' : '<% $class %>', 'id' : nID, 'status' : key, 's' : <% ref $section ? $section->id : 0 %>, 'params' : '<% $params %>' }, - 'dataType' : 'json', - 'success' : function( data ) { - if ( data.error ) { - alert( data.error ); + '<% $class_name %>' : { <% join(", ", @menu) %> }<% $cls_count ? ',' : '' %> +% } +% } + +} + +function set_status_toggle( ev, nID, $class_name ) { + ev.preventDefault(); + $.ajax({ + 'url' : '/contenido/ajax/document_status.html', + 'data' : { 'class' : $class_name, 'id' : nID, 'toggle' : 1, 's' : <% ref $section ? $section->id : 0 %>, 'params' : '<% $params %>' }, + 'dataType' : 'json', + 'success' : function( data ) { + if ( data.error ) { + alert( data.error ); + } + if ( data.success ) { + $('#row-' + nID).html(data.html); + $('#status-set-'+ nID).on('click', function( ev ) { + set_status_toggle(ev, nID, $class_name) + }); + } + } + }); +} + +function set_status( $selector, $class_name ) { + var oMenu = oMenus[$class_name]; + $.contextMenu({ + selector: $selector, + trigger: 'left', + callback: function(key, options) { + var nID = parseInt($(this).data('id')); + if ( nID != key ) { + $.ajax({ + 'url' : '/contenido/ajax/document_status.html', + 'data' : { 'class' : $class_name, 'id' : nID, 'status' : key, 's' : <% ref $section ? $section->id : 0 %>, 'params' : '<% $params %>' }, + 'dataType' : 'json', + 'success' : function( data ) { + if ( data.error ) { + alert( data.error ); + } + if ( data.success ) { + $('#row-' + nID).html(data.html); + set_status( '#status-set-'+ nID, $class_name); + } } - if ( data.success ) { - $('#row-' + nID).html(data.html); - } + }); + } + }, + items: oMenu + }); +} + +$(document).ready(function(){ + $('.move-up').on('click', function( ev ){ + ev.preventDefault(); + var $nID = $(this).data('id'); + $.ajax({ + 'url' : '/contenido/ajax/document_move.html', + 'data' : { 's' : <% ref $section ? $section->id : 0 %>, 'id' : $nID, 'move' : 'up' }, + 'dataType' : 'json', + 'success' : function( data ){ + if ( data.error ) { + alert( data.error ); + } else if ( data.before ) { + var $nBefore = data.before; + $('#row-' + $nID).insertBefore('#row-' + $nBefore); } - }); - } -// var m = "clicked: " + key; -// window.console && console.log(m) || alert(m); - }, - items: { - <% join(",\n", @menu) %> - } - }); + } + }); + }); + + $('.move-down').on('click', function( ev ){ + ev.preventDefault(); + var $nID = $(this).data('id'); + $.ajax({ + 'url' : '/contenido/ajax/document_move.html', + 'data' : { 's' : <% ref $section ? $section->id : 0 %>, 'id' : $nID, 'move' : 'down' }, + 'dataType' : 'json', + 'success' : function( data ){ + if ( data.error ) { + alert( data.error ); + } else if ( data.after ) { + var $nAfter = data.after; + $('#row-' + $nID).insertAfter('#row-' + $nAfter); + } + } + }); + }); + +% foreach my $class ( keys %document_classes ) { +% my $class_name = $class; +% $class_name =~ s/:/-/g; +% my ($prop) = grep { $_->{attr} eq 'status' } $class->new( $keeper )->structure; +% if ( ref $prop && exists $prop->{cases} && ref $prop->{cases} eq 'ARRAY' ) { +% if ( scalar @{$prop->{cases}} > 2 ) { + set_status( '.context-menu-<% $class_name %>', '<% $class_name %>' ); +% } else { + $('.context-menu-<% $class_name %>').on('click', function( ev ) { + var nID = parseInt($(this).data('id')); + set_status_toggle(ev, nID, '<% $class_name %>') + }); +% } % } % } });