maoring blog

このブログはセマンティックウェブ関連の技術的なあれこれを綴ったブログです。

javascriptとmicrodata(調査中)その4

前回まででmicrodataのitemtypeとitempropとその中身(itemvalue)を得ることが出来た。
今回はその目的のmicrodataが埋め込まれていた場合に,ポップアップでその中身を表示できるようにすることが目的だ。
まずどのポップアップを使うか。そしてどう認識させるか。
ポップアップも色々なものがあるので,軽量で拡張しやすいものを探すべし。

良さげな例を見つけた。
[jQuery] ヘルプメッセージをポップアップして表示する方法
コードをそのまま引用させて頂きます。(今回はjQuery ver.を使用します。)

(function($) {
  $.fn.popupHelp=function(config) {
    /** 
      * marginTop: 表示対象とウィンドウの高さの差分です。
      *   0を指定すると、上端が揃います。
      * marginLeft: 表示対象とウィンドウの横の差分です。
      *   0を指定すると、左端が揃います。
      * className: ウィンドウに設定するクラス名です。
      * speed: ウィンドウを表示する際の秒数[ms]です。
      */
    var defaults = { 
      marginTop: 0,
      marginLeft: 20, 
      className: "popup_help_window",
      speed: 300 
    }   

    var options = $.extend(defaults, config);

    // ヘルプウィンドウのオブジェクトを準備します。
    var popupObj = $("<p/>").addClass(defaults.className).appendTo($("body"));
    // popupObj.appendTo($("body"));

    return this.each(function() {

      $(this).mouseover(function() {
        // 表示対象にマウスが重なった時の処理です。

        // ウィンドウにメッセージを設定します。
        popupObj.text($(this).attr('data-message'));

        // ウィンドウのオフセットを計算します。
        var offsetTop = $(this).offset().top + defaults.marginTop;
        var offsetLeft = $(this).offset().left + defaults.marginLeft;

        // ウィンドウの位置を整え、表示します。
        popupObj.css({
          "top": offsetTop,
          "left": offsetLeft
        }).show(defaults.speed);

      }).mouseout(function() {
        // 表示対象にマウスが重なった時の処理です。
        // テキストを空にして、ウィンドウを隠します。
        popupObj.text("").hide("fast");
      }); 
    }); 
  };  
})(jQuery);

そしてcssは指定したclassとポップアップwindowについて記述。

.popup_help {
  padding: 0 3px;
  color: #66f;
  font-weight: bold;
  cursor: pointer;
}
.popup_help_window {
  max-width: 300px;
  position: absolute;
  padding: 6px 15px;
  background-color: #fff;
  border: 5px double #ccc;
  display: none;
  color: #63f;
  font-size: 15px;
  font-weight: bold;
  line-height: 1.5em;
  border-radius: 10px;
  box-shadow: 5px 5px 5px #ccc;
}

そしてhtmlでは上部に先ほどのcssjavascriptを挿入して $("span.popup_help").でどのタグとclassを使うかを指定,ついでにwindowの位置等を({"marginTop": 20, "marginLeft": 40});で設定して
(以下部分的に抜粋&一部こちらの環境に変更)body中に,span class="popup_help"を書くとこんな感じ。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title></title>
    <link rel="stylesheet" href="style.css" />
    <link rel="stylesheet" href="popup_help.css" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script src="jquery.popup_help.js"></script>
    <script>
      $(function() {
        // ?マークにマウスを載せるとヘルプメッセージを表示させるようにします。
        $("span.popup_help").popupHelp({"marginTop": 20, "marginLeft": 40});
      });
    </script>
 </head>
  <body>
    <header>
      <h1 id="header_title">ヘルプメッセージをポップアップして表示するサンプル<br />(プラグイン化)</h1>
    </header>
<div itemscope itemtype="http://schema.org/ScholarlyArticle">
<p> Kanehisa M, et al. Nucleic Acids Res. 40, D109-D114 (2012).</p>
[<span class="popup_help" itemprop='entryID' content='pmid:22080510'/ data-message="This is an article">
<a href="http://www.ncbi.nlm.nih.gov/pubmed/22080510">pubmed</a></span>]
</div>
  </body>
</html>

タグも"a"に限らないし,良いのではないだろうか。
(ちなみにjQueryプラグインバージョンもあり,ダウンロードも解説ページから出来て至れり尽くせり)
ちなみに実装例は以下の画像のとおりである。マウスでホバーするとにょにょにょーと表示してくれるのだ。

f:id:maoring:20130613121114p:plain

そしてここでは spanというタグとclass="popup_help"を認識しているが,これをmicrodataにしてしまいたいのだけど,んーどういった方法がいいだろうか(続く)