ht-form.js 85 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796
  1. !function(y, X, R) {
  2. "use strict";
  3. var E = "ht"
  4. , L = E + ".widget."
  5. , p = y[E]
  6. , Q = p.Color
  7. , i = p.widget
  8. , l = Q.widgetBorder
  9. , G = Q.widgetBackground
  10. , M = Q.widgetIconBorder
  11. , w = Q.transparent
  12. , f = Q.background
  13. , P = Q.highlight
  14. , $ = p.Default
  15. , q = $.def
  16. , B = $.widgetRowHeight
  17. , o = $.removeHTML
  18. , e = $.drawText
  19. , s = $.getTextSize
  20. , J = $.isLeftButton
  21. , j = $.getWindowInfo
  22. , V = $.getImage
  23. , S = $.drawCenterImage
  24. , C = $.preventDefault
  25. , Y = $.getLogicalPoint
  26. , Z = $.labelFont
  27. , W = $.labelColor
  28. , r = $.labelSelectColor
  29. , T = $.widgetIndent
  30. , g = $.startDragging
  31. , d = $.createElement
  32. , v = $.getClientPoint
  33. , N = $.scrollBarInteractiveSize
  34. , k = $.getInternal()
  35. , u = (k.createView,
  36. k.createDiv)
  37. , h = k.createCanvas
  38. , c = k.createImage
  39. , F = k.setCanvas
  40. , A = k.initContext
  41. , z = k.translateAndScale
  42. , O = k.isString
  43. , m = k.drawBorder
  44. , I = k.getImageWidth
  45. , U = k.getImageHeight
  46. , t = k.fillRect
  47. , x = k.layout
  48. , H = k.formatNumber
  49. , _ = k.addMethod
  50. , n = k.isH
  51. , b = $.isTouchable
  52. , K = Math.round
  53. , D = "readonly"
  54. , a = b ? "touchstart" : "mousedown"
  55. , oe = {
  56. x: 0,
  57. y: 0,
  58. width: 0,
  59. height: 0
  60. }
  61. , vg = function(c) {
  62. var $ = c.touches[0];
  63. return $ ? $ : c.changedTouches[0]
  64. }
  65. , ap = function(m, G) {
  66. return m.querySelector(G)
  67. }
  68. , jj = function(H, x) {
  69. var y = $.getLogicalPoint(x, H._canvas || H._view);
  70. return y.x >= 0 && y.y >= 0 && y.x <= H.getWidth() && y.y <= H.getHeight()
  71. };
  72. _($, {
  73. textFieldFont: Z,
  74. textFieldColor: W,
  75. textFieldBorderColor: l,
  76. textAreaFont: Z,
  77. textAreaColor: W,
  78. textAreaBorderColor: l,
  79. radioButtonLabelFont: Z,
  80. radioButtonLabelColor: W,
  81. radioButtonPressBackground: l,
  82. checkBoxLabelFont: Z,
  83. checkBoxLabelColor: W,
  84. checkBoxPressBackground: l,
  85. buttonLabelFont: Z,
  86. buttonLabelColor: W,
  87. buttonLabelSelectColor: r,
  88. buttonBackground: G,
  89. buttonBorderColor: l,
  90. buttonSelectBackground: P,
  91. sliderBackground: Q.widgetIconBackground,
  92. sliderLeftBackground: Q.widgetIconHighlight,
  93. sliderThickness: 3,
  94. sliderPadding: 4,
  95. sliderButton: c(14, 14, {
  96. type: "circle",
  97. rect: [0, 0, 14, 14],
  98. borderWidth: 1,
  99. borderColor: M,
  100. gradient: "linear.northeast",
  101. gradientColor: Q.widgetIconGradient,
  102. background: G
  103. }),
  104. comboBoxMaxHeight: -1,
  105. comboBoxLabelFont: Z,
  106. comboBoxLabelColor: W,
  107. comboBoxLabelSelectColor: r,
  108. comboBoxShadowColor: w,
  109. comboBoxBorderColor: l,
  110. comboBoxBackground: f,
  111. comboBoxSelectBackground: P,
  112. comboBoxDropDownIcon: c(12, 16, {
  113. type: "shape",
  114. points: [1, 5, 6, 11, 11, 5],
  115. borderWidth: 2,
  116. borderColor: M
  117. }),
  118. imageBorderColor: R,
  119. imageBackground: R,
  120. formPaneLabelColor: W,
  121. formPaneLabelFont: Z,
  122. formPaneLabelAlign: "left",
  123. formPaneLabelVAlign: "middle",
  124. formPaneHPadding: 8,
  125. formPaneVPadding: 8,
  126. formPaneLabelHPadding: 2,
  127. formPaneLabelVPadding: 0,
  128. formPaneHGap: 6,
  129. formPaneVGap: 6
  130. }, !0);
  131. var rk = function(W, J) {
  132. var U = this;
  133. (U._view = k.createView(null, U)).appendChild(U._element = d(W, J)),
  134. U.setHeight(B),
  135. U.setWidth(80),
  136. U.iv()
  137. };
  138. q(rk, X, {
  139. ms_v: 1,
  140. ms_fire: 1,
  141. ms_tip: 1,
  142. ms_ac: ["toolTip"],
  143. onPropertyChanged: function() {
  144. this.iv()
  145. },
  146. getToolTip: function() {
  147. return this._toolTip || this.getText()
  148. },
  149. getElement: function() {
  150. return this._element
  151. },
  152. getText: function() {
  153. return this._element.value
  154. },
  155. setText: function(l) {
  156. this._element.value = l
  157. },
  158. getValue: function() {
  159. return this.getText()
  160. },
  161. setValue: function(S) {
  162. this.setText(S)
  163. },
  164. getColor: function() {
  165. return this._element.style.color
  166. },
  167. setColor: function(g) {
  168. this._element.style.color = g
  169. },
  170. getBackground: function() {
  171. return this._element.style.background
  172. },
  173. setBackground: function(g) {
  174. this._element.style.background = g
  175. },
  176. getBorder: function() {
  177. return this._element.style.border
  178. },
  179. setBorder: function(o) {
  180. this._element.style.border = o
  181. },
  182. getFont: function() {
  183. return this._element.style.font
  184. },
  185. setFont: function(A) {
  186. this._element.style.font = A
  187. },
  188. isEditable: function() {
  189. return this._element.hasAttribute(D)
  190. },
  191. setEditable: function(l) {
  192. var g = this._element;
  193. l ? g.removeAttribute(D) : g.setAttribute(D, !0)
  194. },
  195. validateImpl: function() {
  196. var y = this;
  197. x(y._element, 0, 0, y.getWidth(), y.getHeight())
  198. },
  199. setFocus: function() {
  200. return $.setFocus(this._element),
  201. this.fireViewEvent("focus"),
  202. !0
  203. }
  204. }),
  205. i.TextField = function() {
  206. i.TextField.superClass.constructor.call(this, "input", $.textFieldBorderColor),
  207. this.setColor($.textFieldLabelColor),
  208. this.setFont($.textFieldLabelFont)
  209. }
  210. ,
  211. q(L + "TextField", rk, {
  212. getType: function() {
  213. return this._element.getAttribute("type")
  214. },
  215. setType: function(x) {
  216. var U = this._element
  217. , J = $.numberListener;
  218. U.setAttribute("type", x),
  219. U.removeEventListener("keydown", J, !1),
  220. "number" === x && U.addEventListener("keydown", J, !1)
  221. }
  222. }),
  223. i.TextArea = function() {
  224. i.TextArea.superClass.constructor.call(this, "textarea", $.textAreaBorderColor),
  225. this.setColor($.textAreaLabelColor),
  226. this.setFont($.textAreaLabelFont)
  227. }
  228. ,
  229. q(L + "TextArea", rk, {}),
  230. i.Button = function() {
  231. var F = this
  232. , A = F._view = k.createView(null, F);
  233. F.setHeight(B),
  234. F.setWidth(80),
  235. F._canvas = h(A),
  236. new Iq(F),
  237. F.iv()
  238. }
  239. ,
  240. q(L + "Button", X, {
  241. ms_v: 1,
  242. ms_fire: 1,
  243. ms_tip: 1,
  244. ms_ac: ["groupId", "label", "icon", "iconColor", "orientation", "toolTip", "labelFont", "labelColor", "labelSelectColor", "borderColor", "background", "selectBackground", "togglable", "selected", "pressed", "clickable"],
  245. _clickable: !0,
  246. _togglable: !1,
  247. _selected: !1,
  248. _pressed: !1,
  249. _orientation: "h",
  250. _labelFont: $.buttonLabelFont,
  251. _labelColor: $.buttonLabelColor,
  252. _labelSelectColor: $.buttonLabelSelectColor,
  253. _borderColor: $.buttonBorderColor,
  254. _background: $.buttonBackground,
  255. _selectBackground: $.buttonSelectBackground,
  256. onClicked: function() {},
  257. onSelectedChanged: function() {},
  258. onValueChanged: function() {},
  259. onPropertyChanged: function(h) {
  260. var X = this
  261. , L = X._view.parentNode;
  262. X.iv(),
  263. "selected" === h.property && (null != X.getGroupId() && L && L.handleGroupSelectedChanged && L.handleGroupSelectedChanged(X),
  264. X.onSelectedChanged(),
  265. X.onValueChanged(h.oldValue, h.newValue))
  266. },
  267. getToolTip: function() {
  268. return this._toolTip || this._label
  269. },
  270. validateImpl: function() {
  271. var o = this
  272. , K = o._canvas
  273. , l = o.getWidth()
  274. , b = o.getHeight()
  275. , c = o._pressed || o._selected
  276. , h = c ? o._selectBackground : o._background;
  277. F(K, l, b);
  278. var v = A(K);
  279. z(v, 0, 0, 1),
  280. v.clearRect(0, 0, l, b),
  281. h && t(v, 0, 0, l, b, h),
  282. m(v, o._borderColor, 0, 0, l, b);
  283. var R = o._iconColor
  284. , i = V(o._icon, R)
  285. , T = I(i)
  286. , O = U(i)
  287. , q = o._label
  288. , E = o.getLabelFont()
  289. , W = c ? o._labelSelectColor : o._labelColor
  290. , M = null == q ? oe : s(E, q)
  291. , g = M.width
  292. , u = M.height;
  293. n(o) ? (T && S(v, i, l / 2 - (T + g) / 2 + T / 2, b / 2, o, o, R),
  294. g && e(v, q, E, W, l / 2 - (T + g) / 2 + T, 0, g, b, "center")) : (T && S(v, i, l / 2, b / 2 - (O + u) / 2 + O / 2, o, o, R),
  295. g && e(v, q, E, W, l / 2 - g / 2, b / 2 - (O + u) / 2 + O, g, u, "center")),
  296. v.restore()
  297. }
  298. });
  299. var Iq = function(X) {
  300. this.button = X,
  301. this.addListeners()
  302. };
  303. q(Iq, X, {
  304. ms_listener: 1,
  305. getView: function() {
  306. return this.button._view
  307. },
  308. handle_mousedown: function(w) {
  309. J(w) && this.handle_touchstart(w)
  310. },
  311. handleWindowMouseMove: function(s) {
  312. this.handleWindowTouchMove(s)
  313. },
  314. handleWindowMouseUp: function(d) {
  315. this.handleWindowTouchEnd(d)
  316. },
  317. handle_touchstart: function(o) {
  318. C(o),
  319. this.button.isClickable() && (g(this, o),
  320. this.button.setPressed(!0))
  321. },
  322. handleWindowTouchMove: function() {},
  323. handleWindowTouchEnd: function(E) {
  324. var p = this
  325. , Z = p.button;
  326. Z.setPressed(!1),
  327. jj(Z, E) && (Z.isTogglable() && (null != Z.getGroupId() ? Z.setSelected(!0) : Z.setSelected(!Z.isSelected())),
  328. Z.onClicked(E))
  329. }
  330. });
  331. var up = function() {
  332. var K = this
  333. , s = K._view = k.createView(null, K);
  334. K.setHeight(B),
  335. K.setWidth(80),
  336. K._canvas = h(s),
  337. new Oj(K),
  338. K.iv()
  339. };
  340. q(up, X, {
  341. ms_v: 1,
  342. ms_fire: 1,
  343. ms_tip: 1,
  344. ms_ac: ["label", "labelFont", "labelColor", "toolTip", "icon", "iconColor", "selected", "pressed", "pressBackground", "padding"],
  345. _padding: 0,
  346. _selected: !1,
  347. _pressed: !1,
  348. onClicked: function() {},
  349. onSelectedChanged: function() {},
  350. onValueChanged: function() {},
  351. getValue: function() {
  352. return this.isSelected()
  353. },
  354. setValue: function(H) {
  355. this.setSelected(H)
  356. },
  357. onPropertyChanged: function(e) {
  358. var V = this;
  359. V.iv(),
  360. "selected" === e.property && (V.onSelectedChanged(),
  361. V.onValueChanged(e.oldvalue, e.newValue))
  362. },
  363. getToolTip: function() {
  364. return this._toolTip || this._label
  365. },
  366. validateImpl: function() {
  367. var x = this
  368. , K = x._canvas
  369. , Q = x.getWidth()
  370. , B = x.getHeight()
  371. , k = x.getCheckIcon;
  372. F(K, Q, B);
  373. var Z = A(K);
  374. z(Z, 0, 0, 1),
  375. Z.clearRect(0, 0, Q, B);
  376. var s = x._padding
  377. , b = x._iconColor
  378. , $ = V(k ? x.getCheckIcon() : x.getRadioIcon())
  379. , X = I($)
  380. , v = U($);
  381. x._pressed && (Z.fillStyle = x._pressBackground,
  382. Z.beginPath(),
  383. k ? Z.rect(s, B / 2 - v / 2, X, v) : Z.arc(s + X / 2, B / 2, Math.min(X, v) / 2, 0, 2 * Math.PI, !0),
  384. Z.fill()),
  385. S(Z, $, s + X / 2, B / 2, x, x),
  386. s += X + 1,
  387. $ = V(x.getIcon(), b),
  388. X = I($),
  389. S(Z, $, s + X / 2, B / 2, x, x, b),
  390. s += X,
  391. e(Z, x._label, x._labelFont, x._labelColor, s, 0, 0, B),
  392. Z.restore()
  393. }
  394. });
  395. var Oj = function(h) {
  396. this.c = h,
  397. this.addListeners()
  398. };
  399. q(Oj, X, {
  400. ms_listener: 1,
  401. getView: function() {
  402. return this.c._view
  403. },
  404. handle_mousedown: function(q) {
  405. J(q) && this.handle_touchstart(q)
  406. },
  407. handleWindowMouseMove: function(Q) {
  408. this.handleWindowTouchMove(Q)
  409. },
  410. handleWindowMouseUp: function(a) {
  411. this.handleWindowTouchEnd(a)
  412. },
  413. handle_touchstart: function(M) {
  414. C(M),
  415. g(this, M),
  416. this.c.setPressed(!0)
  417. },
  418. handleWindowTouchMove: function() {},
  419. handleWindowTouchEnd: function(C) {
  420. var u = this
  421. , K = u.c;
  422. K.setPressed(!1),
  423. jj(K, C) && (K.handleClick(C),
  424. K.onClicked(C))
  425. }
  426. }),
  427. i.CheckBox = function() {
  428. i.CheckBox.superClass.constructor.call(this)
  429. }
  430. ,
  431. q(L + "CheckBox", up, {
  432. _labelFont: $.checkBoxLabelFont,
  433. _labelColor: $.checkBoxLabelColor,
  434. _pressBackground: $.checkBoxPressBackground,
  435. getCheckIcon: function() {
  436. return this._selected ? "check" : "uncheck"
  437. },
  438. handleClick: function() {
  439. this.setSelected(!this.isSelected())
  440. }
  441. }),
  442. i.RadioButton = function() {
  443. i.RadioButton.superClass.constructor.call(this)
  444. }
  445. ,
  446. q(L + "RadioButton", up, {
  447. ms_ac: ["groupId"],
  448. _pressBackground: $.radioButtonPressBackground,
  449. _labelFont: $.radioButtonLabelFont,
  450. _labelColor: $.radioButtonLabelColor,
  451. getRadioIcon: function() {
  452. return this._selected ? "radioOn" : "radioOff"
  453. },
  454. onPropertyChanged: function(s) {
  455. var H = this
  456. , V = H._view.parentNode;
  457. H.iv(),
  458. null != H.getGroupId() && "selected" === s.property && (V && V.handleGroupSelectedChanged && V.handleGroupSelectedChanged(H),
  459. H.onSelectedChanged(),
  460. H.onValueChanged(s.oldValue, s.newValue))
  461. },
  462. handleClick: function() {
  463. this.setSelected(!0)
  464. }
  465. }),
  466. i.Slider = function() {
  467. var g = this
  468. , c = g._view = k.createView(null, g);
  469. g.setHeight(B),
  470. g.setWidth(80),
  471. g._canvas = h(c),
  472. new Mk(g),
  473. g.iv(),
  474. g.enableToolTip()
  475. }
  476. ,
  477. q(L + "Slider", X, {
  478. ms_v: 1,
  479. ms_fire: 1,
  480. ms_tip: 1,
  481. ms_ac: ["value", "min", "max", "step", "button", "toolTip", "instant", "thickness", "padding", "background", "leftBackground"],
  482. _min: 0,
  483. _max: 100,
  484. _value: 50,
  485. _step: R,
  486. _instant: !0,
  487. _button: $.sliderButton,
  488. _thickness: $.sliderThickness,
  489. _padding: $.sliderPadding,
  490. _background: $.sliderBackground,
  491. _leftBackground: $.sliderLeftBackground,
  492. onPropertyChanged: function(M) {
  493. var z = this
  494. , n = M.property;
  495. ("min" === n || "max" === n || "step" === n) && z.setValue(z._value),
  496. z.iv()
  497. },
  498. adjustValue: function(M) {
  499. null == M && (M = 0);
  500. var X = this
  501. , J = X._min
  502. , e = X._max
  503. , V = X._step;
  504. return J > M && (M = J),
  505. M > e && (M = e),
  506. V > 0 && (M = Math.floor((M - J) / V) * V + J),
  507. M
  508. },
  509. getToolTip: function() {
  510. return this._toolTip || H(this._value)
  511. },
  512. getValue: function() {
  513. return this._value
  514. },
  515. setValue: function(s) {
  516. var T = this
  517. , H = T._value;
  518. s = T.adjustValue(s),
  519. H !== s && (T._value = s,
  520. T.fp("value", H, s),
  521. T.onValueChanged(H, s))
  522. },
  523. onValueChanged: function() {},
  524. onEndValueChanged: function() {},
  525. drawBackground: function(p, C, v, U, W) {
  526. t(p, C, v, U, W, this.getBackground())
  527. },
  528. drawLeftBackground: function(T, h, m, n, H) {
  529. var S = this.getLeftBackground();
  530. S && t(T, h, m, n, H, S)
  531. },
  532. drawButton: function(N, c, E, z, I) {
  533. S(N, V(this._button), c + z / 2, E + I / 2, this, this)
  534. },
  535. getButtonWidth: function() {
  536. var s = V(this._button);
  537. return s ? s.width : 0
  538. },
  539. validateImpl: function() {
  540. var X = this
  541. , P = X._canvas
  542. , d = X._min
  543. , L = X._max
  544. , K = X._value
  545. , W = X._padding
  546. , o = X._thickness
  547. , q = X.getWidth()
  548. , Z = X.getHeight()
  549. , x = X.getButtonWidth()
  550. , v = (Z - o) / 2
  551. , h = x / 2 + (K - d) / (L - d) * (q - 2 * W - x);
  552. F(P, q, Z);
  553. var J = A(P);
  554. z(J, 0, 0, 1),
  555. J.clearRect(0, 0, q, Z),
  556. X.drawBackground(J, W, v, q - 2 * W, o),
  557. X.drawLeftBackground(J, W, v, h, o),
  558. X.drawButton(J, W + h - x / 2, 0, x, Z),
  559. J.restore()
  560. }
  561. });
  562. var Mk = function(f) {
  563. this.slider = f,
  564. this.addListeners()
  565. };
  566. q(Mk, X, {
  567. ms_listener: 1,
  568. getView: function() {
  569. return this.slider._view
  570. },
  571. handle_mousedown: function(K) {
  572. J(K) && this.handle_touchstart(K)
  573. },
  574. handleWindowMouseMove: function(B) {
  575. this.handleWindowTouchMove(B)
  576. },
  577. handleWindowMouseUp: function(E) {
  578. this.handleWindowTouchEnd(E)
  579. },
  580. setValue: function(c) {
  581. var C = this.slider
  582. , p = C.getPadding() + C.getButtonWidth() / 2
  583. , A = C.getMin();
  584. C.setValue(A + (Y(c, C._canvas).x - p) / (C.getWidth() - 2 * p) * (C.getMax() - A))
  585. },
  586. handle_touchstart: function(P) {
  587. var L = this;
  588. C(P),
  589. L.setValue(P),
  590. g(L, P),
  591. $.showToolTip(P, L.slider.getToolTip(P))
  592. },
  593. handleWindowTouchMove: function(w) {
  594. this.setValue(w),
  595. $.showToolTip(w, this.slider.getToolTip(w))
  596. },
  597. handleWindowTouchEnd: function(q) {
  598. this.setValue(q),
  599. this.slider.onEndValueChanged(),
  600. $.hideToolTip()
  601. }
  602. }),
  603. i.ComboBox = function() {
  604. var Y = this
  605. , _ = Y._view = k.createView(null, Y)
  606. , N = Y._listView = new i.ListView
  607. , e = Y._canvas = h(_)
  608. , t = N._view
  609. , c = N.sm();
  610. Y.setHeight(B),
  611. Y.setWidth(80),
  612. c.setSelectionMode("single"),
  613. N.drawRow = function(L, C, c, p, i, V, n) {
  614. Y.drawRow(L, C, c, p, i, V, n)
  615. }
  616. ,
  617. _.style.display = "inline-block",
  618. k.setBorder(_, $.comboBoxBorderColor),
  619. t.style.boxShadow = "0px 0px 10px " + $.comboBoxShadowColor,
  620. null != $.baseZIndex && (t.style.zIndex = parseInt($.baseZIndex) + 1 + ""),
  621. t.addEventListener("mousemove", function(C) {
  622. c.ss(N.getDataAt(C))
  623. }, !1),
  624. t.addEventListener("keydown", function(r) {
  625. if (k.isEnter(r)) {
  626. var H = c.ld();
  627. H && (Y.setValue(H.value),
  628. Y.close())
  629. }
  630. k.isEsc(r) && Y.close()
  631. }, !1),
  632. _.addEventListener("keydown", function(U) {
  633. (k.isDown(U) || k.isUp(U)) && Y.open()
  634. }, !1),
  635. N.onDataClicked = function(C) {
  636. Y.setValue(C.value),
  637. Y.close()
  638. }
  639. ,
  640. _.addEventListener(a, function(w) {
  641. if (J(w)) {
  642. var O = w.target;
  643. (O === e || O === _) && (C(w),
  644. Y.toggle())
  645. }
  646. }, !1),
  647. Y._handleWindowClick = function(R) {
  648. if (J(R)) {
  649. var X = R.target;
  650. X === Y._input || t.contains(X) || X === _ || Y.close()
  651. }
  652. }
  653. ,
  654. Y.iv()
  655. }
  656. ,
  657. $.def(L + "ComboBox", X, {
  658. ms_v: 1,
  659. ms_fire: 1,
  660. ms_tip: 1,
  661. ms_ac: ["dropDownIcon", "dropDownWidth", "toolTip", "strict", "indent", "background", "labelFont", "labelColor", "labelSelectColor", "maxHeight", "selectBackground", "value", "values", "labels", "icons", "editable"],
  662. _strict: !0,
  663. _editable: !1,
  664. _maxHeight: $.comboBoxMaxHeight,
  665. _labelFont: $.comboBoxLabelFont,
  666. _labelColor: $.comboBoxLabelColor,
  667. _labelSelectColor: $.comboBoxLabelSelectColor,
  668. _background: $.comboBoxBackground,
  669. _dropDownWidth: R,
  670. _dropDownIcon: $.comboBoxDropDownIcon,
  671. _selectBackground: $.comboBoxSelectBackground,
  672. _indent: T,
  673. getListView: function() {
  674. return this._listView
  675. },
  676. onPropertyChanged: function(G) {
  677. this.iv(),
  678. "value" === G.property && this.onValueChanged(G.oldValue, G.newValue)
  679. },
  680. onValueChanged: function() {},
  681. getToolTip: function() {
  682. return this._toolTip || this.toLabel(this._value)
  683. },
  684. getLabelColor: function(U, i) {
  685. return i ? this._labelSelectColor : this._labelColor
  686. },
  687. isEqual: function(V, s) {
  688. return this._strict ? V === s : V == s
  689. },
  690. toLabel: function(v) {
  691. var t = this
  692. , U = t._values
  693. , k = t._labels;
  694. if (k && U && k.length === U.length)
  695. for (var $ = 0; $ < U.length; $++)
  696. if (t.isEqual(U[$], v))
  697. return k[$];
  698. return null == v ? "" : v + ""
  699. },
  700. toIcon: function(Q) {
  701. var S = this
  702. , v = S._values
  703. , W = S._icons;
  704. if (W && v && W.length === v.length)
  705. for (var Y = 0; Y < v.length; Y++)
  706. if (S.isEqual(v[Y], Q))
  707. return W[Y];
  708. return null
  709. },
  710. drawValue: function(D, p, $, T, M, K, j) {
  711. var d = this
  712. , z = d._indent
  713. , r = d.toLabel(p)
  714. , P = V(d.toIcon(p));
  715. P && (S(D, P, T + z / 2, M + j / 2),
  716. T += z),
  717. r && e(D, r, d.getLabelFont(p, $), d.getLabelColor(p, $), T, M, 0, j)
  718. },
  719. drawRow: function(e, J, H, v, W, V, O) {
  720. var X = this
  721. , y = J.value
  722. , Z = X._indent;
  723. H && t(e, v, W, V, O, X._selectBackground),
  724. X.drawValue(e, y, H, v, W, V - Z, O)
  725. },
  726. validateImpl: function() {
  727. var c = this
  728. , _ = c._canvas
  729. , m = c._indent
  730. , M = c.getWidth()
  731. , o = c.getHeight()
  732. , G = M - m
  733. , d = c._background || ""
  734. , ld = c._dropDownBackground || d;
  735. c._view.style.background = d,
  736. c._listView._view.style.background = ld,
  737. F(_, M, o);
  738. var X = A(_);
  739. z(X, 0, 0, 1),
  740. X.clearRect(0, 0, M, o),
  741. S(X, V(c._dropDownIcon), G + m / 2, o / 2, c, c),
  742. X.beginPath(),
  743. X.rect(0, 0, G, o),
  744. X.clip(),
  745. c.drawValue(X, c._value, !1, 0, 0, G, o),
  746. X.restore()
  747. },
  748. isOpened: function() {
  749. return !!this._listView._view.parentNode
  750. },
  751. open: function() {
  752. var G = this
  753. , S = G._listView
  754. , Q = S.dm()
  755. , h = G._values || []
  756. , r = h.length;
  757. if (!G.isOpened()) {
  758. Q.clear();
  759. for (var A = 0; r > A; A++) {
  760. var u = new p.Data
  761. , R = h[A];
  762. u.setName(G.toLabel(R)),
  763. u.value = R,
  764. Q.add(u),
  765. G.isEqual(R, G._value) && Q.sm().ss(u)
  766. }
  767. var o = j()
  768. , W = o.left
  769. , V = o.top
  770. , n = o.height
  771. , F = G._view.getBoundingClientRect()
  772. , J = F.left + W
  773. , g = F.top + V
  774. , m = F.height
  775. , f = G.getIndent()
  776. , K = G.getWidth()
  777. , w = G.getHeight()
  778. , E = J + 1
  779. , s = g + m
  780. , M = G.getDropDownWidth() || K
  781. , e = r * w;
  782. if (G._maxHeight > 0 && (e = Math.min(e, G._maxHeight)),
  783. S.setRowHeight(w),
  784. s + e > V + n && (g - V > V + n - g - m ? (e = Math.min(e, g - V),
  785. s = g - e) : e = V + n - s),
  786. G._editable) {
  787. var L = G._input = $.createElement("input", G.getSelectBackground(), G.getLabelFont(), G.toLabel(G._value));
  788. document.body.appendChild(L),
  789. x(L, J, g + 1, K - f, w),
  790. L.addEventListener("keydown", function(W) {
  791. k.isEnter(W) ? G.setInputValue(L) : k.isEsc(W) && G.close()
  792. }, !1),
  793. G.onInputCreated(L)
  794. }
  795. document.body.appendChild(S.getView()),
  796. x(S, E, s, M, e),
  797. S.setFocus(),
  798. p.Default.callLater(function() {
  799. y.addEventListener(a, G._handleWindowClick, !1)
  800. }),
  801. G.onOpened && G.onOpened(),
  802. k.closePopup(G)
  803. }
  804. },
  805. onInputCreated: function() {},
  806. setInputValue: function(M) {
  807. var c = this
  808. , p = c._labels
  809. , u = c._values
  810. , j = M.value;
  811. if (p)
  812. for (var P = 0; P < p.length; P++)
  813. j === p[P] && (j = u[P]);
  814. "string" == typeof j && u && u.length && "number" == typeof u[0] && (j = parseFloat(j)),
  815. c.setValue(j),
  816. c.close()
  817. },
  818. close: function() {
  819. var w = this;
  820. w.isOpened() && (o(w._listView._view),
  821. w._input && (o(w._input),
  822. delete w._input),
  823. y.removeEventListener(a, w._handleWindowClick, !1),
  824. w.onClosed && w.onClosed(),
  825. $.popup === w && delete $.popup),
  826. w.setFocus()
  827. },
  828. toggle: function() {
  829. var H = this;
  830. H.isOpened() ? H.close() : H.open()
  831. }
  832. }),
  833. i.BaseDropDownTemplate = function(L) {
  834. this._master = L
  835. }
  836. ,
  837. $.def(L + "BaseDropDownTemplate", X, {
  838. ms_ac: ["master"],
  839. getView: function() {},
  840. onOpened: function() {},
  841. onClosed: function() {},
  842. getValue: function() {},
  843. getWidth: function() {},
  844. getHeight: function() {}
  845. }),
  846. i.MultiComboBox = function() {
  847. var f = this
  848. , l = f._view = k.createView(null, f)
  849. , N = f._canvas = h(l);
  850. f.setHeight(B),
  851. f.setWidth(80),
  852. l.style.display = "inline-block",
  853. k.setBorder(l, $.comboBoxBorderColor),
  854. l.addEventListener("keydown", function(w) {
  855. (k.isDown(w) || k.isUp(w)) && f.open()
  856. }, !1),
  857. l.addEventListener(a, function(u) {
  858. if (J(u)) {
  859. var o = u.target;
  860. (o === N || o === l) && (C(u),
  861. f.toggle())
  862. }
  863. }, !1),
  864. f._handleWindowClick = function(H) {
  865. if (J(H)) {
  866. var I = H.target
  867. , G = f._dropDownComponentInstanceView;
  868. I === f._input || I === l || G && G.contains(I) || f.close()
  869. }
  870. }
  871. ,
  872. f.iv()
  873. }
  874. ,
  875. $.def(L + "MultiComboBox", X, {
  876. ms_v: 1,
  877. ms_fire: 1,
  878. ms_tip: 1,
  879. ms_ac: ["dropDownIcon", "toolTip", "background", "labelFont", "labelColor", "value", "editable", "indent", "dropDownComponent"],
  880. _editable: !1,
  881. _background: $.comboBoxBackground,
  882. _dropDownIcon: $.comboBoxDropDownIcon,
  883. _indent: T,
  884. _labelFont: $.comboBoxLabelFont,
  885. _labelColor: $.comboBoxLabelColor,
  886. onPropertyChanged: function(E) {
  887. var p = this;
  888. p.iv(),
  889. "value" === E.property && p.onValueChanged(E.oldValue, E.newValue)
  890. },
  891. onValueChanged: function() {},
  892. getDropDownComponentInstance: function() {
  893. return this._dropDownComponentInstance
  894. },
  895. getToolTip: function() {
  896. return this._toolTip
  897. },
  898. validateImpl: function() {
  899. var u = this
  900. , c = u._canvas
  901. , t = u._indent
  902. , g = u.getWidth()
  903. , E = u.getHeight()
  904. , Q = g - t
  905. , G = u._background || "";
  906. u._view.style.background = G,
  907. F(c, g, E);
  908. var v = A(c);
  909. z(v, 0, 0, 1),
  910. v.clearRect(0, 0, g, E),
  911. S(v, V(u._dropDownIcon), Q + t / 2, E / 2, u, u),
  912. v.beginPath(),
  913. v.rect(0, 0, Q, E),
  914. v.clip(),
  915. this.drawValue(v, 0, 0, Q, E),
  916. u._input && u._input.value !== u._value && (u._input.value = null == u._value ? "" : u._value),
  917. v.restore()
  918. },
  919. drawValue: function(J, i, I, M, m) {
  920. e(J, this._value, this.getLabelFont(), this.getLabelColor(), i + 1, I, 0, m)
  921. },
  922. isOpened: function() {
  923. var w = this
  924. , j = w._dropDownComponentInstanceView;
  925. return !!j
  926. },
  927. open: function() {
  928. var _ = this;
  929. if (!_.isOpened()) {
  930. var N = $.getClass(_._dropDownComponent)
  931. , u = _._dropDownComponentInstance = new N(_)
  932. , M = _._dropDownComponentInstanceView = u.getView()
  933. , F = j()
  934. , d = F.left
  935. , n = F.top
  936. , T = F.width
  937. , G = F.height
  938. , W = _._view.getBoundingClientRect()
  939. , m = W.left + d
  940. , O = W.top + n
  941. , i = (W.width,
  942. W.height)
  943. , g = _.getIndent()
  944. , Q = _.getWidth()
  945. , o = _.getHeight()
  946. , R = m
  947. , s = O + i
  948. , D = u.getWidth() || Q
  949. , v = u.getHeight();
  950. if (s + v > n + G && O - n > n + G - O - i && (s = O - v),
  951. R + D > d + T && (R -= R + D - d - T),
  952. _._editable) {
  953. var b = _._input = $.createElement("input", $.comboBoxSelectBackground, _.getLabelFont(), _._value);
  954. document.body.appendChild(b),
  955. x(b, m, O + 1, Q - g, o),
  956. b.addEventListener("keydown", function(E) {
  957. k.isEnter(E) ? (_.setValue(b.value),
  958. _.close(!0)) : k.isEsc(E) && _.close(!0)
  959. }, !1),
  960. _.onInputCreated(b)
  961. }
  962. M.style.boxShadow = "0px 0px 10px " + $.toolTipShadowColor,
  963. M.style.position = "absolute",
  964. null != $.baseZIndex && (M.style.zIndex = parseInt($.baseZIndex) + 1 + ""),
  965. document.body.appendChild(M),
  966. M.focus(),
  967. x(u, R, s, D, v),
  968. u.onOpened && u.onOpened(_._value),
  969. y.addEventListener(a, _._handleWindowClick, !1),
  970. _.onOpened && _.onOpened(),
  971. k.closePopup(_)
  972. }
  973. },
  974. onInputCreated: function() {},
  975. close: function(I) {
  976. var v = this;
  977. if (v.isOpened()) {
  978. I || v.setValue(v._dropDownComponentInstance.getValue());
  979. var L = v._dropDownComponentInstance
  980. , e = v._dropDownComponentInstanceView;
  981. L.onClosed && L.onClosed(),
  982. o(e),
  983. delete v._dropDownComponentInstanceView,
  984. delete v._dropDownComponentInstance,
  985. v._input && (o(v._input),
  986. delete v._input),
  987. y.removeEventListener(a, v._handleWindowClick, !1),
  988. v.onClosed && v.onClosed(),
  989. $.popup === v && delete $.popup
  990. }
  991. v.setFocus()
  992. },
  993. toggle: function() {
  994. var J = this;
  995. J.isOpened() ? J.close() : J.open()
  996. }
  997. }),
  998. i.Image = function() {
  999. var w = this
  1000. , c = w._view = k.createView(null, w);
  1001. c.onmousedown = C,
  1002. w.setHeight(B),
  1003. w.setWidth(80),
  1004. w._canvas = h(c),
  1005. new bp(w),
  1006. w.iv()
  1007. }
  1008. ,
  1009. q(L + "Image", X, {
  1010. ms_v: 1,
  1011. ms_fire: 1,
  1012. ms_tip: 1,
  1013. ms_ac: ["icon", "iconColor", "stretch", "toolTip", "borderColor", "background"],
  1014. _borderColor: $.imageBorderColor,
  1015. _background: $.imageBackground,
  1016. _stretch: "centerUniform",
  1017. onClicked: function() {},
  1018. onPropertyChanged: function() {
  1019. this.iv()
  1020. },
  1021. validateImpl: function() {
  1022. var a = this
  1023. , I = a._canvas
  1024. , X = a.getWidth()
  1025. , D = a.getHeight()
  1026. , R = a._iconColor
  1027. , u = V(a._icon, R)
  1028. , J = a._background;
  1029. F(I, X, D);
  1030. var W = A(I);
  1031. z(W, 0, 0, 1),
  1032. W.clearRect(0, 0, X, D),
  1033. J && t(W, 0, 0, X, D, J),
  1034. this.drawImage(W, u, 0, 0, X, D, R),
  1035. m(W, a._borderColor, 0, 0, X, D),
  1036. W.restore()
  1037. },
  1038. drawImage: function(U, A, z, B, Z, R, m) {
  1039. A && $.drawStretchImage(U, A, this._stretch, z, B, Z, R, null, this, m)
  1040. }
  1041. });
  1042. var bp = function(I) {
  1043. this.image = I,
  1044. this.addListeners()
  1045. };
  1046. q(bp, X, {
  1047. ms_listener: 1,
  1048. getView: function() {
  1049. return this.image._view
  1050. },
  1051. handle_mousedown: function(l) {
  1052. J(l) && this.handle_touchstart(l)
  1053. },
  1054. handleWindowMouseMove: function(G) {
  1055. this.handleWindowTouchMove(G)
  1056. },
  1057. handleWindowMouseUp: function(s) {
  1058. this.handleWindowTouchEnd(s)
  1059. },
  1060. handle_touchstart: function(f) {
  1061. C(f),
  1062. g(this, f)
  1063. },
  1064. handleWindowTouchMove: function() {},
  1065. handleWindowTouchEnd: function(p) {
  1066. var N = this
  1067. , Y = N.image;
  1068. jj(Y, p) && Y.onClicked(p)
  1069. }
  1070. });
  1071. var Sn = "data:image/png;base64,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"
  1072. , Up = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAEACAIAAABdw+MhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALBJREFUeNrs2sEJgDAQRNGJBPuvV5R4FAuYnF4aeGRv+9mx0n0zOQEAAAAAAAAAAAAAAABsAsbK0/3Bk6MLXO1WAQAAAAAAAAAAAAAAAOBLCUn3bGCWWwgAAAAAAAAAAAAAAACA36Z/rzKw7vKIcgEAAAAAAAAAAAAAAADYBIzyzUBmuYUAAAAAAAAAAAAAAAAA2AmM8s1AZrmFAAAAAAAAAAAAAAAAAPht+uWU8AowAGyEi9doBGciAAAAAElFTkSuQmCC"
  1073. , Pf = "data:image/png;base64,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"
  1074. , Qp = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA6SURBVChTY/iPCk6DwRkYoKv0sWPHjiIBBohyCADKQVXBAIr0kSNHoMIwwAC1BAyApkGFYYAS6f//AVzgDAPz1XkAAAAAAElFTkSuQmCC"
  1075. , $q = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAACXBIWXMAAAsTAAALEwEAmpwYAAABNmlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjarY6xSsNQFEDPi6LiUCsEcXB4kygotupgxqQtRRCs1SHJ1qShSmkSXl7VfoSjWwcXd7/AyVFwUPwC/0Bx6uAQIYODCJ7p3MPlcsGo2HWnYZRhEGvVbjrS9Xw5+8QMUwDQCbPUbrUOAOIkjvjB5ysC4HnTrjsN/sZ8mCoNTIDtbpSFICpA/0KnGsQYMIN+qkHcAaY6addAPAClXu4vQCnI/Q0oKdfzQXwAZs/1fDDmADPIfQUwdXSpAWpJOlJnvVMtq5ZlSbubBJE8HmU6GmRyPw4TlSaqo6MukP8HwGK+2G46cq1qWXvr/DOu58vc3o8QgFh6LFpBOFTn3yqMnd/n4sZ4GQ5vYXpStN0ruNmAheuirVahvAX34y/Axk/96FpPYgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAUggAARVYAAA6lwAAF2/XWh+QAAAANUlEQVR42myNsQ0AMAzC8P9Hu0sjpU3YkLFADWBmIInqQsgDAar8kCY6zDtYzfUzte5ROQMAeFAiAMRBE+oAAAAASUVORK5CYII=";
  1076. i.ColorPicker = function() {
  1077. var v = this;
  1078. i.ColorPicker.superClass.constructor.call(v),
  1079. v.setEditable(!0),
  1080. v.setDropDownComponent(i.ColorPickerTemp)
  1081. }
  1082. ,
  1083. q(L + "ColorPicker", i.MultiComboBox, {
  1084. ms_ac: ["instant", "clearButtonVisible"],
  1085. _clearButtonVisible: !0,
  1086. setValue: function(M) {
  1087. var m = this;
  1088. if (M !== R) {
  1089. var v = m._value;
  1090. m._value = M,
  1091. m.fp("value", v, M)
  1092. }
  1093. },
  1094. drawValue: function($, r, S, K, W) {
  1095. this._value && ($.beginPath(),
  1096. $.rect(r + 2, S + 2, 20, W - 4),
  1097. $.fillStyle = this._value,
  1098. $.fill()),
  1099. e($, this._value, this.getLabelFont(), this.getLabelColor(), r + 23, S, 0, W)
  1100. }
  1101. }),
  1102. i.ColorPickerTemp = function(J) {
  1103. var y = this
  1104. , _ = "px"
  1105. , x = y._view = k.createView(null, y)
  1106. , P = y.$10o = document.createElement("div")
  1107. , t = y.$11o = u()
  1108. , a = y.$12o = u()
  1109. , z = P.style;
  1110. y._h = 360,
  1111. y._s = 100,
  1112. y._v = 100,
  1113. x.className = "colorPickerPopup",
  1114. x.style.position = "absolute",
  1115. x.style.background = "white",
  1116. i.ColorPickerTemp.superClass.constructor.call(y, J);
  1117. var g = '<div style="border: 1px solid rgba(0, 0, 0, 0); position: absolute; width: 40px; height: 20px; top: 5px; left: 5px; bottom: 5px; background: url(' + Qp + ') repeat;"></div> <div class= "preview" style="border: 1px solid black; position: absolute; width: 40px; height: 20px; top: 5px; left: 5px; bottom: 5px;"></div> <div style="margin-left: 50px; font: ' + $.labelFont + '; line-height: 30px;" > R:<input class="color_R" style="width: 28px;" type="' + (b ? "number" : "text") + '"> G:<input class="color_G" style="width: 28px" type="' + (b ? "number" : "text") + '"> B:<input class="color_B" style="width: 28px" type="' + (b ? "number" : "text") + '"> A:<input class="color_A" style="width: 28px" value="1" type="' + (b ? "number" : "text") + '"> </div>'
  1118. , s = '<div> <div class="satval" style="position: absolute;cursor:crosshair;margin-left:5px;top: 6px;border:1px solid black;width:128px;height:128px;background-image: url(' + Sn + ');background-color: red;background-size:contain;"> <div class="satval_pointer" style="position:absolute;left: 124px; top: -3px;width: 7px; height: 7px;background-image: url(' + $q + ')"></div> </div> <div class="hue_picker" style="position:absolute;width: 46px; height: 140px;left: 152px;top:0;"> <div class="hue_image" style="border: 1px solid black;position:absolute;left:7px;top:6px;width:30px; height:128px; background: url(' + Up + ');background-size:contain;"></div> <div class="hue_pointer" style="position:absolute;top:1px;left:0;width:46px; height:12px; background: url(' + Pf + ')"></div> </div> <div style="position: absolute; left: 210px;top:6px;"> <input type="button" value="&#10003" class="color_ok"><br><br> <input type="button" value="&#10005" class="color_clear"> </div> </div>';
  1119. z.font = $.labelFont,
  1120. z.height = 30 + _,
  1121. z.lineHeight = 30 + _,
  1122. z.position = "relative",
  1123. z.whiteSpace = "nowrap",
  1124. P.innerHTML = g,
  1125. a.innerHTML = s,
  1126. x.appendChild(P),
  1127. x.appendChild(a),
  1128. x.addEventListener("click", function(Z) {
  1129. var x = Z.target
  1130. , z = x.className;
  1131. "color_ok" === z ? (y.$13o = y.$9o(),
  1132. J.close()) : "color_clear" === z ? (y.$13o = null,
  1133. J.close()) : ["color_R", "color_G", "color_B", "color_A"].indexOf(z) >= 0 && x.select()
  1134. });
  1135. var v = function(p) {
  1136. var X, c = p.target, z = c.className, b = !1;
  1137. ["color_R", "color_G", "color_B"].indexOf(z) >= 0 ? (X = parseInt(c.value),
  1138. c.value = X >= 0 && 255 >= X ? parseInt(c.value) : 0,
  1139. b = !0) : "color_A" === z && (X = parseFloat(c.value),
  1140. c.value = X >= 0 && 1 >= X ? parseFloat(c.value) : 0,
  1141. b = !0),
  1142. b && (t.style.backgroundColor = y.$9o())
  1143. };
  1144. x.addEventListener("keydown", function(F) {
  1145. var O = F.target
  1146. , n = O.className;
  1147. ["color_R", "color_G", "color_B", "color_A", "color_ok", "color_clear"].indexOf(n) >= 0 && 13 == F.keyCode && (v(F),
  1148. y.$13o = y.$9o(),
  1149. J.close())
  1150. }),
  1151. new ml(y),
  1152. x.addEventListener("change", v);
  1153. var q = ap(x, ".color_clear");
  1154. J._clearButtonVisible || (q.style.display = "none"),
  1155. p.Default.onElementCreated && (p.Default.onElementCreated(x.querySelector("input.color_R")),
  1156. p.Default.onElementCreated(x.querySelector("input.color_G")),
  1157. p.Default.onElementCreated(x.querySelector("input.color_B")),
  1158. p.Default.onElementCreated(x.querySelector("input.color_A")),
  1159. p.Default.onElementCreated(x.querySelector(".color_ok")),
  1160. p.Default.onElementCreated(x.querySelector(".color_clear")))
  1161. }
  1162. ,
  1163. q(i.ColorPickerTemp, i.BaseDropDownTemplate, {
  1164. $6o: function() {
  1165. var R = this
  1166. , D = R._view
  1167. , t = R._master
  1168. , M = R._h
  1169. , N = R._s
  1170. , n = R._v
  1171. , p = R.$2o(M / 360, N / 100, n / 100)
  1172. , T = p.r
  1173. , g = p.g
  1174. , W = p.b;
  1175. D.querySelector("input.color_R").value = K(255 * T),
  1176. D.querySelector("input.color_G").value = K(255 * g),
  1177. D.querySelector("input.color_B").value = K(255 * W);
  1178. var z = R.$9o();
  1179. D.querySelector(".preview").style.backgroundColor = z;
  1180. var J = R.$2o(M / 360, 1, 1);
  1181. D.querySelector(".satval").style.backgroundColor = R.$4o(J.r, J.g, J.b, !0),
  1182. t._instant && t.setValue(z)
  1183. },
  1184. $5o: function(I, c, b) {
  1185. var r, t, Q = Math.max(Math.max(I, c), b), B = Math.min(Math.min(I, c), b), m = Q;
  1186. if (B == Q)
  1187. r = 0,
  1188. t = 0;
  1189. else {
  1190. var X = Q - B;
  1191. t = X / Q,
  1192. r = I == Q ? (c - b) / X : c == Q ? 2 + (b - I) / X : 4 + (I - c) / X,
  1193. r /= 6,
  1194. 0 > r && (r += 1),
  1195. r > 1 && (r -= 1)
  1196. }
  1197. return {
  1198. h: r,
  1199. s: t,
  1200. v: m
  1201. }
  1202. },
  1203. $4o: function(q, M, E, Q) {
  1204. return q = K(255 * q),
  1205. M = K(255 * M),
  1206. E = K(255 * E),
  1207. Q == R && (Q = !0),
  1208. q = q.toString(16),
  1209. 1 == q.length && (q = "0" + q),
  1210. M = M.toString(16),
  1211. 1 == M.length && (M = "0" + M),
  1212. E = E.toString(16),
  1213. 1 == E.length && (E = "0" + E),
  1214. ((Q ? "#" : "") + q + M + E).toUpperCase()
  1215. },
  1216. $3o: function(v, n, e) {
  1217. e == R && (e = null),
  1218. "#" == v.substr(0, 1) && (v = v.substr(1));
  1219. var Y, M, O;
  1220. if (3 == v.length)
  1221. Y = v.substr(0, 1),
  1222. Y += Y,
  1223. M = v.substr(1, 1),
  1224. M += M,
  1225. O = v.substr(2, 1),
  1226. O += O;
  1227. else {
  1228. if (6 != v.length)
  1229. return e;
  1230. Y = v.substr(0, 2),
  1231. M = v.substr(2, 2),
  1232. O = v.substr(4, 2)
  1233. }
  1234. return Y = parseInt(Y, 16),
  1235. M = parseInt(M, 16),
  1236. O = parseInt(O, 16),
  1237. isNaN(Y) || isNaN(M) || isNaN(O) ? e : n ? {
  1238. r: Y,
  1239. g: M,
  1240. b: O
  1241. } : {
  1242. r: Y / 255,
  1243. g: M / 255,
  1244. b: O / 255
  1245. }
  1246. },
  1247. $2o: function(S, c, i) {
  1248. var o, a, f;
  1249. if (0 == i)
  1250. o = 0,
  1251. a = 0,
  1252. f = 0;
  1253. else {
  1254. var V = Math.floor(6 * S)
  1255. , s = 6 * S - V
  1256. , R = i * (1 - c)
  1257. , $ = i * (1 - c * s)
  1258. , u = i * (1 - c * (1 - s));
  1259. switch (V) {
  1260. case 1:
  1261. o = $,
  1262. a = i,
  1263. f = R;
  1264. break;
  1265. case 2:
  1266. o = R,
  1267. a = i,
  1268. f = u;
  1269. break;
  1270. case 3:
  1271. o = R,
  1272. a = $,
  1273. f = i;
  1274. break;
  1275. case 4:
  1276. o = u,
  1277. a = R,
  1278. f = i;
  1279. break;
  1280. case 5:
  1281. o = i,
  1282. a = R,
  1283. f = $;
  1284. break;
  1285. case 6:
  1286. case 0:
  1287. o = i,
  1288. a = u,
  1289. f = R
  1290. }
  1291. }
  1292. return {
  1293. r: o,
  1294. g: a,
  1295. b: f
  1296. }
  1297. },
  1298. $9o: function() {
  1299. var C = this._view
  1300. , m = ap(C, "input.color_R").value
  1301. , e = ap(C, "input.color_G").value
  1302. , _ = ap(C, "input.color_B").value
  1303. , w = ap(C, "input.color_A").value || 1;
  1304. return "" === m || "" === e || "" === _ || "" === w ? R : 1 == w ? "rgb(" + m + "," + e + "," + _ + ")" : "rgba(" + m + "," + e + "," + _ + "," + w + ")"
  1305. },
  1306. getView: function() {
  1307. return this._view
  1308. },
  1309. onOpened: function(Y) {
  1310. if (Y) {
  1311. var i, $ = this, G = $._view;
  1312. if ($.$11o.style.backgroundColor = Y,
  1313. 0 === Y.indexOf("#") ? (Y = Y.substr(1, 6),
  1314. i = $.$3o(Y, !0),
  1315. i = [i.r, i.g, i.b]) : 0 === Y.indexOf("rgb") && (Y = Y.substring(Y.indexOf("(") + 1, Y.indexOf(")")),
  1316. i = Y.split(",")),
  1317. i) {
  1318. var z = 4 === i.length ? i[3] : 1
  1319. , r = $.$5o(i[0] / 255, i[1] / 255, i[2] / 255)
  1320. , I = ap(G, ".satval_pointer");
  1321. ap(G, "input.color_R").value = i[0],
  1322. ap(G, "input.color_G").value = i[1],
  1323. ap(G, "input.color_B").value = i[2],
  1324. ap(G, "input.color_A").value = z,
  1325. $._h = K(360 * r.h),
  1326. $._s = K(100 * r.s),
  1327. $._v = K(100 * r.v),
  1328. I.style.left = 127 * r.s - 3 + "px",
  1329. I.style.top = 127 - 127 * r.v - 3 + "px",
  1330. ap(G, ".hue_pointer").style.top = 128 - 127 * r.h + "px",
  1331. $.$6o()
  1332. }
  1333. }
  1334. },
  1335. onClosed: function() {},
  1336. getValue: function() {
  1337. return this.$13o
  1338. },
  1339. getHeight: function() {
  1340. return 170
  1341. },
  1342. getWidth: function() {
  1343. return 252
  1344. }
  1345. });
  1346. var ml = function(f) {
  1347. this.$8o = f,
  1348. this.setUp()
  1349. };
  1350. q(ml, X, {
  1351. ms_listener: 1,
  1352. getView: function() {
  1353. return this.$8o._view
  1354. },
  1355. setUp: function() {
  1356. this.addListeners()
  1357. },
  1358. tearDown: function() {
  1359. this.removeListeners(),
  1360. this.clear()
  1361. },
  1362. clear: function() {
  1363. delete this.$7o
  1364. },
  1365. handle_touchstart: function(t) {
  1366. var H = this
  1367. , E = t.target
  1368. , R = H.$8o
  1369. , B = H.getView()
  1370. , P = ap(B, ".hue_picker")
  1371. , A = ap(B, ".satval");
  1372. P.contains(E) ? (H.$7o = 1,
  1373. H.$1o(t, 1)) : A.contains(E) && (H.$7o = 2,
  1374. H.$1o(t, 2)),
  1375. H.$7o && $.isDoubleClick(t) && (R.$13o = R.$9o(),
  1376. R._master.close())
  1377. },
  1378. $1o: function(u, p) {
  1379. $.preventDefault(u);
  1380. var V, y, Y, M = this, L = M.$8o, l = M.getView(), R = ap(l, ".hue_picker"), J = ap(l, ".satval");
  1381. if (u = b ? vg(u) : u,
  1382. 1 === p) {
  1383. V = R.getBoundingClientRect(),
  1384. Y = u.clientY - V.top,
  1385. Y -= 7,
  1386. 0 > Y && (Y = 0),
  1387. Y > 127 && (Y = 127),
  1388. ap(l, ".hue_pointer").style.top = Y + 1 + "px";
  1389. var T = Y;
  1390. T = K(360 - T * (360 / 127)),
  1391. L._h = T,
  1392. L.$6o()
  1393. } else if (2 === p) {
  1394. V = J.getBoundingClientRect(),
  1395. y = u.clientX - V.left - 1,
  1396. Y = u.clientY - V.top - 1,
  1397. 0 > y && (y = 0),
  1398. y > 127 && (y = 127),
  1399. 0 > Y && (Y = 0),
  1400. Y > 127 && (Y = 127),
  1401. L._s = K(100 * y / 127),
  1402. L._v = K(100 - 100 * Y / 127);
  1403. var H = ap(l, ".satval_pointer");
  1404. H.style.left = y - 3 + "px",
  1405. H.style.top = Y - 3 + "px",
  1406. L.$6o()
  1407. }
  1408. },
  1409. handle_mousedown: function(n) {
  1410. this.handle_touchstart(n)
  1411. },
  1412. handle_mouseup: function(h) {
  1413. this.handle_touchend(h)
  1414. },
  1415. handle_touchend: function(P) {
  1416. var f = this;
  1417. f.clear(P)
  1418. },
  1419. handle_mousemove: function(q) {
  1420. this.handle_touchmove(q)
  1421. },
  1422. handle_touchmove: function() {
  1423. var W = this;
  1424. W.$7o && $.startDragging(W)
  1425. },
  1426. handleWindowMouseUp: function(p) {
  1427. this.handleWindowTouchEnd(p)
  1428. },
  1429. handleWindowTouchEnd: function(H) {
  1430. var m = this;
  1431. m.clear(H)
  1432. },
  1433. handleWindowMouseMove: function(p) {
  1434. this.handleWindowTouchMove(p)
  1435. },
  1436. handleWindowTouchMove: function(L) {
  1437. var X = this
  1438. , f = X.$7o;
  1439. f && X.$1o(L, f)
  1440. }
  1441. }),
  1442. i.FormPane = function(m) {
  1443. var g = this
  1444. , A = g._view = k.createView(1, g);
  1445. m || (g._canvas = h(A)),
  1446. A.appendChild(g._79O = u()),
  1447. g._rows = [],
  1448. g._itemMap = {},
  1449. g.iv(),
  1450. A.handleGroupSelectedChanged = function(w) {
  1451. if (w.isSelected()) {
  1452. var k = w.getGroupId();
  1453. null != k && g._rows.forEach(function(L) {
  1454. var P = L.items;
  1455. P && P.forEach(function(H) {
  1456. if (H) {
  1457. var G = H.element;
  1458. G && G !== w && G.setSelected && G.getGroupId && G.getGroupId() === k && G.setSelected(!1)
  1459. }
  1460. })
  1461. })
  1462. }
  1463. }
  1464. ,
  1465. new yg(g)
  1466. }
  1467. ,
  1468. q(L + "FormPane", X, {
  1469. ms_v: 1,
  1470. ms_fire: 1,
  1471. ms_txy: 1,
  1472. ms_lp: 1,
  1473. ms_vs: 1,
  1474. ms_hs: 1,
  1475. ms_value: 1,
  1476. ms_ac: ["labelColor", "labelFont", "labelAlign", "labelVAlign", "vPadding", "hPadding", "labelHPadding", "labelVPadding", "hGap", "vGap", "rows", "rowHeight", "scrollBarColor", "scrollBarSize", "autoHideScrollBar"],
  1477. _29I: oe,
  1478. _91I: 0,
  1479. _59I: 0,
  1480. _labelColor: $.formPaneLabelColor,
  1481. _labelFont: $.formPaneLabelFont,
  1482. _labelAlign: $.formPaneLabelAlign,
  1483. _labelVAlign: $.formPaneLabelVAlign,
  1484. _hPadding: $.formPaneHPadding,
  1485. _vPadding: $.formPaneVPadding,
  1486. _labelHPadding: $.formPaneLabelHPadding,
  1487. _labelVPadding: $.formPaneLabelVPadding,
  1488. _hGap: $.formPaneHGap,
  1489. _vGap: $.formPaneVGap,
  1490. _rowHeight: $.widgetRowHeight,
  1491. _scrollBarColor: $.scrollBarColor,
  1492. _scrollBarSize: $.scrollBarSize,
  1493. _autoHideScrollBar: $.autoHideScrollBar,
  1494. onPropertyChanged: function(e) {
  1495. var P = this
  1496. , f = e.property;
  1497. P.iv(),
  1498. "translateX" === f ? P._42o() : "translateY" === f && P._43o()
  1499. },
  1500. adjustTranslateX: function(t) {
  1501. var h = this.getWidth() - this._91I;
  1502. return h > t && (t = h),
  1503. t > 0 ? 0 : Math.round(t)
  1504. },
  1505. adjustTranslateY: function(L) {
  1506. var B = this.getHeight() - this._59I;
  1507. return B > L && (L = B),
  1508. L > 0 ? 0 : Math.round(L)
  1509. },
  1510. setPadding: function(a) {
  1511. this.setVPadding(a),
  1512. this.setHPadding(a)
  1513. },
  1514. getLabelFont: function(k) {
  1515. return k && k.font ? k.font : this._labelFont
  1516. },
  1517. getLabelColor: function(J) {
  1518. return J && J.color ? J.color : this._labelColor
  1519. },
  1520. getLabelAlign: function(V) {
  1521. return V && V.align ? V.align : this._labelAlign
  1522. },
  1523. getLabelVAlign: function(g) {
  1524. return g && g.vAlign ? g.vAlign : this._labelVAlign
  1525. },
  1526. getRowBorderColor: function(Q) {
  1527. return Q ? Q.borderColor : null
  1528. },
  1529. getRowBackground: function(J) {
  1530. return J ? J.background : null
  1531. },
  1532. getItemBorderColor: function(j) {
  1533. return j ? j.borderColor : null
  1534. },
  1535. getItemBackground: function(R) {
  1536. return R ? R.background : null
  1537. },
  1538. getItemById: function(O) {
  1539. return this._itemMap[O]
  1540. },
  1541. getViewById: function(k) {
  1542. var D = this.getItemById(k);
  1543. return D ? D.element : null
  1544. },
  1545. getItemView: function(b) {
  1546. if (b) {
  1547. var T = b.element;
  1548. if (T) {
  1549. if (T.tagName)
  1550. return T;
  1551. if (T.getView)
  1552. return T.getView()
  1553. }
  1554. }
  1555. return null
  1556. },
  1557. updateItemElement: function(D, y) {
  1558. var s = this
  1559. , Y = s.getItemById(D);
  1560. if (Y) {
  1561. var l = s.getItemView(Y);
  1562. l && s._view.removeChild(l),
  1563. Y.element = y,
  1564. l = s.getItemView(Y),
  1565. l && (l.style.position = "absolute",
  1566. s._view.insertBefore(l, s._79O)),
  1567. s.iv()
  1568. }
  1569. },
  1570. addRow: function(Q, I, u, D) {
  1571. var y = this
  1572. , g = y._view;
  1573. if (Q) {
  1574. for (var E = 0; E < Q.length; E++) {
  1575. var M = Q[E];
  1576. M && ((M.tagName || M.getView) && (Q[E] = {
  1577. element: M
  1578. }),
  1579. k.initItemElement(M),
  1580. null != M.id && (y._itemMap[M.id] = M))
  1581. }
  1582. Q.forEach(function(R) {
  1583. var I = y.getItemView(R);
  1584. I && (I.style.position = "absolute",
  1585. g.insertBefore(I, y._79O))
  1586. })
  1587. }
  1588. var q = D || {};
  1589. return q.items = Q,
  1590. q.widths = I,
  1591. q.height = u,
  1592. null == q.index ? y._rows.push(q) : y._rows.splice(q.index, 0, q),
  1593. y.iv(),
  1594. q
  1595. },
  1596. removeRows: function(f) {
  1597. if (f) {
  1598. var E = this
  1599. , W = [];
  1600. f.forEach(function(P) {
  1601. P.items && P.items.forEach(function(B) {
  1602. var Q = E.getItemView(B);
  1603. Q && E._view.removeChild(Q),
  1604. B && null != B.id && delete E._itemMap[B.id]
  1605. })
  1606. }),
  1607. E._rows.forEach(function(y) {
  1608. f.indexOf(y) < 0 && W.push(y)
  1609. }),
  1610. E._rows = W,
  1611. E.iv()
  1612. }
  1613. },
  1614. removeRow: function(K) {
  1615. var D = this
  1616. , B = D._rows.splice(K, 1)[0].items;
  1617. B && B.forEach(function(e) {
  1618. var C = D.getItemView(e);
  1619. C && D._view.removeChild(C),
  1620. e && null != e.id && delete D._itemMap[e.id]
  1621. }),
  1622. D.iv()
  1623. },
  1624. clear: function() {
  1625. for (var c = this, k = c._view; k.firstChild; )
  1626. k.removeChild(k.firstChild);
  1627. c._canvas && k.appendChild(c._canvas),
  1628. k.appendChild(c._79O),
  1629. c._rows = [],
  1630. c._itemMap = {},
  1631. c.iv()
  1632. },
  1633. validateImpl: function() {
  1634. var M, f, $, p, W, a, r = this, v = r._canvas, J = r._rowHeight, _ = r.getWidth(), G = r.getHeight(), P = r._hPadding, h = r._vPadding, e = r._vGap, V = r.ty(), T = r.tx(), E = _ - 2 * P, C = G - 2 * h, n = r._rows, k = n.length, L = 0, N = C - (k - 1) * e;
  1635. for (r._29I = {
  1636. x: -T,
  1637. y: -V,
  1638. width: _,
  1639. height: G
  1640. },
  1641. v && (F(v, _, G),
  1642. a = A(v),
  1643. z(a, 0, 0, 1),
  1644. a.clearRect(0, 0, _, G)),
  1645. $ = 0; k > $; $++)
  1646. p = n[$],
  1647. W = p.height,
  1648. null == W ? N -= J : O(W) ? (M = W.split("+"),
  1649. f = parseFloat(M[0]),
  1650. f > 1 ? N -= f : L += f,
  1651. f = parseFloat(M[1]),
  1652. f > 1 ? N -= f : L += f) : W > 1 ? N -= W : L += W;
  1653. 0 > N ? (r._59I = G - N,
  1654. N = 0) : r._59I = G;
  1655. var w = h + V
  1656. , U = _;
  1657. for ($ = 0; k > $; $++) {
  1658. p = n[$],
  1659. W = p.height,
  1660. null == W ? W = J : O(W) ? (M = W.split("+"),
  1661. f = parseFloat(M[0]),
  1662. W = f > 1 ? f : f / L * N,
  1663. f = parseFloat(M[1]),
  1664. W += f > 1 ? f : f / L * N) : 1 >= W && (W = W / L * N);
  1665. var u = P + T;
  1666. if (a) {
  1667. var j = r.getRowBorderColor(p)
  1668. , c = r.getRowBackground(p);
  1669. c && t(a, u, w, E, W, c),
  1670. j && m(a, j, u, w, E, W)
  1671. }
  1672. var D = r.validateRow(a, _, p.items, p.widths, u, w, E, W);
  1673. D > U && (U = D),
  1674. w += W + e
  1675. }
  1676. a && a.restore(),
  1677. r._91I = U,
  1678. r._92I(),
  1679. r._93I(),
  1680. r.tx(r.tx()),
  1681. r.ty(r.ty())
  1682. },
  1683. validateRow: function(x, v, N, J, r, o, z, u) {
  1684. if (!N)
  1685. return 0;
  1686. var E, j, c, C, Q, q = this, _ = v, i = q._hGap, $ = N.length, b = 0, F = z - ($ - 1) * i;
  1687. for (c = 0; $ > c; c++)
  1688. C = J[c],
  1689. O(C) ? (E = C.split("+"),
  1690. j = parseFloat(E[0]),
  1691. j > 1 ? F -= j : b += j,
  1692. j = parseFloat(E[1]),
  1693. j > 1 ? F -= j : b += j) : C > 1 ? F -= C : b += C;
  1694. for (0 > F && (_ -= F,
  1695. F = 0),
  1696. c = 0; $ > c; c++) {
  1697. if (Q = N[c],
  1698. C = J[c],
  1699. O(C) ? (E = C.split("+"),
  1700. j = parseFloat(E[0]),
  1701. C = j > 1 ? j : j / b * F,
  1702. j = parseFloat(E[1]),
  1703. C += j > 1 ? j : j / b * F) : 1 >= C && (C = C / b * F),
  1704. Q) {
  1705. if (x) {
  1706. var X = q.getItemBorderColor(Q)
  1707. , e = q.getItemBackground(Q);
  1708. e && t(x, r, o, C, u, e),
  1709. X && m(x, X, r, o, C, u)
  1710. }
  1711. q.validateItem(x, Q, r, o, C, u)
  1712. }
  1713. r += C + i
  1714. }
  1715. return _
  1716. },
  1717. validateItem: function(n, D, p, r, S, T) {
  1718. var l, I = this, h = D.element;
  1719. h && !O(h) ? x(h, p, r, S, T) : n && (O(D) ? l = D : O(D.element) && (l = D.element),
  1720. l && (n.save(),
  1721. n.beginPath(),
  1722. n.rect(p, r, S, T),
  1723. n.clip(),
  1724. e(n, l, I.getLabelFont(D), I.getLabelColor(D), p + I._labelHPadding, r - I._labelVPadding, S - 2 * I._labelHPadding, T - 2 * I._labelVPadding, I.getLabelAlign(D), I.getLabelVAlign(D)),
  1725. n.restore()))
  1726. }
  1727. });
  1728. var yg = function(S) {
  1729. this.f = S,
  1730. this.addListeners()
  1731. };
  1732. q(yg, X, {
  1733. ms_listener: 1,
  1734. getView: function() {
  1735. return this.f._view
  1736. },
  1737. handle_mousedown: function(q) {
  1738. J(q) && this.handle_touchstart(q)
  1739. },
  1740. handleWindowMouseMove: function(h) {
  1741. this.handleWindowTouchMove(h)
  1742. },
  1743. handleWindowMouseUp: function(G) {
  1744. this.handleWindowTouchEnd(G)
  1745. },
  1746. handle_touchstart: function(w) {
  1747. var M, e = this, o = e.f, p = w.target;
  1748. e.isV(w) ? M = "v" : e.isH(w) ? M = "h" : (p === e.getView() || o._79O.contains(p)) && (M = "p"),
  1749. (e.s = M) && (e.cp = v(w),
  1750. e.tx = o.tx(),
  1751. e.ty = o.ty(),
  1752. C(w),
  1753. g(e, w))
  1754. },
  1755. handle_mousemove: function(t) {
  1756. var m = this
  1757. , e = m.f;
  1758. m.isV(t) && e._43o(),
  1759. m.isH(t) && e._42o()
  1760. },
  1761. handleWindowTouchMove: function($) {
  1762. var H = this
  1763. , F = H.f
  1764. , y = H.s
  1765. , q = H.tx
  1766. , K = H.ty
  1767. , c = H.cp
  1768. , D = v($)
  1769. , t = F._29I;
  1770. "p" === y ? F.setTranslate(q + D.x - c.x, K + D.y - c.y) : "v" === y ? F.ty(K + (c.y - D.y) * F._59I / t.height) : "h" === y && F.tx(q + (c.x - D.x) * F._91I / t.width)
  1771. },
  1772. handleWindowTouchEnd: function() {},
  1773. handle_mousewheel: function(I) {
  1774. this.h(I, I.wheelDelta / 40, I.wheelDelta !== I.wheelDeltaX)
  1775. },
  1776. handle_DOMMouseScroll: function(n) {
  1777. this.h(n, -n.detail, 1)
  1778. },
  1779. h: function(S, H, O) {
  1780. var v = this.f;
  1781. C(S),
  1782. k.closePopup(),
  1783. O && v._41o() ? v.translate(0, 10 * H) : v._40o() && v.translate(10 * H, 0)
  1784. },
  1785. isV: function(k) {
  1786. var M = this.f
  1787. , d = M._29I;
  1788. return M._41o() && d.x + d.width - M.lp(k).x < N
  1789. },
  1790. isH: function(n) {
  1791. var q = this.f
  1792. , O = q._29I;
  1793. return q._40o() && O.y + O.height - q.lp(n).y < N
  1794. }
  1795. })
  1796. }("undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : this, Object);