現在、J2 デスクトップの仕組みを調査中。とりあえず、さわやかなテーマを作ろうと思い、desktop-themesにあるblueをコピーして、sky を作る。そんで、流れを確認開始。まず、JSP (Velocityはサポートしてないような気もするけどどうなんだろ)に、
<script language="JavaScript" type="text/javascript"> function init() { jetspeed.initializeDesktop( '<%= desktop.getDesktopTheme() %>', de_jsessionid_url( '<%= desktop.getDesktopThemeRootUrl() %>' ) ); } function doRender( url, portletEntityId ) { jetspeed.doRender( url, portletEntityId ); } function doAction( url, portletEntityId, currentForm ) { jetspeed.doAction( url,portletEntityId, currentForm ); } dojo.event.connect( dojo, "loaded", "init" ); </script>
と言う感じであり、ページがロードされたところで、init()が呼ばれるのね。doRenderやdoActionは、表示されたポートレットから何かアクションなどが起こったら、呼ばれるものっぽい。jetspeed.initializeDesktopはjavascript/desktop/core/core.jsで定義されている。そこで、デスクトップテーマ名とか渡すのだね。そんで、
jetspeed.initializeDesktop = function( desktopThemeName, desktopThemeRootUrl ) { jetspeed.url.pathInitialize(); jetspeed.prefs.desktopTheme = desktopThemeName; jetspeed.prefs.desktopThemeRootUrl = desktopThemeRootUrl; jetspeed.loadPage(); //jetspeed.currentTaskbar = new jetspeed.ui.PortalTaskBar() ; };
という処理がされるみたい。そういえば、以前にみたときは、タスクバーみたいのが表示されていたような気がしたけど、ここでコメントアウトされたので、表示されなくなったのかね。jetspeed.url.pathInitialize();は、以下のような感じで、
jetspeed.url.pathInitialize = function( force ) { if ( ! force && jetspeed.url.path.initialized ) return; var baseTag = null; var baseTags = document.getElementsByTagName( "base" ); if ( baseTags && baseTags.length == 1 ) baseTag = new dojo.uri.Uri( baseTags[0].href ); else baseTag = new dojo.uri.Uri( window.location.href ); var basePath = baseTag.path; var sepPos = -1; for( var startPos =1 ; sepPos <= startPos ; startPos++ ) { sepPos = basePath.indexOf( "/", startPos ); if ( sepPos == -1 ) break; } var serverUri = ""; if ( baseTag.scheme != null) { serverUri += baseTag.scheme + ":"; } if ( baseTag.authority != null) { serverUri += "//" + baseTag.authority; } var jetspeedPath = null; if ( sepPos == -1 ) jetspeedPath = basePath; else jetspeedPath = basePath.substring( 0, sepPos ); //dojo.debug( "pathInitialize new-JETSPEED=" + jetspeedPath + " orig-JETSPEED=" + jetspeed.url.path.JETSPEED + " new-SERVER=" + serverUri + " orig-SERVER=" + document.location.protocol + "//" + document.location.host ); jetspeed.url.path.JETSPEED = jetspeedPath; jetspeed.url.path.SERVER = serverUri; jetspeed.url.path.AJAX_API = jetspeed.url.path.JETSPEED + "/ajaxapi"; jetspeed.url.path.DESKTOP = jetspeed.url.path.JETSPEED + "/desktop"; jetspeed.url.path.PORTLET = jetspeed.url.path.JETSPEED + "/portlet"; jetspeed.url.path.initialized = true; }
アクセスに必要なURLを設定しているみたいだね~。そんで、次にloadPage()にいって、
jetspeed.loadPage = function() { jetspeed.loadDebugWindow(); jetspeed.page = new jetspeed.om.Page(); jetspeed.page.retrievePsml(); };
PSMLを探し始めるようだ。
今日は時間切れでここまで・・・