|
|
function Music() { this.init(); } (function () { var pages = [], panels = [], selectedItem = null; Music.prototype = { total: 70, pageSize: 10, dataUrl: "http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common", playerUrl: "http://box.baidu.com/widget/flash/bdspacesong.swf",
init: function () { var me = this; domUtils.on($G("J_searchName"), "keyup", function (event) { var e = window.event || event; if (e.keyCode == 13) { me.dosearch(); } }); domUtils.on($G("J_searchBtn"), "click", function () { me.dosearch(); }); }, callback: function (data) { var me = this; me.data = data.song_list; setTimeout(function () { $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list); }, 300); }, dosearch: function () { var me = this; selectedItem = null; var key = $G('J_searchName').value; if (utils.trim(key) == "") return false; key = encodeURIComponent(key); me._sent(key); }, doselect: function (i) { var me = this; if (typeof i == 'object') { selectedItem = i; } else if (typeof i == 'number') { selectedItem = me.data[i]; } }, onpageclick: function (id) { var me = this; for (var i = 0; i < pages.length; i++) { $G(pages[i]).className = 'pageoff'; $G(panels[i]).className = 'paneloff'; } $G('page' + id).className = 'pageon'; $G('panel' + id).className = 'panelon'; }, listenTest: function (elem) { var me = this, view = $G('J_preview'), is_play_action = (elem.className == 'm-try'), old_trying = me._getTryingElem();
if (old_trying) { old_trying.className = 'm-try'; view.innerHTML = ''; } if (is_play_action) { elem.className = 'm-trying'; view.innerHTML = me._buildMusicHtml(me._getUrl(true)); } }, _sent: function (param) { var me = this; $G('J_resultBar').innerHTML = '<div class="loading"></div>';
utils.loadFile(document, { src: me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(), tag: "script", type: "text/javascript", defer: "defer" }); }, _removeHtml: function (str) { var reg = /<\s*\/?\s*[^>]*\s*>/gi; return str.replace(reg, ""); }, _getUrl: function (isTryListen) { var me = this; var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist=' + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra=' + encodeURIComponent(me._removeHtml(selectedItem.album_title)) + '&autoPlay=' + isTryListen + '' + '&loop=true'; return me.playerUrl + "?" + param; }, _getTryingElem: function () { var s = $G('J_listPanel').getElementsByTagName('span');
for (var i = 0; i < s.length; i++) { if (s[i].className == 'm-trying') return s[i]; } return null; }, _buildMusicHtml: function (playerUrl) { var html = '<embed class="BDE_try_Music" allowfullscreen="false" pluginspage="http://www.macromedia.com/go/getflashplayer"'; html += ' src="' + playerUrl + '"'; html += ' width="1" height="1" style="position:absolute;left:-2000px;"'; html += ' type="application/x-shockwave-flash" wmode="transparent" play="true" loop="false"'; html += ' menu="false" allowscriptaccess="never" scale="noborder">'; return html; }, _byteLength: function (str) { return str.replace(/[^\u0000-\u007f]/g, "\u0061\u0061").length; }, _getMaxText: function (s) { var me = this; s = me._removeHtml(s); if (me._byteLength(s) > 12) return s.substring(0, 5) + '...'; if (!s) s = " "; return s; }, _rebuildData: function (data) { var me = this, newData = [], d = me.pageSize, itembox; for (var i = 0; i < data.length; i++) { if ((i + d) % d == 0) { itembox = []; newData.push(itembox) } itembox.push(data[i]); } return newData; }, _renderTemplate: function (data) { var me = this; if (data.length == 0) return '<div class="empty">' + lang.emptyTxt + '</div>'; data = me._rebuildData(data); var s = [], p = [], t = []; s.push('<div id="J_listPanel" class="listPanel">'); p.push('<div class="page">'); for (var i = 0, tmpList; tmpList = data[i++];) { panels.push('panel' + i); pages.push('page' + i); if (i == 1) { s.push('<div id="panel' + i + '" class="panelon">'); if (data.length != 1) { t.push('<div id="page' + i + '" onclick="music.onpageclick(' + i + ')" class="pageon">' + (i) + '</div>'); } } else { s.push('<div id="panel' + i + '" class="paneloff">'); t.push('<div id="page' + i + '" onclick="music.onpageclick(' + i + ')" class="pageoff">' + (i) + '</div>'); } s.push('<div class="m-box">'); s.push('<div class="m-h"><span class="m-t">' + lang.chapter + '</span><span class="m-s">' + lang.singer + '</span><span class="m-z">' + lang.special + '</span><span class="m-try-t">' + lang.listenTest + '</span></div>'); for (var j = 0, tmpObj; tmpObj = tmpList[j++];) { s.push('<label for="radio-' + i + '-' + j + '" class="m-m">'); s.push('<input type="radio" id="radio-' + i + '-' + j + '" name="musicId" class="m-l" onclick="music.doselect(' + (me.pageSize * (i - 1) + (j - 1)) + ')"/>'); s.push('<span class="m-t">' + me._getMaxText(tmpObj.title) + '</span>'); s.push('<span class="m-s">' + me._getMaxText(tmpObj.author) + '</span>'); s.push('<span class="m-z">' + me._getMaxText(tmpObj.album_title) + '</span>'); s.push('<span class="m-try" onclick="music.doselect(' + (me.pageSize * (i - 1) + (j - 1)) + ');music.listenTest(this)"></span>'); s.push('</label>'); } s.push('</div>'); s.push('</div>'); } t.reverse(); p.push(t.join('')); s.push('</div>'); p.push('</div>'); return s.join('') + p.join(''); }, exec: function () { var me = this; if (selectedItem == null) return; $G('J_preview').innerHTML = ""; editor.execCommand('music', { url: me._getUrl(false), width: 400, height: 95 }); } }; })();
|