Wednesday, March 28, 2012

Membuat Halaman Muka Blog Tersendiri (Tanpa Posting)

Tip: Membuat Halaman Muka Blog Tersendiri, Tanpa Posting

Sebuah impian mungkin, bagi kalian untuk memiliki halaman muka blog tersendiri yang terbebas dari daftar posting yang telah diterbitkan. Dulu Saya juga begitu, sampai Saya mempelajari tag kondisional Blogger lebih jauh. Kali ini Saya akan membagikannya kepada kalian tentang bagaimana cara menghilangkan semua posting dan menambahkan pesan selamat datang di halaman muka. Yang kita butuhkan pada dasarnya hanya satu jenis tag kondisional, yaitu tag kondisional halaman muka seperti ini:

<b:if cond='data:blog.url == data:blog.homepageUrl'>

Pertama-tama masuklah ke menu Tema kemudian klik Edit HTML dan klik Lanjutkan:

Edit HTML Blogger
Mengedit HTML

Temukan kode yang kurang lebih tampak seperti ini:

<b:section class='main' id='main' showaddelement='no'>
  <b:widget id='Blog1' locked='true' title='Posting Blog' type='Blog'/>
</b:section>

Tepat di atas kode tersebut, letakkan kode ini:

<b:if cond='data:blog.url == data:blog.homepageUrl'>
  <b:section class='main' id='homepage'></b:section>
<b:else/>

dan tepat di bawahnya, letakkan kode ini:

</b:if>

sehingga hasilnya akan menjadi seperti ini:

<b:if cond='data:blog.url == data:blog.homepageUrl'><b:section class='main' id='homepage'></b:section><b:else/><b:section class='main' id='main' showaddelement='no'>
    <b:widget id='Blog1' locked='true' title='Posting Blog' type='Blog'/>
  </b:section></b:if>

Seperti yang kalian lihat bahwa apa yang kalian lakukan sebenarnya hanyalah menggandakan elemen <b:section> dimana salah satu hanya akan tampil di halaman muka, sedangkan satunya lagi hanya akan tampil selain di halaman muka.

Klik Simpan Tema. Sekarang masuklah ke halaman Tata Letak. Jika berhasil, seharusnya widget posting akan menghilang, digantikan oleh sebuah navigasi untuk menambahkan widget baru seperti ini:

Widget posting menghilang, dan sebuah elemen untuk menambahkan widget baru akan tampil seperti halnya pada sidebar blog.
Widget posting akan menghilang, dan sebuah elemen untuk menambahkan widget baru akan tampil seperti halnya pada sidebar blog.

Dari elemen itu Anda bisa menambahkan widget yang hanya akan ditampilkan pada halaman muka. Widget bisa berupa apa saja. Misalnya seperti teks ucapan selamat datang seperti gambar di atas, widget daftar isi, slideshow otomatis, atau yang lainnya.

Catatan: Menerapkan manipulasi ini akan membuat fitur pratinjau pada editor posting tidak berfungsi. Sebenarnya bukannya tidak berfungsi, hanya saja saat Anda mengeklik tombol Pratinjau, yang akan Anda lihat selalu berupa widget yang Anda tambahkan, sedangkan posting yang seharusnya ingin Anda lihat tidak akan tampil.

Labels: , ,

Tuesday, March 27, 2012

Penanganan JavaScript pada Peramban yang Menonaktifkan JavaScript

Ini adalah tentang bagaimana cara kita menangani masalah-masalah umum yang akan timbul pada situs-situs yang membutuhkan pengaktifan JavaScript. Katakanlah kita memiliki sebuah menu navigasi bertingkat dengan efek JavaScript. Namun biasanya syarat yang harus kita penuhi agar efek animasi berjalan dengan baik adalah dengan menghilangkan setiap item yang akan ditampilkan/disembunyikan dengan efek JavaScript:

nav ul ul {
  display:none;
}

Anda bisa mempelajari maksud dari kode di atas pada artikel ini.

Tidak masalah (bahkan sebuah keharusan) jika kita menghilangkan elemen dengan deklarasi display:none karena JavaScript selalu bisa menampilkannya dengan efek yang baik. Tapi bagaimana jika JavaScript dinonaktifkan?

Opsi pada peramban Firefox: Menonaktifkan JavaScript
Menonaktifkan JavaScript

Kita tidak membicarakan tentang mengapa mereka melakukan itu, tapi katakanlah jika itu dilakukan, apa yang akan terjadi?
Yang terjadi adalah sub-sub menu navigasi yang seharusnya muncul saat induk menu disorot akan mati karena tidak ada mesin yang bisa membuat mereka muncul kecuali JavaScript. Dan sekarang JavaScript telah dinonaktifkan.

Hal yang biasanya kita lakukan adalah menuliskan sebuah pesan yang akan muncul hanya jika JavaScript dinonaktifkan. Itu bisa dilakukan dengan <noscript>:

<noscript>
    <div id="js-message">Anda harus mengaktifkan JavaScript untuk melihat halaman ini!</div>
</noscript>

Dan mungkin sedikit kode CSS untuk membuatnya tampak sebagai tabir yang akan menutupi seluruh layar:

#js-message {
  position:fixed !important;
  position:absolute;
  top:0px;
  right:0px;
  bottom:0px;
  left:0px;
  z-index:999;
  background-color:black;
  padding-top:120px;
  font:bold 100px Arial,Sans-Serif;
  color:red;
  text-align:center;
}

Tapi Saya rasa cara itu tidak sepenuhnya keren jika setiap kali kita menonaktifkan JavaScript, sebuah tabir/overlay besar akan muncul menutupi seluruh layar. Kita harap kita bisa memberikan fallback yang baik tanpa harus menghilangkan apa yang seharusnya bisa kita lihat. Kita mencoba untuk melihat kepada CSS.
Kita harap, jika JavaScript dinonaktifkan, maka CSS bisa menggantikannya untuk menampilkan/menyembunyikan elemen dengan baik, meski dengan efek yang sangat terbatas.
Berikut ini adalah sebuah kerangka menu navigasi bertingkat sederhana. Terdiri dari empat menu utama dan dua level submenu:

<nav>
    <ul>
        <li><a href="#">Beranda</a></li>
        <li><a href="#">Profil</a>
            <ul class="fallback">
                <li><a href="#">Dropdown 1</a></li>
                <li><a href="#">Dropdown 2</a></li>
                <li><a href="#">Dropdown 3</a>
                    <ul class="fallback">
                        <li><a href="#">Dropdown 1</a></li>
                        <li><a href="#">Dropdown 2</a></li>
                        <li><a href="#">Dropdown 3</a></li>
                        <li><a href="#">Dropdown 4</a></li>
                    </ul>
                </li>
                <li><a href="#">Dropdown 4</a></li>
            </ul>
        </li>
        <li><a href="#">Jurnal</a></li>
        <li><a href="#">Komentar</a></li>
    </ul>
</nav>

Seperti yang Anda lihat bahwa Saya menambahkan kelas/class fallback pada masing-masing anak menu (tidak harus bernama fallback. Itu hanya contoh).
Kelas tersebut akan kita gunakan pada kode CSS hanya jika JavaScript dinonaktifkan. Dalam artian: Kita akan menghilangkan kelas tersebut dengan JavaScript saat JavaScript diakifkan. Dan ini bisa dilakukan dengan cara yang sangat sederhana:

$('nav ul.fallback').removeClass('fallback');

Pada dasarnya inilah yang akan kita lakukan: Saat JavaScript dinonaktifkan, kita harap kita bisa mengakses elemen yang menghilang untuk ditampilkan dan disembunyikan dengan CSS tanpa harus mengganggu animasi JavaScript saat JavaScript diaktifkan. Itu bisa dilakukan dengan cara bergiliran. Saat JavaScript diaktifkan, kita harap kita bisa memberikan efek animasi yang baik saat sub-sub menu ditampilkan dan disembunyikan:

$('nav li').hover(function() {
    $(this).children('ul').sliedDown('fast');
}, function() {
    $(this).children('ul').slideUp('fast');
});

Namun saat JavaScript dinonaktifkan, kita tetap bisa memastikan bahwa sub-sub menu tersebut bisa tampil dan hilang dengan baik:

nav li ul {
  display:none;
}

nav li:hover > ul.fallback {
  display:block;
}

Gambaran Selengkapnya

Ini adalah gambaran selengkapnya. Saat JavaScript diaktifkan, maka kita akan menghilangkan kelas fallback pada semua elemen <ul>:

$('nav ul.fallback').removeClass('fallback');

Dengan begitu kode CSS pada bagian ini tidak akan bisa menampilkan dan menyembunyikan sub-sub menu, karena kelas fallback pada elemen submenu sudah menghilang:

nav li ul {
  /* ... */
  display:none;
}

nav li:hover > ul.fallback {
  display:block; /* Ini sudah tidak berlaku lagi, karena class="fallback" telah dihilangkan */
}

Namun itu tidak mengapa, karena saat ini JavaScript sedang diaktifkan, maka efek animasi JavaScript bisa kita dijalankan:

$('nav li').hover(function() {
    $(this).children('ul').slideDown('fast');
}, function() {
    $(this).children('ul').slideUp('fast');
});

Dan saat JavaScript dinonaktifkan, maka fungsi-fungsi animasi dalam JavaScript tidak akan bekerja. Diutamakan pada bagian ini, sebagai perhatian utama kita:

$('nav ul.fallback').removeClass('fallback');

Oleh karena itu kelas fallback akan tetap berada pada tempatnya. Sehingga kode CSS pada bagian ini akan bekerja:

nav li:hover > ul.fallback {
  display:block;
}

Coba Anda buka halaman ini kemudian perhatikan bahwa saat ini efek animasi .slideDown() dan .slideUp() masih bisa bekerja. Setelah itu nonaktifkan JavaScript pada peramban Anda dan segarkan halaman tersebut. Anda akan melihat bahwa sub-sub menu masih bisa ditampilkan dan disembunyikan meski dengan efek yang sangat terbatas:

Lihat Demo

Kode Selengkapnya

HTML

<nav>
    <ul>
        <li><a href="#">Beranda</a></li>
        <li><a href="#">Profil</a>
            <ul class="fallback">
                <li><a href="#">Dropdown 1</a></li>
                <li><a href="#">Dropdown 2</a></li>
                <li><a href="#">Dropdown 3</a>
                    <ul class="fallback">
                        <li><a href="#">Dropdown 1</a></li>
                        <li><a href="#">Dropdown 2</a></li>
                        <li><a href="#">Dropdown 3</a></li>
                        <li><a href="#">Dropdown 4</a></li>
                    </ul>
                </li>
                <li><a href="#">Dropdown 4</a></li>
            </ul>
        </li>
        <li><a href="#">Jurnal</a></li>
        <li><a href="#">Komentar</a></li>
    </ul>
</nav>

CSS

nav {
  font:bold 12px Arial,Sans-Serif;   
  background-color:black;
  margin:0px 0px;
  padding:0px 0px;
}

nav ul {
  margin:0px 0px;
  padding:0px 0px;
  display:block;
  position:relative;
  height:30px;
}

nav li {
  margin:0px 0px;
  padding:0px 0px;
  float:left;
  display:inline;
  list-style:none;
  position:relative;    
}

nav li a {
  display:block;
  margin:0px 0px;
  padding:0px 14px;
  color:white;
  text-decoration:none;
  line-height:30px;
  height:30px;
}

nav a:hover {
  background-color:#456;   
}

nav ul ul {
  width:120px;
  height:auto;
  position:absolute;
  top:100%;
  left:0px;
  z-ndex:10;
  background-color:black;    
  display:none;
}

nav ul ul li {
  float:none;
  display:block;   
}

nav ul ul ul {
  top:0px;
  left:100%;
}

/* CSS Fallback */
nav li:hover > ul.fallback {
  display:block;   
}

jQuery

$(function() {
    // Singkirkan class "fallback" pada anak <ul>
    // sehingga kode nav li:hover > ul.fallback {display:block;} tidak akan bekerja.
    $('ul.fallback').removeClass('fallback');

    // Lakukan seperti biasa mulai dari sini...
    $('nav#nav li').hover(function() {
        $(this).children('ul').slideDown('fast');
    }, function() {
        $(this).children('ul').slideUp('fast');
    });
});

Lainnya

Selain itu, beberapa elemen seperti panel juga lebih banyak mengutamakan .hide() atau .css('display', 'none') untuk menyembunyikannya dibandingkan dengan menuliskan display:none secara langsung dengan CSS. Ini akan membuat panel tertutup saat JavaScript diaktifkan dan bisa terbuka saat sebuah pemicu (misalnya tombol) diklik. Tapi saat JavaScript dinonaktifkan, tombol-tombol tersebut tidak lagi berfungsi untuk membuka/menutup panel, sementara panel yang tadinya tertutup kini akan tetap terbuka. Kelihatannya memang jelek, tapi setidaknya kita masih tetap bisa melihat isinya.

