日々のコンピュータ情報の集積と整理

Dr.ウーパのコンピュータ備忘録

2015年3月20日金曜日

Blogger:JavaScript:新着情報を表示するガジェットを作成(3)-css用のクラス名を追加

イントロダクション

Google のブログサービス「Blogger」にて、サムネイル付きの新着情報の一覧を任意の件数表示できる「新着情報ガジェット」を作成していくことにしました。

前回:
Blogger:JavaScript:新着情報を表示するガジェットを作成(2)-記事タイトルのみの一覧を作成
http://upa-pc.blogspot.com/2015/03/blogger-new-post-list-gadget-javascript-2.html


今回は、前回作成した「記事タイトルのみの一覧」を作成する「新着情報ガジェット」にたいして、スタイルシート(CSS)によりデザインを指定しやすいように、class 属性を付与します。

新着情報を表示するガジェットを作成(3)-css用のクラス名を追加


css用のクラス名を追加した、記事タイトル(記事へのリンク付き)のみの一覧を作成する、新着情報ガジェットの HTML/JavaScript コードは次のようになります。

コード:

<div id="new-post-list-container">
新着読み込み中...
</div>

<script type="text/javascript">
<!--
    (function () {
        // --- Util ---

        // JavaScript動的挿入
        function addScript(src) {

            var script = document.createElement("script");
            script.setAttribute("type", "text/javascript");
            script.setAttribute("src", src);

            header_setChild(script);
        }

        // <head>取得
        function getHeader() {
            return document.getElementsByTagName("head")[0];
        }

        // <head>に子要素を追加
        function header_setChild(child) {
            var head = getHeader();
            head.appendChild(child);
        }


        // --- Main ---

        // *** 設定可能なパラメータ ここから ***
        var max_results = 5;            // 新着記事を表示する件数
        // 上限は 500 件です

        // *** 設定可能なパラメータ ここまで ***


        // 記事一覧作成のトリガー
        loadFeed();

        // Feed の読み込み
        function loadFeed() {
            var blogger_url = location.protocol + "//" + location.host;
            addScript(blogger_url +
            "/feeds/posts/summary?alt=json-in-script&callback=newpost_loader&max-results=" + max_results +
            "&start-index=1&redirect=false");
        }

    })();
    
    function newpost_loader(data) {

        // エントリーがある場合は、新着記事一覧の生成開始
        if (data.feed.entry) {
            if (data.feed.entry.length > 0) {
                createNewPostsList(data);
            }
        }

        // 新着記事一覧生成
        function createNewPostsList(data) {

            var obj_newPostList = document.createElement("div");
            obj_newPostList.setAttribute("class", "new-post-list-items");

            for (var i = 0; i < data.feed.entry.length; i++) {

                // リンク先の探索
                var href = "javascript:void(0);";
                for (var j = 0; j < data.feed.entry[i].link.length; j++) {
                    if (data.feed.entry[i].link[j].rel == "alternate") {
                        href = data.feed.entry[i].link[j].href;
                    }
                }


                // 全体の要素作成
                var obj_item = document.createElement("div");
                obj_item.setAttribute("class", "new-post-list-item");

                // 全体のリンク要素
                var obj_link = document.createElement("a");
                obj_link.setAttribute("href", href);
                obj_link.setAttribute("class", "new-post-list-item-link");
                obj_item.appendChild(obj_link);

                
                // 記事タイトル用要素作成
                var obj_title = document.createElement("div");
                obj_title.appendChild(document.createTextNode(data.feed.entry[i].title.$t));
                obj_title.setAttribute("class", "new-post-list-item-title");
                obj_link.appendChild(obj_title);


                // 項目を連結
                obj_newPostList.appendChild(obj_item);
            }
 
            
            // 画面上へ反映
            var obj_output = document.getElementById("new-post-list-container");
            obj_output.innerHTML = "";
            obj_output.appendChild(obj_newPostList);
        }
    }

//-->
</script>


実行結果:



作成された HTML 構造

    <div id="new-post-list-container">
        <div class="new-post-list-items">
            <div class="new-post-list-item">
                <a href="http://upa-pc.blogspot.com/2015/03/slideshare-transcript.html" class="new-post-list-item-link">
                    <div class="new-post-list-item-title">
                        SlideShare:時間が無い時には、Transcript が便利! - スライドの内容をざっとチェックできます!</div>
                </a>
            </div>

~以後、新着記事の数だけ繰り返しのため、省略~

        </div>
    </div>


このように、新着情報ガジェットの HTML 構造に、クラス名が付与されていることが分かります。


設置方法

(1) Blogger の設定のレイアウトにて、「ガジェットを追加」を行います。
(2) 追加するガジェットとして「HTML/JavaScript」ガジェットを選択します。

(3) タイトルに「新着情報」などと入力します。
(4) コンテンツに、上記の HTML/JavaScript コードを張り付けます。

(5) 「保存」をクリックします。
(6) プレビューを行い、期待通りの動作になっているか確認します。
(7) 新着情報ガジェットを配置したい位置へ移動した後、「配置を保存」をクリックします。


オプション設定

表示件数の変更

プログラム中の max_results の値を変更します。
例)10 件分の新着情報を表示する場合:

var max_results = 10;            // 新着記事を表示する件数


まとめ

今回は、前回作成した「記事タイトルのみの一覧」を作成する「新着情報ガジェット」にたいして、スタイルシート(CSS)によりデザインを指定しやすいように、class 属性を付与してみました。

次回は、遅延して Feed の読み込み処理が実施できるように、遅延実行機能を実装したいと思います。


次回:

Blogger:JavaScript:新着情報を表示するガジェットを作成(4)-遅延実行機能を追加
http://upa-pc.blogspot.com/2015/03/blogger-new-post-list-gadget-javascript-4.html







関連記事

関連記事を読み込み中...

同じラベルの記事を読み込み中...