Bivio::UI::XHTML::Widget::ForumTaskMenu
# Copyright (c) 2014 Bivio Software, Inc. All Rights Reserved.
# $Id$
package Bivio::UI::XHTML::Widget::ForumTaskMenu;
use strict;
use Bivio::Base 'XHTMLWidget.TaskMenu';
use Bivio::UI::ViewLanguageAUTOLOAD;
my($_TI) = b_use('Agent.TaskId');
my($_PARENT_MAP, $_PARENT_TASK) = _make_parent_map({
FORUM_WIKI_VIEW => [qw(
FORUM_WIKI_EDIT
FORUM_WIKI_NOT_FOUND
FORUM_WIKI_VERSIONS_LIST
FORUM_WIKI_VERSIONS_DIFF
SITE_WIKI_VIEW
)],
FORUM_MAIL_THREAD_ROOT_LIST => [qw(
FORUM_MAIL_THREAD_ROOT_LIST
FORUM_MAIL_THREAD_LIST
FORUM_MAIL_FORM
FORUM_MAIL_PART
FORUM_MAIL_SHOW_ORIGINAL_FILE
GROUP_MAIL_DELETE_FORM
FORUM_MAIL_BOUNCE_LIST
FORUM_MAIL_LIST
FORUM_MAIL_MSG
FORUM_PUBLIC_MAIL_LIST
FORUM_PUBLIC_MAIL_MSG
)],
FORUM_FILE_TREE_LIST => [qw(
FORUM_EASY_FORM
FORUM_FILE
FORUM_FILE_MANAGER
FORUM_FILE_MANAGER_AJAX
FORUM_FILE_VERSIONS_LIST
FORUM_FILE_CHANGE
FORUM_FILE_DELETE_PERMANENTLY_FORM
FORUM_FILE_OVERRIDE_LOCK
FORUM_FILE_RESTORE_FORM
FORUM_FILE_REVERT_FORM
FORUM_FOLDER_FILE_LIST
FORUM_FILE_UPLOAD_FROM_WYSIWYG
)],
FORUM_MOTION_LIST => [qw(
FORUM_MOTION_FORM
FORUM_MOTION_COMMENT
FORUM_MOTION_VOTE
FORUM_MOTION_VOTE_LIST
FORUM_MOTION_COMMENT_LIST
FORUM_MOTION_STATUS
FORUM_MOTION_COMMENT_DETAIL
FORUM_MOTION_IS_CLOSED
)],
FORUM_CALENDAR => [qw(
FORUM_CALENDAR_EVENT_DELETE
FORUM_CALENDAR_EVENT_DETAIL
FORUM_CALENDAR_EVENT_FORM
)],
FORUM_BLOG_LIST => [qw(
FORUM_BLOG_CREATE
FORUM_BLOG_EDIT
FORUM_BLOG_DETAIL
)],
FORUM_TUPLE_USE_LIST => [qw(
FORUM_TUPLE_DEF_EDIT
FORUM_TUPLE_DEF_LIST
FORUM_TUPLE_EDIT
FORUM_TUPLE_HISTORY
FORUM_TUPLE_LIST
FORUM_TUPLE_SLOT_TYPE_EDIT
FORUM_TUPLE_SLOT_TYPE_LIST
FORUM_TUPLE_USE_EDIT
FORUM_TUPLE_USE_LIST
)],
FORUM_CRM_THREAD_ROOT_LIST => [qw(
FORUM_CRM_FORM
)],
});
sub NEW_ARGS {
return [];
}
sub get_select_widget {
my($self) = @_;
return ($self, FORM(
DIV(
SELECT(
Join(
_options([
_tab_tasks(),
]),
),
'form-control',
{
ONCHANGE => 'document.location = this.value;',
},
),
'form-group',
),
'visible-xs',
)->put(cell_expand => 1));
}
sub initialize {
my($self) = @_;
return shift->put_unless_exists(
want_more_threshold => 5,
class => 'nav nav-tabs hidden-xs',
selected_class => 'active',
want_more_label => String('More'),
task_map => [
_tab_tasks(),
],
selected_item => [\&_selected_task],
cell_expand => 1,
)->SUPER::initialize(@_);
}
sub is_top_level_tab {
my($proto, $source) = @_;
return $_PARENT_MAP->{$source->req('task_id')->get_name};
}
sub _is_selected_task {
my($source, $name) = @_;
return _selected_task($source)->equals_by_name($name);
}
sub _make_parent_map {
my($map) = @_;
my($parents) = {};
my($res) = {};
foreach my $parent (keys(%$map)) {
$parents->{$parent} = 1;
foreach my $name (@{$map->{$parent}}) {
$res->{$name} = $_TI->from_name($parent);
}
}
return ($parents, $res);
}
sub _options {
my($tasks) = @_;
return [map(
If(['->can_user_execute_task', $_->{task_id}],
OPTION(
vs_text_as_prose(
'task_menu', 'title', 'noglyph',
$_->{label} || $_->{task_id},
),
{
VALUE => ['->format_uri', $_->{task_id}],
SELECTED => If([\&_is_selected_task, $_->{task_id}],
"selected"),
}
),
),
@$tasks,
)];
}
sub _selected_task {
my($source) = @_;
my($current) = $source->req('task_id');
return $_PARENT_TASK->{$current->get_name} || $current;
}
sub _tab_tasks {
return map(
+{
task_id => $_,
$_ eq 'FORUM_CALENDAR'
? (label => 'forum.calendar')
: $_ eq 'FORUM_MAIL_THREAD_ROOT_LIST'
? (label => 'forum.mail_thread_root_list')
: $_ eq 'FORUM_CRM_THREAD_ROOT_LIST'
? (label => 'forum.crm_thread_root_list')
: (),
},
qw(
FORUM_WIKI_VIEW
FORUM_MAIL_THREAD_ROOT_LIST
FORUM_FILE_TREE_LIST
FORUM_MOTION_LIST
FORUM_CALENDAR
FORUM_BLOG_LIST
FORUM_TUPLE_USE_LIST
FORUM_CRM_THREAD_ROOT_LIST
),
);
}
1;