mui.picker.min.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. /**
  2. * 选择列表插件
  3. * varstion 2.0.0
  4. * by Houfeng
  5. * Houfeng@DCloud.io
  6. **/
  7. ! function(e, t, i, n) {
  8. var a = 30,
  9. r = 90,
  10. s = 40,
  11. c = 10,
  12. l = e.rad2deg = function(e) {
  13. return e / (Math.PI / 180)
  14. },
  15. o = (e.deg2rad = function(e) {
  16. return e * (Math.PI / 180)
  17. }, navigator.platform.toLowerCase()),
  18. d = navigator.userAgent.toLowerCase(),
  19. u = (d.indexOf("iphone") > -1 || d.indexOf("ipad") > -1 || d.indexOf("ipod") > -1) && (o.indexOf("iphone") > -
  20. 1 || o.indexOf("ipad") > -1 || o.indexOf("ipod") > -1),
  21. p = e.Picker = function(e, t) {
  22. var i = this;
  23. i.holder = e, i.options = t || {}, i.init(), i.initInertiaParams(), i.calcElementItemPostion(!0), i
  24. .bindEvent()
  25. };
  26. p.prototype.findElementItems = function() {
  27. var e = this;
  28. return e.elementItems = [].slice.call(e.holder.querySelectorAll("li")), e.elementItems
  29. }, p.prototype.init = function() {
  30. var e = this;
  31. e.list = e.holder.querySelector("ul"), e.findElementItems(), e.height = e.holder.offsetHeight, e.r = e
  32. .height / 2 - c, e.d = 2 * e.r, e.itemHeight = e.elementItems.length > 0 ? e.elementItems[0]
  33. .offsetHeight : s, e.itemAngle = parseInt(e.calcAngle(.8 * e.itemHeight)), e.hightlightRange = e
  34. .itemAngle / 2, e.visibleRange = r, e.beginAngle = 0, e.beginExceed = e.beginAngle - a, e.list.angle = e
  35. .beginAngle, u && (e.list.style.webkitTransformOrigin = "center center " + e.r + "px")
  36. }, p.prototype.calcElementItemPostion = function(e) {
  37. var t = this;
  38. e && (t.items = []), t.elementItems.forEach(function(i) {
  39. var n = t.elementItems.indexOf(i);
  40. if (t.endAngle = t.itemAngle * n, i.angle = t.endAngle, i.style.webkitTransformOrigin =
  41. "center center -" + t.r + "px", i.style.webkitTransform = "translateZ(" + t.r +
  42. "px) rotateX(" + -t.endAngle + "deg)", e) {
  43. var a = {};
  44. a.text = i.innerHTML || "", a.value = i.getAttribute("data-value") || a.text, t.items.push(
  45. a)
  46. }
  47. }), t.endExceed = t.endAngle + a, t.calcElementItemVisibility(t.beginAngle)
  48. }, p.prototype.calcAngle = function(e) {
  49. var t = this,
  50. i = b = parseFloat(t.r);
  51. e = Math.abs(e);
  52. var n = 180 * parseInt(e / t.d);
  53. e %= t.d;
  54. var a = (i * i + b * b - e * e) / (2 * i * b),
  55. r = n + l(Math.acos(a));
  56. return r
  57. }, p.prototype.calcElementItemVisibility = function(e) {
  58. var t = this;
  59. t.elementItems.forEach(function(i) {
  60. var n = Math.abs(i.angle - e);
  61. n < t.hightlightRange ? i.classList.add("highlight") : n < t.visibleRange ? (i.classList.add(
  62. "visible"), i.classList.remove("highlight")) : (i.classList.remove("highlight"), i
  63. .classList.remove("visible"))
  64. })
  65. }, p.prototype.setAngle = function(e) {
  66. var t = this;
  67. t.list.angle = e, t.list.style.webkitTransform = "perspective(1000px) rotateY(0deg) rotateX(" + e + "deg)",
  68. t.calcElementItemVisibility(e)
  69. }, p.prototype.bindEvent = function() {
  70. var t = this,
  71. i = 0,
  72. n = null,
  73. a = !1;
  74. t.holder.addEventListener(e.EVENT_START, function(e) {
  75. a = !0, e.preventDefault(), t.list.style.webkitTransition = "", n = (e.changedTouches ? e
  76. .changedTouches[0] : e).pageY, i = t.list.angle, t.updateInertiaParams(e, !0)
  77. }, !1), t.holder.addEventListener(e.EVENT_END, function(e) {
  78. a = !1, e.preventDefault(), t.startInertiaScroll(e)
  79. }, !1), t.holder.addEventListener(e.EVENT_CANCEL, function(e) {
  80. a = !1, e.preventDefault(), t.startInertiaScroll(e)
  81. }, !1), t.holder.addEventListener(e.EVENT_MOVE, function(e) {
  82. if (a) {
  83. e.preventDefault();
  84. var r = (e.changedTouches ? e.changedTouches[0] : e).pageY,
  85. s = r - n,
  86. c = t.calcAngle(s),
  87. l = s > 0 ? i - c : i + c;
  88. l > t.endExceed && (l = t.endExceed), l < t.beginExceed && (l = t.beginExceed), t.setAngle(
  89. l), t.updateInertiaParams(e)
  90. }
  91. }, !1), t.list.addEventListener("tap", function(e) {
  92. elementItem = e.target, "LI" == elementItem.tagName && t.setSelectedIndex(t.elementItems
  93. .indexOf(elementItem), 200)
  94. }, !1)
  95. }, p.prototype.initInertiaParams = function() {
  96. var e = this;
  97. e.lastMoveTime = 0, e.lastMoveStart = 0, e.stopInertiaMove = !1
  98. }, p.prototype.updateInertiaParams = function(e, t) {
  99. var i = this,
  100. n = e.changedTouches ? e.changedTouches[0] : e;
  101. if (t) i.lastMoveStart = n.pageY, i.lastMoveTime = e.timeStamp || Date.now(), i.startAngle = i.list.angle;
  102. else {
  103. var a = e.timeStamp || Date.now();
  104. a - i.lastMoveTime > 300 && (i.lastMoveTime = a, i.lastMoveStart = n.pageY)
  105. }
  106. i.stopInertiaMove = !0
  107. }, p.prototype.startInertiaScroll = function(e) {
  108. var t = this,
  109. i = e.changedTouches ? e.changedTouches[0] : e,
  110. n = e.timeStamp || Date.now(),
  111. a = (i.pageY - t.lastMoveStart) / (n - t.lastMoveTime),
  112. r = a > 0 ? -1 : 1,
  113. s = 6e-4 * r * -1,
  114. c = Math.abs(a / s),
  115. l = a * c / 2,
  116. o = t.list.angle,
  117. d = t.calcAngle(l) * r,
  118. u = d;
  119. return o + d < t.beginExceed && (d = t.beginExceed - o, c = c * (d / u) * .6), o + d > t.endExceed && (d = t
  120. .endExceed - o, c = c * (d / u) * .6), 0 == d ? void t.endScroll() : void t.scrollDistAngle(n, o, d,
  121. c)
  122. }, p.prototype.scrollDistAngle = function(e, t, i, n) {
  123. var a = this;
  124. a.stopInertiaMove = !1,
  125. function(e, t, i, n) {
  126. var r = 13,
  127. s = n / r,
  128. c = 0;
  129. ! function l() {
  130. if (!a.stopInertiaMove) {
  131. var e = a.quartEaseOut(c, t, i, s);
  132. return a.setAngle(e), c++, c > s - 1 || e < a.beginExceed || e > a.endExceed ? void a
  133. .endScroll() : void setTimeout(l, r)
  134. }
  135. }()
  136. }(e, t, i, n)
  137. }, p.prototype.quartEaseOut = function(e, t, i, n) {
  138. return -i * ((e = e / n - 1) * e * e * e - 1) + t
  139. }, p.prototype.endScroll = function() {
  140. var e = this;
  141. if (e.list.angle < e.beginAngle) e.list.style.webkitTransition = "150ms ease-out", e.setAngle(e.beginAngle);
  142. else if (e.list.angle > e.endAngle) e.list.style.webkitTransition = "150ms ease-out", e.setAngle(e
  143. .endAngle);
  144. else {
  145. var t = parseInt((e.list.angle / e.itemAngle).toFixed(0));
  146. e.list.style.webkitTransition = "100ms ease-out", e.setAngle(e.itemAngle * t)
  147. }
  148. e.triggerChange()
  149. }, p.prototype.triggerChange = function(t) {
  150. var i = this;
  151. setTimeout(function() {
  152. var n = i.getSelectedIndex(),
  153. a = i.items[n];
  154. !e.trigger || n == i.lastIndex && t !== !0 || e.trigger(i.holder, "change", {
  155. index: n,
  156. item: a
  157. }), i.lastIndex = n, "function" == typeof t && t()
  158. }, 0)
  159. }, p.prototype.correctAngle = function(e) {
  160. var t = this;
  161. return e < t.beginAngle ? t.beginAngle : e > t.endAngle ? t.endAngle : e
  162. }, p.prototype.setItems = function(e) {
  163. var t = this;
  164. t.items = e || [];
  165. var i = [];
  166. t.items.forEach(function(e) {
  167. null !== e && e !== n && i.push("<li>" + (e.text || e) + "</li>")
  168. }), t.list.innerHTML = i.join(""), t.findElementItems(), t.calcElementItemPostion(), t.setAngle(t
  169. .correctAngle(t.list.angle)), t.triggerChange(!0)
  170. }, p.prototype.getItems = function() {
  171. var e = this;
  172. return e.items
  173. }, p.prototype.getSelectedIndex = function() {
  174. var e = this;
  175. return parseInt((e.list.angle / e.itemAngle).toFixed(0))
  176. }, p.prototype.setSelectedIndex = function(e, t, i) {
  177. var n = this;
  178. n.list.style.webkitTransition = "";
  179. var a = n.correctAngle(n.itemAngle * e);
  180. if (t && t > 0) {
  181. var r = a - n.list.angle;
  182. n.scrollDistAngle(Date.now(), n.list.angle, r, t)
  183. } else n.setAngle(a);
  184. n.triggerChange(i)
  185. }, p.prototype.getSelectedItem = function() {
  186. var e = this;
  187. return e.items[e.getSelectedIndex()]
  188. }, p.prototype.getSelectedValue = function() {
  189. var e = this;
  190. return (e.items[e.getSelectedIndex()] || {}).value
  191. }, p.prototype.getSelectedText = function() {
  192. var e = this;
  193. return (e.items[e.getSelectedIndex()] || {}).text
  194. }, p.prototype.setSelectedValue = function(e, t, i) {
  195. var n = this;
  196. for (var a in n.items) {
  197. var r = n.items[a];
  198. if (r.value == e) return void n.setSelectedIndex(a, t, i)
  199. }
  200. }, e.fn && (e.fn.picker = function(e) {
  201. return this.each(function(t, i) {
  202. if (!i.picker)
  203. if (e) i.picker = new p(i, e);
  204. else {
  205. var n = i.getAttribute("data-picker-options"),
  206. a = n ? JSON.parse(n) : {};
  207. i.picker = new p(i, a)
  208. }
  209. }), this[0] ? this[0].picker : null
  210. }, e.ready(function() {
  211. e(".mui-picker").picker()
  212. }))
  213. }(window.mui || window, window, document, void 0),
  214. function(e, t) {
  215. e.dom = function(i) {
  216. return "string" != typeof i ? i instanceof Array || i[0] && i.length ? [].slice.call(i) : [i] : (e
  217. .__create_dom_div__ || (e.__create_dom_div__ = t.createElement("div")), e.__create_dom_div__
  218. .innerHTML = i, [].slice.call(e.__create_dom_div__.childNodes))
  219. };
  220. var i =
  221. '<div class="mui-poppicker"> <div class="mui-poppicker-header"> <button class="mui-btn mui-poppicker-btn-cancel">取消</button> <button class="mui-btn mui-btn-blue mui-poppicker-btn-ok">确定</button> <div class="mui-poppicker-clear"></div> </div> <div class="mui-poppicker-body"> </div> </div>',
  222. n =
  223. '<div class="mui-picker"> <div class="mui-picker-inner"> <div class="mui-pciker-rule mui-pciker-rule-ft"></div> <ul class="mui-pciker-list"> </ul> <div class="mui-pciker-rule mui-pciker-rule-bg"></div> </div> </div>';
  224. e.PopPicker = e.Class.extend({
  225. init: function(n) {
  226. var a = this;
  227. a.options = n || {}, a.options.buttons = a.options.buttons || ["取消", "确定"], a.panel = e.dom(i)[
  228. 0], t.body.appendChild(a.panel), a.ok = a.panel.querySelector(".mui-poppicker-btn-ok"),
  229. a.cancel = a.panel.querySelector(".mui-poppicker-btn-cancel"), a.body = a.panel
  230. .querySelector(".mui-poppicker-body"), a.mask = e.createMask(), a.cancel.innerText = a
  231. .options.buttons[0], a.ok.innerText = a.options.buttons[1], a.cancel.addEventListener("tap",
  232. function(e) {
  233. a.hide()
  234. }, !1), a.ok.addEventListener("tap", function(e) {
  235. if (a.callback) {
  236. var t = a.callback(a.getSelectedItems());
  237. t !== !1 && a.hide()
  238. }
  239. }, !1), a.mask[0].addEventListener("tap", function() {
  240. a.hide()
  241. }, !1), a._createPicker(), a.panel.addEventListener(e.EVENT_START, function(e) {
  242. e.preventDefault()
  243. }, !1), a.panel.addEventListener(e.EVENT_MOVE, function(e) {
  244. e.preventDefault()
  245. }, !1)
  246. },
  247. _createPicker: function() {
  248. var t = this,
  249. i = t.options.layer || 1,
  250. a = 100 / i + "%";
  251. t.pickers = [];
  252. for (var r = 1; i >= r; r++) {
  253. var s = e.dom(n)[0];
  254. s.style.width = a, t.body.appendChild(s);
  255. var c = e(s).picker();
  256. t.pickers.push(c), s.addEventListener("change", function(e) {
  257. var t = this.nextSibling;
  258. if (t && t.picker) {
  259. var i = e.detail || {},
  260. n = i.item || {};
  261. t.picker.setItems(n.children)
  262. }
  263. }, !1)
  264. }
  265. },
  266. setData: function(e) {
  267. var t = this;
  268. e = e || [], t.pickers[0].setItems(e)
  269. },
  270. getSelectedItems: function() {
  271. var e = this,
  272. t = [];
  273. for (var i in e.pickers) {
  274. var n = e.pickers[i];
  275. t.push(n.getSelectedItem() || {})
  276. }
  277. return t
  278. },
  279. show: function(i) {
  280. var n = this;
  281. n.callback = i, n.mask.show(), t.body.classList.add(e.className("poppicker-active-for-page")), n
  282. .panel.classList.add(e.className("active")), n.__back = e.back, e.back = function() {
  283. n.hide()
  284. }
  285. },
  286. hide: function() {
  287. var i = this;
  288. i.disposed || (i.panel.classList.remove(e.className("active")), i.mask.close(), t.body.classList
  289. .remove(e.className("poppicker-active-for-page")), e.back = i.__back)
  290. },
  291. dispose: function() {
  292. var e = this;
  293. e.hide(), setTimeout(function() {
  294. e.panel.parentNode.removeChild(e.panel);
  295. for (var t in e) e[t] = null, delete e[t];
  296. e.disposed = !0
  297. }, 300)
  298. }
  299. })
  300. }(mui, document),
  301. function(e, t) {
  302. e.dom = function(i) {
  303. return "string" != typeof i ? i instanceof Array || i[0] && i.length ? [].slice.call(i) : [i] : (e
  304. .__create_dom_div__ || (e.__create_dom_div__ = t.createElement("div")), e.__create_dom_div__
  305. .innerHTML = i, [].slice.call(e.__create_dom_div__.childNodes))
  306. };
  307. var i =
  308. '<div class="mui-dtpicker" data-type="datetime"> <div class="mui-dtpicker-header"> <button data-id="btn-cancel" class="mui-btn">取消</button> <button data-id="btn-ok" class="mui-btn mui-btn-blue">确定</button> </div> <div class="mui-dtpicker-title"><h5 data-id="title-y" style="width: 100%;">年</h5><h5 data-id="title-d">日</h5><h5 data-id="title-h">时</h5><h5 data-id="title-i">分</h5></div> <div class="mui-dtpicker-body"> <div data-id="picker-y" class="mui-picker" style="width: 100%!important;"> <div class="mui-picker-inner"> <div class="mui-pciker-rule mui-pciker-rule-ft"></div> <ul class="mui-pciker-list"> </ul> <div class="mui-pciker-rule mui-pciker-rule-bg"></div> </div> </div> <div data-id="picker-m" class="mui-picker" style="display: none;"> <div class="mui-picker-inner"> <div class="mui-pciker-rule mui-pciker-rule-ft"></div> <ul class="mui-pciker-list"> </ul> <div class="mui-pciker-rule mui-pciker-rule-bg"></div> </div> </div> <div data-id="picker-d" class="mui-picker"> <div class="mui-picker-inner"> <div class="mui-pciker-rule mui-pciker-rule-ft"></div> <ul class="mui-pciker-list"> </ul> <div class="mui-pciker-rule mui-pciker-rule-bg"></div> </div> </div> <div data-id="picker-h" class="mui-picker"> <div class="mui-picker-inner"> <div class="mui-pciker-rule mui-pciker-rule-ft"></div> <ul class="mui-pciker-list"> </ul> <div class="mui-pciker-rule mui-pciker-rule-bg"></div> </div> </div> <div data-id="picker-i" class="mui-picker"> <div class="mui-picker-inner"> <div class="mui-pciker-rule mui-pciker-rule-ft"></div> <ul class="mui-pciker-list"> </ul> <div class="mui-pciker-rule mui-pciker-rule-bg"></div> </div> </div> </div> </div>';
  309. e.DtPicker = e.Class.extend({
  310. init: function(n) {
  311. var a = this,
  312. r = e.dom(i)[0];
  313. t.body.appendChild(r), e('[data-id*="picker"]', r).picker();
  314. var s = a.ui = {
  315. picker: r,
  316. mask: e.createMask(),
  317. ok: e('[data-id="btn-ok"]', r)[0],
  318. cancel: e('[data-id="btn-cancel"]', r)[0],
  319. y: e('[data-id="picker-y"]', r)[0],
  320. m: e('[data-id="picker-m"]', r)[0],
  321. d: e('[data-id="picker-d"]', r)[0],
  322. h: e('[data-id="picker-h"]', r)[0],
  323. i: e('[data-id="picker-i"]', r)[0],
  324. labels: e('[data-id*="title-"]', r)
  325. };
  326. s.cancel.addEventListener("tap", function() {
  327. a.hide()
  328. }, !1), s.ok.addEventListener("tap", function() {
  329. var e = a.callback(a.getSelected());
  330. e !== !1 && a.hide()
  331. }, !1), s.y.addEventListener("change", function(e) {
  332. a.options.beginMonth || a.options.endMonth ? a._createMonth() : a._createDay()
  333. }, !1), s.m.addEventListener("change", function(e) {
  334. a._createDay()
  335. }, !1), s.d.addEventListener("change", function(e) {
  336. (a.options.beginMonth || a.options.endMonth) && a._createHours()
  337. }, !1), s.h.addEventListener("change", function(e) {
  338. (a.options.beginMonth || a.options.endMonth) && a._createMinutes()
  339. }, !1), s.mask[0].addEventListener("tap", function() {
  340. a.hide()
  341. }, !1), a._create(n), a.ui.picker.addEventListener(e.EVENT_START, function(e) {
  342. e.preventDefault()
  343. }, !1), a.ui.picker.addEventListener(e.EVENT_MOVE, function(e) {
  344. e.preventDefault()
  345. }, !1)
  346. },
  347. getSelected: function() {
  348. var e = this,
  349. t = e.ui,
  350. i = e.options.type,
  351. n = {
  352. type: i,
  353. y: t.y.picker.getSelectedItem(),
  354. m: t.m.picker.getSelectedItem(),
  355. d: t.d.picker.getSelectedItem(),
  356. h: t.h.picker.getSelectedItem(),
  357. i: t.i.picker.getSelectedItem(),
  358. toString: function() {
  359. return this.value
  360. }
  361. };
  362. switch (i) {
  363. case "datetime":
  364. n.value = n.y.value + "-" + n.m.value + "-" + n.d.value + " " + n.h.value + ":" + n.i
  365. .value, n.text = n.y.text + "-" + n.m.text + "-" + n.d.text + " " + n.h.text + ":" +
  366. n.i.text;
  367. break;
  368. case "date":
  369. n.value = n.y.value + "-" + n.m.value + "-" + n.d.value, n.text = n.y.text + "-" + n.m
  370. .text + "-" + n.d.text;
  371. break;
  372. case "time":
  373. n.value = n.h.value + ":" + n.i.value, n.text = n.h.text + ":" + n.i.text;
  374. break;
  375. case "month":
  376. n.value = n.y.value;
  377. break;
  378. case "hour":
  379. n.value = n.y.value + "-" + n.m.value + "-" + n.d.value + " " + n.h.value, n.text = n.y
  380. .text + "-" + n.m.text + "-" + n.d.text + " " + n.h.text
  381. }
  382. return n
  383. },
  384. setSelectedValue: function(e) {
  385. var t = this,
  386. i = t.ui,
  387. n = t._parseValue(e);
  388. i.y.picker.setSelectedValue(n.y, 0, function() {
  389. i.m.picker.setSelectedValue(n.m, 0, function() {
  390. i.d.picker.setSelectedValue(n.d, 0, function() {
  391. i.h.picker.setSelectedValue(n.h, 0, function() {
  392. i.i.picker.setSelectedValue(n.i, 0)
  393. })
  394. })
  395. })
  396. })
  397. },
  398. isLeapYear: function(e) {
  399. return e % 4 == 0 && e % 100 != 0 || e % 400 == 0
  400. },
  401. _inArray: function(e, t) {
  402. for (var i in e) {
  403. var n = e[i];
  404. if (n === t) return !0
  405. }
  406. return !1
  407. },
  408. getDayNum: function(e, t) {
  409. var i = this;
  410. return i._inArray([1, 3, 5, 7, 8, 10, 12], t) ? 31 : i._inArray([4, 6, 9, 11], t) ? 30 : i
  411. .isLeapYear(e) ? 29 : 28
  412. },
  413. _fill: function(e) {
  414. return e = e.toString(), e.length < 2 && (e = 0 + e), e
  415. },
  416. _isBeginYear: function() {
  417. return this.options.beginYear === parseInt(this.ui.y.picker.getSelectedValue())
  418. },
  419. _isBeginMonth: function() {
  420. return this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(
  421. this.ui.m.picker.getSelectedValue())
  422. },
  423. _isBeginDay: function() {
  424. return this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.picker
  425. .getSelectedValue())
  426. },
  427. _isBeginHours: function() {
  428. return this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.picker
  429. .getSelectedValue())
  430. },
  431. _isEndYear: function() {
  432. return this.options.endYear === parseInt(this.ui.y.picker.getSelectedValue())
  433. },
  434. _isEndMonth: function() {
  435. return this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui
  436. .m.picker.getSelectedValue())
  437. },
  438. _isEndDay: function() {
  439. return this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.picker
  440. .getSelectedValue())
  441. },
  442. _isEndHours: function() {
  443. return this._isEndDay() && this.options.endHours === parseInt(this.ui.h.picker
  444. .getSelectedValue())
  445. },
  446. _createYear: function(e) {
  447. var t = this,
  448. i = t.options,
  449. n = t.ui,
  450. a = [];
  451. if (i.customData.y) a = i.customData.y;
  452. else
  453. for (var r = i.beginYear, s = i.endYear, c = r; s >= c; c++) a.push({
  454. text: c + "",
  455. value: c
  456. });
  457. n.y.picker.setItems(a)
  458. },
  459. _createMonth: function(e) {
  460. var t = this,
  461. i = t.options,
  462. n = t.ui,
  463. a = [];
  464. if (i.customData.m) a = i.customData.m;
  465. else
  466. for (var r = i.beginMonth && t._isBeginYear() ? i.beginMonth : 1, s = i.endMonth && t
  467. ._isEndYear() ? i.endMonth : 12; s >= r; r++) {
  468. var c = t._fill(r);
  469. a.push({
  470. text: c,
  471. value: c
  472. })
  473. }
  474. n.m.picker.setItems(a)
  475. },
  476. _createDay: function(e) {
  477. var t = this,
  478. i = t.options,
  479. n = t.ui,
  480. a = [];
  481. if (i.customData.d) a = i.customData.d;
  482. else
  483. for (var r = t._isBeginMonth() ? i.beginDay : 1, s = t._isEndMonth() ? i.endDay : t
  484. .getDayNum(parseInt(this.ui.y.picker.getSelectedValue()), parseInt(this.ui.m.picker
  485. .getSelectedValue())); s >= r; r++) {
  486. var c = t._fill(r);
  487. a.push({
  488. text: c,
  489. value: c
  490. })
  491. }
  492. n.d.picker.setItems(a), e = e || n.d.picker.getSelectedValue()
  493. },
  494. _createHours: function(e) {
  495. var t = this,
  496. i = t.options,
  497. n = t.ui,
  498. a = [];
  499. if (i.customData.h) a = i.customData.h;
  500. else
  501. for (var r = t._isBeginDay() ? i.beginHours : 0, s = t._isEndDay() ? i.endHours : 23; s >=
  502. r; r++) {
  503. var c = t._fill(r);
  504. a.push({
  505. text: c,
  506. value: c
  507. })
  508. }
  509. n.h.picker.setItems(a)
  510. },
  511. _createMinutes: function(e) {
  512. var t = this,
  513. i = t.options,
  514. n = t.ui,
  515. a = [];
  516. if (i.customData.i) a = i.customData.i;
  517. else
  518. for (var r = t._isBeginHours() ? i.beginMinutes : 0, s = t._isEndHours() ? i.endMinutes :
  519. 59; s >= r; r++) {
  520. var c = t._fill(r);
  521. a.push({
  522. text: c,
  523. value: c
  524. })
  525. }
  526. n.i.picker.setItems(a)
  527. },
  528. _setLabels: function() {
  529. var e = this,
  530. t = e.options,
  531. i = e.ui;
  532. i.labels.each(function(e, i) {
  533. i.innerText = t.labels[e]
  534. })
  535. },
  536. _setButtons: function() {
  537. var e = this,
  538. t = e.options,
  539. i = e.ui;
  540. i.cancel.innerText = t.buttons[0], i.ok.innerText = t.buttons[1]
  541. },
  542. _parseValue: function(e) {
  543. var t = {};
  544. if (e) {
  545. var i = e.replace(":", "-").replace(" ", "-").split("-");
  546. t.y = i[0], t.m = i[1], t.d = i[2], t.h = i[3], t.i = i[4]
  547. } else {
  548. var n = new Date;
  549. t.y = n.getFullYear(), t.m = n.getMonth() + 1, t.d = n.getDate(), t.h = n.getHours(), t.i =
  550. n.getMinutes()
  551. }
  552. return t
  553. },
  554. _create: function(e) {
  555. var t = this;
  556. e = e || {}, e.labels = e.labels || ["年", "月", "日", "时", "分"], e.buttons = e.buttons || ["取消",
  557. "确定"
  558. ], e.type = e.type || "datetime", e.customData = e.customData || {}, t.options = e;
  559. var i = new Date,
  560. n = e.beginDate;
  561. n instanceof Date && !isNaN(n.valueOf()) && (e.beginYear = n.getFullYear(), e.beginMonth = n
  562. .getMonth() + 1, e.beginDay = n.getDate(), e.beginHours = n.getHours(), e.beginMinutes =
  563. n.getMinutes());
  564. var a = e.endDate;
  565. a instanceof Date && !isNaN(a.valueOf()) && (e.endYear = a.getFullYear(), e.endMonth = a
  566. .getMonth() + 1, e.endDay = a.getDate(), e.endHours = a.getHours(), e.endMinutes = a
  567. .getMinutes()), e.beginYear = e.beginYear || i.getFullYear() - 5, e.endYear = e
  568. .endYear || i.getFullYear() + 5;
  569. var r = t.ui;
  570. t._setLabels(), t._setButtons(), r.picker.setAttribute("data-type", e.type), t._createYear(), t
  571. ._createMonth(), t._createDay(), t._createHours(), t._createMinutes(), t.setSelectedValue(e
  572. .value)
  573. },
  574. show: function(i) {
  575. var n = this,
  576. a = n.ui;
  577. n.callback = i || e.noop, a.mask.show(), t.body.classList.add(e.className(
  578. "dtpicker-active-for-page")), a.picker.classList.add(e.className("active")), n.__back =
  579. e.back, e.back = function() {
  580. n.hide()
  581. }
  582. },
  583. hide: function() {
  584. var i = this;
  585. if (!i.disposed) {
  586. var n = i.ui;
  587. n.picker.classList.remove(e.className("active")), n.mask.close(), t.body.classList.remove(e
  588. .className("dtpicker-active-for-page")), e.back = i.__back
  589. }
  590. },
  591. dispose: function() {
  592. var e = this;
  593. e.hide(), setTimeout(function() {
  594. e.ui.picker.parentNode.removeChild(e.ui.picker);
  595. for (var t in e) e[t] = null, delete e[t];
  596. e.disposed = !0
  597. }, 300)
  598. }
  599. })
  600. }(mui, document);