Labels: , , , ,

Monday, March 26, 2012

Blogger JSON · Content List Base

<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<title>Blogger Table of Contents</title>
<script>
/**
 * CONTENT LIST
 *
 * Created by    : Copycat91 On July 30th 2009
 * Website       : http://infotentangblog.blogspot.com/
 * Original post : http://infotentangblog.blogspot.com/2009/08/membuat-daftar-isi-blog.html
 *
 * Special thanks to :
 *     *) http://www.blogger.com for the free blog hosting
 *     *) http://buzz.blogger.com for the tutorial to convert feed->json
 *     *) NetBeans IDE 6.5 for the free IDE
 *     *) And other tutorials about HTML, javascript, json, etc I have read
 */

var all_entries, entries, all_labels = [], json;
function createEntries(json) {
    var entries_obj_list = [];
    var entries = json.feed.entry;
    for (var i = 0; i < entries.length; i++) {
        var entry = entries[i];
        var entry_obj = new Object;
        entry_obj.id = entry.id.$t;
        entry_obj.title = entry.title.$t;
        entry_obj.href = getEntryHref(entry);
        entry_obj.content = getEntryContent(entry);
        entry_obj.labels = getEntryLabels(entry);
        entry_obj.published = entry.published.$t.substr(0, 10);
        entries_obj_list.push(entry_obj);
    }
    return entries_obj_list;
}

function getEntryById(id) {
    for (var i = 0; i < all_entries.length; i++) {
        if (all_entries[i].id == id) {
            return all_entries[i];
        }
    }
    return null;
}

function getEntryContent(entry) {
    return entry.content ? entry.content.$t : entry.summary.$t;
}

function getEntryHref(entry) {
    var links = entry.link;
    for (var i = 0; i < links.length; i++) {
        if (links[i].rel == "alternate") {
            return links[i].href;
        }
    }
    return null;
}

function getEntryLabels(entry) {
    var labels = [];
    var categories = entry.category;
    if (!categories) {
        return labels;
    }
    for (var i = 0; i < categories.length; i++) {
        var label = categories[i].term;
        if (!isExists(all_labels, label)) {
            all_labels.push(label);
        } // while collecting all labels
        labels.push(label);
    }
    return labels;
}

function getSomeEntries(cmp) {
    entries = [];
    for (var i = 0; i < all_entries.length; i++) {
        var entry = all_entries[i];
        if (cmp(entry)) {
            entries.push(entry);
        }
    }
    return entries;
}

function isExists(array, val) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] == val) {
            return true;
        }
    }
    return false;
}

function onLoadFeed(json_arg) {
    json = json_arg;
    setTimeout("onLoadFeedTimeout()", 100);
}

function onLoadFeedTimeout() {
    entries = createEntries(json);
    all_entries = entries;
    showHeaderOption();
    showEntries(entries);
}

function showEntries(entries) {
    var s = "";
    for (var i = 0; i < entries.length; i++) {
        var entry = entries[i];
        s += "<p>";
        s += titleCode(entry);
        s += "<span style='font-size:80%;'>" + footlabel + " " + labelsCode(entry);
        s += " " + footon + " " + publishedDateCode(entry) + "</span>";
        s += "</p>";
    }
    document.getElementById("cl_content_list").innerHTML = s;
}

function showHeaderOption() {
    var s = "";
    s += "<table cellpadding='3'>";
    s += "<tr>";
    s += "<td style='text-align:right;'>" + sortby;
    s += "<td><select onchange='sortBy(this.value.substr(1), this.value.substr(0,1))' style='width:100%;'>";
    s += "<option value='0published'>" + timepub + "</option>";
    s += "<option value='1title'>" + ptitle + "</option>";
    s += "</select>";
    s += "<tr>";
    s += "<td style='text-align:right'>" + labelsort;
    s += "<td><select onchange='showPostsWLabel(this.value)' id='cl_labels' style='width:100%;'>";
    s += "<option value='*'>" + showall + "</option>";
    for (var i = 0; i < all_labels.length; i++) {
        var label = all_labels[i];
        s += "<option value='" + label + "'>" + label + "</option>";
    }
    s += "</select>";
    s += "<tr>";
    s += "<td><td><button onclick='showPostsWLabel(\"*\");'>" + showall + "</button>";
    s += "</table>";
    document.getElementById("cl_option").innerHTML = s;
}

function shortenContent(entry) {
    var content = entry.content;
    content = stripHTML(content);
    if (content.length > cl_summlen) {
        content = content.substr(0, cl_summlen);
        if (content.charAt(content.length - 1) != " ") {
            content = content.substr(0, content.lastIndexOf(" ") + 1);
        }
        content += "...";
    }
    entry.content = content;
    return content;
}

function showHideSummary(obj) {
    var p = obj.nextSibling;
    while (p.className != "cl_content") {
        p = p.nextSibling;
    }
    var id = p.id;
    var entry = getEntryById(id);
    var content = shortenContent(entry);
    if (p.innerHTML == "") {
        p.innerHTML = content + "<br/>";
        obj.innerHTML = "&#9660;";
        obj.title = hidesum;
    } else {
        p.innerHTML = "";
        obj.innerHTML = "&#9658;";
        obj.title = showsum;
    }
}

function sortBy(attribute, asc) {
    var cmp = function(entry1, entry2) {
        if (entry1[attribute] == entry2[attribute]) {
            return 0;
        }
        else if (asc == '1') {
            return entry1[attribute].toLowerCase() > entry2[attribute].toLowerCase();
        }
        else {
            return entry1[attribute].toLowerCase() < entry2[attribute].toLowerCase();
        }
    }
    entries.sort(cmp);
    showEntries(entries);
}

function stripHTML(s) {
    var c;
    var intag = false;
    var newstr = "";
    for (var i = 0; i < s.length; i++) {
        c = s.charAt(i);
        if (c == "<") {
            intag = true;
        }
        else if (c == ">") {
            intag = false;
        }
        if (c == ">") {
            newstr += " ";
        }
        else if (!intag) {
            newstr += c;
        }
    }
    return newstr;
}

// Functions Returning HTML Code
function labelsCode(entry) {
    var s = "";
    if (entry.labels.length == 0) {
        return " (tidak berlabel) ";
    }
    for (var j = 0; j < entry.labels.length; j++) {
        var label = entry.labels[j];
        s += "<a href='javascript:showPostsWLabel(\"" + label + "\")' ";
        s += "title='" + showlabel + " " + label + "'>" + label + "</a>";
        s += (j != entry.labels.length - 1) ? ", " : "";
    }
    return s;
}

function publishedDateCode(entry) {
    var y = entry.published.substr(0, 4);
    var m = entry.published.substr(5, 2);
    var d = entry.published.substr(8, 2);
    var s = "<a href='javascript:showPostsInDate(\"" + y + "\")' title='" + y + "'>" + y + "</a>/";
    s += "<a href='javascript:showPostsInDate(\"" + y + "-" + m + "\")' title='" + y + "/" + m + "'>" + m + "</a>/";
    s += "<a href='javascript:showPostsInDate(\"" + y + "-" + m + "-" + d + "\")'title='" + y + "/" + m + "/" + d + "'>" + d + "</a>";
    return s;
}

function titleCode(entry) {
    var s = "<span title='" + showsum + "' onclick='showHideSummary(this)' style='cursor:pointer'>&#9658;</span> ";
    s += "<b><a href='" + entry.href + "'>" + entry.title + "</a></b><br/>";
    s += "<span class='cl_content' id='" + entry.id + "'></span>";
    return s;
}

// Selection Functions
function showPostsInDate(date) {
    var cmp = function(entry) {
        return entry.published.indexOf(date) == 0;
    }
    var entries = getSomeEntries(cmp);
    showEntries(entries);
}

function showPostsWLabel(label) {
    var cmp = function(entry) {
        if (label == "*") {
            return true;
        }
        for (var i = 0; i < entry.labels.length; i++) {
            if (entry.labels[i] == label) {
                return true;
            }
        }
        return false;
    }
    var entries = getSomeEntries(cmp);
    showEntries(entries);
    document.getElementById("cl_labels").value = label;
}

</script>
</head>
<body>
<div id="cl_option">Loading...</div>
<div id="cl_content_list"></div>
<script>
var cl_summlen = 500,
    timepub    = "Tanggal Publikasi",
    ptitle     = "Judul Artikel",
    sortby     = "Urut berdasarkan:",
    labelsort  = "Filter artikel dengan label:",
    showall    = "Lihat Semua",
    hidesum    = "Sembunyikan Rangkuman...",
    showsum    = "Tampilkan Rangkuman...",
    footlabel  = "Kategori:",
    footon     = "di",
    showlabel  = "Lihat posing dengan label";
</script>
<script src="//dte-feed.blogspot.com/feeds/posts/default?alt=json-in-script&callback=onLoadFeed&max-results=9999"></script>
</body>
</html>

Labels: , , ,

CSS Only, Zebra Striped PRE Tag

