193 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 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
 | |
|             });
 | |
|         }
 | |
|     };
 | |
| })();
 | |
| 
 | |
| 
 | |
| 
 |