Blame view

static/ueditor/dialogs/music/music.js 7.82 KB
831eac332   zhuzhenchao   add file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
  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
              });
          }
      };
  })();