1 |
480 |
ahitrov |
% if ( $object->id ) { |
2 |
|
|
<script type="text/javascript"> |
3 |
|
|
<!-- |
4 |
|
|
function <% $name %>_onAddTag(tag) { |
5 |
|
|
$.ajax({ |
6 |
|
|
'url' : '/contenido/tag/ajax/manage.html', |
7 |
|
|
'type' : 'GET', |
8 |
|
|
'data' : { 'action' : 'add', 'id' : <% $object->id %>, 'class' : '<% $object->class %>', 'tag' : tag }, |
9 |
|
|
'dataType' : 'json', |
10 |
|
|
'success' : function( data ) { |
11 |
|
|
if ( data.fallback ) { |
12 |
|
|
alert('Не могу добавить тег ' + tag + '. Откат'); |
13 |
|
|
$('#<% $name%>_text').removeTag(tag); |
14 |
|
|
} |
15 |
|
|
} |
16 |
|
|
}); |
17 |
|
|
} |
18 |
|
|
|
19 |
|
|
function <% $name %>_onRemoveTag(tag) { |
20 |
|
|
$.ajax({ |
21 |
|
|
'url' : '/contenido/tag/ajax/manage.html', |
22 |
|
|
'type' : 'GET', |
23 |
|
|
'data' : { 'action' : 'remove', 'id' : <% $object->id %>, 'class' : '<% $object->class %>', 'tag' : tag }, |
24 |
|
|
'dataType' : 'json', |
25 |
|
|
'success' : function( data ) { |
26 |
|
|
if ( data.fallback ) { |
27 |
|
|
alert('Не могу удалить тег ' + tag + '. Откат'); |
28 |
|
|
$('#<% $name%>_text').addTag(tag); |
29 |
|
|
} |
30 |
|
|
} |
31 |
|
|
}); |
32 |
|
|
} |
33 |
|
|
|
34 |
|
|
$(document).ready(function() { |
35 |
|
|
|
36 |
|
|
$('#<% $name %>_text').tagsInput({ |
37 |
|
|
'width' : 'auto', |
38 |
|
|
'height' : '60px', |
39 |
|
|
'minChars' : 3, |
40 |
|
|
'autocomplete_url' : '/contenido/tag/ajax/search.html?id=<% $object->id %>&class=<% $object->class %>', |
41 |
|
|
'onAddTag' : <% $name %>_onAddTag, |
42 |
|
|
'onRemoveTag' : <% $name %>_onRemoveTag, |
43 |
|
|
'defaultText' : 'Добавьте тег' |
44 |
|
|
}); |
45 |
|
|
|
46 |
|
|
% if ( @tags ) { |
47 |
|
|
$('#<% $name %>_text').importTags('<% join(',', map { $_->name } @tags) %>'); |
48 |
|
|
% } |
49 |
|
|
|
50 |
|
|
}); |
51 |
|
|
//--> |
52 |
|
|
</script> |
53 |
|
|
<div style="width:95%;"> |
54 |
|
|
<input type="text" name="<% $name %>" id="<% $name %>_text" placeholder="Tags" class="tm-input"/> |
55 |
482 |
ahitrov |
<div class="rem">После завершения ввода тега нажмите <Enter>. Если в процессе набора текста появится список тегов, среди которых присутствует набираемый тег, выберите тег из списка.</div> |
56 |
480 |
ahitrov |
</div> |
57 |
|
|
% } else { |
58 |
|
|
<div style="width:95%; padding:10px; border:1px solid green; background:#f0fff0"> |
59 |
|
|
<div style="color:green">Ввод тегов возможен только после сохранения документа</div> |
60 |
|
|
</div> |
61 |
|
|
% } |
62 |
|
|
<%once> |
63 |
|
|
|
64 |
|
|
use Data::Recursive::Encode; |
65 |
|
|
use JSON::XS; |
66 |
|
|
my $json = JSON::XS->new->utf8; |
67 |
|
|
|
68 |
|
|
</%once> |
69 |
|
|
<%args> |
70 |
|
|
|
71 |
|
|
$object |
72 |
|
|
$name => undef |
73 |
|
|
$check => undef |
74 |
|
|
$prop => {} |
75 |
|
|
|
76 |
|
|
</%args> |
77 |
|
|
<%init> |
78 |
|
|
|
79 |
|
|
my @tags; |
80 |
|
|
if ( $object->id ) { |
81 |
|
|
@tags = $keeper->get_documents( |
82 |
|
|
class => 'tag::Tag', |
83 |
|
|
lclass => 'tag::Cloud', |
84 |
|
|
ldest => $object->id, |
85 |
|
|
ldestclass => $object->class, |
86 |
|
|
); |
87 |
|
|
} |
88 |
|
|
my $value; |
89 |
|
|
unless ( $prop->{virtual} ) { |
90 |
|
|
if ( ref $object->$name ) { |
91 |
|
|
$value = $object->$name; |
92 |
|
|
} elsif ( $object->$name ) { |
93 |
|
|
$value = Data::Recursive::Encode->encode_utf8( $json->decode( $object->$name ) ); |
94 |
|
|
} |
95 |
|
|
} |
96 |
|
|
|
97 |
|
|
</%init> |