MWF.js 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181
  1. MWF = window.MWF || {};
  2. MWF.requiredModules = [];
  3. MWF.defaultPath = "/res/mwf4/package";
  4. MWF.language = "zh-cn";
  5. MWF.xDesktop = MWF.xDesktop || {};
  6. var href = window.location.href;
  7. var par = href.substr(href.lastIndexOf("?")+1, href.length);
  8. if (par){
  9. var parList = par.split("&");
  10. parList.each(function(v){
  11. var kv = v.split("=");
  12. if (kv[0].toLowerCase()=="lg") MWF.language = kv[1] || "zh-cn";
  13. }.bind(this));
  14. }
  15. if (href.indexOf("language")!==-1) COMMON["debugger"] = true;
  16. MWF.languagePackageStatus = "uninitialized";
  17. MWF.splitStr = /(,\s*){1}|(;\s*){1}/g;
  18. MWF.macro = {
  19. "temp": {}
  20. };
  21. MWF.require = function(module, callback, async, compression){
  22. //if module is loaded, do callback
  23. if (MWF.requiredModules.indexOf(module)!==-1){
  24. if (typeOf(callback).toLowerCase() === 'function'){
  25. callback();
  26. }else{
  27. MWF.runCallback(callback, "onSuccess");
  28. }
  29. return;
  30. }
  31. var levels = module.split(".");
  32. if (levels[levels.length-1]==="*"){
  33. levels[levels.length-1] = "package";
  34. }
  35. levels.shift();
  36. var jsPath = this.defaultPath;
  37. if (compression){
  38. jsPath += "/"+levels.join("/")+".min.js";
  39. }else{
  40. jsPath += "/"+levels.join("/")+".js";
  41. }
  42. var loadAsync = true;
  43. if (async===false){
  44. loadAsync = false;
  45. }
  46. if (!layout["debugger"]){
  47. jsPath = jsPath.replace(/\.js/, ".min.js");
  48. }
  49. jsPath = (jsPath.indexOf("?")!==-1) ? jsPath+"&v="+COMMON.version : jsPath+"?v="+COMMON.version;
  50. var r = new Request({
  51. url: jsPath,
  52. async: loadAsync,
  53. method: "get",
  54. onSuccess: function(){
  55. //var jsText = responseText;
  56. try{
  57. //Browser.exec(jsText);
  58. MWF.requiredModules.push(module);
  59. }catch (e){
  60. MWF.runCallback(callback, "onFailure", e);
  61. return;
  62. }
  63. if (typeOf(callback).toLowerCase() === 'function'){
  64. callback();
  65. }else{
  66. MWF.runCallback(callback, "onSuccess");
  67. }
  68. },
  69. onFailure: function(xhr){
  70. MWF.runCallback(callback, "onRequestFailure", xhr);
  71. }
  72. });
  73. r.send();
  74. };
  75. MWF.loadLP = function(name){
  76. var jsPath = this.defaultPath;
  77. jsPath = jsPath+"/lp/"+name+".js";
  78. var r = new Request({
  79. url: jsPath,
  80. async: false,
  81. method: "get",
  82. onSuccess: function(responseText){
  83. try{
  84. Browser.exec(responseText);
  85. }catch (e){}
  86. },
  87. onFailure: function(xhr){
  88. throw "MWF.loadLP Error: "+xhr.responseText;
  89. }
  90. });
  91. r.send();
  92. };
  93. MWF.runCallback = function(callback, name, par){
  94. if (typeOf(callback).toLowerCase()==='object'){
  95. if (callback[name]){
  96. callback[name].apply(callback, par);
  97. }
  98. }
  99. };
  100. MWF.getCenterPosition = function(el, width, height){
  101. var elPositon = $(el).getPosition();
  102. var elSize = $(el).getSize();
  103. var node = $("layout");
  104. var size = (node) ? $(node).getSize() : $(document.body).getSize();
  105. var top = (elPositon.y+elSize.y)/2 - (height/2);
  106. var left = (elPositon.x+elSize.x)/2-(width/2);
  107. if ((left+width)>size.x){
  108. left = size.x-width-10;
  109. }
  110. if ((top+height)>size.y){
  111. top = size.y-height-10;
  112. }
  113. return {"x": left, "y": top};
  114. };
  115. MWF.getMarkSize = function(node){
  116. var size;
  117. if (!node){
  118. size = $(document.body).getSize();
  119. var winSize = $(window).getSize();
  120. //var h = $(document.body).scrollHeight;
  121. //var w = $(document.body).scrollWidth;
  122. // var height = size.y+h+20;
  123. // var width = size.x+w;
  124. var height = size.y;
  125. var width = size.x;
  126. if (height<winSize.y) height = winSize.y;
  127. if (width<winSize.x) width = winSize.x;
  128. return {x: size.x, y: height};
  129. }else{
  130. size = $(node).getSize();
  131. return {x: size.x, y: size.y};
  132. }
  133. };
  134. MWF.json = function(jsonString, fun){
  135. var obj = JSON.decode(jsonString);
  136. var p = fun.split(".");
  137. var tmp = obj;
  138. p.each(function(item){
  139. if (item.indexOf("[")!==-1){
  140. var x = item.split("[");
  141. var i = parseInt(x[1].substr(0, x[1].indexOf("]")));
  142. tmp = tmp[x[0]][i];
  143. }else{
  144. tmp = tmp[item];
  145. }
  146. });
  147. return tmp;
  148. };
  149. MWF.getHTMLTemplate = function(url, callback, async){
  150. var loadAsync = true;
  151. if (async===false){
  152. loadAsync = false;
  153. }
  154. var res = new Request.HTML({
  155. url: url,
  156. async: loadAsync,
  157. method: "get",
  158. onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
  159. if (typeOf(callback).toLowerCase() === 'function'){
  160. callback(responseTree, responseElements, responseHTML, responseJavaScript);
  161. }else{
  162. MWF.runCallback(callback, "onSuccess", [responseTree, responseElements, responseHTML, responseJavaScript]);
  163. }
  164. }.bind(this),
  165. onFailure: function(xhr){
  166. MWF.runCallback(callback, "onRequestFailure", [xhr]);
  167. }
  168. });
  169. res.send();
  170. };
  171. MWF.getRequestText = function(url, callback, async){
  172. var loadAsync = true;
  173. if (async===false){
  174. loadAsync = false;
  175. }
  176. url = (url.indexOf("?")!==-1) ? url+"&v="+COMMON.version : url+"?v="+COMMON.version;
  177. var res = new Request({
  178. url: url,
  179. async: loadAsync,
  180. method: "get",
  181. onSuccess: function(responseText, responseXML){
  182. if (typeOf(callback).toLowerCase() === 'function'){
  183. callback(responseText, responseXML);
  184. }else{
  185. MWF.runCallback(callback, "onSuccess", [responseText, responseXML]);
  186. }
  187. }.bind(this),
  188. onFailure: function(xhr){
  189. MWF.runCallback(callback, "onRequestFailure", [xhr]);
  190. }
  191. });
  192. res.send();
  193. };
  194. MWF.getJSONP = function(url, callback, async, callbackKey){
  195. var loadAsync = true;
  196. if (async===false){
  197. loadAsync = false;
  198. }
  199. var callbackKeyWord = callbackKey || "callback";
  200. url = (url.indexOf("?")!==-1) ? url+"&v="+COMMON.version : url+"?v="+COMMON.version;
  201. var res = new Request.JSONP({
  202. url: url,
  203. secure: false,
  204. method: "get",
  205. noCache: true,
  206. async: loadAsync,
  207. callbackKey: callbackKeyWord,
  208. onSuccess: function(responseJSON, responseText){
  209. if (typeOf(callback).toLowerCase() === 'function'){
  210. callback(responseJSON, responseText);
  211. }else{
  212. MWF.runCallback(callback, "onSuccess", [responseJSON, responseText]);
  213. }
  214. }.bind(this),
  215. onFailure: function(xhr){
  216. MWF.runCallback(callback, "onRequestFailure", [xhr]);
  217. }.bind(this),
  218. onError: function(text, error){
  219. MWF.runCallback(callback, "onError", [text, error]);
  220. }.bind(this)
  221. });
  222. res.send();
  223. };
  224. MWF.getJSON = function(url, callback, async, withCredentials, nocache){
  225. var loadAsync = true;
  226. if (async===false){
  227. loadAsync = false;
  228. }
  229. var credentials = true;
  230. if (withCredentials===false){
  231. credentials = false;
  232. }
  233. var noJsonCache = false;
  234. if (nocache===true){
  235. noJsonCache = true;
  236. }
  237. url = (url.indexOf("?")!==-1) ? url+"&v="+COMMON.version : url+"?v="+COMMON.version;
  238. var res = new Request.JSON({
  239. url: url,
  240. secure: false,
  241. method: "get",
  242. noCache: noJsonCache,
  243. async: loadAsync,
  244. withCredentials: credentials,
  245. onSuccess: function(responseJSON, responseText){
  246. if (typeOf(callback).toLowerCase() === 'function'){
  247. callback(responseJSON, responseText);
  248. }else{
  249. MWF.runCallback(callback, "onSuccess", [responseJSON, responseText]);
  250. }
  251. }.bind(this),
  252. onFailure: function(xhr){
  253. MWF.runCallback(callback, "onRequestFailure", [xhr]);
  254. }.bind(this),
  255. onError: function(text, error){
  256. MWF.runCallback(callback, "onError", [text, error]);
  257. }.bind(this)
  258. });
  259. // res.setHeader("Cookie", "x_token=20150207151602%E5%BC%A0%E4%B8%89; path=/; domain=/");
  260. res.send();
  261. };
  262. MWF.restful = function(method, address, data, callback, async, withCredentials){
  263. var loadAsync = true;
  264. if (async===false){
  265. loadAsync = false;
  266. }
  267. var credentials = true;
  268. if (withCredentials===false){
  269. credentials = false;
  270. }
  271. address = (address.indexOf("?")!==-1) ? address+"&v="+COMMON.version : address+"?v="+COMMON.version;
  272. var res = new Request.JSON({
  273. url: address,
  274. secure: false,
  275. method: method,
  276. emulation: false,
  277. noCache: true,
  278. async: loadAsync,
  279. withCredentials: credentials,
  280. onSuccess: function(responseJSON, responseText){
  281. var xToken = this.getHeader("x-token");
  282. if (xToken){
  283. if (layout){
  284. if (!layout.session) layout.session = {};
  285. layout.session.token = xToken;
  286. }
  287. }
  288. if (typeOf(callback).toLowerCase() === 'function'){
  289. callback(responseJSON, responseText);
  290. }else{
  291. MWF.runCallback(callback, "onSuccess", [responseJSON, responseText]);
  292. }
  293. },
  294. onFailure: function(xhr){
  295. MWF.runCallback(callback, "onRequestFailure", [xhr]);
  296. }.bind(this),
  297. onError: function(text, error){
  298. MWF.runCallback(callback, "onError", [text, error]);
  299. }.bind(this)
  300. });
  301. if (layout["debugger"]){
  302. res.setHeader("x-debugger", "true");
  303. }
  304. res.setHeader("Content-Type", "application/json; charset=utf-8");
  305. if (layout) {
  306. if (layout.session){
  307. if (layout.session.token) {
  308. res.setHeader("x-token", layout.session.token);
  309. res.setHeader("authorization", layout.session.token);
  310. }
  311. }
  312. }
  313. //Content-Type application/x-www-form-urlencoded; charset=utf-8
  314. res.send(data);
  315. return res;
  316. };
  317. MWF.encodeJsonString = function(str){
  318. var tmp = [str];
  319. var dataStr = (JSON.encode(tmp));
  320. return dataStr.substr(2, dataStr.length-4);
  321. };
  322. MWF.decodeJsonString = function(str){
  323. var tmp = "[\""+str+"\"]";
  324. var dataObj = (JSON.decode(tmp));
  325. return dataObj[0];
  326. };
  327. MWF.getTextSize = function(text, styles){
  328. var tmpSpan = new Element("span", {
  329. "text": text,
  330. "styles": styles
  331. }).inject($(document.body));
  332. var size = tmpSpan.getSize();
  333. tmpSpan.destroy();
  334. return size;
  335. };
  336. MWF.getCenter = function(size, target, offset){
  337. debugger;
  338. if (!target) target = document.body;
  339. var targetSize = target.getSize();
  340. var targetPosition = target.getPosition(offset);
  341. var targetScroll = target.getScroll();
  342. var x = targetSize.x/2;
  343. var y = targetSize.y/2;
  344. x = x-(size.x/2);
  345. y = y-(size.y/2);
  346. x = x+targetPosition.x;
  347. y = y+targetPosition.y;
  348. x = x+targetScroll.x;
  349. y = y+targetScroll.y;
  350. return {"x": x, "y": y};
  351. };
  352. MWF.getEPointer = function(e){
  353. var x = 0;
  354. var y = 0;
  355. if (typeOf(e)=="element"){
  356. var position = e.getPosition(this.content);
  357. x = position.x;
  358. y = position.y;
  359. }else{
  360. if (Browser.name=="firefox"){
  361. x = parseFloat(e.event.clientX || e.event.x);
  362. y = parseFloat(e.event.clientY || e.event.y);
  363. }else{
  364. x = parseFloat(e.event.x);
  365. y = parseFloat(e.event.y);
  366. }
  367. if (e.target){
  368. var position = e.target.getPosition(this.content);
  369. x = position.x;
  370. y = position.y;
  371. }
  372. // }
  373. }
  374. return {"x": x, "y": y};
  375. };
  376. MWF.getParent = function(node, tag){
  377. var pNode = node.parentElement;
  378. while(pNode && pNode.tagName.toString().toLowerCase() !== tag.toString().toLowerCase()){
  379. pNode = pNode.parentElement;
  380. }
  381. return pNode;
  382. };
  383. MWF.getOffset = function(evt){
  384. if (Browser.name==="firefox"){
  385. //var target = evt.target;
  386. //if (target.offsetLeft == undefined){
  387. // target = target.parentNode;
  388. //}
  389. //var pageCoord = {x: 0, y: 0};
  390. //while (target){
  391. // pageCoord.x += target.offsetLeft;
  392. // pageCoord.y += target.offsetTop;
  393. // target = target.offsetParent;
  394. //}
  395. //var eventCoord = {
  396. // "x": window.pageXOffset + evt.clientX,
  397. // "y": window.pageYOffset + evt.clientY
  398. //};
  399. return {
  400. "offsetX": evt.layerX,
  401. "offsetY": evt.layerY
  402. };
  403. //return offset;
  404. }else{
  405. return {
  406. "offsetX": evt.offsetX,
  407. "offsetY": evt.offsetY
  408. }
  409. }
  410. };
  411. String.implement({
  412. "getAllIndexOf": function(str){
  413. var idxs= [];
  414. var idx = this.indexOf(str);
  415. while (idx !== -1){
  416. idxs.push(idx);
  417. idx = this.indexOf(str, idx+1);
  418. }
  419. return idxs;
  420. }
  421. });
  422. //if (!Element.prototype.addEventListener){
  423. // Element.implement({
  424. // "addEventListener": function(name, fun){
  425. // this.addEvent(name, fun);
  426. // }
  427. // });
  428. //}
  429. Array.implement({
  430. "trim": function(){
  431. var arr = [];
  432. this.each(function(v){
  433. if (v) arr.push(v);
  434. });
  435. return v;
  436. },
  437. "isIntersect": function(arr){
  438. return this.some(function(item){ return (arr.indexOf(item)!==-1); })
  439. }
  440. });
  441. Element.implement({
  442. "isIntoView": function() {
  443. //var size = this.getSize();
  444. var pNode = this.getParent();
  445. while (pNode && (pNode.getScrollSize().y-(pNode.getSize().y+1))<=0) pNode = pNode.getParent();
  446. if (!pNode) pNode = window;
  447. var size = pNode.getSize();
  448. var srcoll = pNode.getScroll();
  449. var p = this.getPosition(pNode);
  450. var nodeSize = this.getSize();
  451. return (p.x-srcoll.x>0 && p.y-srcoll.y>0) && (p.x+nodeSize.x<size.x+srcoll.x && p.y+nodeSize.y<size.y+srcoll.y)
  452. },
  453. "appendHTML": function(html, where){
  454. if (this.insertAdjacentHTML){
  455. var whereText = "beforeEnd";
  456. if (where==="before") whereText = "beforeBegin";
  457. if (where==="after") whereText = "afterEnd";
  458. if (where==="bottom") whereText = "beforeEnd";
  459. if (where==="top") whereText = "afterBegin";
  460. this.insertAdjacentHTML(whereText, html);
  461. }else {
  462. if (where==="bottom") this.innerHTML = this.innerHTML+html;
  463. if (where==="top") this.innerHTML = html+this.innerHTML;
  464. }
  465. },
  466. "positionTo": function(x,y){
  467. var left = x.toFloat();
  468. var top = y.toFloat();
  469. var offsetNode = this.getOffsetParent();
  470. if (offsetNode){
  471. var offsetPosition = offsetNode.getPosition();
  472. left = left-offsetPosition.x;
  473. top = top-offsetPosition.y;
  474. }
  475. this.setStyles({"top": top, "left": left});
  476. return this;
  477. },
  478. "getBorder": function(){
  479. var positions = ["top", "left", "right", "bottom"];
  480. var styles = ["color", "style", "width"];
  481. var obj = {};
  482. positions.each(function (position){
  483. styles.each(function(style){
  484. var key = "border-"+position+"-"+style;
  485. obj[key] = this.getStyle(key);
  486. }.bind(this));
  487. }.bind(this));
  488. return obj;
  489. },
  490. "isOutside": function(e){
  491. var elementCoords = this.getCoordinates();
  492. var targetCoords = this.getCoordinates();
  493. if(((e.page.x < elementCoords.left || e.page.x > (elementCoords.left + elementCoords.width)) ||
  494. (e.page.y < elementCoords.top || e.page.y > (elementCoords.top + elementCoords.height))) &&
  495. ((e.page.x < targetCoords.left || e.page.x > (targetCoords.left + targetCoords.width)) ||
  496. (e.page.y < targetCoords.top || e.page.y > (targetCoords.top + targetCoords.height))) ) return true;
  497. return false;
  498. },
  499. "getAbsolutePosition":function(){
  500. var styleLeft = 0;
  501. var styleTop = 0;
  502. var node = this;
  503. styleLeft = node.offsetLeft;
  504. styleTop = node.offsetTop;
  505. node = node.parentElement;
  506. while (node && node.tagName.toString().toLowerCase()!=="body"){
  507. styleLeft += node.offsetLeft;
  508. styleTop += node.offsetTop;
  509. node = node.offsetParent;
  510. }
  511. return {x: styleLeft, y: styleTop};
  512. },
  513. "tweenScroll": function(to, time){
  514. if (!this.tweenScrollQueue){
  515. this.tweenScrollQueue = [];
  516. }
  517. if (this.tweenScrollQueue.length){
  518. this.tweenScrollQueue.push(to);
  519. }else{
  520. this.tweenScrollQueue.push(to);
  521. this.doTweenScrollQueue(time);
  522. }
  523. },
  524. // "doTweenScrollQueue1": function(time){
  525. // if (this.tweenScrollQueue.length){
  526. // var i = this.tweenScrollQueue.length;
  527. // var to = this.tweenScrollQueue[this.tweenScrollQueue.length-1];
  528. //
  529. // //var
  530. //
  531. // var scroll = this.getScroll();
  532. // var dy = to - scroll.y;
  533. // var step = dy/time;
  534. // var count = 0;
  535. // var move = 0;
  536. //
  537. // var id = window.setInterval(function(){
  538. // move += scroll.y+step;
  539. // this.scrollTo(0, move);
  540. // step = step+1;
  541. // count++;
  542. // // $("testArea").set("text", count);
  543. // if (move>=dy){
  544. // window.clearInterval(id);
  545. // for (var x=1; x<=i; x++) this.tweenScrollQueue.shift();
  546. // $("testArea").set("text", this.tweenScrollQueue.length);
  547. // if (this.tweenScrollQueue.length) this.doTweenScrollQueue(time);
  548. // }
  549. // }.bind(this), 1);
  550. // }
  551. // },
  552. "doTweenScrollQueue": function(time){
  553. if (this.tweenScrollQueue.length){
  554. var i = this.tweenScrollQueue.length;
  555. var to = this.tweenScrollQueue[this.tweenScrollQueue.length-1];
  556. //var
  557. var scroll = this.getScroll();
  558. var dy = to - scroll.y;
  559. var step = dy/time;
  560. var count = 0;
  561. var move = 0;
  562. var id = window.setInterval(function(){
  563. this.scrollTo(0, scroll.y+count*step);
  564. count++;
  565. // $("testArea").set("text", count);
  566. if (count>time){
  567. window.clearInterval(id);
  568. for (var x=1; x<=i; x++) this.tweenScrollQueue.shift();
  569. if (this.tweenScrollQueue.length) this.doTweenScrollQueue(time);
  570. }
  571. }.bind(this), 1);
  572. }
  573. },
  574. "isPointIn": function(px, py, offX, offY, el){
  575. if (!offX) offX = 0;
  576. if (!offY) offY = 0;
  577. var position = this.getPosition(el);
  578. var size = this.getSize();
  579. return (position.x-offX<=px && position.x+size.x+offX>=px && position.y-offY<=py && position.y+size.y+offY>=py);
  580. },
  581. "isInPointInRect": function(sx, sy, ex, ey){
  582. var position = this.getPosition();
  583. var size = this.getSize();
  584. var p1 = {"x": position.x, "y": position.y};
  585. var p2 = {"x": position.x+size.x, "y": position.y};
  586. var p3 = {"x": position.x+size.x, "y": position.y+size.y};
  587. var p4 = {"x": position.x, "y": position.y+size.y};
  588. var sp = {"x": Math.min(sx, ex), "y": Math.min(sy, ey)};
  589. var ep = {"x": Math.max(sx, ex), "y": Math.max(sy, ey)};
  590. if (p1.x>=sp.x && p1.y>=sp.y && p1.x<=ep.x && p1.y<=ep.y) return true;
  591. if (p2.x>=sp.x && p2.y>=sp.y && p2.x<=ep.x && p2.y<=ep.y) return true;
  592. if (p3.x>=sp.x && p3.y>=sp.y && p3.x<=ep.x && p3.y<=ep.y) return true;
  593. if (p4.x>=sp.x && p4.y>=sp.y && p4.x<=ep.x && p4.y<=ep.y) return true;
  594. if (p3.x>=sp.x && p3.y>=sp.y && p1.x<=sp.x && p1.y<=sp.y) return true;
  595. if (p3.x>=ep.x && p3.y>=ep.y && p1.x<=ep.x && p1.y<=ep.y) return true;
  596. if (p1.x<=sp.x && p2.x>=sp.x && p1.y>=sp.y && p4.y<=ep.y) return true;
  597. if (p1.y<=sp.y && p4.y>=sp.y && p1.x>=sp.x && p2.x<=ep.x) return true;
  598. return false;
  599. },
  600. "isOverlap": function(node){
  601. var p = node.getPosition();
  602. var s = node.getSize();
  603. return this.isInPointInRect(p.x, p.y, p.x+s.x, p.y+s.y);
  604. },
  605. "getUsefulSize": function(){
  606. var size = this.getSize();
  607. var borderLeft = this.getStyle("border-left").toInt();
  608. var borderBottom = this.getStyle("border-bottom").toInt();
  609. var borderTop = this.getStyle("border-top").toInt();
  610. var borderRight = this.getStyle("border-right").toInt();
  611. var paddingLeft = this.getStyle("padding-left").toInt();
  612. var paddingBottom = this.getStyle("padding-bottom").toInt();
  613. var paddingTop = this.getStyle("padding-top").toInt();
  614. var paddingRight = this.getStyle("padding-right").toInt();
  615. var x = size.x-paddingLeft-paddingRight;
  616. var y = size.y-paddingTop-paddingBottom;
  617. return {"x": x, "y": y};
  618. },
  619. "clearStyles": function(isChild){
  620. this.removeProperty("style");
  621. if (isChild){
  622. var subNode = this.getFirst();
  623. while (subNode){
  624. subNode.clearStyles(isChild);
  625. subNode = subNode.getNext();
  626. }
  627. }
  628. },
  629. "maskIf": function(styles, click){
  630. var style = {
  631. "background-color": "#666666",
  632. "opacity": 0.4,
  633. "z-index":100
  634. };
  635. if (styles){
  636. style = Object.merge(style, styles);
  637. }
  638. var position = this.getPosition(this.getOffsetParent());
  639. this.mask({
  640. "destroyOnHide": true,
  641. "style": style,
  642. "useIframeShim": true,
  643. "iframeShimOptions": {"browsers": true},
  644. "onShow": function(){
  645. this.shim.shim.setStyles({
  646. "opacity": 0,
  647. "top": ""+position.y+"px",
  648. "left": ""+position.x+"px"
  649. });
  650. },
  651. "onClick": click
  652. });
  653. },
  654. scrollToNode: function(el, where){
  655. debugger;
  656. var scrollSize = this.getScrollSize();
  657. if (!scrollSize.y) return true;
  658. var wh = (where) ? where.toString().toLowerCase() : "bottom";
  659. var node = $(el);
  660. var size = el.getComputedSize();
  661. var p = el.getPosition(this);
  662. var thisSize = this.getComputedSize();
  663. var scroll = this.getScroll();
  664. if (wh==="top"){
  665. var n = (p.y-thisSize.computedTop);
  666. if (n<0) this.scrollTo(scroll.x, scroll.y+n);
  667. n = (size.totalHeight+p.y-thisSize.computedTop)-thisSize.height;
  668. if (n>0) this.scrollTo(scroll.x, scroll.y+n);
  669. }else{
  670. var n = (size.totalHeight+p.y-thisSize.computedTop)-thisSize.height;
  671. if (n>0) this.scrollTo(scroll.x, scroll.y+n);
  672. n = p.y-thisSize.computedTop;
  673. if (n<0) this.scrollTo(scroll.x, scroll.y+n);
  674. }
  675. }
  676. });
  677. Object.copy = function(from, to){
  678. Object.each(from, function(value, key){
  679. switch (typeOf(value)){
  680. case "object":
  681. Object.copy(value, to[key]);
  682. break;
  683. default:
  684. to[key] = value;
  685. }
  686. });
  687. };
  688. JSON.format = function(json){
  689. // var jsonStrBegin = "{";
  690. // var jsonStr = "";
  691. // for (p in json){
  692. // jsonStr += this.parseJsonString(1, p, json[p]);
  693. // }
  694. // var jsonStrEnd = "}";
  695. // return jsonStrBegin+"\n"+jsonStr+"\n"+jsonStrEnd;
  696. var jsonStr = this.parseJsonString(0, "", json);
  697. return jsonStr.substring(0, jsonStr.length-2);
  698. };
  699. JSON.parseJsonString = function(level, p, v){
  700. var tab = "";
  701. for (var i=0; i<level; i++) tab+="\t";
  702. var title = p;
  703. if (title) title="\""+title+"\": ";
  704. var jsonStr = "";
  705. var nextLevel = level+1;
  706. switch (typeOf(v)){
  707. case "object":
  708. var jsonStrBegin = tab+title+"{";
  709. var jsonStrEnd = tab+"}";
  710. for (x in v){
  711. jsonStr += this.parseJsonString(nextLevel, x, v[x]);
  712. }
  713. jsonStr = jsonStrBegin+"\n"+jsonStr.substring(0, jsonStr.length-2)+"\n"+jsonStrEnd+",\n";
  714. break;
  715. case "array":
  716. var jsonStrBegin = tab+title+"[";
  717. var jsonStrEnd = tab+"]";
  718. v.each(function(item, idx){
  719. jsonStr += this.parseJsonString(nextLevel, "", item);
  720. }.bind(this));
  721. jsonStr = jsonStrBegin+"\n"+jsonStr.substring(0, jsonStr.length-2)+"\n"+jsonStrEnd+",\n";
  722. break;
  723. case "string":
  724. jsonStr += tab+title+"\""+v+"\",\n";
  725. break;
  726. case "date":
  727. jsonStr += tab+title+"\""+v+"\",\n";
  728. break;
  729. default:
  730. jsonStr += tab+title+v+",\n";
  731. }
  732. return jsonStr;
  733. };
  734. Slick.definePseudo('src', function(value){
  735. return Element.get(this,"src").indexOf(value) !== -1;
  736. });
  737. Slick.definePseudo('srcarr', function(value){
  738. var vList = value.split(",");
  739. var src = Element.get(this,"src");
  740. var flag = false;
  741. for (var i=0; i<vList.length; i++){
  742. if (src.indexOf(vList[i])!==-1){
  743. flag = true;
  744. break;
  745. }
  746. }
  747. return flag;
  748. });
  749. Slick.definePseudo('ahref', function(value){
  750. var href = Element.get(this,"href");
  751. if (!href) href = "";
  752. href = href.toString().toLowerCase();
  753. return (href.indexOf(value)!==-1);
  754. });
  755. Slick.definePseudo('rowspanBefore', function(line){
  756. var tr = MWF.getParent(this, "tr");
  757. var rowspan = this.get("rowspan").toInt() || 1;
  758. var currentRowIndex = tr.rowIndex.toInt();
  759. return rowspan>1 && currentRowIndex<line.toInt() && currentRowIndex+rowspan-1>=line;
  760. });
  761. Slick.definePseudo('rowspan', function(){
  762. var rowspan = this.get("rowspan").toInt() || 1;
  763. return rowspan>1;
  764. });
  765. Slick.definePseudo('colspanBefore', function(col){
  766. var tr = MWF.getParent(this, "tr");
  767. var colspan = this.get("colspan").toInt() || 1;
  768. var currentColIndex = this.cellIndex.toInt();
  769. return colspan>1 && currentColIndex<col.toInt() && currentColIndex+colspan-1>=col.toInt();
  770. });
  771. Slick.definePseudo('colspan', function(){
  772. var colspan = this.get("colspan").toInt() || 1;
  773. return colspan>1;
  774. });
  775. MWF.common = MWF.common || {};
  776. MWF.common.getResponseTextPost = function(path, body, contentType){
  777. var returnText = "";
  778. var options = {
  779. url: path,
  780. async: false,
  781. data: body,
  782. method: "post",
  783. onSuccess: function(esponseTree, responseElements, responseHTML, responseJavaScript){
  784. returnText = responseHTML;
  785. }
  786. };
  787. var r = new Request.HTML(options);
  788. r.send();
  789. return returnText;
  790. };
  791. MWF.common.getResponseText = function(path){
  792. var returnText = "";
  793. var options = {
  794. url: path,
  795. async: false,
  796. method: "get",
  797. onSuccess: function(esponseTree, responseElements, responseHTML, responseJavaScript){
  798. returnText = responseHTML;
  799. }
  800. };
  801. var r = new Request.HTML(options);
  802. r.send();
  803. return returnText;
  804. };
  805. MWF.common.toDate = function(str){
  806. var tmpArr = str.split(" ");
  807. if (!tmpArr[1]) tmpArr.push("0:0:0");
  808. var dateArr = tmpArr[0].split("-");
  809. var timeArr = tmpArr[1].split(":");
  810. return new Date(dateArr[0],parseInt(dateArr[1])-1,dateArr[2],timeArr[0],timeArr[1],timeArr[2]);
  811. };
  812. MWF.release = function(o){
  813. var type = typeOf(o);
  814. switch (type){
  815. case "object":
  816. for (var k in o){
  817. o[k] = null;
  818. }
  819. break;
  820. case "array":
  821. for (var i=0; i< o.length; i++){
  822. if (o[i]) o[i] = null;
  823. }
  824. break;
  825. }
  826. };
  827. // MWF.grayscale = function(src, width, height, callback){
  828. // var imgObj = new Image();
  829. // imgObj.addEventListener("loadeddata", function(){
  830. // try {
  831. // var canvas = document.createElement('canvas');
  832. // var ctx = canvas.getContext('2d');
  833. //
  834. // canvas.width = width || imgObj.width;
  835. // canvas.height = height || imgObj.height;
  836. // ctx.drawImage(imgObj, 0, 0);
  837. //
  838. //
  839. // var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
  840. // for(var y = 0; y < imgPixels.height; y++){
  841. // for(var x = 0; x < imgPixels.width; x++){
  842. // var i = (y * 4) * imgPixels.width + x * 4;
  843. // var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
  844. // imgPixels.data[i] = avg;
  845. // imgPixels.data[i + 1] = avg;
  846. // imgPixels.data[i + 2] = avg;
  847. // }
  848. // }
  849. // ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
  850. // var src = canvas.toDataURL();
  851. // canvas.destroy();
  852. // if (callback) callback({"status": "success", "src": src});
  853. // }catch(e){
  854. // if (callback) callback({"status": "error", "src": src});
  855. // }
  856. // });
  857. // imgObj.src = src;
  858. // };
  859. MWF.grayscale = function(src, width, height, callback){
  860. try {
  861. var canvas = document.createElement('canvas');
  862. var ctx = canvas.getContext('2d');
  863. var imgObj = new Image();
  864. imgObj.src = src;
  865. canvas.width = width || imgObj.width;
  866. canvas.height = height || imgObj.height;
  867. ctx.drawImage(imgObj, 0, 0);
  868. var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
  869. for(var y = 0; y < imgPixels.height; y++){
  870. for(var x = 0; x < imgPixels.width; x++){
  871. var i = (y * 4) * imgPixels.width + x * 4;
  872. var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
  873. imgPixels.data[i] = avg;
  874. imgPixels.data[i + 1] = avg;
  875. imgPixels.data[i + 2] = avg;
  876. }
  877. }
  878. ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
  879. var src1 = canvas.toDataURL();
  880. //var blob = canvas.toBlob();
  881. canvas.destroy();
  882. return {"status": "success", "src": src1};
  883. }catch(e){
  884. return {"status": "error", "src": src}
  885. }
  886. };
  887. MWF.eventPosition = function(e){
  888. var x = 0;
  889. var y = 0;
  890. if (Browser.name=="firefox"){
  891. x = parseFloat(e.event.clientX || e.event.x);
  892. y = parseFloat(e.event.clientY || e.event.y);
  893. }else{
  894. x = parseFloat(e.event.x);
  895. y = parseFloat(e.event.y);
  896. }
  897. return {"x": x, "y": y};
  898. };
  899. //MWF.mergeObject = function(obj1, obj2){
  900. // Object.each(obj2, function(v, k){
  901. // if (!obj1[k]){
  902. // switch (typeOf(v)){
  903. // case "array":
  904. // obj1[k] = [];
  905. // v.each(function(v1){
  906. // switch (typeOf(v1)){
  907. //
  908. // }
  909. // });
  910. // break;
  911. // case "object":
  912. // obj1[k] = {};
  913. // MWF.mergeObject(obj1[k], v);
  914. // break;
  915. // case "string": case "number": case "date": case "boolean": case "null":
  916. // obj1[k] = v;
  917. // break;
  918. // }
  919. // }
  920. // });
  921. //};
  922. //MWF.mergeArray = function(arr1, arr2){
  923. // arr2.each(function(v){
  924. // switch (typeOf(v)){
  925. // case "array":
  926. // obj1[k] = [];
  927. // break;
  928. // case "object":
  929. // obj1[k] = {};
  930. // MWF.mergeObject(obj1[k], v);
  931. // break;
  932. // case "string": case "number": case "date": case "boolean": case "null":
  933. // arr1.push(v);
  934. // break;
  935. // }
  936. // });
  937. //};
  938. //MWF.recycleCount = 0;
  939. //MWF.recycle = function(o, deep){
  940. // if (!deep) deep = 0;
  941. // var type = typeOf(o);
  942. // if (deep>100) type = "ignore";
  943. // switch (type){
  944. // case "object":
  945. // MWF.defineProperties(o, {"iterated": {"value": true}});
  946. // for (var k in o){
  947. // var flag = k.substr(0,1);
  948. // if (o[k]){
  949. // if (o.hasOwnProperty(k)){
  950. // if (flag!="$" && flag!="_"){
  951. // if (k!="css" && k!="style" && k.toLowerCase()!="lp" && k.toLowerCase()!="app"){
  952. // if (o[k].type!="layout"){
  953. // if (!o[k].iterated){
  954. // MWF.recycle(o[k], ++deep);
  955. // }
  956. // }
  957. // }
  958. // if (typeOf(o[k])!="function") o[k] = null;
  959. // }
  960. // }
  961. // }
  962. // }
  963. // case "array":
  964. // for (var i=0; i< o.length; i++){
  965. // if (o[i]) MWF.recycle(o[i], ++deep);
  966. // }
  967. // default:
  968. // // MWF.recycleCount++;
  969. // // o = null;
  970. // }
  971. //// layout.desktop.topNode.set("text", MWF.recycleCount);
  972. //};
  973. MWF.defineProperties = Object.defineProperties || function (obj, properties) {
  974. function convertToDescriptor(desc) {
  975. function hasProperty(obj, prop) {
  976. return Object.prototype.hasOwnProperty.call(obj, prop);
  977. }
  978. function isCallable(v) {
  979. // NB: modify as necessary if other values than functions are callable.
  980. return typeof v === "function";
  981. }
  982. if (typeof desc !== "object" || desc === null)
  983. throw new TypeError("bad desc");
  984. var d = {};
  985. if (hasProperty(desc, "enumerable"))
  986. d.enumerable = !!desc.enumerable;
  987. if (hasProperty(desc, "configurable"))
  988. d.configurable = !!desc.configurable;
  989. if (hasProperty(desc, "value"))
  990. d.value = desc.value;
  991. if (hasProperty(desc, "writable"))
  992. d.writable = !!desc.writable;
  993. if (hasProperty(desc, "get")) {
  994. var g = desc.get;
  995. if (!isCallable(g) && typeof g !== "undefined")
  996. throw new TypeError("bad get");
  997. d.get = g;
  998. }
  999. if (hasProperty(desc, "set")) {
  1000. var s = desc.set;
  1001. if (!isCallable(s) && typeof s !== "undefined")
  1002. throw new TypeError("bad set");
  1003. d.set = s;
  1004. }
  1005. if (("get" in d || "set" in d) && ("value" in d || "writable" in d))
  1006. throw new TypeError("identity-confused descriptor");
  1007. return d;
  1008. }
  1009. if (typeof obj !== "object" || obj === null)
  1010. throw new TypeError("bad obj");
  1011. properties = Object(properties);
  1012. var keys = Object.keys(properties);
  1013. var descs = [];
  1014. for (var i = 0; i < keys.length; i++)
  1015. descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);
  1016. for (var i = 0; i < descs.length; i++){
  1017. if (Object.defineProperty && (Browser.name=="ie" && Browser.version!=8)){
  1018. Object.defineProperty(obj, descs[i][0], descs[i][1]);
  1019. }else{
  1020. if (descs[i][1].value) obj[descs[i][0]] = descs[i][1].value;
  1021. if (descs[i][1].get) obj["get"+descs[i][0].capitalize()] = descs[i][1].get;
  1022. if (descs[i][1].set) obj["set"+descs[i][0].capitalize()] = descs[i][1].set;
  1023. }
  1024. }
  1025. return obj;
  1026. };
  1027. MWF.defineProperty = (Object.defineProperty && (Browser.name=="ie" && Browser.version!=8)) ? Object.defineProperty : function (obj, k, properties) {
  1028. function convertToDescriptor(desc) {
  1029. function hasProperty(obj, prop) {
  1030. return Object.prototype.hasOwnProperty.call(obj, prop);
  1031. }
  1032. function isCallable(v) {
  1033. // NB: modify as necessary if other values than functions are callable.
  1034. return typeof v === "function";
  1035. }
  1036. if (typeof desc !== "object" || desc === null)
  1037. throw new TypeError("bad desc");
  1038. var d = {};
  1039. if (hasProperty(desc, "enumerable"))
  1040. d.enumerable = !!desc.enumerable;
  1041. if (hasProperty(desc, "configurable"))
  1042. d.configurable = !!desc.configurable;
  1043. if (hasProperty(desc, "value"))
  1044. d.value = desc.value;
  1045. if (hasProperty(desc, "writable"))
  1046. d.writable = !!desc.writable;
  1047. if (hasProperty(desc, "get")) {
  1048. var g = desc.get;
  1049. if (!isCallable(g) && typeof g !== "undefined")
  1050. throw new TypeError("bad get");
  1051. d.get = g;
  1052. }
  1053. if (hasProperty(desc, "set")) {
  1054. var s = desc.set;
  1055. if (!isCallable(s) && typeof s !== "undefined")
  1056. throw new TypeError("bad set");
  1057. d.set = s;
  1058. }
  1059. if (("get" in d || "set" in d) && ("value" in d || "writable" in d))
  1060. throw new TypeError("identity-confused descriptor");
  1061. return d;
  1062. }
  1063. if (typeof obj !== "object" || obj === null)
  1064. throw new TypeError("bad obj");
  1065. properties = Object(properties);
  1066. var d = convertToDescriptor(properties);
  1067. if (Object.defineProperty && (Browser.name=="ie" && Browser.version!=8)){
  1068. Object.defineProperty(obj, key, d);
  1069. }else{
  1070. if (d.value) obj[key] = d.value;
  1071. if (d.get) obj["get"+key.capitalize()] = d.get;
  1072. if (d.set) obj["set"+key.capitalize()] = d.set;
  1073. }
  1074. return obj;
  1075. };
  1076. if (Browser.name=="ie" && Browser.version<9){
  1077. Browser.ieuns = true;
  1078. }else if(Browser.name=="ie" && Browser.version<10){
  1079. Browser.iecomp = true;
  1080. }
  1081. if (Browser.iecomp){
  1082. COMMON.AjaxModule.load("ie_adapter", null, false);
  1083. layout["debugger"] = true;
  1084. }