meplayer.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. /******/ (function(modules) { // webpackBootstrap
  2. /******/ // The module cache
  3. /******/ var installedModules = {};
  4. /******/ // The require function
  5. /******/ function __webpack_require__(moduleId) {
  6. /******/ // Check if module is in cache
  7. /******/ if(installedModules[moduleId])
  8. /******/ return installedModules[moduleId].exports;
  9. /******/ // Create a new module (and put it into the cache)
  10. /******/ var module = installedModules[moduleId] = {
  11. /******/ exports: {},
  12. /******/ id: moduleId,
  13. /******/ loaded: false
  14. /******/ };
  15. /******/ // Execute the module function
  16. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  17. /******/ // Flag the module as loaded
  18. /******/ module.loaded = true;
  19. /******/ // Return the exports of the module
  20. /******/ return module.exports;
  21. /******/ }
  22. /******/ // expose the modules object (__webpack_modules__)
  23. /******/ __webpack_require__.m = modules;
  24. /******/ // expose the module cache
  25. /******/ __webpack_require__.c = installedModules;
  26. /******/ // __webpack_public_path__
  27. /******/ __webpack_require__.p = "";
  28. /******/ // Load entry module and return exports
  29. /******/ return __webpack_require__(0);
  30. /******/ })
  31. /************************************************************************/
  32. /******/ ([
  33. /* 0 */
  34. /***/ (function(module, exports, __webpack_require__) {
  35. /* WEBPACK VAR INJECTION */(function(global) {'use strict';
  36. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  37. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  38. var _constants = __webpack_require__(1);
  39. var _lyric = __webpack_require__(2);
  40. var lyric = _interopRequireWildcard(_lyric);
  41. var _utils = __webpack_require__(3);
  42. var utils = _interopRequireWildcard(_utils);
  43. var _spectrum = __webpack_require__(4);
  44. var spectrum = _interopRequireWildcard(_spectrum);
  45. var _selector = __webpack_require__(5);
  46. var selector = _interopRequireWildcard(_selector);
  47. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  48. var root = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) == 'object' && window.window === window ? window : (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global.global === global ? global : undefined;
  49. root.mePlayer = function (options) {
  50. // 检查必填选项
  51. if (!(options.music && options.music.src)) {
  52. console.error('必须指定音乐地址哦~');
  53. return;
  54. }
  55. var musicConf = options.music,
  56. target = selector.$(options.target) || document.querySelector('.meplayer'),
  57. theme = options.theme || _constants.THEME_DEFAULT,
  58. hasLrc = musicConf.lrc ? true : false,
  59. coverSrc = musicConf.cover || 'https://unsplash.it/78/?random',
  60. loop = musicConf.loop || false,
  61. autoplay = options.autoplay,
  62. currentThemeClass = theme === _constants.THEME_DEFAULT ? 'meplayer-container' : 'meplayer-container-mini',
  63. containerClass = currentThemeClass + ' ' + (hasLrc ? 'meplayer-haslrc' : '') + ' meplayer-isloading',
  64. playerHTMLContent = '<div class="' + containerClass + '">\n <audio src=' + musicConf.src + ' preload="auto"></audio>\n <div class="meplayer-info">\n <div class="meplayer-info-cover"><img src=' + coverSrc + ' alt="cd-cover"></div>\n <div class="meplayer-meta">\n <div class="meplayer-meta-title">' + musicConf.title + '</div>\n <div class="meplayer-meta-author">' + musicConf.author + '</div>\n <div class="meplayer-meta-time-tick"><span class="meplayer-meta-time-tick-text"></span></div>\n </div>\n </div>\n <canvas class="meplayer-spectrum"></canvas>\n <div class="meplayer-lyric"><div class="meplayer-lyric-area"></div></div>\n <div class="meplayer-control"><div class="meplayer-control-play"><i class="icon-play"></i><i class="icon-pause"></i></div></div>\n <div class="meplayer-volume-bg"><div class="meplayer-volume"><i class="icon-volume"></i><div class="meplayer-volume-progress"></div></div></div>\n <div class="meplayer-duration"><i class="icon-clock"></i><span class="meplayer-duration-text">loading</span></div>\n <div class="meplayer-loadingsign"><i class="icon-spin animate-spin"></i>loading</div>\n <div class="meplayer-timeline-bg"><div class="meplayer-timeline"><div class="meplayer-timeline-passed"></div></div></div>\n </div>';
  65. target.innerHTML = playerHTMLContent;
  66. var meplayerContainer = target.querySelector('.' + currentThemeClass),
  67. _selector$init$select = selector.init(meplayerContainer).select(['audio', '.meplayer-control-play', '.meplayer-meta-time-tick-text', '.meplayer-duration', '.meplayer-timeline', '.meplayer-timeline-passed', '.meplayer-volume', '.meplayer-volume-progress', '.meplayer-lyric-area', '.meplayer-spectrum']),
  68. _selector$init$select2 = _slicedToArray(_selector$init$select, 10),
  69. audio = _selector$init$select2[0],
  70. playBtn = _selector$init$select2[1],
  71. timeTick = _selector$init$select2[2],
  72. timeCount = _selector$init$select2[3],
  73. timeLine = _selector$init$select2[4],
  74. timePassed = _selector$init$select2[5],
  75. volumeArea = _selector$init$select2[6],
  76. volumeProgress = _selector$init$select2[7],
  77. lyricArea = _selector$init$select2[8],
  78. canvas = _selector$init$select2[9],
  79. duration;
  80. if (hasLrc) {
  81. lyric.parse(musicConf.lrc).renderTo(lyricArea);
  82. } else {
  83. // 频谱动画初始化
  84. spectrum.init(canvas);
  85. }
  86. eventInit();
  87. if (autoplay) {
  88. handlePlayClick();
  89. }
  90. // 重定义meplayer
  91. root.mePlayer = {
  92. play: play,
  93. pause: pause,
  94. toggleTheme: toggleTheme
  95. // 给播放器绑定各种事件
  96. };function eventInit() {
  97. audio.addEventListener('ended', handleAudioEnd);
  98. audio.addEventListener('canplaythrough', handleCanPlayThrough);
  99. audio.addEventListener('durationchange', handleDurationChange);
  100. audio.addEventListener('timeupdate', handleTimeUpdate);
  101. playBtn.addEventListener('click', handlePlayClick);
  102. timeLine.addEventListener('click', handleTimeLineClick);
  103. }
  104. function handleAudioEnd() {
  105. if (loop) {
  106. audio.play();
  107. } else {
  108. utils.removeClass(meplayerContainer, 'meplayer-isplaying');
  109. }
  110. }
  111. function handleCanPlayThrough() {
  112. duration = this.duration;
  113. setTimeout(function () {
  114. utils.removeClass(meplayerContainer, 'meplayer-isloading');
  115. timeCount.querySelector('.meplayer-duration-text').innerText = utils.parseSec(duration.toFixed(0));
  116. }, 1000);
  117. }
  118. function handleDurationChange() {
  119. duration = this.duration;
  120. }
  121. function handleTimeUpdate() {
  122. var curTime = audio.currentTime;
  123. var curTimeForLrc = audio.currentTime.toFixed(3);
  124. var playPercent = 100 * (curTime / duration);
  125. timePassed.style.width = playPercent.toFixed(2) + '%';
  126. timeTick.innerText = utils.parseSec(curTime);
  127. if (hasLrc && theme === _constants.THEME_DEFAULT) {
  128. var tempLrcIndex = lyric.currentIndex(curTimeForLrc);
  129. var tempLrcLines = lyricArea.querySelectorAll('p');
  130. var tempLrcLinePre = tempLrcLines[tempLrcIndex - 1];
  131. var tempLrcLine = tempLrcLines[tempLrcIndex];
  132. var tempLrcLineNext = tempLrcLines[tempLrcIndex + 1];
  133. if (!tempLrcLine.className.includes('meplayer-lyric-current')) {
  134. utils.removeClass(lyricArea.querySelector('.meplayer-lyric-current'), 'meplayer-lyric-current');
  135. if (lyricArea.querySelector('.meplayer-lyric-pre')) {
  136. utils.removeClass(lyricArea.querySelector('.meplayer-lyric-pre'), 'meplayer-lyric-pre');
  137. }
  138. if (lyricArea.querySelector('.meplayer-lyric-next')) {
  139. utils.removeClass(lyricArea.querySelector('.meplayer-lyric-next'), 'meplayer-lyric-next');
  140. }
  141. utils.addClass(tempLrcLine, 'meplayer-lyric-current');
  142. if (tempLrcLinePre) {
  143. utils.addClass(tempLrcLinePre, 'meplayer-lyric-pre');
  144. }
  145. if (tempLrcLineNext) {
  146. utils.addClass(tempLrcLineNext, 'meplayer-lyric-next');
  147. }
  148. lyricArea.style.webkitTransform = 'translateY(-' + 20 * tempLrcIndex + 'px)';
  149. lyricArea.style.transform = 'translateY(-' + 20 * tempLrcIndex + 'px)';
  150. }
  151. }
  152. }
  153. function handlePlayClick() {
  154. var _handleMouseWheel;
  155. if (audio.paused) {
  156. audio.play();
  157. if (theme === _constants.THEME_DEFAULT && !hasLrc) {
  158. spectrum.draw();
  159. }
  160. // 播放状态中可以用滑轮调节音量
  161. meplayerContainer.addEventListener('mousewheel', function handleMouseWheel() {
  162. var timer = null;
  163. var step = 0.05;
  164. _handleMouseWheel = function _handleMouseWheel(event) {
  165. if (timer) {
  166. clearTimeout(timer);
  167. }
  168. if (!meplayerContainer.className.includes('meplayer-adjusting-volume')) {
  169. utils.addClass(meplayerContainer, 'meplayer-adjusting-volume');
  170. }
  171. if (event.wheelDeltaY < 0 && audio.volume > step) {
  172. audio.volume -= step;
  173. }
  174. if (event.wheelDeltaY > 0 && audio.volume < 1 - step) {
  175. audio.volume += step;
  176. }
  177. if (theme === _constants.THEME_DEFAULT) {
  178. volumeProgress.style.width = audio.volume * 100 + '%';
  179. } else {
  180. volumeArea.querySelector('i').style.opacity = audio.volume;
  181. }
  182. event.preventDefault();
  183. timer = setTimeout(function () {
  184. utils.removeClass(meplayerContainer, 'meplayer-adjusting-volume');
  185. }, 1000);
  186. };
  187. return _handleMouseWheel;
  188. }());
  189. } else {
  190. audio.pause();
  191. spectrum.stop();
  192. meplayerContainer.removeEventListener('mousewheel', _handleMouseWheel);
  193. }
  194. utils.toggleClass(meplayerContainer, 'meplayer-isplaying');
  195. }
  196. function handleTimeLineClick() {
  197. var clickPercent = (event.pageX - utils.getAbsLeft(this)) / this.offsetWidth;
  198. timePassed.style.width = clickPercent * 100 + '%';
  199. audio.currentTime = (clickPercent * duration).toFixed(0);
  200. }
  201. function play() {
  202. if (audio.paused) {
  203. utils.addClass(meplayerContainer, 'meplayer-isplaying');
  204. audio.play();
  205. }
  206. }
  207. function pause() {
  208. if (!audio.paused) {
  209. utils.removeClass(meplayerContainer, 'meplayer-isplaying');
  210. audio.pause();
  211. }
  212. }
  213. function toggleTheme() {
  214. var step = 0.03;
  215. var count = 0;
  216. var maxCount = 200;
  217. utils.addClass(meplayerContainer, 'meplayer-changing-theme');
  218. theme = theme === _constants.THEME_DEFAULT ? _constants.THEME_MINI : _constants.THEME_DEFAULT;
  219. loop();
  220. function loop() {
  221. count++;
  222. meplayerContainer.style.opacity -= step;
  223. if (meplayerContainer.style.opacity <= 0) {
  224. step *= -1;
  225. meplayerContainer.style.opacity = 0;
  226. utils.toggleClass(meplayerContainer, 'meplayer-container-mini');
  227. utils.toggleClass(meplayerContainer, 'meplayer-container');
  228. }
  229. if (meplayerContainer.style.opacity < 1 && count < maxCount) {
  230. requestAnimationFrame(loop);
  231. } else {
  232. setTimeout(function () {
  233. utils.removeClass(meplayerContainer, 'meplayer-changing-theme');
  234. }, 500);
  235. }
  236. }
  237. }
  238. };
  239. if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
  240. module.exports = root.mePlayer;
  241. }
  242. /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  243. /***/ }),
  244. /* 1 */
  245. /***/ (function(module, exports) {
  246. 'use strict';
  247. Object.defineProperty(exports, "__esModule", {
  248. value: true
  249. });
  250. /*
  251. * 全局常量声明
  252. */
  253. var THEME_DEFAULT = 'default';
  254. var THEME_MINI = 'mini';
  255. var LYRIC_CURRENT_CLASS = 'meplayer-lyric-current';
  256. var LYRIC_NEXT_CLASS = 'meplayer-lyric-next';
  257. exports.THEME_DEFAULT = THEME_DEFAULT;
  258. exports.THEME_MINI = THEME_MINI;
  259. exports.LYRIC_CURRENT_CLASS = LYRIC_CURRENT_CLASS;
  260. exports.LYRIC_NEXT_CLASS = LYRIC_NEXT_CLASS;
  261. /***/ }),
  262. /* 2 */
  263. /***/ (function(module, exports, __webpack_require__) {
  264. 'use strict';
  265. Object.defineProperty(exports, "__esModule", {
  266. value: true
  267. });
  268. exports.currentIndex = exports.renderTo = exports.parse = undefined;
  269. var _constants = __webpack_require__(1);
  270. var lyrics;
  271. // 歌词解析脚本
  272. // 修改自:https://github.com/DIYgod/APlayer
  273. function parse(text) {
  274. var lyric = text.split('\n');
  275. var lrc = [];
  276. var len = lyric.length;
  277. var reg1 = /\[(\d{2}):(\d{2})\.(\d{2,3})]/g;
  278. var reg2 = /\[(\d{2}):(\d{2})\.(\d{2,3})]/;
  279. for (var i = 0; i < len; i++) {
  280. var time = lyric[i].match(reg1);
  281. var lrcText = lyric[i].replace(reg1, '').replace(/^\s+|\s+$/g, '');
  282. // 排除空行
  283. if (!lrcText) {
  284. continue;
  285. }
  286. if (time != null) {
  287. var timeLen = time.length;
  288. for (var j = 0; j < timeLen; j++) {
  289. var oneTime = reg2.exec(time[j]);
  290. var lrcTime = oneTime[1] * 60 + parseInt(oneTime[2]) + parseInt(oneTime[3]) / ((oneTime[3] + '').length === 2 ? 100 : 1000);
  291. lrc.push({
  292. time: lrcTime,
  293. text: lrcText
  294. });
  295. }
  296. }
  297. }
  298. lrc.sort(function (a, b) {
  299. return a.time - b.time;
  300. });
  301. lyrics = lrc;
  302. return this;
  303. }
  304. // 歌词文本解析成DOM结构
  305. function renderTo(target) {
  306. if (!lyrics) {
  307. console.error('未指定歌词文本!');
  308. return;
  309. }
  310. var lyricHTML = '';
  311. for (var i = 0; i < lyrics.length; i++) {
  312. lyricHTML += '<p>' + lyrics[i].text + '</p>';
  313. }
  314. target.innerHTML = lyricHTML;
  315. target.querySelector('p').className = _constants.LYRIC_CURRENT_CLASS;
  316. target.querySelector('p + p').className = _constants.LYRIC_NEXT_CLASS;
  317. return this;
  318. }
  319. function currentIndex(time) {
  320. if (time < lyrics[0].time) return 0;
  321. for (var i = 0, l = lyrics.length; i < l; i++) {
  322. if (time >= lyrics[i].time && (!lyrics[i + 1] || time <= lyrics[i + 1].time)) {
  323. break;
  324. }
  325. }
  326. return i;
  327. }
  328. exports.parse = parse;
  329. exports.renderTo = renderTo;
  330. exports.currentIndex = currentIndex;
  331. /***/ }),
  332. /* 3 */
  333. /***/ (function(module, exports) {
  334. 'use strict';
  335. Object.defineProperty(exports, "__esModule", {
  336. value: true
  337. });
  338. function toggleClass(el, className) {
  339. if (el.classList) {
  340. el.classList.toggle(className);
  341. } else {
  342. var classes = el.className.split(' ');
  343. var existingIndex = classes.indexOf(className);
  344. if (existingIndex >= 0) classes.splice(existingIndex, 1);else classes.push(className);
  345. el.className = classes.join(' ');
  346. }
  347. }
  348. function addClass(el, className) {
  349. if (el.classList) el.classList.add(className);else el.className += ' ' + className;
  350. }
  351. function removeClass(el, className) {
  352. if (el.classList) el.classList.remove(className);else el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
  353. }
  354. function getAbsLeft(el) {
  355. var left = el.offsetLeft;
  356. while (el.offsetParent) {
  357. el = el.offsetParent;
  358. left += el.offsetLeft;
  359. }
  360. return left;
  361. }
  362. function parseSec(sec) {
  363. var tempMin = sec / 60 | 0;
  364. var tempSec = sec % 60 | 0;
  365. var curMin = tempMin < 10 ? '0' + tempMin : tempMin;
  366. var curSec = tempSec < 10 ? '0' + tempSec : tempSec;
  367. return curMin + ':' + curSec;
  368. }
  369. exports.toggleClass = toggleClass;
  370. exports.addClass = addClass;
  371. exports.removeClass = removeClass;
  372. exports.getAbsLeft = getAbsLeft;
  373. exports.parseSec = parseSec;
  374. /***/ }),
  375. /* 4 */
  376. /***/ (function(module, exports) {
  377. 'use strict';
  378. Object.defineProperty(exports, "__esModule", {
  379. value: true
  380. });
  381. /*
  382. * 频谱动画模拟
  383. * */
  384. var canvas,
  385. ctx,
  386. specItems = [],
  387. needStop = false,
  388. timer = null,
  389. random = Math.random;
  390. function randHeight() {
  391. if (random() > 0.8) {
  392. return random() * 8 + 11;
  393. } else {
  394. return random() * 6 + 2;
  395. }
  396. }
  397. var randHeightGenerator = function randHeightGenerator(base) {
  398. var max = base * 1.5 > 28 ? 28 : base * 1.5,
  399. min = 1,
  400. direction = random() > 0.5 ? 1 : -1,
  401. tempHeight = base,
  402. curStep;
  403. return function () {
  404. curStep = direction;
  405. tempHeight += curStep;
  406. if (tempHeight >= max) {
  407. direction *= -1;
  408. tempHeight = max;
  409. } else if (tempHeight <= min) {
  410. direction *= -1;
  411. tempHeight = min;
  412. }
  413. if (random() > 0.9) {
  414. direction *= -1;
  415. }
  416. return tempHeight;
  417. };
  418. };
  419. function loop() {
  420. ctx.clearRect(0, -canvas.height / 2, canvas.width, canvas.height);
  421. for (var i = 0; i < specItems.length; i++) {
  422. var item = specItems[i];
  423. var height = item.getHeight();
  424. ctx.fillRect(i + specItems[i].xSpace, -height / 2, specItems[i].width, height);
  425. }
  426. if (!needStop) {
  427. timer = requestAnimationFrame(loop);
  428. }
  429. }
  430. function init(canvasElem) {
  431. var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 220;
  432. var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;
  433. var color = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#D94240';
  434. canvas = canvasElem;
  435. canvas.width = width;
  436. canvas.height = height;
  437. ctx = canvas.getContext('2d');
  438. ctx.fillStyle = color;
  439. ctx.translate(0, height / 2);
  440. for (var i = 0; i < 64; i++) {
  441. var xSpace = i == 0 ? 0 : 5 * i;
  442. var tempItem = {
  443. xSpace: xSpace,
  444. width: 1,
  445. getHeight: randHeightGenerator(randHeight())
  446. };
  447. specItems.push(tempItem);
  448. }
  449. }
  450. function draw() {
  451. needStop = false;
  452. loop();
  453. }
  454. function stop() {
  455. needStop = true;
  456. }
  457. exports.init = init;
  458. exports.draw = draw;
  459. exports.stop = stop;
  460. /***/ }),
  461. /* 5 */
  462. /***/ (function(module, exports) {
  463. 'use strict';
  464. Object.defineProperty(exports, "__esModule", {
  465. value: true
  466. });
  467. /**
  468. * 元素选择器辅助工具模块
  469. * init : 设定容器
  470. * select: 传入选择器则返回元素,传入选择器数组则返回对应的元素数组
  471. * $ : 辅助功能,使得无论传入选择器字符串还是元素本身,都能返回正确的元素
  472. */
  473. var container;
  474. function init(element) {
  475. container = $(element);
  476. return this;
  477. }
  478. function select(element) {
  479. var result;
  480. if (Array.isArray(element)) {
  481. var tempResults = [];
  482. var _iteratorNormalCompletion = true;
  483. var _didIteratorError = false;
  484. var _iteratorError = undefined;
  485. try {
  486. for (var _iterator = element[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  487. var value = _step.value;
  488. tempResults.push($(value, container));
  489. }
  490. } catch (err) {
  491. _didIteratorError = true;
  492. _iteratorError = err;
  493. } finally {
  494. try {
  495. if (!_iteratorNormalCompletion && _iterator.return) {
  496. _iterator.return();
  497. }
  498. } finally {
  499. if (_didIteratorError) {
  500. throw _iteratorError;
  501. }
  502. }
  503. }
  504. result = tempResults;
  505. } else {
  506. result = $(element, container);
  507. }
  508. return result;
  509. }
  510. function $(element, context) {
  511. var result;
  512. context = context || document;
  513. if (typeof element === 'string') {
  514. result = context.querySelector(element);
  515. } else if (element.toString().includes('HTMLDivElement')) {
  516. result = element;
  517. }
  518. return result;
  519. }
  520. exports.init = init;
  521. exports.select = select;
  522. exports.$ = $;
  523. /***/ })
  524. /******/ ]);