Revision 634
Date:
2016/12/19 18:37:20
Author:
ahitrov
Revision Log:
Tag search
Files:
Legend:
Added
Removed
Modified
utf8/plugins/tag/comps/contenido/tag/ajax/find.html
1
<% $json %>
2
<%once>
3
4
use JSON::XS;
5
6
</%once>
7
<%args>
8
9
$id => undef
10
$name => undef
11
12
</%args>
13
<%init>
14
15
warn Dumper \%ARGS if $DEBUG;
16
17
my %result;
18
if ( $id && $id =~ /^\d+$/ || $name && length( Encode::decode('utf-8', $name) ) > 1 ) {
19
my @tags = $keeper->get_documents(
20
class => 'tag::Tag',
21
status => 1,
22
$id ? ( id => [$id] ) : (name => '%'.$name.'%'),
23
ilike => 1,
24
order_by => 'name',
25
);
26
$result{success} = 1;
27
if ( @tags ) {
28
$result{html} = Encode::decode('utf-8', $m->scomp('/contenido/tag/components/block_tag_list.msn', tags => \@tags) );
29
} else {
30
$result{html} = '';
31
}
32
} else {
33
$result{error} = Encode::decode('utf-8', 'Недостаточные параметры для поиска тега');
34
}
35
my $json = encode_json \%result;
36
37
</%init>
utf8/plugins/tag/comps/contenido/tag/components/block_tag_objects.msn
30
30
</%doc>
31
31
</tr>
32
32
% }
33
</table>
33
34
% }
34
35
</fieldset>
35
36
<%args>
utf8/plugins/tag/comps/contenido/tag/components/block_tag_tabs.msn
1
1
<script>
2
2
$(function() {
3
var nActiveTab = getCookie( 'tag_tab_index' ) || 0;
3
4
$( "#tag_view_tabs" ).tabs({
5
active: nActiveTab,
4
6
beforeLoad: function( event, ui ) {
5
7
ui.jqXHR.fail(function() {
6
8
ui.panel.html(
7
9
"Couldn't load this tab. We'll try to fix this as soon as possible. " +
8
10
"If this wouldn't be a demo." );
9
11
});
12
},
13
activate: function( event, ui ) {
14
var nIndex = $(this).tabs( "option", "active" );
15
setCookie( 'tag_tab_index', nIndex );
10
16
}
11
17
});
18
$( "#tag-search" ).autocomplete({
19
minLength : 2,
20
source : '/contenido/ajax/document_search.html?class=tag::Tag',
21
select : function( event, ui )
22
{
23
var item = ui.item;
24
$('#tag-search-id').val( item.id );
25
$.ajax({
26
'url' : '/contenido/tag/ajax/find.html',
27
'data' : { 'id' : item.id },
28
'dataType' : 'json',
29
'success' : function( data ) {
30
if ( data.success ) {
31
$('#tag-found').html( data.html );
32
}
33
}
34
});
35
},
36
change : function( event, ui )
37
{
38
var sValue = $(this).val();
39
if ( sValue == '' ) {
40
$('#tag-search-id').val('');
41
$('#tag-found').html('');
42
}
43
}
44
});
45
$('form[name=tag-search-form]').on('submit', function( ev ){
46
ev.preventDefault();
47
var oForm = $(this)[0];
48
var sValue = oForm.elements['tag_search'].value;
49
if ( sValue == '' ) {
50
$('#tag-search-id').val('');
51
$('#tag-found').html('');
52
} else {
53
$.ajax({
54
'url' : '/contenido/tag/ajax/find.html',
55
'data' : { 'name' : sValue },
56
'dataType' : 'json',
57
'success' : function( data ) {
58
if ( data.success ) {
59
$('#tag-found').html( data.html );
60
}
61
}
62
});
63
}
64
});
12
65
});
13
66
</script>
14
67
<div id="tag_view_tabs">
…
…
20
73
% }
21
74
</ul>
22
75
<div id="tag_view_tabs-search">
23
<p>Тут поисковая форма будет</p>
76
<form enctype="multipart/form-data" method="POST" name="tag-search-form">
77
<input type="hidden" name="tag_search_id" id="tag-search-id" value="" autocomplete="off">
78
<div class="form-field">
79
<div class="prompt">Название тега:</div>
80
<input type="text" name="tag_search" id="tag-search" value="" autocomplete="off" style="width:85%; border:1px solid gray; padding:4px;"><input
81
type="submit" class="search_btn" value="">
82
</div>
83
</form>
84
<div id="tag-found"></div>
24
85
</div>
25
86
</div>
utf8/plugins/tag/comps/contenido/tag/components/form_tag_edit.msn
13
13
var sName = oForm.elements['name'].value;
14
14
var sAlias = oForm.elements['alias'].value;
15
15
var nStatus = oForm.elements['status'].value;
16
% if ( $state->{tag}->tag_structure eq 'tree' ) {
16
17
var nPid = oForm.elements['pid'].value;
18
% } else {
19
var nPid = 0;
20
% }
17
21
$('#tag-edit-error-prompt').hide();
18
22
$.ajax({
19
23
'url' : '/contenido/tag/ajax/tag_store.html',
…
…
62
66
<& /contenido/tag/components/inputs/tag_tree.msn, object => $object, name => 'pid', prop => $prop &>
63
67
% }
64
68
</div>
69
% if ( exists $props{abstr} ) {
70
% my $prop = $props{abstr};
71
% my $type = $prop->{type};
72
<div class="form-field">
73
<div class="prompt"><% $prop->{rusname} %><span class="desc">| Attr=<% $prop->{attr} %>; Type=<% $prop->{type} %></span></div>
74
<& "/contenido/components/inputs/$type.msn", object => $object, prop => $prop, name => 'abstr', check => $object->abstr &>
75
</div>
76
% }
65
77
<div id="tag-edit-error-prompt" class="error-prompt" style="display:none;"></div>
66
78
<div class="form-submit">
67
79
<input id="tag-edit-submit" type="button" class="input_btn" value="Сохранить">
utf8/plugins/tag/comps/contenido/tag/i/css/styles.css
15
15
.tag-plugin .error-prompt { margin:5px; padding:5px; }
16
16
17
17
.tag-plugin fieldset h3 { margin:5px 0; line-height:110%; }
18
.tag-plugin fieldset h3 span { font-weight:normal; color:gray; }
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.