[silva.ui][Sylvain Viollon] Fix/improve the screen selection whe...
[email protected] Tue, 12 Nov 2013 13:21:08 +0100
| Newsgroups | gmane.comp.web.zope.silva.cvs |
|---|---|
| Message-ID | <[email protected]> |
author: Sylvain Viollon
date: Tue Nov 12 13:21:02 2013 +0100
revision: 679:b25256efebbd in silva.ui
branch:
details: https://hg.infrae.com/silva.ui?cmd=changeset;node=b25256efebbd
modified: src/silva/ui/rest/base.py src/silva/ui/static/js/smi.navigation.js src/silva/ui/static/js/smi.navigation.min.js src/silva/ui/static/js/smi.workspace.js src/silva/ui/static/js/smi.workspace.min.js
added:
removed:
log: Fix/improve the screen selection when using the navigation.
diffstat:
src/silva/ui/rest/base.py | 4 +++-
src/silva/ui/static/js/smi.navigation.js | 24 ++++++++++++++++--------
src/silva/ui/static/js/smi.navigation.min.js | 2 +-
src/silva/ui/static/js/smi.workspace.js | 12 +++++++-----
src/silva/ui/static/js/smi.workspace.min.js | 2 +-
5 files changed, 28 insertions(+), 16 deletions(-)
diffs (124 lines):
diff -r 2fcac38d25e3 -r b25256efebbd src/silva/ui/rest/base.py
--- a/src/silva/ui/rest/base.py Mon Nov 11 16:40:31 2013 +0100
+++ b/src/silva/ui/rest/base.py Tue Nov 12 13:21:02 2013 +0100
@@ -143,6 +143,7 @@
screen = self.payload()
except PageResult as error:
screen = error.get_payload(self)
+ navigation = self.get_navigation()
metadata = {
'ifaces': screen.get('ifaces', []),
'title': {
@@ -161,10 +162,11 @@
}
if not IRoot.providedBy(self.context):
metadata['up'] = self.get_menu_parent()
+ navigation['screen'] = metadata['up'].get('screen')
return {'content': {'ifaces': ['screen'],
'metadata': metadata,
'screen': screen},
- 'navigation': self.get_navigation()}
+ 'navigation': navigation}
class PageWithTemplateREST(PageREST):
diff -r 2fcac38d25e3 -r b25256efebbd src/silva/ui/static/js/smi.navigation.js
--- a/src/silva/ui/static/js/smi.navigation.js Mon Nov 11 16:40:31 2013 +0100
+++ b/src/silva/ui/static/js/smi.navigation.js Tue Nov 12 13:21:02 2013 +0100
@@ -3,11 +3,12 @@
* Folder navigation tree using JSTree plugin.
*/
var NavigationManager = function(smi, options) {
- var $navigation = $(options.navigation.selector);
- var $tree = $navigation.children('.tree');
- var root_url = options.navigation.root_url;
- var url = new jsontemplate.Template(options.navigation.url, {});
- var parents_url = new jsontemplate.Template(options.navigation.parents_url, {});
+ var $navigation = $(options.navigation.selector),
+ $tree = $navigation.children('.tree'),
+ screen = 'content',
+ root_url = options.navigation.root_url,
+ url = new jsontemplate.Template(options.navigation.url, {}),
+ parents_url = new jsontemplate.Template(options.navigation.parents_url, {});
/**
* Scroll the tree container horizontally to allow for
@@ -129,7 +130,7 @@
// Open view on click
$tree.delegate('a', 'click', function(event) {
- smi.open_screen($(this).parent().data('jstree').path);
+ smi.open_screen($(this).parent().data('jstree').path, screen);
return false;
});
@@ -151,10 +152,17 @@
page: function(data) {
if (data.navigation != undefined) {
// Manage navigation modifications.
- if (data.navigation.invalidation != undefined)
+ if (data.navigation.invalidation != undefined) {
invalidate(data.navigation.invalidation);
- if (data.navigation.current != undefined)
+ };
+ if (data.navigation.current != undefined) {
open(data.navigation.current);
+ }
+ if (data.navigation.screen) {
+ screen = data.navigation.screen;
+ } else {
+ screen = smi.opening.screen;
+ };
};
return null;
}
diff -r 2fcac38d25e3 -r b25256efebbd src/silva/ui/static/js/smi.navigation.min.js
--- a/src/silva/ui/static/js/smi.navigation.min.js Mon Nov 11 16:40:31 2013 +0100
+++ b/src/silva/ui/static/js/smi.navigation.min.js Tue Nov 12 13:21:02 2013 +0100
@@ -1,1 +1,1 @@
-(function($,infrae,jsontemplate){var NavigationManager=function(smi,options){var $navigation=$(options.navigation.selector),$tree=$navigation.children(".tree"),root_url=options.navigation.root_url,url=new jsontemplate.Template(options.navigation.url,{});new jsontemplate.Template(options.navigation.parents_url,{});var scroll=function(node,depth){return node.each(function(){0>depth&&(depth=0),$tree.scrollLeft(21*depth)})},open=function(parents){function open_node_chain(remaining){var parent_node=$("#"+remaining[0]),left=remaining.slice(1);return parent_node.length>0?(left.length>0?$tree.jstree("open_node",parent_node,function(){open_node_chain(left)}):$tree.jstree("open_node",parent_node,function(){$tree.jstree("select_node",parent_node,!0)}),!0):!1}open_node_chain(parents)||$tree.jstree("d
eselect_all")},remove=function(info){if(void 0!==info.target){var $node=$("#"+info.target,$tree);$node.length>0&&$tree.jstree("delete_node",$node)}},add=function(info){if(void 0!==info.paren
t){var $parent=$("#"+info.parent,$tree);$parent.length>0&&$tree.jstree("refresh",$parent)}},invalidate=function(data){data.length>0&&infrae.utils.each(data,function(datum){switch(datum.action){case"remove":remove(datum.info);break;case"add":case"update":add(datum.info)}})};return $tree.jstree({ui:{select_limit:1},core:{animation:100},plugins:["json_data","ui","hotkeys"],json_data:{ajax:{url:function(node){return-1==node?root_url:url.expand({path:node.data("jstree").path})}}}}),$tree.bind("select_node.jstree",function(event,data){scroll($(this),data.rslt.obj.parents("ul").length-2)}),$tree.bind("open_node.jstree",function(event,data){scroll($(this),data.rslt.obj.parents("ul").length-2)}),$tree.bind("close_node.jstree",function(event,data){scroll($(this),data.rslt.obj.parents("ul").length-3
)}),$tree.delegate("a","click",function(){return smi.open_screen($(this).parent().data("jstree").path),!1}),infrae.ui.selection.disable($navigation),$tree.jstree("disable_hotkeys"),$navigati
on.bind("blur-keyboard",function(){$tree.jstree("disable_hotkeys")}),$navigation.bind("focus-keyboard",function(){$tree.jstree("enable_hotkeys"),$tree.focus()}),smi.shortcuts.create("navigation",$tree),{page:function(data){return void 0!=data.navigation&&(void 0!=data.navigation.invalidation&&invalidate(data.navigation.invalidation),void 0!=data.navigation.current&&open(data.navigation.current)),null}}};$.extend(infrae.smi.plugins,{navigation:NavigationManager})})(jQuery,infrae,jsontemplate);
\ No newline at end of file
+(function($,infrae,jsontemplate){var NavigationManager=function(smi,options){var $navigation=$(options.navigation.selector),$tree=$navigation.children(".tree"),screen="content",root_url=options.navigation.root_url,url=new jsontemplate.Template(options.navigation.url,{});new jsontemplate.Template(options.navigation.parents_url,{});var scroll=function(node,depth){return node.each(function(){0>depth&&(depth=0),$tree.scrollLeft(21*depth)})},open=function(parents){function open_node_chain(remaining){var parent_node=$("#"+remaining[0]),left=remaining.slice(1);return parent_node.length>0?(left.length>0?$tree.jstree("open_node",parent_node,function(){open_node_chain(left)}):$tree.jstree("open_node",parent_node,function(){$tree.jstree("select_node",parent_node,!0)}),!0):!1}open_node_chain(parents)
||$tree.jstree("deselect_all")},remove=function(info){if(void 0!==info.target){var $node=$("#"+info.target,$tree);$node.length>0&&$tree.jstree("delete_node",$node)}},add=function(info){if(vo
id 0!==info.parent){var $parent=$("#"+info.parent,$tree);$parent.length>0&&$tree.jstree("refresh",$parent)}},invalidate=function(data){data.length>0&&infrae.utils.each(data,function(datum){switch(datum.action){case"remove":remove(datum.info);break;case"add":case"update":add(datum.info)}})};return $tree.jstree({ui:{select_limit:1},core:{animation:100},plugins:["json_data","ui","hotkeys"],json_data:{ajax:{url:function(node){return-1==node?root_url:url.expand({path:node.data("jstree").path})}}}}),$tree.bind("select_node.jstree",function(event,data){scroll($(this),data.rslt.obj.parents("ul").length-2)}),$tree.bind("open_node.jstree",function(event,data){scroll($(this),data.rslt.obj.parents("ul").length-2)}),$tree.bind("close_node.jstree",function(event,data){scroll($(this),data.rslt.obj.paren
ts("ul").length-3)}),$tree.delegate("a","click",function(){return smi.open_screen($(this).parent().data("jstree").path,screen),!1}),infrae.ui.selection.disable($navigation),$tree.jstree("dis
able_hotkeys"),$navigation.bind("blur-keyboard",function(){$tree.jstree("disable_hotkeys")}),$navigation.bind("focus-keyboard",function(){$tree.jstree("enable_hotkeys"),$tree.focus()}),smi.shortcuts.create("navigation",$tree),{page:function(data){return void 0!=data.navigation&&(void 0!=data.navigation.invalidation&&invalidate(data.navigation.invalidation),void 0!=data.navigation.current&&open(data.navigation.current),screen=data.navigation.screen?data.navigation.screen:smi.opening.screen),null}}};$.extend(infrae.smi.plugins,{navigation:NavigationManager})})(jQuery,infrae,jsontemplate);
\ No newline at end of file
diff -r 2fcac38d25e3 -r b25256efebbd src/silva/ui/static/js/smi.workspace.js
--- a/src/silva/ui/static/js/smi.workspace.js Mon Nov 11 16:40:31 2013 +0100
+++ b/src/silva/ui/static/js/smi.workspace.js Tue Nov 12 13:21:02 2013 +0100
@@ -2,15 +2,17 @@
(function($, jsontemplate, infrae) {
var SCROLLBARS_SIZE = 0;
+
$(document).ready(function() {
SCROLLBARS_SIZE = (function() {
- var $scroll_div = $('<div style="width:100px; height:50px; position:absolute; top:-9999px; left:-9999px; visibility:hidden; overflow:hidden;"><div style="width:100%; height:100px;"></div></div>');
+ var $scroll_div = $('<div style="width:100px; height:50px; position:absolute; top:-9999px; left:-9999px; visibility:hidden; overflow:hidden;"><div style="width:100%; height:100px;"></div></div>'),
+ outer_width,
+ sb_width;
+
$('body').append($scroll_div);
-
- var outer_width = $scroll_div[0].offsetWidth;
+ outer_width = $scroll_div[0].offsetWidth;
$scroll_div.css('overflow', 'scroll');
sb_width = outer_width - $scroll_div[0].clientWidth;
-
$scroll_div.remove();
return sb_width;
})();
@@ -397,7 +399,7 @@
if (data.up.path) {
$parent.attr('href', data.up.path);
};
- $parent.attr('rel', data.up.screen || smi.opened.tab);
+ $parent.attr('rel', data.up.screen || smi.opening.screen);
$parent.removeClass('ui-state-disabled');
$parent.addClass('ui-state-default');
} else {
diff -r 2fcac38d25e3 -r b25256efebbd src/silva/ui/static/js/smi.workspace.min.js
--- a/src/silva/ui/static/js/smi.workspace.min.js Mon Nov 11 16:40:31 2013 +0100
+++ b/src/silva/ui/static/js/smi.workspace.min.js Tue Nov 12 13:21:02 2013 +0100
@@ -1,1 +1,1 @@
-(function($,jsontemplate,infrae){var SCROLLBARS_SIZE=0;$(document).ready(function(){SCROLLBARS_SIZE=function(){var $scroll_div=$('<div style="width:100px; height:50px; position:absolute; top:-9999px; left:-9999px; visibility:hidden; overflow:hidden;"><div style="width:100%; height:100px;"></div></div>');$("body").append($scroll_div);var outer_width=$scroll_div[0].offsetWidth;return $scroll_div.css("overflow","scroll"),sb_width=outer_width-$scroll_div[0].clientWidth,$scroll_div.remove(),sb_width}()}),infrae.views.view({iface:"preview",name:"content",factory:function($content){var resolution_fixed=!1,resolution_height=0,resolution_width=0,max_height=0,max_width=0,resize=function($iframe){$iframe.height(Math.min(max_height,resolution_height)),$iframe.width(Math.min(max_width,resolution_width
))};return{template_data:!0,template_nocache:!0,iframe:!0,resize_iframe:function(width,height){return max_width=width,max_height=height,resolution_fixed?(resize(this.$iframe),!0):!1},set_res
olution:function(width,height){resolution_fixed=!0,resolution_height=height,resolution_width=+width+SCROLLBARS_SIZE,resize(this.$iframe)},clear_resolution:function(){resolution_fixed=!1,this.$iframe.trigger("resize")},cleanup:function(){$content.empty()}}}}),infrae.views.view({iface:"preview",name:"toolbar",factory:function($content,data,smi,view){var actions=data.menu.actions,resolutions=smi.options.preview?smi.options.preview.resolutions:[],have_actions=actions&&actions.entries.length;return{jsont:'{.section have_actions}<div class="actions content-toolbar"><ol></ol></div>{.end}{.section resolutions}<div class="view-toolbar resolution-preview"><select>{.repeated section @}<option value={resolution|htmltag}>{name}</option>{.end}</select></div>{.end}',have_actions:have_actions,resolutions
:resolutions,render:function(){have_actions&&$content.find(".content-toolbar ol").render({data:actions}),resolutions.length&&$content.find(".resolution-preview select").on("change",function(
){var value=$(this).attr("value"),resolution=value.match(/(\d*)x(\d*)/);resolution?view.set_resolution(resolution[1],resolution[2]):view.clear_resolution()})},cleanup:function(){$content.empty()}}}}),infrae.views.view({iface:"redirect",factory:function($content,data,smi){return{render:function(){smi.open_screen(data.path,data.screen)}}}});var text_template=new jsontemplate.Template('<div id="smi-text"><div class="smi-text-content">{html}</div></div>',{});infrae.views.view({iface:"text-overlay",factory:function($content,data){var $text=$(text_template.expand(data)),$overlay=$('<div class="ui-widget-overlay"></div>'),clear=function(event){return $(event.target).is("a")?void 0:($text.remove(),$overlay.remove(),!1)};return{render:function(){$overlay.click(clear),$text.click(clear),$("body").a
ppend($overlay),$("body").append($text)}}}}),infrae.views.view({iface:"view",factory:function($content,data){return{render:function(){window.open(data.url)}}}}),infrae.views.view({iface:"mes
sage",factory:function($content,data){return{render:function(){return infrae.ui.ConfirmationDialog({title:data.title,message:data.message,not_cancellable:!0})}}}}),infrae.views.view({iface:"title",factory:function($content,data,smi){return{jsont:'<ins class="icon"></ins>{data.title|html}',render:function(){var name="Silva";smi.options.theme&&smi.options.theme.name&&(name=smi.options.theme.name),infrae.ui.icon($content.children("ins"),data.icon),$.browser.msie||$("head > title").html(name+" - "+data.title)}}}}),infrae.views.view({iface:"menu",factory:function($content,data){var tabs=$content.hasClass("tabs"),$opened=$([]),create=function(info,top_level){var $tab=$("<li><a></a></li>"),$link=$tab.children("a");if(tabs&&(top_level?(info.screen?$link.addClass("top-screen"):$link.addClass("top-
label"),$link.addClass("top-entry"),$tab.addClass("top-level")):$tab.addClass("sub-level")),info.name?$link.html("<span>"+info.name+"</span>"):info.logo&&$link.html('<ins class="tab-logo '+i
nfo.logo+'"/>'),info.screen?($link.addClass("open-screen"),$link.attr("rel",info.screen)):info.action?($link.addClass("open-action"),$link.attr("rel",info.action)):info.url&&($link.attr("href",info.url),info.target&&$link.attr("target",info.target)),info.icon){var icon_class="tab-icon";info.action&&(icon_class="action-icon"),$link.addClass("ui-state-default"),$link.prepend('<div class="'+icon_class+'"><ins class="ui-icon ui-icon-'+info.icon+'"></ins></div>')}if(info.active&&$link.addClass("active"),info.description&&$link.attr("title",info.description),info.accesskey&&$link.attr("accesskey",info.accesskey),info.trigger&&$link.addClass(info.trigger),info.entries){var $container=$('<ol class="subtabs"></ol>'),$opener=$('<div class="subtab-icon"><ins></ins></div>'),$trigger=info.screen&&top_
level?$opener:$link,close=function(exclude){var contained=[],uncontained=[],container=$container.get(0);$opened.each(function(){this===container&&!exclude||$.contains(this,container)?contain
ed.push(this):uncontained.push(this)}),$(uncontained).fadeOut("fast"),$opened=$(contained),$opened=exclude?$(contained):$(contained).add(container)};$.each(info.entries,function(i,entry){$container.append(create(entry))}),$container.bind("mouseleave",function(){close(!0)}),$container.bind("click",function(){close(!0)}),$trigger.bind(top_level?"click":"mouseenter",function(){var origin=$link.offset().left,width=$container.width(),available=$(document).width();if(top_level)available>origin+width?$container.css("left",0):$container.css("right",0);else{var padding=$link.width();available>origin+padding+width?$container.css("left",padding):$container.css("right",width-5),$container.css("top",0)}return close(!1),$container.show(),!1}),$link.prepend($opener),$tab.append($container)}return $tab};
return{render:function(){$.each(data.entries,function(i,info){$content.append(create(info,!0))}),$content.tipsy({delegate:"a"}),infrae.ui.selection.disable($content),tabs||$content.children(
"li:last").addClass("last-action")},cleanup:function(){$content.unbind("open-menu"),$content.unbind(".tipsy"),$content.empty()}}}}),infrae.views.view({iface:"object",name:"header",factory:function($content,data,smi,url,view){var make_menu=function($menu,data){data?(($menu.is("ol")?$menu:$menu.find("ol")).render({data:data}),$menu.show()):$menu.hide()},make_all_menu=function($metadata,data,compact){if(make_menu($metadata.children(".user-menu"),data.user),compact){var entries=[];data.content&&(entries=entries.concat(data.content.entries)),data.view&&(entries=entries.concat(data.view.entries)),make_menu($metadata.find(".view-actions"),void 0),make_menu($metadata.children(".content-tabs"),void 0),make_menu($metadata.find(".compact-tabs"),{ifaces:["menu"],entries:[{logo:"tab-options",entries:e
ntries}]})}else make_menu($metadata.find(".view-actions"),data.view),make_menu($metadata.children(".content-tabs"),data.content),make_menu($metadata.find(".compact-tabs"),void 0)};return{ren
der:function(){var $metadata=$content.children(".metadata"),$parent=$content.find("a.parent"),compact=$content.hasClass("compact-header");$metadata.children("h2").render({data:data.title,args:[smi,view]}),$metadata.children("#content-url").attr("href",url.expand({path:data.path})),make_all_menu($metadata,data.menu,compact),$content.find(".admin-actions").tipsy({delegate:"a"}),$content.children(".toolbar").render({data:data,name:"toolbar",args:[smi,view]}),data.up?(data.up.path&&$parent.attr("href",data.up.path),$parent.attr("rel",data.up.screen||smi.opened.tab),$parent.removeClass("ui-state-disabled"),$parent.addClass("ui-state-default")):($parent.addClass("ui-state-disabled"),$parent.removeClass("ui-state-default")),$(window).bind("fullscreen-resize-smi.default-header",function(event,inf
o){make_all_menu($metadata,data.menu,info.active)})},cleanup:function(){$content.find(".admin-actions").unbind(".tipsy"),$(window).unbind("fullscreen-resize-smi.default-header")}}}}),infrae.
views.view({iface:"object",name:"toolbar",factory:function($content,data){var actions=data.menu.actions,have_actions=actions&&actions.entries.length;return{jsont:'{.section have_actions}<div class="actions content-toolbar"><ol></ol></div>{.end}',have_actions:have_actions,render:function(){have_actions&&$content.find(".content-toolbar ol").render({data:actions})},cleanup:function(){$content.empty()}}}})})(jQuery,jsontemplate,infrae);
\ No newline at end of file
+(function($,jsontemplate,infrae){var SCROLLBARS_SIZE=0;$(document).ready(function(){SCROLLBARS_SIZE=function(){var outer_width,sb_width,$scroll_div=$('<div style="width:100px; height:50px; position:absolute; top:-9999px; left:-9999px; visibility:hidden; overflow:hidden;"><div style="width:100%; height:100px;"></div></div>');return $("body").append($scroll_div),outer_width=$scroll_div[0].offsetWidth,$scroll_div.css("overflow","scroll"),sb_width=outer_width-$scroll_div[0].clientWidth,$scroll_div.remove(),sb_width}()}),infrae.views.view({iface:"preview",name:"content",factory:function($content){var resolution_fixed=!1,resolution_height=0,resolution_width=0,max_height=0,max_width=0,resize=function($iframe){$iframe.height(Math.min(max_height,resolution_height)),$iframe.width(Math.min(max_width
,resolution_width))};return{template_data:!0,template_nocache:!0,iframe:!0,resize_iframe:function(width,height){return max_width=width,max_height=height,resolution_fixed?(resize(this.$iframe
),!0):!1},set_resolution:function(width,height){resolution_fixed=!0,resolution_height=height,resolution_width=+width+SCROLLBARS_SIZE,resize(this.$iframe)},clear_resolution:function(){resolution_fixed=!1,this.$iframe.trigger("resize")},cleanup:function(){$content.empty()}}}}),infrae.views.view({iface:"preview",name:"toolbar",factory:function($content,data,smi,view){var actions=data.menu.actions,resolutions=smi.options.preview?smi.options.preview.resolutions:[],have_actions=actions&&actions.entries.length;return{jsont:'{.section have_actions}<div class="actions content-toolbar"><ol></ol></div>{.end}{.section resolutions}<div class="view-toolbar resolution-preview"><select>{.repeated section @}<option value={resolution|htmltag}>{name}</option>{.end}</select></div>{.end}',have_actions:have_ac
tions,resolutions:resolutions,render:function(){have_actions&&$content.find(".content-toolbar ol").render({data:actions}),resolutions.length&&$content.find(".resolution-preview select").on("
change",function(){var value=$(this).attr("value"),resolution=value.match(/(\d*)x(\d*)/);resolution?view.set_resolution(resolution[1],resolution[2]):view.clear_resolution()})},cleanup:function(){$content.empty()}}}}),infrae.views.view({iface:"redirect",factory:function($content,data,smi){return{render:function(){smi.open_screen(data.path,data.screen)}}}});var text_template=new jsontemplate.Template('<div id="smi-text"><div class="smi-text-content">{html}</div></div>',{});infrae.views.view({iface:"text-overlay",factory:function($content,data){var $text=$(text_template.expand(data)),$overlay=$('<div class="ui-widget-overlay"></div>'),clear=function(event){return $(event.target).is("a")?void 0:($text.remove(),$overlay.remove(),!1)};return{render:function(){$overlay.click(clear),$text.click(c
lear),$("body").append($overlay),$("body").append($text)}}}}),infrae.views.view({iface:"view",factory:function($content,data){return{render:function(){window.open(data.url)}}}}),infrae.views
.view({iface:"message",factory:function($content,data){return{render:function(){return infrae.ui.ConfirmationDialog({title:data.title,message:data.message,not_cancellable:!0})}}}}),infrae.views.view({iface:"title",factory:function($content,data,smi){return{jsont:'<ins class="icon"></ins>{data.title|html}',render:function(){var name="Silva";smi.options.theme&&smi.options.theme.name&&(name=smi.options.theme.name),infrae.ui.icon($content.children("ins"),data.icon),$.browser.msie||$("head > title").html(name+" - "+data.title)}}}}),infrae.views.view({iface:"menu",factory:function($content,data){var tabs=$content.hasClass("tabs"),$opened=$([]),create=function(info,top_level){var $tab=$("<li><a></a></li>"),$link=$tab.children("a");if(tabs&&(top_level?(info.screen?$link.addClass("top-screen"):$li
nk.addClass("top-label"),$link.addClass("top-entry"),$tab.addClass("top-level")):$tab.addClass("sub-level")),info.name?$link.html("<span>"+info.name+"</span>"):info.logo&&$link.html('<ins cl
ass="tab-logo '+info.logo+'"/>'),info.screen?($link.addClass("open-screen"),$link.attr("rel",info.screen)):info.action?($link.addClass("open-action"),$link.attr("rel",info.action)):info.url&&($link.attr("href",info.url),info.target&&$link.attr("target",info.target)),info.icon){var icon_class="tab-icon";info.action&&(icon_class="action-icon"),$link.addClass("ui-state-default"),$link.prepend('<div class="'+icon_class+'"><ins class="ui-icon ui-icon-'+info.icon+'"></ins></div>')}if(info.active&&$link.addClass("active"),info.description&&$link.attr("title",info.description),info.accesskey&&$link.attr("accesskey",info.accesskey),info.trigger&&$link.addClass(info.trigger),info.entries){var $container=$('<ol class="subtabs"></ol>'),$opener=$('<div class="subtab-icon"><ins></ins></div>'),$trigger=
info.screen&&top_level?$opener:$link,close=function(exclude){var contained=[],uncontained=[],container=$container.get(0);$opened.each(function(){this===container&&!exclude||$.contains(this,c
ontainer)?contained.push(this):uncontained.push(this)}),$(uncontained).fadeOut("fast"),$opened=$(contained),$opened=exclude?$(contained):$(contained).add(container)};$.each(info.entries,function(i,entry){$container.append(create(entry))}),$container.bind("mouseleave",function(){close(!0)}),$container.bind("click",function(){close(!0)}),$trigger.bind(top_level?"click":"mouseenter",function(){var origin=$link.offset().left,width=$container.width(),available=$(document).width();if(top_level)available>origin+width?$container.css("left",0):$container.css("right",0);else{var padding=$link.width();available>origin+padding+width?$container.css("left",padding):$container.css("right",width-5),$container.css("top",0)}return close(!1),$container.show(),!1}),$link.prepend($opener),$tab.append($contain
er)}return $tab};return{render:function(){$.each(data.entries,function(i,info){$content.append(create(info,!0))}),$content.tipsy({delegate:"a"}),infrae.ui.selection.disable($content),tabs||$
content.children("li:last").addClass("last-action")},cleanup:function(){$content.unbind("open-menu"),$content.unbind(".tipsy"),$content.empty()}}}}),infrae.views.view({iface:"object",name:"header",factory:function($content,data,smi,url,view){var make_menu=function($menu,data){data?(($menu.is("ol")?$menu:$menu.find("ol")).render({data:data}),$menu.show()):$menu.hide()},make_all_menu=function($metadata,data,compact){if(make_menu($metadata.children(".user-menu"),data.user),compact){var entries=[];data.content&&(entries=entries.concat(data.content.entries)),data.view&&(entries=entries.concat(data.view.entries)),make_menu($metadata.find(".view-actions"),void 0),make_menu($metadata.children(".content-tabs"),void 0),make_menu($metadata.find(".compact-tabs"),{ifaces:["menu"],entries:[{logo:"tab-o
ptions",entries:entries}]})}else make_menu($metadata.find(".view-actions"),data.view),make_menu($metadata.children(".content-tabs"),data.content),make_menu($metadata.find(".compact-tabs"),vo
id 0)};return{render:function(){var $metadata=$content.children(".metadata"),$parent=$content.find("a.parent"),compact=$content.hasClass("compact-header");$metadata.children("h2").render({data:data.title,args:[smi,view]}),$metadata.children("#content-url").attr("href",url.expand({path:data.path})),make_all_menu($metadata,data.menu,compact),$content.find(".admin-actions").tipsy({delegate:"a"}),$content.children(".toolbar").render({data:data,name:"toolbar",args:[smi,view]}),data.up?(data.up.path&&$parent.attr("href",data.up.path),$parent.attr("rel",data.up.screen||smi.opening.screen),$parent.removeClass("ui-state-disabled"),$parent.addClass("ui-state-default")):($parent.addClass("ui-state-disabled"),$parent.removeClass("ui-state-default")),$(window).bind("fullscreen-resize-smi.default-heade
r",function(event,info){make_all_menu($metadata,data.menu,info.active)})},cleanup:function(){$content.find(".admin-actions").unbind(".tipsy"),$(window).unbind("fullscreen-resize-smi.default-
header")}}}}),infrae.views.view({iface:"object",name:"toolbar",factory:function($content,data){var actions=data.menu.actions,have_actions=actions&&actions.entries.length;return{jsont:'{.section have_actions}<div class="actions content-toolbar"><ol></ol></div>{.end}',have_actions:have_actions,render:function(){have_actions&&$content.find(".content-toolbar ol").render({data:actions})},cleanup:function(){$content.empty()}}}})})(jQuery,jsontemplate,infrae);
\ No newline at end of file