add_extra_item (scripted)
if {$type ni {"DropZone" "ModeButton"}} {
error "unknown extra item type: $type"
}
set :${type}($name) $itemadd_menu (scripted)
if {$name in ${:Menus}} {
error "menu $name exists already"
}
if {[string match {[a-z]*} $name]} {
error "names must start with uppercase, provided name '$name'"
}
lappend :Menus $name
if {$label eq ""} {set label $name}
set :Menu($name) [list label $label]
add_menu_item (scripted)
set full_name $name
if {![regexp {^([^.]+)[.](.+)$} $name _ menu name]} {
error "menu item name '$name' not of the form Menu.Name"
}
if {$menu ni ${:Menus}} {
error "menu $menu does not exist"
}
if {[string match {[a-z]*} $name]} {
error "names must start with uppercase, provided name '$name'"
}
set group_name ""
regexp {^[^.]+[.]([^.]+)[.].*} $full_name _ group_name
regsub -all -- {[.]} $full_name - full_name
set item [dict merge [list label "#xowiki.menu-$full_name#" group $group_name] $item]
set updated 0
set newitems [list]
foreach {n i} [set :Menu($menu)] {
if {$n eq $name} {
lappend newitems $name $item
set updated 1
} else {
lappend newitems $n $i
}
}
if {$updated} {
set :Menu($menu) $newitems
} else {
lappend :Menu($menu) $name $item
}additional_sub_menu (scripted)
set :submenu_pages($kind) $pages
set :submenu_owner($kind) $owner
clear_menu (scripted)
set :Menu($menu) [list label [dict get [set :Menu($menu)] label]]
config=default (scripted)
set clipboard_size [::xowiki::clipboard size]
set clipboard_label [expr {$clipboard_size ? "Clipboard ($clipboard_size)" : "Clipboard"}]
:add_menu -name Package -label [::$package_id instance_name]
:add_menu -name New -label [_ xowiki.menu-New]
:add_menu -name Clipboard -label $clipboard_label
:add_menu -name Page -label [_ xowiki.menu-Page]
:config_menu=Package -folder_link $folder_link -return_url $return_url -package_id $package_id -bind_vars $bind_vars
:config_menu=New -folder_link $folder_link -return_url $return_url -package_id $package_id -bind_vars $bind_vars
:config_menu=Clipboard -folder_link $folder_link -return_url $return_url
:config_menu=Page -folder_link $folder_link -return_url $return_url -current_page $current_page
set upload_link [::$package_id make_link ${:current_folder} file-upload]
:add_extra_item -name dropzone1 -type DropZone -item [list url $upload_link label DropZone disposition File]
return {}config=test-item-exams (scripted)
:config=default -bind_vars $bind_vars -current_page $current_page -package_id $package_id -folder_link $folder_link -return_url $return_url
return {
{clear_menu -menu New}
{entry -name New.Item.ExamFolder -form en:folder.form -query p.source=ExamFolder&publish_status=ready}
}config=test-items (scripted)
:config=default -bind_vars $bind_vars -current_page $current_page -package_id $package_id -folder_link $folder_link -return_url $return_url
return {
{clear_menu -menu New}
{entry -name New.Item.TextInteraction -form en:edit-interaction.wf -query p.item_type=Text}
{entry -name New.Item.ShortTextInteraction -form en:edit-interaction.wf -query p.item_type=ShortText}
{entry -name New.Item.SCInteraction -form en:edit-interaction.wf -query p.item_type=SC}
{entry -name New.Item.MCInteraction -form en:edit-interaction.wf -query p.item_type=MC}
{entry -name New.Item.ReorderInteraction -form en:edit-interaction.wf -query p.item_type=Reorder}
{entry -name New.Item.UploadInteraction -form en:edit-interaction.wf -query p.item_type=Upload}
{entry -name New.Item.CompositeInteraction -form en:edit-interaction.wf -query p.item_type=Composite}
{entry -name New.Item.PoolQuestionInteraction -form en:edit-interaction.wf -query p.item_type=PoolQuestion}
{entry -name New.Grading.Scheme -form en:edit-grading-scheme.wf}
{entry -name New.App.OnlineExam -form en:online-exam.wf -disabled true}
{entry -name New.App.InclassQuiz -form en:inclass-quiz.wf -disabled true}
{entry -name New.App.InclassExam -form en:inclass-exam.wf -query p.realexam=1}
}config=xowf (scripted)
:config=default -bind_vars $bind_vars -current_page $current_page -package_id $package_id -folder_link $folder_link -return_url $return_url
return {
{entry -name New.Extra.Workflow -form en:Workflow.form}
{entry -name New.Extra.ExamFolder -form en:folder.form -query p.source=ExamFolder}
}config_menu=Clipboard (scripted)
if {[::xowiki::clipboard is_empty]} {
set clipboard_copy_link ""
set clipboard_export_link ""
set clipboard_content_link ""
set clipboard_clear_link ""
} else {
set clipboard_copy_link $folder_link?m=clipboard-copy
set clipboard_export_link $folder_link?m=clipboard-export
set clipboard_content_link $folder_link?m=clipboard-content
set clipboard_clear_link $folder_link?m=clipboard-clear
}
set clipboard_add_link [export_vars -base $folder_link?m=clipboard-add {return_url}]
:add_menu_item -name Clipboard.Add -item [list url \# listener [list click acs_ListBulkActionMultiFormClick("objects","$clipboard_add_link")]]
:add_menu_item -name Clipboard.Content -item [list url $clipboard_content_link]
:add_menu_item -name Clipboard.Clear -item [list url $clipboard_clear_link]
:add_menu_item -name Clipboard.Use.Copy -item [list url $clipboard_copy_link]
:add_menu_item -name Clipboard.Use.Export -item [list url $clipboard_export_link]config_menu=New (scripted)
dict with bind_vars {
set new_folder_link [::$package_id make_form_link -form en:folder.form -parent_id ${:parent_id} -return_url $return_url]
set new_page_link [::$package_id make_form_link -form en:page.form -parent_id ${:parent_id} -return_url $return_url]
set new_file_link [::$package_id make_link ::$package_id edit-new {object_type ::xowiki::File} parent_id return_url autoname template_file]
set new_form_link [::$package_id make_form_link -form en:form.form -parent_id ${:parent_id} -nls_language $nls_language -return_url $return_url]
}
:add_menu_item -name New.Page -item [list url $new_page_link]
:add_menu_item -name New.File -item [list url $new_file_link]
:add_menu_item -name New.Folder -item [list url $new_folder_link]
if {[::$package_id get_parameter MenuBarSymLinks:boolean 0]} {
dict with bind_vars {
set new_sym_link [::$package_id make_form_link -form en:link.form -parent_id ${:parent_id} -nls_language $nls_language -return_url $return_url]
}
:add_menu_item -name New.SymLink -item [list url $new_sym_link]
}
:add_menu_item -name New.Form -item [list url $new_form_link]config_menu=Package (scripted)
set index_link [::$package_id make_link -link $folder_link ${:current_folder} list]
set admin_link [::$package_id make_link -privilege admin -link admin/ ::$package_id]
dict with bind_vars {
set import_link [::$package_id make_link -privilege admin -link "admin/import" ::$package_id {} parent_id return_url]
set import_archive_link [::$package_id make_form_link -form en:import-archive.form -parent_id ${:parent_id}]
}
:add_menu_item -name Package.Startpage -item [list url $folder_link]
:add_menu_item -name Package.Toc -item [list url $index_link]
if {[::$package_id get_parameter with_notifications:boolean 1]} {
if {[::xo::cc user_id] != 0} {
set notifications_return_url [expr {[info exists return_url] ? $return_url : [ad_return_url]}]
set notification_type [notification::type::get_type_id -short_name xowiki_notif]
set notification_text "Subscribe to [::$package_id instance_name]"
set notification_subscribe_link [export_vars -base /notifications/request-new {{return_url $notifications_return_url}
{pretty_name $notification_text}
{type_id $notification_type}
{object_id $package_id}}]
:add_menu_item -name Package.Notifications -item [list url /notifications/manage]
}
}
:add_menu_item -name Package.Admin -item [list text #xowiki.admin# url $admin_link]
:add_menu_item -name Package.ImportDump -item [list url $import_link]
:add_menu_item -name Package.ImportArchive -item [list url $import_archive_link]config_menu=Page (scripted)
set package_id [$current_page package_id]
set edit_link [::$package_id make_link $current_page edit return_url]
set view_link [::$package_id make_link $current_page view return_url]
set delete_link [::$package_id make_link $current_page delete return_url]
set rev_link [::$package_id make_link $current_page revisions]
:add_menu_item -name Page.Edit -item [list text #xowiki.edit# url $edit_link]
:add_menu_item -name Page.View -item [list text #xowiki.menu-Page-View# url $view_link]
:add_menu_item -name Page.Delete -item [list text #xowiki.delete# url $delete_link]
:add_menu_item -name Page.Revisions -item [list text #xowiki.revisions# url $rev_link]
if {[acs_user::site_wide_admin_p]} {
set page_show_link [::$package_id make_link -privilege admin $current_page show-object return_url]
:add_menu_item -name Page.Show -item [list text "Show Object" url $page_show_link]
}content (scripted)
set result [list id [:id]]
foreach e ${:Menus} {
lappend result $e [list kind MenuButton {*}[set :Menu($e)]]
}
foreach e [:array name ModeButton] {
lappend result $e [list kind ModeButton {*}[set :ModeButton($e)]]
}
foreach e [:array name DropZone] {
lappend result $e [list kind DropZone {*}[set :DropZone($e)]]
}
return $resultcurrent_folder (setter)
dropzone (setter)
get_prop (scripted)
if {![dict exists $dict $key]} {
return $default
}
return [dict get $dict $key]id (setter)
init (scripted)
set :Menus [list]
:destroy_on_cleanup
parent_id (setter)
render-bootstrap (scripted)
set dict [:content]
set mb [::xowiki::BootstrapNavbar -id [:get_prop $dict id] -menubar [self] {
foreach {att value} $dict {
if {$att eq "id"} continue
switch [:get_prop $value kind] {
"DropZone" {
::xowiki::BootstrapNavbarDropzone -text [:get_prop $value label] -href [:get_prop $value url] -disposition [:get_prop $value disposition File] {}
}
"ModeButton" {
template::head::add_css -href "/resources/xotcl-core/titatoggle/titatoggle-dist.css"
::xowiki::BootstrapNavbarModeButton -text [:get_prop $value label] -href [:get_prop $value url] -button [:get_prop $value button admin] -on [:get_prop $value on] {}
}
"MenuButton" {
::xowiki::BootstrapNavbarDropdownMenu -text [:get_prop $value label] {
foreach {item_att item} $value {
if {[string match {[a-z]*} $item_att]} continue
::xowiki::BootstrapNavbarDropdownMenuItem -text [:get_prop $item label] -href [:get_prop $item url] -group [:get_prop $item group] -listener [:get_prop $item listener] {}
}
}
}
}
}}]
return [$mb asHTML]render-preferred (scripted)
switch [::template::CSS toolkit] {
bootstrap -
bootstrap5 {set menuBarRenderer render-bootstrap}
default {set menuBarRenderer render-yui}
}
:$menuBarRendererrender-yui (scripted)
set dict [:content]
set mb [::xowiki::YUIMenuBar -id [:get_prop $dict id] -configuration {
{autosubmenudisplay: false, keepopen: true, lazyload: false}
} {
foreach {menu_att menu} $dict {
if {$menu_att eq "id"} continue
set kind [:get_prop $menu kind]
if {$kind ne "MenuButton"} continue
::xowiki::YUIMenuBarItem -text [:get_prop $menu label] {
::xowiki::YUIMenu {
foreach {item_att item} $menu {
if {[string match {[a-z]*} $item_att]} continue
::xowiki::YUIMenuItem -text [:get_prop $item label] -href [:get_prop $item url] -group [:get_prop $item group] -listener [:get_prop $item listener] {}
}
}
}
}
}]
return [$mb asHTML]update_items (scripted)
set config_items [:config=$config -package_id $package_id -current_page $current_page -folder_link $folder_link -bind_vars $bind_vars -return_url $return_url]
set menu_entries [list {*}[::$package_id get_parameter ExtraMenuEntries {}] {*}$config_items {*}[${:current_folder} property extra_menu_entries]]
foreach me $menu_entries {
set kind [lindex $me 0]
if {[string index $kind 0] eq "#"} continue
set properties [lrange $me 1 end]
switch -- $kind {
clear_menu {
:clear_menu -menu [dict get $properties -menu]
}
form_link -
entry {
if {$kind eq "form_link"} {
ad_log_deprecated menu-entry $link entry
}
if {[dict exists $properties -link]} {
set link [dict get $properties -link]
} elseif {[dict exists $properties -form]} {
set q [expr {[dict exists $properties -query] ? "-query [dict get $properties -query]" : ""}]
dict with bind_vars {
set link [::$package_id make_form_link -form [dict get $properties -form] -parent_id ${:parent_id} -nls_language $nls_language -return_url $return_url {*}$q]
}
} elseif {[dict exists $properties -object_type]} {
set link [::$package_id make_link $package_id edit-new [list object_type [dict get $properties -object_type]] parent_id return_url autoname template_file]
} else {
:log "Warning: no link specified"
set link ""
}
if {[dict exists $properties -disabled] && [dict get $properties -disabled]} {
set link ""
}
set item [list url $link]
if {[dict exists $properties -label]} {
lappend item label [dict get $properties -label]
} else {
set locale [::xo::cc locale]
set dname [string map {. -} [dict get $properties -name]]
foreach message_key [list xowiki.menu-$dname xowf.menu-$dname] {
if {[lang::message::message_exists_p en_US $message_key]} {
lappend item label [lang::message::lookup $locale $message_key]
break
}
}
}
:add_menu_item -name [dict get $properties -name] -item $item
}
dropzone {
foreach {var default} {
name dropzone
uploader File
disposition File
label DropZone
} {
set $var $default
if {[dict exists $properties -$var]} {
set $var [dict get $properties -$var]
}
}
if {![info exists disposition] && [info exists uploader]} {
set disposition $uploader
}
set link [::$package_id make_link ${:parent_id} file-upload]
:add_extra_item -name $name -type DropZone -item [list url $link disposition $disposition label $label]
}
modebutton {
foreach {var default} {
name modebutton
button admin
label ""
} {
set $var $default
if {[dict exists $properties -$var]} {
set $var [dict get $properties -$var]
}
}
if {$label eq ""} {set label $button}
set state [::xowiki::mode::$button get]
set link [::$package_id make_link ${:parent_id} toggle-modebutton]
:add_extra_item -name $name -type ModeButton -item [list url $link on $state label $label]
}
config {}
default {
error "unknown kind of menu entry: $kind"
}
}
}