2014년 11월 28일 금요일

블로그에 포스트 리스트 보여주는 스크립트

<div>
<div id="posts" style="padding: 10px;">
</div>
<div align="center" id="posts-pgno" style="cursor: pointer;">
</div>
</div>
<script language="Javascript" type="text/javascript">
 /** url의 Parameter를 얻는 Class. **/
    var request = { 
  parameter: function(name) {
   return this.parameters()[name];
  },
  
  parameters: function() {
   var result = {};
   var url = window.location.href;
   var parameters = url.slice(url.indexOf('?') + 1).split('&');
    
   for(var i = 0;  i < parameters.length; i++) {
    var parameter = parameters[i].split('=');
    result[parameter[0]] = parameter[1];
   }
   return result;
  }
 }
 
 /** Page의 정보를 저장. **/
 var page = {
  //초기화.
  init: function(home,max){
   page.home = home;
   page.max = max;
   page.label = '';
   page.no = 1;
  },   
   
  //url의 parameter에서 pgno 값을 읽어 옮.
  setPage: function(){
   var url = window.location.href;
 
   var pl = url.lastIndexOf("/label/");
   var pq = url.lastIndexOf("?");
   
   if(pl != -1)
    page.label = url.substr(pl+7,((pq!=-1)?pq:url.length)-(pl+7));
   
   if(url.indexOf("pgno") != -1)
    page.no = request.parameter("pgno");
    
  }
  
 }
 /** feed를 parsing 하여 결과 뿌려 줌. **/
 var obj = {
  init: function () {
   obj.obj = document.getElementById('posts');
   obj.pgno = document.getElementById('posts-pgno');
  },
  
  // 검색을 요청하는 함수 
  pingSearch: function () {
   //변수 선언.
   obj.s = document.createElement('script');
   obj.s.type = 'text/javascript';
   obj.s.charset = 'utf-8';
   
   //feed callback 함수를 이용 json 객체 구한 후 pongSearch 함수호출. 
   if(page.label == '')
    obj.s.src = '' + page.home + 
     '/feeds/posts/summary/?max-results='+(page.no*page.max)
     +'&alt=json-in-script&callback=obj.pongSearch';
   else
    obj.s.src = '' + page.home + '/feeds/posts/summary/-/'
     +page.label+'?max-results='+(page.no*page.max)
     +'&alt=json-in-script&callback=obj.pongSearch';
    
   //append.
   document.getElementsByTagName('head')[0].appendChild(obj.s);
  },
   
  // 검색 결과를 뿌리는 함수 
  pongSearch: function (z) {
   obj.obj.innerHTML = '';
   
   /* 글 목록을 뿌려 줌. */
   for (var i = (page.no-1)*page.max; i < page.no*page.max; i++) {
    //예외처리.
    if(i >= z.feed.openSearch$totalResults.$t)
     break;
    
    //변수선언.
    var li = document.createElement("li");
    var a = document.createElement('a');
    
    //link로 사용할 base url.
    var url = page.home + '/search';
    if(page.label != '')
     url += '/label/' + page.label;
    
    //최종 link를 url 입력.
    if (i == 0) 
     a.href = url + '?max-results=1';
    else {
     var pub=obj.changeTime(z.feed.entry[i-1].published.$t);
     a.href = url + '?updated-max=' + pub 
     + '&max-results=1&pgno='+page.no;
    }
    a.innerHTML = obj.escapeHtml(z.feed.entry[i].title.$t);
     
    //append
    li.appendChild(a);
    obj.obj.appendChild(li);
   }
    
   /* page 뿌려줌. */
   obj.pongPgno(z);
  },
  
  // page를 뿌려주는 함수.
  pongPgno: function(z){
   obj.pgno.innerHTML = '';
   var before = document.createElement('a');
   var next = document.createElement('a');
   
   var ten = parseInt((page.no-1)/10);
   var total = z.feed.openSearch$totalResults.$t;

   /* before page */
   before.innerHTML = ' << ';   
   if(ten>0)
    obj.onMouseDown(before, ten*10);
   obj.pgno.appendChild(before);
   
   /* page number */
   for(var i=ten*10; i< (ten+1)*10; i++){
    if(i >= total/page.max)
     break;
    var a = document.createElement('a');
    obj.onMouseDown(a,i+1);
    
    a.innerHTML = ' ' + (i+1) + ' ';
    
    if(i+1 == page.no)
     a.style.color = 'yellow';     
    obj.pgno.appendChild(a);
   }
    
   /* next page */
   next.innerHTML = ' >> ';
   if(ten< parseInt(total/page.max/10))
    obj.onMouseDown(next, (ten+1)*10+1);
   obj.pgno.appendChild(next);
  },
   
  //mouse click event.
  onMouseDown: function(a, i){
   a.onmousedown = function(){
    page.no = i;
    obj.pingSearch();
   }
  },

  //Time 에러 수정.
  changeTime: function(str){
   var s = str.lastIndexOf('.')-1;
   var e = str.lastIndexOf('+')+1;
   
   var str2 = str.substr(0,s) + '%2B' + str.substr(e,100);
   
   return str2;
  },
  
  // HTML태그 안 먹게 하는 함수
  escapeHtml: function (str) {
   str = str.replace(/&/g, "&");
   str = str.replace(/</g, "<");
   str = str.replace(/>/g, ">");
   return str;
  }
 };

 page.init('http://creatorhong.blogspot.com', 5);
 page.setPage();
 obj.init(); 
 obj.pingSearch();
</script>
블로그 관리의  레이아웃 가젯에 위의 자바스크립트를 넣으면 끝.
아!!! creatorhong.blogspot.com 은 자신의 블로그 주소를 넣으면 됨. 

댓글 1개:

대항해시대 조선 랭작

숙련도 획득 방법 선박 건조, 선박 강화, 전용함 추가시 숙련도 획득 모두 동일한 공식 적용 획득 숙련도 공식 기본 획득 숙련도 ≒ int{건조일수 × 현재랭크 × (0.525)} 이벤트 & 아이템 사용...