CSS Only, Zebra Striped PRE Tag
pre {
  display:block;
  font:normal 12px/22px Monaco,Monospace !important;
  color:#CFDBEC;
  background-color:#2f2f2f;
  background-image:-webkit-repeating-linear-gradient(top, #444 0px, #444 22px, #2f2f2f 22px, #2f2f2f 44px);
  background-image:-moz-repeating-linear-gradient(top, #444 0px, #444 22px, #2f2f2f 22px, #2f2f2f 44px);
  background-image:-ms-repeating-linear-gradient(top, #444 0px, #444 22px, #2f2f2f 22px, #2f2f2f 44px);
  background-image:-o-repeating-linear-gradient(top, #444 0px, #444 22px, #2f2f2f 22px, #2f2f2f 44px);
  background-image:repeating-linear-gradient(top, #444 0px, #444 22px, #2f2f2f 22px, #2f2f2f 44px);
  padding:0em 1em;
  overflow:auto;
}

Labels: ,

Sunday, March 25, 2012

Membatasi Jumlah Posting pada Halaman Label

Gambar Address Bar

Masuklah ke menu Tema kemudian klik Edit HTML dan klik Lanjutkan. Cek Expand Tema Widget agar seluruh elemen pembangun posting tampil:

Edit HTML Blogger
Mengedit HTML

Temukan kode apa saja yang tampak kurang lebih seperti ini (fokuslah pada atribut expr:href, beberapa atribut lain mungkin juga ditemukan di dalam tag yang sama misalnya expr:dir):

<a expr:href='data:label.url'>

TIP: Tekan CTRL + F kemudian ketik expr:href='data:label.url untuk mempermudah pencarian.

Ubah nilai expr:href menjadi seperti ini:

<a expr:href='data:label.url + &quot;?max-results=5&quot;'>

5 adalah batasan maksimal posting yang akan ditampilkan.

Labels:

Blogger JSON · Table of Content Base

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
<title>Blogger Table of Content</title>
<script>
// ----------------------------------------------------------------------------
// Author: Abu Farhan - http://www.abu-farhan.com
// Optimized by Taufik Nurrohman - http://dte-feed.blogspot.com
// ----------------------------------------------------------------------------
var postTitle = new Array(),
    postUrl = new Array(),
    postDate = new Array(),
    postLabels = new Array(),
    postNew = new Array(),
    newText = " - <strong><em style='color:red;'>Baru!!</em></strong>",
    tocLoaded = false,
    postFilter = "",
    numberfeed = 0;

function loadtoc(a) {
    function b() {
        if ("entry" in a.feed) {
            var d = a.feed.entry.length;
            numberfeed = d;
            ii = 0;
            for (var h = 0; h < d; h++) {
                var n = a.feed.entry[h],
                    e = n.title.$t,
                    m = n.published.$t.substring(0, 10),
                    j;
                for (var g = 0; g < n.link.length; g++) {
                    if (n.link[g].rel == "alternate") {
                        j = n.link[g].href;
                        break
                    }
                }
                var o = "";
                for (var g = 0; g < n.link.length; g++) {
                    if (n.link[g].rel == "enclosure") {
                        o = n.link[g].href;
                        break
                    }
                }
                var c = "";
                if ("category" in n) {
                    for (var g = 0; g < n.category.length; g++) {
                        c = n.category[g].term;
                        var f = c.lastIndexOf(";");
                        if (f != -1) {
                            c = c.substring(0, f)
                        }
                        postLabels[ii] = c;
                        postTitle[ii] = e;
                        postDate[ii] = m;
                        postUrl[ii] = j;
                        if (h < 10) {
                            postNew[ii] = true
                        } else {
                            postNew[ii] = false
                        }
                        ii = ii + 1
                    }
                }
            }
        }
    }
    b();
    sortBy = "titleasc";
    sortPosts(sortBy);
    sortlabel();
    tocLoaded = true;
    displayToc2()
}
function filterPosts(a) {
    scroll(0, 0);
    postFilter = a;
    displayToc(postFilter)
}
function allPosts() {
    sortlabel();
    postFilter = "";
    displayToc(postFilter)
}
function sortPosts(d) {
    function c(e, g) {
        var f = postTitle[e];
        postTitle[e] = postTitle[g];
        postTitle[g] = f;
        var f = postDate[e];
        postDate[e] = postDate[g];
        postDate[g] = f;
        var f = postUrl[e];
        postUrl[e] = postUrl[g];
        postUrl[g] = f;
        var f = postLabels[e];
        postLabels[e] = postLabels[g];
        postLabels[g] = f;
        var f = postNew[e];
        postNew[e] = postNew[g];
        postNew[g] = f
    }
    for (var b = 0; b < postTitle.length - 1; b++) {
        for (var a = b + 1; a < postTitle.length; a++) {
            if (d == "titleasc") {
                if (postTitle[b] > postTitle[a]) {
                    c(b, a)
                }
            }
            if (d == "titledesc") {
                if (postTitle[b] < postTitle[a]) {
                    c(b, a)
                }
            }
            if (d == "dateoldest") {
                if (postDate[b] > postDate[a]) {
                    c(b, a)
                }
            }
            if (d == "datenewest") {
                if (postDate[b] < postDate[a]) {
                    c(b, a)
                }
            }
            if (d == "orderlabel") {
                if (postLabels[b] > postLabels[a]) {
                    c(b, a)
                }
            }
        }
    }
}
function sortlabel() {
    sortBy = "orderlabel";
    sortPosts(sortBy);
    var a = 0, b = 0;
    while (b < postTitle.length) {
        temp1 = postLabels[b];
        firsti = a;
        do {
            a = a + 1
        } while (postLabels[a] == temp1);
        b = a;
        sortPosts2(firsti, a);
        if (b > postTitle.length) {
            break
        }
    }
}
function sortPosts2(d, c) {
    function e(f, h) {
        var g = postTitle[f];
        postTitle[f] = postTitle[h];
        postTitle[h] = g;
        var g = postDate[f];
        postDate[f] = postDate[h];
        postDate[h] = g;
        var g = postUrl[f];
        postUrl[f] = postUrl[h];
        postUrl[h] = g;
        var g = postLabels[f];
        postLabels[f] = postLabels[h];
        postLabels[h] = g;
        var g = postNew[f];
        postNew[f] = postNew[h];
        postNew[h] = g
    }
    for (var b = d; b < c - 1; b++) {
        for (var a = b + 1; a < c; a++) {
            if (postTitle[b] > postTitle[a]) {
                e(b, a)
            }
        }
    }
}
function displayToc2() {
    var a = 0, b = 0;
        document.write("<ol>");
    while (b < postTitle.length) {
        temp1 = postLabels[b];
        document.write('<li><b><a href="/search/label/' + temp1 + '">' + temp1 + "</a></b><ol>");
        firsti = a;
        do {
            document.write("<li>");
            document.write('<a href="' + postUrl[a] + '">' + postTitle[a] + "</a>");
            if (postNew[a] == true) {
                document.write(newText)
            }
            document.write("</li>");
            a = a + 1
        } while (postLabels[a] == temp1);
        b = a;
        document.write("</ol></li>");
        sortPosts2(firsti, a);
        if (b > postTitle.length) {
            break
        }
    }
    document.write("</ol>");
}
</script>
</head>
<body>
<script src="//dte-feed.blogspot.com/feeds/posts/default/?max-results=9999&alt=json-in-script&callback=loadtoc"></script>
</body>
</html>

Labels: , ,

Saturday, March 24, 2012

Menciptakan Halaman Error 404 dengan Benar

Error Page

Seperti yang pernah Saya tuliskan bahwa tag kondisional bisa menahan pemanggilan elemen (baca di sini), maka jika Anda hanya memanfaatkan tag kondisional error_page untuk menampilkan tabir, itu hanya akan membuang-buang waktu saja terutama jika dilihat dari segi komunikasi, tentang bagaimana cara kita memberitahukan bahwa halaman yang sedang mereka akses itu tidak ada. Kabar buruk jika Anda memiliki halaman blog yang lambat diakses. Jika itu terjadi, maka pesan kesalahan yang ingin Anda sampaikan tidak akan pernah tersampaikan dengan benar.

Pernyataan Saya di atas tidak akan berlaku lagi jika Anda bisa membuat akses halaman kesalahan menjadi lebih cepat. Dan cara terbaik untuk melakukan itu adalah dengan menerapkan logika pengingkaran pada tag kondisional halaman kesalahan/error page. Berikut ini adalah cara paling sederhana untuk melakukan itu:

<body>
    <b:if cond='data:blog.pageType != &quot;error_page&quot;'>
        ...
        ...
        Daerah ini berisi bagian-bagian utama dalam sebuah blog seperti posting, widget, sidebar dan yang lainnya.
        Daerah ini akan diabaikan karena kita berada di dalam kondisi pengingkaran.
        ...
        ...
    </b:if>
    <b:if cond='data:blog.pageType == &quot;error_page&quot;'>
        <div id='error-page'>
           <h1>Tuliskan sesuatu di sini. Bagian ini hanya akan tampil saat halaman tidak ditemukan.</h1>
        </div>
    </b:if>
</body>

Sisanya, mungkin Anda ingin menambahkan beberapa kode CSS:

#error-page {
  text-align:center;
  background-color:#900;
  position:fixed !important;
  position:absolute; /* IE6 Fallback */
  top:0px;
  right:0px;
  bottom:0px;
  left:0px;
  padding-top:100px;
  z-index:99999;
}

Lihat Demo

Labels: ,

Kumpulan Blogger Thread Comment Hack

Berikut ini adalah beberapa tutorial Blogger Thread Comment Hack yang berhasil Saya kumpulkan dari hasil penelusuran. Jika Anda tidak bisa mengaktifkan fitur thread comment pada tema Blogger Anda, tutorial-tutorial berikut ini mungkin bisa menjadi alternatif:

Shams’ Blog

Blogger Thread Comment System Hack

Saya tidak begitu familiar dengan ini, tapi sepertinya ini adalah versi pertama dari sekian banyak versi tutorial modifikasi komentar Blogger. Sangat jelas jika Anda melihat dari tanggal penerbitan postingnya:

Tutorial & Demo

Artisteer Tutorials

Blogger Thread Comment System Hack

Ini adalah versi yang Saya pakai, karena beberapa kali Saya mencoba metode lainnya, ternyata tetap tidak berhasil. Beberapa alasan yang paling masuk akal mungkin karena di sini Anda harus mengedit keseluruhan kerangka daftar komentar pada tema sehingga masalah ID, kelas dan susunan kerangka komentar tidak akan mempengaruhi:

Tutorial & Demo

bX-NicoNico

Blogger Thread Comment System Hack

Versi paling aman diantara sekian banyak tutorial, karena beliau menggunakan metode yang sama dengan cara kerja fitur thread comment dari Blogger. Pastikan saja Anda tidak salah paham dengan bagian ini. Mohon dibaca dengan teliti:

 ... here comes the current code 
 ... that is in the tema 
 ... that generates the comments
 ... and what we won't touch

Tutorial & Demo

Yet Another Blogger Tips Blog

Blogger Thread Comment System Hack

Versi ini adalah versi termudah dalam hal instalasi, hanya saja tutorial ini memiliki satu keterbatasan. Saya sempat memeriksa kode dalam tutorialnya dan Saya bisa memutuskan bahwa modifikasi ini hanya bekerja untuk tema blogspot dengan kerangka komentar seperti ini:

<dl class='avatar-comment-indent' id='comments-block'>
  <dt class='comment-author'>
    <div class="avatar-image-container vcard"> ... </div>
  </dt>
  <dd class='comment-body'> ... </dd>
  <dd class='comment-footer'> ... </dd>
</dl>

Selain itu tidak bisa. Kecuali jika Anda bisa mengedit selektor-selektor dalam script tersebut:

Tutorial Demo

VNBlogspot

Blogger Thread Comment System Hack

Ini adalah versi tutorial yang Saya ketahui sebagai dasar dari pengembangan dalam beberapa tutorial pada blog Artisteer Tutorials (beliau sempat membicarakan blog tersebut dalam salah satu tutorialnya):

Tutorial Versi Inggris Demo

VinaLuv

Ini adalah hasil karya baru dari VNBlogspot. Saya bisa mengatakan bahwa ini adalah sistem thread commenting terbaik meskipun masih dalam tahap pengembangan, karena saat kita mengeklik tombol Balas, kita tidak akan melihat pop-up window lagi seperti versi sebelumnya. Jika Anda tidak suka dengan pop-up window yang tapil pada sistem thread commenting versi sebelumnya, Anda bisa menggunakan ini:

Tutorial Demo

Labels: ,

Uncompressed Blogger Thread Comment Hack

Threaded Commenting System

Cukup lama Saya mencari kode asli ini karena sebagian besar memang sudah dikompres total. Pada awalnya Saya mencoba mencari dua kata kunci ini:

  • .cm_head
  • var _0x7bf4=["\x32\x20\x78\x3D\x31\x72\x2E\

… dan berharap Saya bisa menemukan situs tutorial sejenis sebanyak-banyaknya. Namun Saya tetap tidak menemukan versi uncompressed dari kode ini:

&lt;script type='text/javascript'&gt;&lt;!--
var _0x7bf4=["\x32\x20\x78\x3D\x31\x72\x2E\x31\x6E\x2E\x4A\x3B\x32\x20\x46\x3D\x77\x2E\x79\x28\x27\x31\x6D\x27\x29\x3B\x32\x20\x6D\x3D\x46\x2E\x75\x3B\x32\x20\x70\x3D\x5B\x5D\x3B\x32\x20\x37\x3D\x5B\x5D\x3B\x32\x20\x64\x3D\x5B\x5D\x3B\x32\x20\x6E\x3D\x30\x3B\x32\x20\x49\x3D\x27\x27\x3B\x32\x20\x4B\x3D\x27\x27\x3B\x32\x20\x45\x3D\x27\x27\x3B\x32\x20\x69\x3D\x30\x3B\x32\x20\x6A\x3D\x30\x3B\x32\x20\x6B\x3D\x30\x3B\x32\x20\x68\x3D\x30\x3B\x32\x20\x62\x3D\x27\x27\x3B\x32\x20\x42\x3D\x22\x22\x3B\x32\x20\x71\x3D\x22\x22\x3B\x31\x73\x20\x31\x31\x28\x29\x7B\x32\x20\x56\x3D\x2D\x31\x3B\x38\x28\x5A\x2E\x31\x79\x3D\x3D\x27\x31\x7A\x20\x31\x76\x20\x31\x75\x27\x29\x7B\x32\x20\x31\x65\x3D\x5A\x2E\x31\x77\x3B\x32\x20\x31\x30\x3D\x31\x78\x20\x31\x32\x28\x22\x31\x74\x20\x28\x5B\x30\x2D\x39\x5D\x7B\x31\x2C\x7D\x5B\x5C\x2E\x30\x2D\x39\x5D\x7B\x30\x2C\x7D\x29\x22\x29\x3B\x38\x28\x31\x30\x2E\x31\x41\x28\x31\x65\x29\x21\x3D\x31\x70\x29\x56\x3D\x31\x71\x28\x31\x32\x2E\x24\x31\x29\x7D\x31\x6F\x20\x56\x7D\x32\x20\x57\x3D\x31\x31\x28\x29\x3B\x38\x28\x57\x3D\x3D\x2D\x31\x7C\x7C\x57\x3E\x3D\x39\x29\x7B\x31\x34\x28\x6D\x2E\x66\x28\x27\x4C\x3D\x22\x63\x27\x29\x21\x3D\x2D\x31\x29\x7B\x69\x3D\x6D\x2E\x66\x28\x27\x4C\x3D\x22\x63\x27\x29\x3B\x6D\x3D\x6D\x2E\x65\x28\x69\x2B\x34\x29\x3B\x69\x3D\x6D\x2E\x66\x28\x27\x22\x27\x29\x3B\x70\x5B\x6E\x5D\x3D\x6D\x2E\x65\x28\x30\x2C\x69\x29\x3B\x6D\x3D\x6D\x2E\x65\x28\x69\x29\x3B\x37\x5B\x6E\x5D\x3D\x77\x2E\x79\x28\x70\x5B\x6E\x5D\x29\x2E\x75\x3B\x64\x5B\x6E\x5D\x3D\x30\x3B\x6E\x2B\x2B\x7D\x76\x28\x69\x3D\x30\x3B\x69\x3C\x6E\x2D\x31\x3B\x69\x2B\x2B\x29\x7B\x76\x28\x6A\x3D\x69\x2B\x31\x3B\x6A\x3C\x6E\x3B\x6A\x2B\x2B\x29\x7B\x38\x28\x37\x5B\x6A\x5D\x2E\x66\x28\x70\x5B\x69\x5D\x29\x21\x3D\x2D\x31\x29\x7B\x49\x3D\x70\x5B\x6A\x5D\x3B\x4B\x3D\x37\x5B\x6A\x5D\x3B\x64\x5B\x6A\x5D\x3D\x64\x5B\x69\x5D\x2B\x31\x3B\x45\x3D\x64\x5B\x6A\x5D\x3B\x76\x28\x68\x3D\x69\x2B\x31\x3B\x68\x3C\x6A\x3B\x68\x2B\x2B\x29\x7B\x38\x28\x64\x5B\x68\x5D\x3C\x45\x29\x7B\x31\x37\x7D\x7D\x76\x28\x6B\x3D\x6A\x3B\x6B\x3E\x68\x3B\x6B\x3D\x6B\x2D\x31\x29\x7B\x70\x5B\x6B\x5D\x3D\x70\x5B\x6B\x2D\x31\x5D\x3B\x37\x5B\x6B\x5D\x3D\x37\x5B\x6B\x2D\x31\x5D\x3B\x64\x5B\x6B\x5D\x3D\x64\x5B\x6B\x2D\x31\x5D\x7D\x70\x5B\x68\x5D\x3D\x49\x3B\x37\x5B\x68\x5D\x3D\x4B\x3B\x64\x5B\x68\x5D\x3D\x45\x7D\x7D\x7D\x76\x28\x69\x3D\x30\x3B\x69\x3C\x6E\x3B\x69\x2B\x2B\x29\x7B\x6A\x3D\x37\x5B\x69\x5D\x2E\x66\x28\x27\x40\x3C\x61\x20\x4A\x3D\x22\x23\x63\x27\x29\x3B\x38\x28\x6A\x21\x3D\x2D\x31\x29\x7B\x42\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x30\x2C\x6A\x29\x3B\x71\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x6A\x2B\x31\x29\x3B\x6A\x3D\x71\x2E\x66\x28\x27\x3C\x2F\x61\x3E\x27\x29\x3B\x71\x3D\x71\x2E\x65\x28\x6A\x2B\x34\x29\x3B\x37\x5B\x69\x5D\x3D\x42\x2B\x71\x7D\x6A\x3D\x37\x5B\x69\x5D\x2E\x66\x28\x27\x50\x3D\x22\x59\x22\x27\x29\x3B\x38\x28\x6A\x21\x3D\x2D\x31\x29\x7B\x42\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x30\x2C\x6A\x29\x3B\x71\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x6A\x29\x3B\x38\x28\x64\x5B\x69\x5D\x3E\x36\x29\x64\x5B\x69\x5D\x3D\x36\x3B\x37\x5B\x69\x5D\x3D\x42\x2B\x27\x74\x3D\x22\x31\x35\x3A\x27\x2B\x28\x31\x39\x2D\x64\x5B\x69\x5D\x2A\x35\x29\x2B\x27\x25\x22\x20\x27\x2B\x71\x7D\x62\x2B\x3D\x37\x5B\x69\x5D\x7D\x62\x2B\x3D\x27\x3C\x67\x20\x50\x3D\x22\x31\x66\x22\x3E\x3C\x2F\x67\x3E\x27\x3B\x46\x2E\x75\x3D\x62\x3B\x46\x2E\x74\x2E\x51\x3D\x27\x31\x62\x27\x3B\x32\x20\x4D\x3D\x77\x2E\x79\x28\x27\x31\x61\x27\x29\x2E\x75\x3B\x32\x20\x6F\x3D\x4F\x28\x4D\x29\x3B\x38\x28\x6F\x3E\x72\x29\x7B\x62\x3D\x27\x3C\x67\x20\x74\x3D\x22\x47\x3A\x31\x63\x22\x3E\x31\x64\x20\x27\x3B\x32\x20\x48\x3D\x28\x6F\x2D\x6F\x25\x72\x29\x2F\x72\x2B\x31\x3B\x32\x20\x73\x3D\x27\x27\x3B\x32\x20\x6C\x3D\x31\x3B\x69\x3D\x78\x2E\x66\x28\x27\x2E\x31\x6C\x27\x29\x3B\x38\x28\x69\x21\x3D\x2D\x31\x29\x7B\x73\x3D\x78\x2E\x65\x28\x30\x2C\x69\x2B\x35\x29\x7D\x7A\x7B\x73\x3D\x78\x7D\x69\x3D\x73\x2E\x66\x28\x27\x23\x44\x27\x29\x3B\x38\x28\x69\x21\x3D\x2D\x31\x29\x7B\x73\x3D\x73\x2E\x65\x28\x30\x2C\x69\x29\x7D\x69\x3D\x78\x2E\x66\x28\x27\x3F\x53\x3D\x27\x29\x3B\x38\x28\x69\x3D\x3D\x2D\x31\x29\x7B\x6C\x3D\x31\x7D\x7A\x7B\x6C\x3D\x4F\x28\x78\x2E\x65\x28\x69\x2B\x31\x33\x29\x29\x7D\x76\x28\x69\x3D\x31\x3B\x69\x3C\x3D\x48\x3B\x69\x2B\x2B\x29\x7B\x38\x28\x69\x3D\x3D\x6C\x29\x7B\x62\x2B\x3D\x27\x3C\x55\x3E\x27\x2B\x69\x2B\x27\x3C\x2F\x55\x3E\x27\x7D\x7A\x7B\x62\x2B\x3D\x27\x3C\x61\x20\x4A\x3D\x22\x27\x2B\x73\x2B\x27\x3F\x53\x3D\x27\x2B\x69\x2B\x27\x23\x44\x22\x3E\x27\x2B\x69\x2B\x27\x3C\x2F\x61\x3E\x27\x7D\x7D\x38\x28\x6C\x2A\x72\x3C\x3D\x6F\x29\x7B\x62\x2B\x3D\x27\x3C\x2F\x67\x3E\x3C\x67\x20\x74\x3D\x22\x47\x3A\x54\x22\x3E\x27\x2B\x28\x28\x28\x6C\x2D\x31\x29\x2A\x72\x29\x2B\x31\x29\x2B\x27\x20\x2D\x20\x27\x2B\x28\x6C\x2A\x72\x29\x2B\x27\x20\x52\x20\x27\x2B\x6F\x2B\x27\x20\x44\x3C\x2F\x67\x3E\x27\x7D\x7A\x7B\x62\x2B\x3D\x27\x3C\x2F\x67\x3E\x3C\x67\x20\x74\x3D\x22\x47\x3A\x54\x22\x3E\x27\x2B\x28\x28\x28\x6C\x2D\x31\x29\x2A\x72\x29\x2B\x31\x29\x2B\x27\x20\x2D\x20\x27\x2B\x6F\x2B\x27\x20\x52\x20\x27\x2B\x6F\x2B\x27\x20\x44\x3C\x2F\x67\x3E\x27\x7D\x32\x20\x43\x3D\x77\x2E\x79\x28\x27\x31\x69\x27\x29\x3B\x43\x2E\x75\x3D\x62\x3B\x43\x3D\x77\x2E\x79\x28\x27\x31\x68\x27\x29\x3B\x43\x2E\x75\x3D\x62\x3B\x38\x28\x6C\x3C\x48\x29\x7B\x62\x3D\x27\x3C\x74\x20\x31\x67\x3D\x22\x31\x6B\x2F\x31\x6A\x22\x3E\x2E\x58\x20\x7B\x51\x3A\x20\x31\x38\x7D\x3C\x2F\x74\x3E\x27\x3B\x32\x20\x4E\x3D\x77\x2E\x79\x28\x27\x31\x36\x27\x29\x3B\x4E\x2E\x75\x3D\x62\x7D\x7D\x7D\x7A\x7B\x31\x34\x28\x6D\x2E\x66\x28\x27\x4C\x3D\x63\x27\x29\x21\x3D\x2D\x31\x29\x7B\x69\x3D\x6D\x2E\x66\x28\x27\x4C\x3D\x63\x27\x29\x3B\x6D\x3D\x6D\x2E\x65\x28\x69\x2B\x33\x29\x3B\x69\x3D\x6D\x2E\x66\x28\x27\x3E\x27\x29\x3B\x70\x5B\x6E\x5D\x3D\x6D\x2E\x65\x28\x30\x2C\x69\x29\x3B\x6D\x3D\x6D\x2E\x65\x28\x69\x29\x3B\x37\x5B\x6E\x5D\x3D\x77\x2E\x79\x28\x70\x5B\x6E\x5D\x29\x2E\x75\x3B\x64\x5B\x6E\x5D\x3D\x30\x3B\x6E\x2B\x2B\x7D\x76\x28\x69\x3D\x30\x3B\x69\x3C\x6E\x2D\x31\x3B\x69\x2B\x2B\x29\x7B\x76\x28\x6A\x3D\x69\x2B\x31\x3B\x6A\x3C\x6E\x3B\x6A\x2B\x2B\x29\x7B\x38\x28\x37\x5B\x6A\x5D\x2E\x66\x28\x70\x5B\x69\x5D\x29\x21\x3D\x2D\x31\x29\x7B\x49\x3D\x70\x5B\x6A\x5D\x3B\x4B\x3D\x37\x5B\x6A\x5D\x3B\x64\x5B\x6A\x5D\x3D\x64\x5B\x69\x5D\x2B\x31\x3B\x45\x3D\x64\x5B\x6A\x5D\x3B\x76\x28\x68\x3D\x69\x2B\x31\x3B\x68\x3C\x6A\x3B\x68\x2B\x2B\x29\x7B\x38\x28\x64\x5B\x68\x5D\x3C\x45\x29\x7B\x31\x37\x7D\x7D\x76\x28\x6B\x3D\x6A\x3B\x6B\x3E\x68\x3B\x6B\x3D\x6B\x2D\x31\x29\x7B\x70\x5B\x6B\x5D\x3D\x70\x5B\x6B\x2D\x31\x5D\x3B\x37\x5B\x6B\x5D\x3D\x37\x5B\x6B\x2D\x31\x5D\x3B\x64\x5B\x6B\x5D\x3D\x64\x5B\x6B\x2D\x31\x5D\x7D\x70\x5B\x68\x5D\x3D\x49\x3B\x37\x5B\x68\x5D\x3D\x4B\x3B\x64\x5B\x68\x5D\x3D\x45\x7D\x7D\x7D\x76\x28\x69\x3D\x30\x3B\x69\x3C\x6E\x3B\x69\x2B\x2B\x29\x7B\x6A\x3D\x37\x5B\x69\x5D\x2E\x66\x28\x27\x40\x3C\x41\x20\x4A\x3D\x22\x23\x63\x27\x29\x3B\x38\x28\x6A\x21\x3D\x2D\x31\x29\x7B\x42\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x30\x2C\x6A\x29\x3B\x71\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x6A\x2B\x31\x29\x3B\x6A\x3D\x71\x2E\x66\x28\x27\x3C\x2F\x41\x3E\x27\x29\x3B\x71\x3D\x71\x2E\x65\x28\x6A\x2B\x34\x29\x3B\x37\x5B\x69\x5D\x3D\x42\x2B\x71\x7D\x6A\x3D\x37\x5B\x69\x5D\x2E\x66\x28\x27\x50\x3D\x59\x27\x29\x3B\x38\x28\x6A\x21\x3D\x2D\x31\x29\x7B\x42\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x30\x2C\x6A\x29\x3B\x71\x3D\x37\x5B\x69\x5D\x2E\x65\x28\x6A\x29\x3B\x38\x28\x64\x5B\x69\x5D\x3E\x36\x29\x64\x5B\x69\x5D\x3D\x36\x3B\x37\x5B\x69\x5D\x3D\x42\x2B\x27\x74\x3D\x22\x31\x35\x3A\x27\x2B\x28\x31\x39\x2D\x64\x5B\x69\x5D\x2A\x35\x29\x2B\x27\x25\x22\x20\x27\x2B\x71\x7D\x62\x2B\x3D\x37\x5B\x69\x5D\x7D\x62\x2B\x3D\x27\x3C\x67\x20\x50\x3D\x22\x31\x66\x22\x3E\x3C\x2F\x67\x3E\x27\x3B\x46\x2E\x75\x3D\x62\x3B\x46\x2E\x74\x2E\x51\x3D\x27\x31\x62\x27\x3B\x32\x20\x4D\x3D\x77\x2E\x79\x28\x27\x31\x61\x27\x29\x2E\x75\x3B\x32\x20\x6F\x3D\x4F\x28\x4D\x29\x3B\x38\x28\x6F\x3E\x72\x29\x7B\x62\x3D\x27\x3C\x67\x20\x74\x3D\x22\x47\x3A\x31\x63\x22\x3E\x31\x64\x20\x27\x3B\x32\x20\x48\x3D\x28\x6F\x2D\x6F\x25\x72\x29\x2F\x72\x2B\x31\x3B\x32\x20\x73\x3D\x27\x27\x3B\x32\x20\x6C\x3D\x31\x3B\x69\x3D\x78\x2E\x66\x28\x27\x2E\x31\x6C\x27\x29\x3B\x38\x28\x69\x21\x3D\x2D\x31\x29\x7B\x73\x3D\x78\x2E\x65\x28\x30\x2C\x69\x2B\x35\x29\x7D\x7A\x7B\x73\x3D\x78\x7D\x69\x3D\x73\x2E\x66\x28\x27\x23\x44\x27\x29\x3B\x38\x28\x69\x21\x3D\x2D\x31\x29\x7B\x73\x3D\x73\x2E\x65\x28\x30\x2C\x69\x29\x7D\x69\x3D\x78\x2E\x66\x28\x27\x3F\x53\x3D\x27\x29\x3B\x38\x28\x69\x3D\x3D\x2D\x31\x29\x7B\x6C\x3D\x31\x7D\x7A\x7B\x6C\x3D\x4F\x28\x78\x2E\x65\x28\x69\x2B\x31\x33\x29\x29\x7D\x76\x28\x69\x3D\x31\x3B\x69\x3C\x3D\x48\x3B\x69\x2B\x2B\x29\x7B\x38\x28\x69\x3D\x3D\x6C\x29\x7B\x62\x2B\x3D\x27\x3C\x55\x3E\x27\x2B\x69\x2B\x27\x3C\x2F\x55\x3E\x27\x7D\x7A\x7B\x62\x2B\x3D\x27\x3C\x61\x20\x4A\x3D\x22\x27\x2B\x73\x2B\x27\x3F\x53\x3D\x27\x2B\x69\x2B\x27\x23\x44\x22\x3E\x27\x2B\x69\x2B\x27\x3C\x2F\x61\x3E\x27\x7D\x7D\x38\x28\x6C\x2A\x72\x3C\x3D\x6F\x29\x7B\x62\x2B\x3D\x27\x3C\x2F\x67\x3E\x3C\x67\x20\x74\x3D\x22\x47\x3A\x54\x22\x3E\x27\x2B\x28\x28\x28\x6C\x2D\x31\x29\x2A\x72\x29\x2B\x31\x29\x2B\x27\x20\x2D\x20\x27\x2B\x28\x6C\x2A\x72\x29\x2B\x27\x20\x52\x20\x27\x2B\x6F\x2B\x27\x20\x44\x3C\x2F\x67\x3E\x27\x7D\x7A\x7B\x62\x2B\x3D\x27\x3C\x2F\x67\x3E\x3C\x67\x20\x74\x3D\x22\x47\x3A\x54\x22\x3E\x27\x2B\x28\x28\x28\x6C\x2D\x31\x29\x2A\x72\x29\x2B\x31\x29\x2B\x27\x20\x2D\x20\x27\x2B\x6F\x2B\x27\x20\x52\x20\x27\x2B\x6F\x2B\x27\x20\x44\x3C\x2F\x67\x3E\x27\x7D\x32\x20\x43\x3D\x77\x2E\x79\x28\x27\x31\x69\x27\x29\x3B\x43\x2E\x75\x3D\x62\x3B\x43\x3D\x77\x2E\x79\x28\x27\x31\x68\x27\x29\x3B\x43\x2E\x75\x3D\x62\x3B\x38\x28\x6C\x3C\x48\x29\x7B\x62\x3D\x27\x3C\x74\x20\x31\x67\x3D\x22\x31\x6B\x2F\x31\x6A\x22\x3E\x2E\x58\x20\x7B\x51\x3A\x20\x31\x38\x7D\x3C\x2F\x74\x3E\x27\x3B\x32\x20\x4E\x3D\x77\x2E\x79\x28\x27\x31\x36\x27\x29\x3B\x4E\x2E\x75\x3D\x62\x7D\x7D\x7D","\x7C","\x73\x70\x6C\x69\x74","\x7C\x7C\x76\x61\x72\x7C\x7C\x7C\x7C\x7C\x43\x6D\x5F\x49\x74\x65\x6D\x5F\x43\x6F\x6E\x74\x65\x6E\x74\x7C\x69\x66\x7C\x7C\x7C\x73\x74\x72\x6F\x75\x74\x7C\x7C\x43\x6D\x5F\x49\x74\x65\x6D\x5F\x4C\x65\x76\x65\x6C\x7C\x73\x75\x62\x73\x74\x72\x69\x6E\x67\x7C\x69\x6E\x64\x65\x78\x4F\x66\x7C\x64\x69\x76\x7C\x7C\x7C\x7C\x7C\x43\x6D\x5F\x43\x75\x72\x5F\x50\x61\x67\x65\x7C\x43\x6D\x5F\x42\x6C\x6F\x63\x6B\x5F\x43\x6F\x6E\x74\x65\x6E\x74\x7C\x43\x6D\x5F\x4E\x75\x6D\x7C\x43\x6D\x5F\x54\x6F\x74\x61\x6C\x7C\x43\x6D\x5F\x49\x74\x65\x6D\x5F\x49\x64\x7C\x73\x74\x72\x5F\x74\x32\x7C\x32\x30\x30\x7C\x4F\x72\x67\x5F\x55\x72\x6C\x5F\x54\x68\x72\x65\x61\x64\x43\x4D\x7C\x73\x74\x79\x6C\x65\x7C\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C\x7C\x66\x6F\x72\x7C\x64\x6F\x63\x75\x6D\x65\x6E\x74\x7C\x43\x75\x72\x5F\x55\x72\x6C\x5F\x54\x68\x72\x65\x61\x64\x43\x4D\x7C\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64\x7C\x65\x6C\x73\x65\x7C\x7C\x73\x74\x72\x5F\x74\x31\x7C\x43\x6D\x5F\x50\x61\x67\x65\x5F\x4F\x62\x6A\x7C\x63\x6F\x6D\x6D\x65\x6E\x74\x73\x7C\x43\x6D\x5F\x49\x74\x65\x6D\x5F\x4C\x65\x76\x65\x6C\x5F\x54\x7C\x43\x6D\x5F\x42\x6C\x6F\x63\x6B\x7C\x66\x6C\x6F\x61\x74\x7C\x43\x6D\x5F\x50\x61\x67\x65\x5F\x4E\x75\x6D\x7C\x43\x6D\x5F\x49\x74\x65\x6D\x5F\x49\x64\x5F\x54\x7C\x68\x72\x65\x66\x7C\x43\x6D\x5F\x49\x74\x65\x6D\x5F\x43\x6F\x6E\x74\x65\x6E\x74\x5F\x54\x7C\x69\x64\x7C\x43\x6D\x5F\x54\x6F\x74\x61\x6C\x5F\x4F\x62\x6A\x7C\x43\x6D\x5F\x52\x65\x70\x6C\x79\x43\x53\x53\x5F\x4F\x62\x6A\x7C\x70\x61\x72\x73\x65\x49\x6E\x74\x7C\x63\x6C\x61\x73\x73\x7C\x64\x69\x73\x70\x6C\x61\x79\x7C\x6F\x66\x7C\x63\x6F\x6D\x6D\x65\x6E\x74\x50\x61\x67\x65\x7C\x72\x69\x67\x68\x74\x7C\x73\x70\x61\x6E\x7C\x72\x76\x7C\x49\x45\x5F\x76\x65\x72\x7C\x63\x6D\x5F\x61\x75\x74\x68\x6F\x72\x5F\x72\x65\x70\x6C\x79\x7C\x63\x6D\x5F\x77\x72\x61\x70\x7C\x6E\x61\x76\x69\x67\x61\x74\x6F\x72\x7C\x72\x65\x7C\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x65\x74\x45\x78\x70\x6C\x6F\x72\x65\x72\x56\x65\x72\x73\x69\x6F\x6E\x7C\x52\x65\x67\x45\x78\x70\x7C\x7C\x77\x68\x69\x6C\x65\x7C\x77\x69\x64\x74\x68\x7C\x63\x6D\x5F\x72\x65\x70\x6C\x79\x5F\x63\x73\x73\x7C\x62\x72\x65\x61\x6B\x7C\x6E\x6F\x6E\x65\x7C\x31\x30\x30\x7C\x63\x6D\x5F\x74\x6F\x74\x61\x6C\x7C\x62\x6C\x6F\x63\x6B\x7C\x6C\x65\x66\x74\x7C\x50\x61\x67\x65\x7C\x75\x61\x7C\x63\x6C\x65\x61\x72\x7C\x74\x79\x70\x65\x7C\x63\x6D\x5F\x70\x61\x67\x65\x5F\x63\x6F\x70\x79\x7C\x63\x6D\x5F\x70\x61\x67\x65\x7C\x63\x73\x73\x7C\x74\x65\x78\x74\x7C\x68\x74\x6D\x6C\x7C\x63\x6D\x5F\x62\x6C\x6F\x63\x6B\x7C\x6C\x6F\x63\x61\x74\x69\x6F\x6E\x7C\x72\x65\x74\x75\x72\x6E\x7C\x6E\x75\x6C\x6C\x7C\x70\x61\x72\x73\x65\x46\x6C\x6F\x61\x74\x7C\x77\x69\x6E\x64\x6F\x77\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x4D\x53\x49\x45\x7C\x45\x78\x70\x6C\x6F\x72\x65\x72\x7C\x49\x6E\x74\x65\x72\x6E\x65\x74\x7C\x75\x73\x65\x72\x41\x67\x65\x6E\x74\x7C\x6E\x65\x77\x7C\x61\x70\x70\x4E\x61\x6D\x65\x7C\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x7C\x65\x78\x65\x63","","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x72\x65\x70\x6C\x61\x63\x65","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function (_0x4f09x1,_0x4f09x2,_0x4f09x3,_0x4f09x4,_0x4f09x5,_0x4f09x6){_0x4f09x5=function (_0x4f09x3){return (_0x4f09x3<_0x4f09x2?_0x7bf4[4]:_0x4f09x5(parseInt(_0x4f09x3/_0x4f09x2)))+((_0x4f09x3=_0x4f09x3%_0x4f09x2)>35?String[_0x7bf4[5]](_0x4f09x3+29):_0x4f09x3.toString(36));} ;if(!_0x7bf4[4][_0x7bf4[6]](/^/,String)){while(_0x4f09x3--){_0x4f09x6[_0x4f09x5(_0x4f09x3)]=_0x4f09x4[_0x4f09x3]||_0x4f09x5(_0x4f09x3);} ;_0x4f09x4=[function (_0x4f09x5){return _0x4f09x6[_0x4f09x5];} ];_0x4f09x5=function (){return _0x7bf4[7];} ;_0x4f09x3=1;} ;while(_0x4f09x3--){if(_0x4f09x4[_0x4f09x3]){_0x4f09x1=_0x4f09x1[_0x7bf4[6]]( new RegExp(_0x7bf4[8]+_0x4f09x5(_0x4f09x3)+_0x7bf4[8],_0x7bf4[9]),_0x4f09x4[_0x4f09x3]);} ;} ;return _0x4f09x1;} (_0x7bf4[0],62,99,_0x7bf4[3][_0x7bf4[2]](_0x7bf4[1]),0,{}));
--&gt;&lt;/script&gt;

Sampai pada akhirnya Saya menemukan JSUnpack yang luar biasa namun tidak begitu terkenal dan masih dirahasiakan/dalam tahap pengembangan (ini cuma dugaan Saya, karena selama ini Saya tidak pernah menemukan forum yang bisa memecahkan masalah Saya mengenai kompresi JavaScript model ini).

Saya menggunakan alat itu dan kemudian mencoba menerapkan script itu kembali tapi justru tidak memberikan hasil kerja yang sama karena kode yang tergenerasi tidak lengkap. Jadi Saya mencoba untuk menelusuri kata kunci dengan script yang tidak lengkap tersebut hingga Saya menemukan ini ⇒ http://pastebin.de/22000.

Sungguh di luar dugaan bahwa Saya bisa menemukan apa yang sangat ingin Saya cari dan Saya cari tahu cara kerjanya belakangan ini. Saya akan menyimpannya di sini! Mungkin beberapa di antara kalian ada yang ingin tahu cara kerja Blogger Thread Comment Hack ini:

// No attribution. Who created this???
// Strongest possible source: http://www.vnblogspot.com/2011/12/comment-phan-cap-cho-blogger.html
var Cur_Url_ThreadCM = window.location.href;
var Cm_Block = document.getElementById('cm_block');
var Cm_Block_Content = Cm_Block.innerHTML;
var Cm_Item_Id = [];
var Cm_Item_Content = [];
var Cm_Item_Level = [];
var Cm_Num = 0;
var Cm_Item_Id_T = '';
var Cm_Item_Content_T = '';
var Cm_Item_Level_T = '';
var i = 0;
var j = 0;
var k = 0;
var h = 0;
var strout = '';
var str_t1 = "";
var str_t2 = "";

function getInternetExplorerVersion() {
    var rv = -1;
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
        if (re.exec(ua) != null) rv = parseFloat(RegExp.$1);
    }
    return rv;
}
var IE_ver = getInternetExplorerVersion();
if (IE_ver == -1 || IE_ver >= 9) {
    while (Cm_Block_Content.indexOf('id="c') != -1) {
        i = Cm_Block_Content.indexOf('id="c');
        Cm_Block_Content = Cm_Block_Content.substring(i + 4);
        i = Cm_Block_Content.indexOf('"');
        Cm_Item_Id[Cm_Num] = Cm_Block_Content.substring(0, i);
        Cm_Block_Content = Cm_Block_Content.substring(i);
        Cm_Item_Content[Cm_Num] = document.getElementById(Cm_Item_Id[Cm_Num]).innerHTML;
        Cm_Item_Level[Cm_Num] = 0;
        Cm_Num++;
    }
    for (i = 0; i < Cm_Num - 1; i++) {
        for (j = i + 1; j < Cm_Num; j++) {
            if (Cm_Item_Content[j].indexOf(Cm_Item_Id[i]) != -1) {
                Cm_Item_Id_T = Cm_Item_Id[j];
                Cm_Item_Content_T = Cm_Item_Content[j];
                Cm_Item_Level[j] = Cm_Item_Level[i] + 1;
                Cm_Item_Level_T = Cm_Item_Level[j];
                for (h = i + 1; h < j; h++) {
                    if (Cm_Item_Level[h] < Cm_Item_Level_T) {
                        break;
                    }
                }
                for (k = j; k > h; k = k - 1) {
                    Cm_Item_Id[k] = Cm_Item_Id[k - 1];
                    Cm_Item_Content[k] = Cm_Item_Content[k - 1];
                    Cm_Item_Level[k] = Cm_Item_Level[k - 1];
                }
                Cm_Item_Id[h] = Cm_Item_Id_T;
                Cm_Item_Content[h] = Cm_Item_Content_T;
                Cm_Item_Level[h] = Cm_Item_Level_T;
            }
        }
    }
    for (i = 0; i < Cm_Num; i++) {
        j = Cm_Item_Content[i].indexOf('@<a href="#c');
        if (j != -1) {
            str_t1 = Cm_Item_Content[i].substring(0, j);
            str_t2 = Cm_Item_Content[i].substring(j + 1);
            j = str_t2.indexOf('</a>');
            str_t2 = str_t2.substring(j + 4);
            Cm_Item_Content[i] = str_t1 + str_t2;
        }
        j = Cm_Item_Content[i].indexOf('class="cm_wrap"');
        if (j != -1) {
            str_t1 = Cm_Item_Content[i].substring(0, j);
            str_t2 = Cm_Item_Content[i].substring(j);
            if (Cm_Item_Level[i] > 6) Cm_Item_Level[i] = 6;
            Cm_Item_Content[i] = str_t1 + 'style="width:' + (100 - Cm_Item_Level[i] * 5) + '%" ' + str_t2;
        }
        strout += Cm_Item_Content[i];
    }
    strout += '<div class="clear"></div>';
    Cm_Block.innerHTML = strout;
    Cm_Block.style.display = 'block';
    var Cm_Total_Obj = document.getElementById('cm_total').innerHTML;
    var Cm_Total = parseInt(Cm_Total_Obj);
    if (Cm_Total > 200) {
        strout = '<div style="float:left">Page ';
        var Cm_Page_Num = (Cm_Total - Cm_Total % 200) / 200 + 1;
        var Org_Url_ThreadCM = '';
        var Cm_Cur_Page = 1;
        i = Cur_Url_ThreadCM.indexOf('.html');
        if (i != -1) {
            Org_Url_ThreadCM = Cur_Url_ThreadCM.substring(0, i + 5);
        } else {
            Org_Url_ThreadCM = Cur_Url_ThreadCM;
        }
        i = Org_Url_ThreadCM.indexOf('#comments');
        if (i != -1) {
            Org_Url_ThreadCM = Org_Url_ThreadCM.substring(0, i);
        }
        i = Cur_Url_ThreadCM.indexOf('?commentPage=');
        if (i == -1) {
            Cm_Cur_Page = 1;
        } else {
            Cm_Cur_Page = parseInt(Cur_Url_ThreadCM.substring(i + 13));
        }
        for (i = 1; i <= Cm_Page_Num; i++) {
            if (i == Cm_Cur_Page) {
                strout += '<span>' + i + '</span>';
            } else {
                strout += '<a href="' + Org_Url_ThreadCM + '?commentPage=' + i + '#comments">' + i + '</a>';
            }
        }
        if (Cm_Cur_Page * 200 <= Cm_Total) {
            strout += '</div><div style="float:right">' + (((Cm_Cur_Page - 1) * 200) + 1) + ' - ' + (Cm_Cur_Page * 200) + ' of ' + Cm_Total + ' comments</div>';
        } else {
            strout += '</div><div style="float:right">' + (((Cm_Cur_Page - 1) * 200) + 1) + ' - ' + Cm_Total + ' of ' + Cm_Total + ' comments</div>';
        }
        var Cm_Page_Obj = document.getElementById('cm_page');
        Cm_Page_Obj.innerHTML = strout;
        Cm_Page_Obj = document.getElementById('cm_page_copy');
        Cm_Page_Obj.innerHTML = strout;
        if (Cm_Cur_Page < Cm_Page_Num) {
            strout = '<style type="text/css">.cm_author_reply {display: none}</style>';
            var Cm_ReplyCSS_Obj = document.getElementById('cm_reply_css');
            Cm_ReplyCSS_Obj.innerHTML = strout;
        }
    }
} else {
    while (Cm_Block_Content.indexOf('id=c') != -1) {
        i = Cm_Block_Content.indexOf('id=c');
        Cm_Block_Content = Cm_Block_Content.substring(i + 3);
        i = Cm_Block_Content.indexOf('>');
        Cm_Item_Id[Cm_Num] = Cm_Block_Content.substring(0, i);
        Cm_Block_Content = Cm_Block_Content.substring(i);
        Cm_Item_Content[Cm_Num] = document.getElementById(Cm_Item_Id[Cm_Num]).innerHTML;
        Cm_Item_Level[Cm_Num] = 0;
        Cm_Num++;
    }
    for (i = 0; i < Cm_Num - 1; i++) {
        for (j = i + 1; j < Cm_Num; j++) {
            if (Cm_Item_Content[j].indexOf(Cm_Item_Id[i]) != -1) {
                Cm_Item_Id_T = Cm_Item_Id[j];
                Cm_Item_Content_T = Cm_Item_Content[j];
                Cm_Item_Level[j] = Cm_Item_Level[i] + 1;
                Cm_Item_Level_T = Cm_Item_Level[j];
                for (h = i + 1; h < j; h++) {
                    if (Cm_Item_Level[h] < Cm_Item_Level_T) {
                        break;
                    }
                }
                for (k = j; k > h; k = k - 1) {
                    Cm_Item_Id[k] = Cm_Item_Id[k - 1];
                    Cm_Item_Content[k] = Cm_Item_Content[k - 1];
                    Cm_Item_Level[k] = Cm_Item_Level[k - 1];
                }
                Cm_Item_Id[h] = Cm_Item_Id_T;
                Cm_Item_Content[h] = Cm_Item_Content_T;
                Cm_Item_Level[h] = Cm_Item_Level_T;
            }
        }
    }
    for (i = 0; i < Cm_Num; i++) {
        j = Cm_Item_Content[i].indexOf('@<A href="#c');
        if (j != -1) {
            str_t1 = Cm_Item_Content[i].substring(0, j);
            str_t2 = Cm_Item_Content[i].substring(j + 1);
            j = str_t2.indexOf('</A>');
            str_t2 = str_t2.substring(j + 4);
            Cm_Item_Content[i] = str_t1 + str_t2;
        }
        j = Cm_Item_Content[i].indexOf('class=cm_wrap');
        if (j != -1) {
            str_t1 = Cm_Item_Content[i].substring(0, j);
            str_t2 = Cm_Item_Content[i].substring(j);
            if (Cm_Item_Level[i] > 6) Cm_Item_Level[i] = 6;
            Cm_Item_Content[i] = str_t1 + 'style="width:' + (100 - Cm_Item_Level[i] * 5) + '%" ' + str_t2;
        }
        strout += Cm_Item_Content[i];
    }
    strout += '<div class="clear"></div>';
    Cm_Block.innerHTML = strout;
    Cm_Block.style.display = 'block';
    var Cm_Total_Obj = document.getElementById('cm_total').innerHTML;
    var Cm_Total = parseInt(Cm_Total_Obj);
    if (Cm_Total > 200) {
        strout = '<div style="float:left">Page ';
        var Cm_Page_Num = (Cm_Total - Cm_Total % 200) / 200 + 1;
        var Org_Url_ThreadCM = '';
        var Cm_Cur_Page = 1;
        i = Cur_Url_ThreadCM.indexOf('.html');
        if (i != -1) {
            Org_Url_ThreadCM = Cur_Url_ThreadCM.substring(0, i + 5);
        } else {
            Org_Url_ThreadCM = Cur_Url_ThreadCM;
        }
        i = Org_Url_ThreadCM.indexOf('#comments');
        if (i != -1) {
            Org_Url_ThreadCM = Org_Url_ThreadCM.substring(0, i);
        }
        i = Cur_Url_ThreadCM.indexOf('?commentPage=');
        if (i == -1) {
            Cm_Cur_Page = 1;
        } else {
            Cm_Cur_Page = parseInt(Cur_Url_ThreadCM.substring(i + 13));
        }
        for (i = 1; i <= Cm_Page_Num; i++) {
            if (i == Cm_Cur_Page) {
                strout += '<span>' + i + '</span>';
            } else {
                strout += '<a href="' + Org_Url_ThreadCM + '?commentPage=' + i + '#comments">' + i + '</a>';
            }
        }
        if (Cm_Cur_Page * 200 <= Cm_Total) {
            strout += '</div><div style="float:right">' + (((Cm_Cur_Page - 1) * 200) + 1) + ' - ' + (Cm_Cur_Page * 200) + ' of ' + Cm_Total + ' comments</div>';
        } else {
            strout += '</div><div style="float:right">' + (((Cm_Cur_Page - 1) * 200) + 1) + ' - ' + Cm_Total + ' of ' + Cm_Total + ' comments</div>';
        }
        var Cm_Page_Obj = document.getElementById('cm_page');
        Cm_Page_Obj.innerHTML = strout;
        Cm_Page_Obj = document.getElementById('cm_page_copy');
        Cm_Page_Obj.innerHTML = strout;
        if (Cm_Cur_Page < Cm_Page_Num) {
            strout = '<style type="text/css">.cm_author_reply {display: none}</style>';
            var Cm_ReplyCSS_Obj = document.getElementById('cm_reply_css');
            Cm_ReplyCSS_Obj.innerHTML = strout;
        }
    }
}

Labels: , , ,

Friday, March 23, 2012

Format Formulir Komentar di Atas Daftar Komentar

Posting ini sudah kadaluarsa

Format Formulir Komentar di Atas Daftar Komentar
Membuat formulir komentar blog terletak di bagian atas dimana semua daftar komentar berada di bawahnya.

Saya sudah mencoba ini pada salah satu tema Blogger standar dan berhasil melakukanya dengan lancar.

Pertama-tama masuklah ke menu Tema kemudian klik Edit HTML dan klik Lanjutkan. Cek Expand Tema Widget agar seluruh elemen pembangun posting tampil:

Edit HTML Blogger
Mengedit HTML

Temukan kode yang kurang lebih tampak seperti ini:

<p class='comment-footer'>
  <b:if cond='data:post.allowNewComments'>
    <b:include data='post' name='threaded-comment-form'/>
  <b:else/>
    <data:post.noNewCommentsText/>
  </b:if>
</p>

Potong semua kode itu lalu gulung editor HTML tema Anda ke atas perlahan-lahan sampai Anda menemukan kode ini:

<div class='comments' id='comments'>

Letakkan kode yang baru saja Anda potong tepat di bawahnya dan simpan perubahan yang Anda lakukan.

Jika tidak berhasil atau tidak menemukan kode yang terlihat di atas, mungkin itu karena Anda sedang memakai tema versi lama. Untuk tema versi lama, kodenya akan tampak kurang lebih seperti ini:

<p class='comment-footer'>
  <b:if cond='data:post.embedCommentForm'>
    <b:if cond='data:post.allowNewComments'>
      <b:include data='post' name='comment-form'/>
    <b:else/>
      <data:post.noNewCommentsText/>
    </b:if>
  <b:else/>
    <b:if cond='data:post.allowComments'>
      <a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><data:postCommentMsg/></a>
    </b:if>
  </b:if>
</p>

Potong semua kode itu lalu gulung editor HTML tema Anda ke atas perlahan-lahan sampai Anda menemukan kode ini:

<div class='comments' id='comments'>

Letakkan kode yang baru saja Anda potong tepat di bawahnya dan simpan perubahan yang Anda lakukan.

Seharusnya ini berhasil.

Labels: ,

Emoticon Blogger Otomatis dengan jQuery

jQuery Auto Emoticons for Blogger
Emoticon otomatis untuk komentar Blogger

Saya baru memutuskan bahwa eksperimen ini telah berhasil sekitar satu hari yang lalu (sepertinya begitu). Ini adalah fasilitas emoticon otomatis yang akan mengubah simbol-simbol seperti :), :(, dan yang lainnya menjadi gambar tertentu yang telah ditentukan. Saya menggunakan jQuery karena mungkin konsep emoticon dengan jQuery belum ada. Dan juga, lagipula Saya belum begitu berbakat untuk menuliskan kode dengan JavaScript metah. Meskipun di luar sana sudah ada beberapa tutorial sejenis misalnya Add Yahoo Smiley Emoticons on Blogger Comment, tapi Saya hanya ingin memberikan sesuatu yang sedikit berbeda dan dengan proses instalasi yang sangat mudah.

Untuk membuatnya, pertama-tama masuklah ke menu Tema kemudian klik Edit HTML dan klik Lanjutkan:

Edit HTML Blogger
Mengedit HTML

Temukan kode ini:

</body>

Salin kode di bawah ini dan letakkan di atasnya:

<style>
.emoWrap {
  background-color:#EEDE86;
  border:2px solid #D3BA59;
  padding:10px 14px;
  color:black;
  font:normal bold 12px/normal Tahoma,Verdana,Arial,Sans-Serif;
  text-align:center;
}

.emo,
.emoKey {
  display:inline-block; /* Penting! */
  *display:inline;
  vertical-align:middle;
}

.emoKey {
  border:1px solid #ccc;
  background-color:white;
  font:normal bold 11px/normal Arial,Sans-Serif;
  padding:1px 2px;
  margin:0 0 0 2px;
  color:black;
}
</style><script src='//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'></script><script>
//<![CDATA[
var emoRange = "#comments p, div.emoWrap",
    putEmoAbove = "#comment-editor",
    emoMessage = "Untuk menyisipkan emoticon setidaknya Anda harus menambahkan satu spasi di awal simbol.";
//]]>
</script>
<script src='//cdn.rawgit.com/tovic/dte-project/0ef9de902cf286a77272f9b3c6f8168c17ab61c6/jquery-emoticons.js'></script>

Klik Simpan Tema dan lihat hasilnya.

Kode yang Saya beri garis bawah adalah jQuery. Jika tema Anda sudah dilengkapi dengan jQuery, singkirkan kode tersebut!


Lebih Jauh Lagi

Di situ terdapat setidaknya tiga variabel untuk pengaturan lanjutan:

  • emoRange digunakan untuk menentukan daerah mana saja yang akan dikenai manipulasi ini. Pada opsi di atas Saya menargetkan manipulasi pada elemen p yang berada di dalam elemen #comments dan juga pada elemen baris emoticon utama. Anda juga bisa menargetkannya pada elemen lain, misalnya pada posting. Untuk memberlakukan manipulasi ini pada posting, cukup tambahkan selektor .post-body pada variabel tersebut dengan memisahkannya menggunakan tanda koma.
  • putEmoAbove digunakan untuk menentukan di mana (di atas elemen apa) jQuery harus meletakkan daftar emoticon. Di sini Saya menuliskan nilainya pada #comment-editor untuk meletakkannya tepat di atas formulir komentar. Terkadang mungkin ini tidak berhasil. Anda harus mencoba untuk mengubahnya dengan div.comment-replybox-thread atau yang lainnya sebagai elemen sasaran. Intinya adalah, carilah elemen formulir komentar pada blog Anda dan temukan ID atau kelasnya sebagai petunjuk peletakkan daftar emoticon.
  • emoMessage digunakan untuk menentukan pesan yang akan muncul saat pertama kali pengunjung mengeklik salah satu emoticon. Anda bisa mengubah pesan itu sesuka hati.

Bagaimana Manipulasi ini Bekerja?

Pada dasarnya Saya hanya menggunakan regex sederhana untuk mencari format teks tertentu. Dan dengan menggunakan fungsi .replace() Saya mengubah setiap susunan karakter yang cocok dengan elemen <img> dengan alamat gambar tertentu.

Sebagai contoh, Saya akan mengubah teks :) menjadi <img src='smile.gif'>. Maka yang Saya butuhkan hanyalah dua buah fungsi jQuery yaitu .html() untuk menyalin dokumen dan .replace() untuk mengubah teks/karakter tertentu di dalam dokumen:

$('body').html($('body').html().replace(/\s:\)/g, " <img src='smile.gif' />"));

Kode di atas akan mengubah semua karakter dengan format “satu spasi di depan + simbol :)” menjadi elemen <img src='smile.gif'>.

Dalam regular expression, karakter spasi diwakili dengan simbol \s. Dan juga, karena simbol ) merupakan salah satu karakter khusus dalam regex, oleh karena itu kita harus menonaktifkan karakter tersebut dengan cara menuliskan karakter \ di depannya, dengan begitu komputer tidak akan membaca karakter tersebut sebagai fungsi, melainkan sebagai teks biasa.

g adalah global, artinya bahwa fungsi ini akan mencari semua karakter yang cocok tanpa terkecuali kemudian dia akan mengubahnya menjadi elemen gambar.

Dalam forum-forum tertentu mungkin Anda juga akan melihat peraturan yang berbeda untuk menyisipkan gambar, misalnya seperti ini:

[img]emoticon.gif[/img]

Tidak ada perbedaan dengan semua itu. Pada dasarnya kita lah yang membuat peraturan. Dalam metode penyisipan emoticon yang ke dua, Anda harus mengubah baris karakter tersebut menjadi elemen <img> dengan nilai src berupa teks yang berada di antara simbol [img]...[/img].

Dalam jQuery kita bisa menuliskannya seperti ini:

$('body').html(
    $('body').html()
        .replace(/\[img\]/g, "<img src='")
            .replace(/\[\/img\]/g, "' />")
);

Coba Sendiri


Sumber emoticon: Emoticons4u

Labels: , ,

Wednesday, March 21, 2012

Slideshow Otomatis Blogger dengan TinyCarousel (Custom)

Pembaharuan: 25 November 2013

Custom TinyCarousel for Blogger

Menjawab permintaan dari It's a Hardlife, Saya mencoba untuk memodifikasi jQuery Carousel yang sederhana karena slideshow versi Agile Carousel itu terlalu rumit. Saya mengambil TinyCarousel sebagai bahan utama, yang pada awalnya hanya berupa slideshow gambar biasa untuk dimodifikasi lagi sesuai dengan tata letak slideshow Agile Carousel sehingga setiap slide menjadi lebih kaya akan konten:

Lihat Demo


Tahap 1: Mengedit Tema

Untuk membuatnya, pertama-tama masuklah ke menu Tema kemudian klik Edit HTML dan klik Lanjutkan:

Edit HTML Blogger
Mengedit HTML

Temukan kode ini:

]]></b:skin>

