123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- 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
- });
- }
- };
- })();
|