Personal tools
You are here: Home Zope&Plone Tips SlideShow表示不具合修正
Document Actions

SlideShow表示不具合修正

by maru last modified 2007-04-17 15:47

ATPhotoのSlideShowControlで次の写真等に移動すると、Title、breadcrumbs、Navigation等の表示がおかしくなるのを修正してみました。

【環境】

  • Zope-2.8.6-final (Linux)
  • Plone-2.1.3
  • ATPhoto-1-0-alpha1
  • FileSystemStorage-2.5rc1

 前回の大改造で後日に後回しとした表示関係の不具合(多分いぢらなくてもalpha1にある不具合だと思います)を修正しました。Javascriptで動いてるSlideShowControlにて、「1 next item>>」とかでPhotoを移動させるときに生じる不具合なんですが問題点を列挙すると以下のようになります。

  1. Titleの 「- maruz.net」が消滅する。
  2. breadcrumbsの末尾(現在地)が変わらない。
  3. Navigation上の自アイテムのタイトル、及びURLが変わらない。(IE特有)
  4. Navigation上の自アイテムのタイトル等は変わるが、resent_portretにATPhotoのアイテムがあるとそれの表示がおかしくなる。(Firefox特有)

【IEでの不具合ScreenShot(移動前と後)】
SlideShow表示不具合-移動前(IE)SlideShow表示不具合-移動後(IE)


【Firefoxでの不具合ScreenShot(移動前と後)】
SlideShow表示不具合-移動前(FF)SlideShow表示不具合-移動後(FF)


 ブラウザで不具合内容が違うのはもうイヤ・・・。頼むから統一してくれorz 

【表示ロジック解析】

 解析はこの前がっつりやったのであらかた見当はついてました。この問題となる表示切り替えロジックが入ってるところは以下の通り。

--- ブラウザタイトル変更(不具合の1) ---
・ [ZMI]/portal_skins/ATPhoto/atslidesnow.js: SlideShow_updateHTML()
→ document.titleに写真のタイトル”だけ”をガッツリ入れてるんだからそりゃ消える罠。

--- breadcrumbsの自アイテムタイトル変更(不具合の2) ---
・ [ZMI]/portal_skins/ATPhoto/atphoto.js: fixHTML()
・ [ZMI]/portal_skins/ATPhoto/batch.js: replaceInNodes()
→ fixHTML()でreplaceInNodes()を使用して変更をかけてる。そのfunction内で
対象要素(portal-breadcrumbs)は正常に引っ張ってきてるが、html.replace()
    がウマく動かない。正規表現の間違い?

--- Navigation上の自アイテムタイトル、URL変更(不具合の3,4) ---
・ 場所は(不具合の2)と一緒
→ replaceInNodes()で、変更対象要素(div.contenttype-atphoto)をcssQuery()で
全部引っ張ってきて換えてるんだから、Navigation以外にあればそりゃそこもおかしく
なる罠orz でもなんでIEだと全部かわらないんだ・・・。

【対策&修正ソース】

 ご多分に漏れずTry & Errorしまくり。取りあえず直しましたが、なんかもーちょっとウマイ方法ないかなぁ・・・。

問題点1解決策
単純に元の document.title から「 - 」以降の文字列を引っ張り出し、結合して代入するようにしたと。
問題点2解決策
あれこれ試してみましたがどーでもダメだったので、breadcrumbs末尾の<span>にIDを新設してダイレクトに書き換え。・・・変更はATPhoto内のみにしたかったんですけどねorz
問題点3,4解決策
変更対象要素は取りあえずcssQuery()で全部引っ張ってきて、Navigation内(parentNodeのclassNameに"navTreeItem"がある)にあるものだけを換えるように。あと、innerHTML等に代入する際、
nodes[i].childNodes[0].innerHTML = Batch.current.Title
みたいにやってみたんですけど、IEでは動くがFirefoxだとうんともすんとも言わずorz よって、仕様差分を吸収したらこうなりました。

 なんにもcustomしてない状態でもpatch当ては可能かと。・・・多分既存バグだと思うんですけどねぇ。