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