Salin kode di bawah ini, kemudian letakkan di atasnya:

/*!
 * Custom TinyCarousel for Blogger by Taufik Nurrohman
 * Visit: http://www.dte.web.id
 */

.tinycarousel {
  overflow:hidden;
  font:normal normal 10px/12px Arial,Sans-Serif;
  color:#666;
  margin:0 auto;
}
.tinycarousel-viewport {
  overflow:hidden;
  position:relative;
  background-color:#eee;
  border:1px solid #ccc;
  margin:0 auto;
  -webkit-border-radius:4px;
  -moz-border-radius:4px;
  border-radius:4px;
}
.tinycarousel-overview {
  list-style:none;
  margin:0;
  padding:0;
  position:absolute;
  left:0;
  top:0;
}
.tinycarousel-overview li {
  list-style:none;
  float:left;
  padding:0;
  height:auto;
  background-color:white;
  color:#666;
}
.tinycarousel-inner {
  padding:10px;
  border:1px solid #ccc;
  -webkit-box-sizing:border-box;
  -moz-box-sizing:border-box;
  box-sizing:border-box;
  overflow:hidden;
  position:relative;
}
li .tinycarousel-inner {padding-bottom:48px}
.tinycarousel-image {
  display:block;
  width:100%;
  height:auto;
  border:none;
  outline:none;
  margin:0;
  padding:0;
  -webkit-box-shadow:none;
  -moz-box-shadow:none;
  box-shadow:none;
}
.tinycarousel-title {
  font:normal bold 11px/100% Verdana,Tahoma,Arial,Sans-Serif;
  color:#39f;
  margin:0 0 6px;
  padding:10px 0 0;
  background:none;
}
.tinycarousel-title a {
  color:inherit;
  text-decoration:none;
  border:none;
}
.tinycarousel-summary {
  margin:0;
  padding:0;
  overflow:hidden;
}
.tinycarousel-footer {
  color:#aaa;
  background-color:#333;
  background-image:-webkit-linear-gradient(#555,#333);
  background-image:-moz-linear-gradient(#555,#333);
  background-image:-ms-linear-gradient(#555,#333);
  background-image:-o-linear-gradient(#555,#333);
  background-image:linear-gradient(#555,#333);
  padding:0 10px;
  height:24px;
  line-height:24px;
  overflow:hidden;
  position:absolute;
  right:0;
  bottom:0;
  left:0;
}
.tinycarousel-footer-date {bottom:24px}
.tinycarousel-navigation {
  display:block;
  background-color:white;
  border:1px solid #ccc;
  margin:2px auto 0;
  overflow:hidden;
  -webkit-border-radius:4px;
  -moz-border-radius:4px;
  border-radius:4px;
}
.tinycarousel-navigation .tinycarousel-inner {border:none}
.tinycarousel-button {
  background-color:#666;
  padding:2px 5px;
  overflow:hidden;
  position:relative;
  float:left;
  margin:0 2px 0 0;
  color:white;
  text-decoration:none;
  font-weight:bold;
  text-align:center;
}
.tinycarousel-navigation .disable {display:none}
.tinycarousel-button:active {background-color:#900}
.tinycarousel-total-posts {
  float:right;
  margin:2px 5px 0 0;
  font-weight:bold;
  font-size:120%;
}

/* Orientasi Vertikal */
.tinycarousel.vertical .tinycarousel-overview li {
  float:none;
  display:block;
}
.tinycarousel.vertical .tinycarousel-button,
.tinycarousel.vertical .tinycarousel-total-posts {
  float:none;
  display:block;
  margin:0 0 2px;
}
.tinycarousel.vertical .tinycarousel-button.disable {display:none}
.tinycarousel.vertical .tinycarousel-total-posts {
  text-align:center;
  margin-top:10px;
  margin-bottom:0;
}

Klik Simpan Tema.

Tahap 2: Meletakkan Slideshow

Masuklah ke menu Tata Letak kemudian tambahkan sebuah elemen halaman HTML/JavaScript yang terletak di bagian atas posting:

Menambahkan Widget
Menambahkan widget

Salin kode di bawah ini kemudian letakkan di dalam formulirnya:

<div id="tinycarousel-container" class="tinycarousel"></div><script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script><script>
var tinycarousel_config = {
    url: 'http://nama_blog.blogspot.com',
    numPosts: 12,
    labelName: null,
    containerId: 'tinycarousel-container',
    newTabLink: false,
    summaryLength: 100,
    monthArray: [
        "Januari",
        "Februari",
        "Maret",
        "April",
        "Mei",
        "Juni",
        "Juli",
        "Agustus",
        "September",
        "Oktober",
        "November",
        "Desember"
    ],
    noImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAA3NCSVQICAjb4U/gAAAADElEQVQImWOor68HAAL+AX7vOF2TAAAAAElFTkSuQmCC',
    nav: {
        prevText: '&lt;',
        nextText: '&gt;',
        showText: 'Menampilkan {num} Posting'
    },
    carousel: {
        axis: "x",
        itemwidth: 200,
        itemheight: 370,
        itemmargin: 5,
        itempadding:10,
        visible: 4,
        display: 1,
        start: 1,
        interval: true,
        intervaltime: 3000,
        animation: true,
        duration: 1000,
        easing: "swing",
        callback: function() {}
    }
};
</script>
<script src="//dte-project.googlecode.com/svn/trunk/blogger-tinycarousel.js"></script>

Ganti URL http://nama_blog.blogspot.com dengan alamat blog Anda lalu klik Simpan.

Kode yang Saya beri garis bawah adalah jQuery. Jika tema Anda sudah dilengkapi dengan jQuery, singkirkan kode tersebut!


Konfigurasi Widget

Opsi Keterangan
url Ganti nilainya dengan URL blog Anda.
numPosts Digunakan untuk menentukan jumlah posting yang ingin ditampilkan.
labelName Ganti nilainya menjadi nama label untuk menampilkan posting dengan label yang spesifik. Misalnya, menentukan nilai labelName: "Widget" akan membuat widget ini menampilkan posting berlabel Widget saja.
containerId ID kontainer penampung widget.
newTabLink Ganti nilainya menjadi true untuk membuat semua tautan terbuka di tab/jendela baru secara otomatis.
summaryLength Digunakan untuk menentukan panjang ringkasan posting.
monthArray Daftar nama-nama bulan sesuai dengan sistem penanggalan di negaramu.
noImage URL gambar thumbnail pengganti untuk posting yang tidak memiliki gambar.
nav => prevText Teks navigasi mundur.
nav => nextText Teks navigasi maju.
nav => showText Teks indikator jumlah posting.
carousel => axis Ganti nilainya menjadi "y" untuk menampilkan carousel vertikal.
carousel => itemwidth Digunakan untuk menentukan lebar masing-masing item carousel.
carousel => itemheight Digunakan untuk menentukan tinggi masing-masing item carousel.
carousel => itemmargin Digunakan untuk menentukan margin masing-masing item carousel.
carousel => itempadding Digunakan untuk menentukan padding masing-masing item carousel.
carousel => visible Digunakan untuk menentukan jumlah item yang ingin ditampilkan dalam satu baris.
carousel => display Digunakan untuk menentukan jumlah item yang akan tergeser dalam satu kali gerakan.
carousel => start Digunakan untuk menentukan indeks permulaan item (normalnya dimulai dari indeks pertama).
carousel => interval Ganti nilainya menjadi false untuk membuat animasi berjalan secara manual (dengan cara mengeklik tombol navigasi).
carousel => intervaltime Digunakan untuk menentukan waktu interval animasi (hanya berlaku jika opsi interval bernilai true).
carousel => animation Ganti nilainya menjadi false untuk mematikan efek animasi.
carousel => duration Digunakan untuk menentukan kecepatan animasi.
carousel => easing Digunakan untuk menentukan tipe easing animasi.
carousel => callback Fungsi bebas yang bisa Anda terapkan pada widget ini yang akan bekerja setiap kali slide berganti.

Contoh Pengaturan Carousel Vertikal

Perhatikan pada bagian-bagian yang Saya tandai:

var tinycarousel_config = {
    ...
    nav: {
        prevText: '&#9650;',
        nextText: '&#9660;',
        showText: 'Menampilkan {num} Posting'
    },
    carousel: {
        axis: "y",
        itemwidth: 200,
        itemheight: 370,
        itemmargin: 5,
        itempadding:10,
        visible: 1,
        display: 1,
        start: 1,
        interval: true,
        intervaltime: 3000,
        animation: true,
        duration: 1000,
        easing: "swing",
        callback: function() {}
    }
};

Lihat Demo

Labels: , , , ,

Memasukkan Video ke dalam Komentar Blogger

YouTube Video

Sekedar melengkapi posting ini: Memanfaatkan jQuery untuk Mengizinkan Elemen Terlarang Masuk ke dalam Kometar Blogger, Saya menggunakan elemen <a> untuk menyisipkan video ke dalam komentar Blogger. Dengan begitu Anda tidak perlu khawatir terhadap masalah fallback yang buruk jika JavaScript dimatikan.

Saat JavaScript pada peramban diaktifkan, semua elemen tautan yang mengandung URL berpola youtube.com/embed akan berubah menjadi video, dan jika JavaScript dimatikan, maka video tidak akan tampil pada posting komentar namun masih tetap meninggalkan elemen aslinya yaitu <a>, sehingga saat tautan tersebut diklik, Anda akan dibawa menuju ke halaman video satu layar penuh:

<script>
//<![CDATA[
$('#comments p, #comments dd').each(function() {
  $(this).find('a[href*="youtube.com/embed"]').replaceWith(function() {
    return $('<iframe width="420" height="315" src="' + this.href + '"></iframe>');
  }); 
});
//]]>
</script>

Salin kode tersebut dan letakkan di atas </body> kemudian simpan semua perubahan.

Untuk menyisipkan video, caranya cukup dengan menyalin URL kode embed yang ada di dalam textarea (ambil URL-nya saja). Lalu kita gunakan URL tersebut sebagai pengisi atribut href pada tautan:

<a href="Letakkan URL video di sini">Video</a>
Memasukkan Video ke Dalam Komentar Blogger
Ambil URL pada elemen <iframe>

Atau jika Anda telah menciptakan sistem untuk menghapus tautan pada semua posting komentar (seperti Saya), Anda bisa menggunakan cara lama seperti ini:

[iframe]Letakkan URL video di sini[/iframe]

Berikut ini adalah kode manipulasinya:

<script>
//<![CDATA[
$('#comments p, #comments dd').each(function() {
    $(this).html(
        $(this).html()
            .replace(/\[iframe\](.*?)\[\/iframe\]/ig, "<iframe width='420' height='315' src='$1'></iframe>")
    );
});
//]]>
</script>

Dan sebagai tambahan lagi, karena ini adalah manipulasi <iframe>, maka Anda sebenarnya tidak harus membatasi diri dengan video. Apa saja yang bisa tampil pada elemen <iframe> bisa ditampilkan pada posting komentar Blogger dengan metode ini.


Pembaharuan

Ucapan terimakasih kepada Mbah Qopet atas petunjuknya mengenai kekurangan metode ke dua. Masalahnya adalah, jika URL video yang dituliskan tidak sesuai dengan apa yang kita kehendaki, akan ada beberapa hal buruk yang mungkin terjadi. Misalnya, akses halaman menjadi sangat lambat karena iframe telah mengakses URL yang salah. Belum lagi mengenai para komentator yang mungkin saja merupakan orang jahat sehingga mereka bisa saja menyisipkan URL berbahaya pada manipulasi ini. Untuk metode pertama relatif lebih aman karena di situ dengan jelas Saya telah membatasi format URL yaitu hanya untuk elemen <a> yang mengandung URL youtube.com/embed. Di luar syarat itu, tautan tidak akan diubah menjadi video.

Cara sederhana untuk membatasi URL pada metode ke dua adalah dengan mendeteksi apakah nilai atribut src pada iframe mengandung URL youtube.com/embed atau tidak. Jika tidak, hapus atribut src pada iframe tersebut sehingga hal-hal buruk yang mungkin terjadi karena kesalahan URL video YouTube bisa diatasi. Berikut ini adalah kode selengkapnya untuk menyisipkan video dengan metode ke dua:

<script>
//<![CDATA[
$('#comments p, #comments dd').each(function() {
    $(this).html(
        $(this).html()
            .replace(/\[iframe\](.*?)\[\/iframe\]/ig, "<iframe width='420' height='315' src='$1'></iframe>")
    );

    // Jika URL pada `iframe.video` tidak mengandung path `youtube.com/embed` ...
    // ... segera hapus atribut `src` pada elemen tersebut ...
    // ... lalu tambahkan latar belakang berupa gambar yang menyatakan peringatan kesalahan.
    $('iframe.video:not([src*="youtube.com/embed"])')
        .removeAttr('src')
            .css('background', '#900 url(error.png) no-repeat 50% 50%');
});
//]]>
</script>

Saya masih tetap menyarankan Anda untuk menggunakan metode pertama yang jauh lebih sederhana. Metode ke dua ini hanya sebagai alternatif saja untuk blog-blog dengan peraturan komentar yang tidak begitu bebas seperti di blog Saya.

Labels: , ,

Tuesday, March 20, 2012

Format Posting Hanya Tampil Judul

Teknik yang paling umum digunakan adalah dengan cara menyisipkan kode CSS pada tag kondisional pengingkaran terhadap halaman item dan halaman statis untuk menghilangkan elemen <div class='post-body'> dan <div class='post-footer'> seperti ini:

<b:if cond='data:blog.pageType != &quot;item&quot;'>
    <b:if cond='data:blog.pageType != &quot;static_page&quot;'> 
        <style>
          .post-body, .post-footer {display:none !important;}
        </style>
    </b:if>
</b:if>

Coba Anda letakkan kode tersebut di atas </head> maka Anda akan melihat bahwa daftar posting dalam blog Anda sekarang hanya akan menampilkan judulnya saja pada halaman non-item dan non-statis.

Anda pikir ini akan membuat blog Anda menjadi jauh lebih cepat karena Anda telah menghilangkan isi posting secara keseluruhan, namun anehnya itu sama sekali tidak terjadi.

Mengapa? Karena apa yang Anda pikir sebagai menghilangkan sesuatu sebenarnya hanyalah menghilangkan wujudnya saja, sedangkan elemen-elemen yang ada di dalam <div class='post-body'> dan <div class='post-footer'> sebenarnya masih ada. Jika Anda membuka paragraf pada elemen ini maka Anda akan melihat keseluruhan konten (Bahkan Anda juga bisa dengan mudah melihatnya pada mode view source):

Isi posting masih ada meski wujudnya tidak terlihat
Isi posting masih ada meski wujudnya tidak terlihat di layar.

Selain itu, tidak semua tema memiliki kelas .post-body dan .post-footer. Bisa saja mereka menggunakan kelas .entry dan juga .postmeta atau bahkan yang lainnya seperti contoh tema yang Saya gunakan sebagai bahan percobaan.

display:none tidak akan mencegah elemen untuk terpanggil, mereka hanya menghilangkan wujudnya saja. Jadi, betapapun usaha Anda untuk menghilangkan elemen dengan deklarasi display:none, elemen tersebut akan tetap selalu ada, hanya wujudnya saja yang tidak terlihat.


Metode Terbaik

Metode terbaik adalah dengan cara menyisipkan tag kondisional secara langsung pada elemen yang dimaksud. Ini akan benar-benar mencegah elemen terpanggil oleh browser. Cara ini memang sedikit sulit, karena kita harus berhadapan secara langsung dengan elemen, yang (anehnya) terkadang elemen-elemen tersebut tampak jauh lebih panjang dari apa yang kita lihat di layar.

Namun pada intinya, jika kita ingin menyembunyikan isi posting, sebenarnya ada satu panduan sederhana untuk mengetahuinya yaitu tag <data:post.body/>. Temukan saja kode itu dan cari elemen induk terdekat seperti ini:

<div class='post-body entry-content'><data:post.body/>    <div style='clear: both;'/> <!-- clear for photos floats -->
</div>

Dari situ Anda bisa mengitari elemen induk terdekat dari <data:post.body/> dengan tag kondisional halaman item dan statis seperti ini:

<b:if cond='data:blog.pageType == &quot;item&quot;'>
    <b:if cond='data:blog.pageType == &quot;static_page&quot;'> 
        <div class='post-body entry-content'><data:post.body/>            <div style='clear: both;'/> <!-- clear for photos floats -->
        </div>
    </b:if>
</b:if>

Atau untuk contoh yang Saya gunakan bentuknya seperti ini. Anda juga bisa melihat bahwa kelas elemen ini bukan berupa post-body melainkan entry:

<b:if cond='data:blog.pageType == &quot;item&quot;'>
    <b:if cond='data:blog.pageType == &quot;static_page&quot;'> 
        <div class='entry'>
            <p><data:post.body/></p>
            <div class='clear'/>
        </div>
    </b:if>
</b:if>

Oke, tugas pertama telah selesai. Konten posting sekarang benar-benar telah menghilang:

Isi posting telah menghilang
Isi posting telah menghilang.

Sekarang tinggal mengitari elemen <div class='post-footer'> dengan tag kondisional yang sama. Coba Anda temukan sendiri. Jangan kaget ya!

Info Tema

Diavlo Blogger Tema

Diavlo

Diavlo is a free blogger tema adapted from WordPress with 2 columns, right sidebar, perfect for photologs, minimalist and neutral colors.
Excellent layout for blogs about movie, music or photography.

Labels: , ,