www.gusucode.com > Carbon Forum PHP轻论坛系统 v3.6.5源码程序 > Carbon-Forum-3.6.5/static/editor/dialogs/music/music.js

    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 = "&nbsp;";
			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
			});
		}
	};
})();