<?xml version="1.0" encoding="UTF-8"?>
<Module>
  <ModulePrefs title="__UP_title__" title_url="https://www.douban.com" author="douban.com" description="显示你豆瓣上的书、电影、音乐" author_email="sakinijino@gmail.com">
  	<Require feature="dynamic-height"/>
  	<Locale lang="zh_CN"/>
  </ModulePrefs>
  <UserPref name="username" display_name="用户名" required="true"/>
  <UserPref name="title" display_name="标题" default_value="My Douban Show"/>
  <UserPref name="cat" display_name="种类" default_value="book" datatype="enum">
    <EnumValue value="book" display_value="书"/>

    <EnumValue value="movie" display_value="电影"/>
    <EnumValue value="music" display_value="音乐"/>
  </UserPref>
  <UserPref name="status" display_name="显示" default_value="all" datatype="enum">
    <EnumValue value="all" display_value="全部"/>
    <EnumValue value="wish" display_value="想看(听)"/>
    <EnumValue value="doing" display_value="在看(听)"/>
    <EnumValue value="done" display_value="看(听)过"/>
  </UserPref>

  <UserPref name="num" display_name="共显示" default_value="20"/>
  <Content type="html"><![CDATA[
        <div id="content_div"></div>
        <style>
        	a, a:link { color: #336699; text-decoration: none; }
					a:visited { color: #666699; text-decoration: none; }
					a:hover { color: #FFFFFF; text-decoration: none; background: #003399; }
					a:active { color: #FFFFFF; text-decoration: none; background: #FF9933; }
					a img { border-width:0; }

					p {margin:5px 0px;}

					#content_div { font: 12px Arial, Helvetica, sans-serif; line-height: 150%; }

					.subj_imgs div {
						width:105px;
						height:105px;
						text-align:center;
						float:left;
						margin:3px 5px;
					}

					.subj_detail div.subj_img {
						height:105px;
						margin:3px 5px;
					}
        </style>
        <script type="text/javascript">
var prefs, content, div1, div2, subjsul, detaildiv, subjlink;

function doubanDisplay() {
    prefs = new gadgets.Prefs();
    content = document.getElementById('content_div');
    var username = prefs.getString("username");
    content.innerHTML = '';

    if (!username) {
    	content.innerHTML = decodeURI('%E8%AF%B7%E8%AE%BE%E7%BD%AE%E4%BD%A0%E5%9C%A8%E8%B1%86%E7%93%A3%E4%B8%8A%E7%94%A8%E6%88%B7%E5%90%8D')+'<br/><br/>'+decodeURI('%E4%BD%A0%E5%9C%A8%E8%B1%86%E7%93%A3%E4%B8%8A%E7%9A%84%E7%94%A8%E6%88%B7%E5%90%8D%E6%98%AF%E4%BD%A0%E8%B1%86%E7%93%A3%E4%B8%AA%E4%BA%BA%E9%A6%96%E9%A1%B5%E9%93%BE%E6%8E%A5%E4%B8%AD%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E9%83%A8%E5%88%86%E3%80%82')+'<br/><br/>'+decodeURI('%E4%BE%8B%E5%A6%82%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%BD%A0%E8%B1%86%E7%93%A3%E4%B8%AA%E4%BA%BA%E9%A6%96%E9%A1%B5%E9%93%BE%E6%8E%A5%E6%98%AFhttps://www.douban.com/people/ahbei/%EF%BC%8C%E9%82%A3%E4%B9%88%E4%BD%A0%E7%9A%84%E7%94%A8%E6%88%B7%E5%90%8D%E6%98%AFahbei')
    	gadgets.window.adjustHeight();
    	return;
    }

    div1 = document.createElement('div');
    div1.innerHTML += "<div class='subj_imgs'>"+decodeURI('%E8%AF%BB%E5%8F%96%E4%B8%AD')+"...</div>"
    div1.innerHTML += "<div style='float:right;clear:both'><a href='https://www.douban.com/people/"+prefs.getString("username")+"' target='_blank'><img src='//img3.doubanio.com/pics/atdouban.gif'></a><div>"
    content.appendChild(div1)

    div2 = document.createElement('div');
    div2.innerHTML = '<div style="margin-bottom:2px;"><a herf="javascript:void(0);" style="cursor:pointer">>> '+decodeURI('%E8%BF%94%E5%9B%9E')+'</a></div>'
    div2.innerHTML += '<div class="subj_detail"></div>'
    div2.innerHTML += "<div style='float:right'><a href='' target='_blank'></a><div>"
    div2.childNodes[0].childNodes[0].onclick = function(){
        div1.style.display = "";
        div2.style.display = "none";
        gadgets.window.adjustHeight();
    }
    div2.style.display = "none";
    content.appendChild(div2)

    subjsul = div1.childNodes[0]
    detaildiv = div2.childNodes[1]
    subjlink = div2.childNodes[2].childNodes[0]

    var statusmapper = {
        book:{wish:'wish', doing:'reading', done:'read', all:''},
        movie:{wish:'wish', doing:'watching', done:'watched', all:''},
        music:{wish:'wish', doing:'listening', done:'listened', all:''}
    }
    var apikey = '0b7103e0d42ed84922530ba27c8c88db';
    var url = 'https://api.douban.com/people/'+prefs.getString("username")+'/collection?apikey='+apikey+'&max-results='+prefs.getString('num')+'&alt=json&cat='+prefs.getString('cat')+'&status='+statusmapper[prefs.getString('cat')][prefs.getString('status')];
    var params = {};
    params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
    gadgets.io.makeRequest(url, generateSubjectsUL, params)
    gadgets.window.adjustHeight();
}

function generateSubjectsUL(json){
    json = json.data
    subjsul.innerHTML = '';
    var numX = prefs.getInt("numX");
    for (var i=0; i<json.entry.length; ++i) {
        var subj = parseSubject(json.entry[i]['db:subject'])
        var img = document.createElement('img');
        img.src = gadgets.io.getProxyUrl(subj.link.image)
        img.title = subj.title
        img.style.cursor = 'pointer';
        img.onclick = function(link){
            return function(e){
                var params = {};
                params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
                gadgets.io.makeRequest(link+'?alt=json', function(json){
                    var subj = parseSubject(json.data)
                    detaildiv.innerHTML = generationDetailString(subj)
                    subjlink.href = subj.link.alternate
                    subjlink.innerHTML = ">> "+decodeURI('%E6%9B%B4%E5%A4%9A')+"\""+subj.title+"\""+decodeURI('%E7%9A%84%E4%BB%8B%E7%BB%8D')
                    div2.style.display = "";
                    div1.style.display = "none";
                    gadgets.window.adjustHeight();
                }, params)}
        }(subj.link.self);

        var div = document.createElement('div');
        div.appendChild(img);
        subjsul.appendChild(div);
    }
    gadgets.window.adjustHeight();
}

function generationDetailString(subj){
    var tl = subj.title ? subj.title : "";
    var author = subj.author ? subj.author : "";
    var au = subj.attribute.author ? subj.attribute.author.join(' / ') : "";
    var di = subj.attribute.director ? subj.attribute.director.join(' / ') : "";
    var at = subj.attribute.singer ? subj.attribute.singer.join(' / ') : "";
    var tmp = "<div class='subj_img'><a href="+subj.link.alternate+" target='_blank'><img src="+subj.link.image+"></a></div>";
    tmp += "<div>"
    var titlemapper = {
        book : decodeURI('%E4%B9%A6%E5%90%8D'),
        movie : decodeURI('%E5%BD%B1%E5%90%8D'),
        tv : decodeURI('%E5%BD%B1%E5%90%8D'),
        music : decodeURI('%E5%94%B1%E7%89%87%E5%90%8D')
    }
    tmp += titlemapper[subj.category]
    tmp += " : <a href="+subj.link.alternate+" target='_blank'>"+tl+"</a></div>";
    if (subj.title_cn) tmp += "<div>"+decodeURI('%E4%B8%AD%E6%96%87%E5%90%8D')+" : "+subj.title_cn+"</div>";
    if (subj.attribute.author) tmp += "<div>"+decodeURI('%E4%BD%9C%E8%80%85')+" : "+(subj.attribute.author.join(' / '))+"</div>";
    if (subj.attribute.director) tmp += "<div>"+decodeURI('%E5%AF%BC%E6%BC%94')+" : "+(subj.attribute.director.join(' / '))+"</div>";
    if (subj.attribute.singer) tmp += "<div>"+decodeURI('%E8%A1%A8%E6%BC%94%E8%80%85')+" : "+(subj.attribute.singer.join(' / '))+"</div>";
    if (subj.attribute.cast) tmp += "<div>"+decodeURI('%E4%B8%BB%E6%BC%94')+" : "+(subj.attribute.cast.join(' / '))+"</div>";
    if (subj.attribute.language) tmp += "<div>"+decodeURI('%E8%AF%AD%E8%A8%80')+" : "+(subj.attribute.language.join(' / '))+"</div>";
    if (subj.attribute.country) tmp += "<div>"+decodeURI('%E5%88%B6%E7%89%87%E5%9B%BD%E5%AE%B6/%E5%9C%B0%E5%8C%BA')+" : "+(subj.attribute.country.join(' / '))+"</div>";
    if (subj.rating.average) tmp +="<div>"+decodeURI('%E5%B9%B3%E5%9D%87%E8%AF%84%E4%BB%B7')+" : "+subj.rating.average+" / "+subj.rating.numRaters+"</div>"
    tmp += "<p class='description'>"+(subj.summary ? '<br />'+subj.summary.slice(0, 200)+'...' : "")+"</p>";
    return tmp;
}

function parseSubject(re) {
    var subject = {};
    if (re.id) subject.id=re.id.$t;
    subject.nid = subject.id.match('[0-9]+').toString();
    if (re.author && re.author[0] && re.author[0].name) subject.author=re.author[0].name.$t;
    if (re.category) subject.category  = re.category['@term'].match('2007#([a-z]+)')[1];
    if (re.title) subject.title=re.title.$t;
    if (re.summary) subject.summary=re.summary.$t;
    subject.tag = [];
    if (re['db:tag'])
        for (var j=0; j<re['db:tag'].length; ++j)
            subject.tag.push({count:re['db:tag'][j]['@count'], name:re['db:tag'][j]['@name']});
    if (re['gd:rating']) subject.rating = {min:re['gd:rating']['@min'],numRaters:re['gd:rating']['@numRaters'],average:re['gd:rating']['@average'],max:re['gd:rating']['@max']};
    subject.attribute = {};
    if (re['db:attribute'])
        for (var j=0; j<re['db:attribute'].length; ++j) {
            if (subject.attribute[re['db:attribute'][j]['@name']] == null)
                subject.attribute[re['db:attribute'][j]['@name']] = [];
            subject.attribute[re['db:attribute'][j]['@name']].push(re['db:attribute'][j]['$t']);
            if (re['db:attribute'][j]['@name'] == 'aka' && re['db:attribute'][j]['@lang'] == 'zh_CN')
                subject.title_cn = re['db:attribute'][j]['$t']
        }
    subject.link = {};
    if (re.link)
        for (var j=0; j<re.link.length; ++j)
            subject.link[re.link[j]['@rel']] = re.link[j]['@href'];
    return subject;
}

gadgets.util.registerOnLoadHandler(doubanDisplay);
    </script>
        ]]>
  </Content>
</Module>